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