class MinimalMarkdown::Parser
Constants
- DEFAULT_PARSERS
- STYLES
Attributes
parsers[R]
text[R]
Public Class Methods
new(text, style: :markdown, parsers: DEFAULT_PARSERS)
click to toggle source
# File lib/minimal_markdown/parser.rb, line 13 def initialize(text, style: :markdown, parsers: DEFAULT_PARSERS) raise ArgumentError, 'invalid style' unless STYLES.include?(style) @text = text @style = style @parsers = parsers end
Public Instance Methods
parse()
click to toggle source
# File lib/minimal_markdown/parser.rb, line 21 def parse prepared_text = text.strip.gsub("\r", "") preline_parsers, postline_parsers = parsers.map { |parser| parser.new(@style) }.partition(&:multiline?) preline_tree = run_parsers(preline_parsers, [prepared_text]) postline_tree = convert_to_lines(preline_tree) run_parsers(postline_parsers, postline_tree) end
Private Instance Methods
convert_to_lines(tree)
click to toggle source
# File lib/minimal_markdown/parser.rb, line 39 def convert_to_lines(tree) tree.flat_map do |node| if node.is_a?(String) parse_lines(node) else node end end end
parse_lines(text)
click to toggle source
# File lib/minimal_markdown/parser.rb, line 49 def parse_lines(text) text.scan(/(.*)(\s*\n)*/).flat_map do |line, spaces| if line.empty? [] else Nodes::Line.new(Nodes::Text.new(line), spaces&.count("\n") || 0) end end end
run_parsers(parsers, input_tree)
click to toggle source
# File lib/minimal_markdown/parser.rb, line 33 def run_parsers(parsers, input_tree) parsers.inject(input_tree) do |tree, parser| parser.update_tree(tree) end end