Sha256: 9b919131b20c3d33012db569dc24f768e03c87ca3f992d3024ec17a169e127e1

Contents?: true

Size: 1.29 KB

Versions: 23

Compression:

Stored size: 1.29 KB

Contents

module Dryml

  module Parser

    class Document < REXML::Document

      def initialize(source, path)
        super(nil)

        # Replace <%...%> scriptlets with xml-safe references into a hash of scriptlets
        @scriptlets = {}
        source = source.gsub(/<%(.*?)%>/m) do
          _, scriptlet = *Regexp.last_match
          id = @scriptlets.size + 1
          @scriptlets[id] = scriptlet
          newlines = "\n" * scriptlet.count("\n")
          "[![DRYML-ERB#{id}#{newlines}]!]"
        end


        @reference_src = "<dryml_page path=\"#{ERB::Util.html_escape path}\">" + source + "</dryml_page>"
        rex_src = Dryml::Parser::Source.new(@reference_src)

        @elements = Dryml::Parser::Elements.new(self)
        build(rex_src)

      rescue REXML::ParseException => e
        raise Dryml::DrymlSyntaxError, "File: #{path}\n#{e}"
      end


      def element_line_num(el)
        offset = el.source_offset
        @reference_src[0..offset].count("\n") + 1
      end


      def default_attribute_value
        "&true"
      end


      def restore_erb_scriptlets(src)
        src.gsub(/\[!\[DRYML-ERB(\d+)\s*\]!\]/m) {|s| "<%#{@scriptlets[$1.to_i]}%>" }
      end


      private
      def build( source )
        Dryml::Parser::TreeParser.new( source, self ).parse
      end

    end

  end

end

Version data entries

23 entries across 23 versions & 1 rubygems

Version Path
dryml-2.2.6 lib/dryml/parser/document.rb
dryml-2.2.5 lib/dryml/parser/document.rb
dryml-2.2.4 lib/dryml/parser/document.rb
dryml-2.2.3 lib/dryml/parser/document.rb
dryml-2.2.2 lib/dryml/parser/document.rb
dryml-2.2.1 lib/dryml/parser/document.rb
dryml-2.2.0 lib/dryml/parser/document.rb
dryml-2.1.2 lib/dryml/parser/document.rb
dryml-2.1.1 lib/dryml/parser/document.rb
dryml-2.1.0 lib/dryml/parser/document.rb
dryml-2.1.0.pre4 lib/dryml/parser/document.rb
dryml-2.1.0.pre3 lib/dryml/parser/document.rb
dryml-2.1.0.pre2 lib/dryml/parser/document.rb
dryml-2.1.0.pre1 lib/dryml/parser/document.rb
dryml-2.0.1 lib/dryml/parser/document.rb
dryml-2.0.0 lib/dryml/parser/document.rb
dryml-2.0.0.pre10 lib/dryml/parser/document.rb
dryml-2.0.0.pre9 lib/dryml/parser/document.rb
dryml-2.0.0.pre8 lib/dryml/parser/document.rb
dryml-2.0.0.pre7 lib/dryml/parser/document.rb