Sha256: 4d428fc5a1a3c13a368be46b2b6a692fd1728e77d8bc6cfd5836208f88c8ec41

Contents?: true

Size: 1.46 KB

Versions: 11

Compression:

Stored size: 1.46 KB

Contents

module NoraMark
  class Transformer
    include NodeUtil
    attr_accessor :options
    def initialize(rules, options)
      @rules = rules
      @options = options
    end

    def transform(node)
      frontmatter_node = node.find_node :type => :Frontmatter
      @frontmatter = frontmatter_node.yaml if frontmatter_node
      node.all_nodes.unshift(node).each do 
        |n|
        if match_rule = @rules.find { |rule| n.match?(rule[0]) }
          action, p = match_rule[1,2]
          @node = n
          send(action, &p)
        end 
      end
      node
    end

    def modify(&block)
      instance_eval(&block)
    end

    def replace(&block)
      new_node = instance_eval(&block)
      @node.replace new_node if new_node
    end

  end
  
  class TransformerFactory
    attr_accessor :rules, :options
    
    def self.create(text: nil, &block)
      instance = new
      instance.instance_eval do
        @rules = []
        @options = {}
        if text
          instance_eval text
        else
          instance_eval(&block)
        end
        Transformer.new(@rules, @options)
      end
    end 
    
    def transform_options options
      (@options ||= {}).merge options 
    end
    
    def modify(selector, &block)
      @rules << [ selector, :modify, block ]
    end

    def replace(selector, &block)
      @rules << [ selector, :replace, block ]
    end

    def rename(selector, name)
      @rules << [ selector, :modify, proc { @node.name = name } ]
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
nora_mark-0.2beta19 lib/nora_mark/transformer.rb
nora_mark-0.2beta18 lib/nora_mark/transformer.rb
nora_mark-0.2beta16 lib/nora_mark/transformer.rb
nora_mark-0.2beta15 lib/nora_mark/transformer.rb
nora_mark-0.2beta14 lib/nora_mark/transformer.rb
nora_mark-0.2beta13 lib/nora_mark/transformer.rb
nora_mark-0.2beta12 lib/nora_mark/transformer.rb
nora_mark-0.2beta11 lib/nora_mark/transformer.rb
nora_mark-0.2beta10 lib/nora_mark/transformer.rb
nora_mark-0.2beta9 lib/nora_mark/transformer.rb
nora_mark-0.2beta8 lib/nora_mark/transformer.rb