Method: NoraMark::Document.parse

Defined in:
lib/nora_mark/document.rb

.parse(string_or_io, param = {}) {|instance| ... } ⇒ Object

Yields:

  • (instance)


37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/nora_mark/document.rb', line 37

def self.parse(string_or_io, param = {})
  instance = new param
  src = (string_or_io.respond_to?(:read) ? string_or_io.read : string_or_io).encode 'utf-8'
  yield instance if block_given?
  instance.instance_eval do
    @preprocessors.each do |pr|
      src = pr.call(src)
    end
    parser = Parser.new(src)
    if (!parser.parse)
      raise parser.raise_error
    end

    @root = parser.result
    @root.document_name ||= @document_name
    @root.reparent
    @root.assign_pageno
  end
  frontmatter = instance.root.find_node :type => :Frontmatter
  if (frontmatter)
    if (frontmatter.yaml['generator'])
      NoraMark::Extensions.register_generator(frontmatter.yaml['generator'].to_sym)
    end
  end

  instance
end