Class: Markleft::Parser
- Inherits:
-
Object
- Object
- Markleft::Parser
- Defined in:
- lib/markleft.rb
Overview
—————– Parser Module —————– #
Instance Method Summary collapse
- #consume(expected_type) ⇒ Object
-
#initialize(tokens) ⇒ Parser
constructor
A new instance of Parser.
- #parse ⇒ Object
- #parse_bold ⇒ Object
- #parse_heading(level) ⇒ Object
- #parse_italics ⇒ Object
- #parse_newline ⇒ Object
- #parse_node ⇒ Object
- #parse_strikethrough ⇒ Object
- #parse_text ⇒ Object
Constructor Details
#initialize(tokens) ⇒ Parser
Returns a new instance of Parser.
54 55 56 |
# File 'lib/markleft.rb', line 54 def initialize(tokens) @tokens = tokens end |
Instance Method Details
#consume(expected_type) ⇒ Object
123 124 125 126 127 128 129 130 |
# File 'lib/markleft.rb', line 123 def consume(expected_type) token = @tokens.shift unless token.type == expected_type raise "Expected token type #{expected_type.inspect} but got #{token.type.inspect}" end token end |
#parse ⇒ Object
58 59 60 61 62 |
# File 'lib/markleft.rb', line 58 def parse nodes = [] nodes << parse_node until @tokens.empty? nodes end |
#parse_bold ⇒ Object
93 94 95 96 |
# File 'lib/markleft.rb', line 93 def parse_bold value = consume(:bold).value BoldNode.new(value) end |
#parse_heading(level) ⇒ Object
108 109 110 111 |
# File 'lib/markleft.rb', line 108 def parse_heading(level) consume(:"heading#{level}") HeadingNode.new("Heading", level) end |
#parse_italics ⇒ Object
98 99 100 101 |
# File 'lib/markleft.rb', line 98 def parse_italics value = consume(:italics).value ItalicsNode.new(value) end |
#parse_newline ⇒ Object
103 104 105 106 |
# File 'lib/markleft.rb', line 103 def parse_newline consume(:newline) NewlineNode.new end |
#parse_node ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/markleft.rb', line 64 def parse_node case @tokens.first.type when :bold parse_bold when :italics parse_italics when :newline parse_newline when :text parse_text when :heading1 parse_heading(1) when :heading2 parse_heading(2) when :heading3 parse_heading(3) when :heading4 parse_heading(4) when :heading5 parse_heading(5) when :heading6 parse_heading(6) when :strikethrough parse_strikethrough else raise "Unexpected token type: #{@tokens.first.type}" end end |
#parse_strikethrough ⇒ Object
113 114 115 116 |
# File 'lib/markleft.rb', line 113 def parse_strikethrough value = consume(:strikethrough).value StrikethroughNode.new(value) end |
#parse_text ⇒ Object
118 119 120 121 |
# File 'lib/markleft.rb', line 118 def parse_text value = consume(:text).value TextNode.new(value) end |