class Makeup::CodeBlockParser
Attributes
lines[R]
Public Class Methods
new(markup)
click to toggle source
# File lib/makeup/code_block_parser.rb, line 34 def initialize(markup) @lines = markup.split("\n") @current_code_bock = nil end
parse(markup, &block)
click to toggle source
# File lib/makeup/code_block_parser.rb, line 30 def self.parse(markup, &block) new(markup).parse(&block) end
Public Instance Methods
active_code_block?()
click to toggle source
# File lib/makeup/code_block_parser.rb, line 57 def active_code_block? !@current_code_bock.nil? end
append_active_code_block(line)
click to toggle source
# 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()
click to toggle source
# 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)
click to toggle source
# File lib/makeup/code_block_parser.rb, line 65 def closes_code_block?(line) active_code_block? && line.match(/^```/) end
parse(&block)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# File lib/makeup/code_block_parser.rb, line 61 def starts_code_block?(line) line.match(/^```.*/) end