Class: Makeup::CodeBlockParser
- Inherits:
-
Object
- Object
- Makeup::CodeBlockParser
- Defined in:
- lib/makeup/code_block_parser.rb
Instance Attribute Summary collapse
-
#lines ⇒ Object
readonly
Returns the value of attribute lines.
Class Method Summary collapse
Instance Method Summary collapse
- #active_code_block? ⇒ Boolean
- #append_active_code_block(line) ⇒ Object
- #close_active_code_block ⇒ Object
- #closes_code_block?(line) ⇒ Boolean
-
#initialize(markup) ⇒ CodeBlockParser
constructor
A new instance of CodeBlockParser.
- #parse(&block) ⇒ Object
- #start_code_block(line) ⇒ Object
- #starts_code_block?(line) ⇒ Boolean
Constructor Details
#initialize(markup) ⇒ CodeBlockParser
Returns a new instance of CodeBlockParser.
34 35 36 37 |
# File 'lib/makeup/code_block_parser.rb', line 34 def initialize(markup) @lines = markup.split("\n") @current_code_bock = nil end |
Instance Attribute Details
#lines ⇒ Object (readonly)
Returns the value of attribute lines.
28 29 30 |
# File 'lib/makeup/code_block_parser.rb', line 28 def lines @lines end |
Class Method Details
.parse(markup, &block) ⇒ Object
30 31 32 |
# File 'lib/makeup/code_block_parser.rb', line 30 def self.parse(markup, &block) new(markup).parse(&block) end |
Instance Method Details
#active_code_block? ⇒ Boolean
57 58 59 |
# File 'lib/makeup/code_block_parser.rb', line 57 def active_code_block? !@current_code_bock.nil? end |
#append_active_code_block(line) ⇒ Object
74 75 76 |
# File 'lib/makeup/code_block_parser.rb', line 74 def append_active_code_block(line) @current_code_bock[1] << line end |
#close_active_code_block ⇒ Object
78 79 80 81 82 83 |
# File 'lib/makeup/code_block_parser.rb', line 78 def close_active_code_block lexer = @current_code_bock[0] code = @current_code_bock[1].join("\n") @current_code_bock = nil [lexer, code] end |
#closes_code_block?(line) ⇒ Boolean
65 66 67 |
# File 'lib/makeup/code_block_parser.rb', line 65 def closes_code_block?(line) active_code_block? && line.match(/^```/) end |
#parse(&block) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/makeup/code_block_parser.rb', line 39 def parse(&block) result = [] while line = @lines.shift if closes_code_block?(line) result << block.call(*close_active_code_block) elsif active_code_block? append_active_code_block(line) elsif starts_code_block?(line) start_code_block(line) else result << line end end result.join("\n") end |
#start_code_block(line) ⇒ Object
69 70 71 72 |
# File 'lib/makeup/code_block_parser.rb', line 69 def start_code_block(line) m = line.match(/```([^\s]+)/) @current_code_bock = [m && m[1], []] end |
#starts_code_block?(line) ⇒ Boolean
61 62 63 |
# File 'lib/makeup/code_block_parser.rb', line 61 def starts_code_block?(line) line.match(/^```.*/) end |