Sha256: c802a8809b876ea1a80a9939b4a1c9f9ae889450987d33bc6653d5c215b75118

Contents?: true

Size: 1.27 KB

Versions: 1

Compression:

Stored size: 1.27 KB

Contents

module Hobo::Dryml::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>" + source + "</dryml_page>"
      rex_src = Hobo::Dryml::Parser::Source.new(@reference_src)
        
      @elements = Hobo::Dryml::Parser::Elements.new(self)
      build(rex_src)
      
    rescue REXML::ParseException => e
      raise 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 )
      Hobo::Dryml::Parser::TreeParser.new( source, self ).parse
    end
    
  end
  
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
hobo-0.7.5 hobo_files/plugin/lib/hobo/dryml/parser/document.rb