Class: NoraMark::Document
- Inherits:
-
Object
- Object
- NoraMark::Document
- Defined in:
- lib/nora_mark/document.rb
Instance Attribute Summary collapse
-
#document_name ⇒ Object
Returns the value of attribute document_name.
-
#root ⇒ Object
Returns the value of attribute root.
Class Method Summary collapse
- .generators ⇒ Object
- .parse(string_or_io, param = {}) {|instance| ... } ⇒ Object
- .register_generator(generator) ⇒ Object
- .unregister_generator(generator) ⇒ Object
Instance Method Summary collapse
- #add_transformer(generator: :html, text: nil, &block) ⇒ Object
- #generate(generator_name) ⇒ Object
-
#initialize(param = {}) ⇒ Document
constructor
A new instance of Document.
- #preprocessor(&block) ⇒ Object
- #render_parameter(param = {}) ⇒ Object
- #transformers(generator_name) ⇒ Object
Constructor Details
#initialize(param = {}) ⇒ Document
Returns a new instance of Document.
90 91 92 93 94 95 96 97 98 99 |
# File 'lib/nora_mark/document.rb', line 90 def initialize(param = {}) @param = param @result = {} @preprocessors = [ Proc.new { |text| text.gsub(/\r?\n(\r?\n)+/, "\n\n") }, ] @document_name = param[:document_name] || "noramark_#{SecureRandom.uuid}" @render_parameter = {} @transformers = {} end |
Instance Attribute Details
#document_name ⇒ Object
Returns the value of attribute document_name.
5 6 7 |
# File 'lib/nora_mark/document.rb', line 5 def document_name @document_name end |
#root ⇒ Object
Returns the value of attribute root.
5 6 7 |
# File 'lib/nora_mark/document.rb', line 5 def root @root end |
Class Method Details
.generators ⇒ Object
8 9 10 |
# File 'lib/nora_mark/document.rb', line 8 def self.generators @generators ||= {} end |
.parse(string_or_io, param = {}) {|instance| ... } ⇒ Object
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 |
.register_generator(generator) ⇒ Object
12 13 14 15 16 17 18 19 20 |
# File 'lib/nora_mark/document.rb', line 12 def self.register_generator(generator) @generators ||= {} generator_name = generator.name @generators[generator_name] = generator generator.activate self if generator.respond_to? :activate define_method(generator_name) do generate(generator_name) end end |
.unregister_generator(generator) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/nora_mark/document.rb', line 22 def self.unregister_generator(generator) @generators ||= {} if generator.is_a? Symbol or generator.is_a? String generator_name = generator.to_sym else generator_name = generator.name end @generators.delete generator_name generator.deactivate self if generator.respond_to? :deactivate remove_method generator_name end |
Instance Method Details
#add_transformer(generator: :html, text: nil, &block) ⇒ Object
86 87 88 |
# File 'lib/nora_mark/document.rb', line 86 def add_transformer(generator: :html, text: nil, &block) (@transformers[generator] ||= []) << TransformerFactory.create(text: text, &block) end |
#generate(generator_name) ⇒ Object
73 74 75 76 77 78 79 |
# File 'lib/nora_mark/document.rb', line 73 def generate(generator_name) if @result[generator_name].nil? transformers(generator_name).each { |t| t.transform @root } @result[generator_name] = Document.generators[generator_name].new(@param).convert(@root.clone, @render_parameter) end @result[generator_name] end |
#preprocessor(&block) ⇒ Object
65 66 67 |
# File 'lib/nora_mark/document.rb', line 65 def preprocessor(&block) @preprocessors << block end |
#render_parameter(param = {}) ⇒ Object
81 82 83 84 |
# File 'lib/nora_mark/document.rb', line 81 def render_parameter(param = {}) @render_parameter.merge! param self end |
#transformers(generator_name) ⇒ Object
69 70 71 |
# File 'lib/nora_mark/document.rb', line 69 def transformers(generator_name) @transformers[generator_name] ||= [] end |