class HamdownCore::LineParser

Constants

BLOCK_WITH_SPACES

Regex to check for blocks with spaces around arguments. Not to be confused with multiline script. For example:

foo.each do | bar |
  = bar
MULTILINE_SUFFIX

Attributes

filename[R]
lineno[R]

Public Class Methods

new(filename, template_str) click to toggle source
# File lib/hamdown_core/line_parser.rb, line 6
def initialize(filename, template_str)
  @filename = filename
  @lines = template_str.each_line.map { |line| line.chomp.rstrip }
  @lineno = 0
end

Public Instance Methods

has_next?() click to toggle source
# File lib/hamdown_core/line_parser.rb, line 21
def has_next?
  @lineno < @lines.size
end
next_line(in_filter: false) click to toggle source
# File lib/hamdown_core/line_parser.rb, line 12
def next_line(in_filter: false)
  line = move_next
  if !in_filter && is_multiline?(line)
    next_multiline(line)
  else
    line
  end
end

Private Instance Methods

is_multiline?(line) click to toggle source
# File lib/hamdown_core/line_parser.rb, line 37
def is_multiline?(line)
  line = line.lstrip
  line.end_with?(MULTILINE_SUFFIX) && line !~ BLOCK_WITH_SPACES
end
move_back() click to toggle source
# File lib/hamdown_core/line_parser.rb, line 48
def move_back
  @lineno -= 1
end
move_next() click to toggle source
# File lib/hamdown_core/line_parser.rb, line 42
def move_next
  @lines[@lineno].tap do
    @lineno += 1
  end
end
next_multiline(line) click to toggle source
# File lib/hamdown_core/line_parser.rb, line 52
def next_multiline(line)
  buf = [line[0, line.size - 1]]
  while @lineno < @lines.size
    line = move_next

    if is_multiline?(line)
      line = line[0, line.size - 1]
      buf << line.lstrip
    else
      move_back
      break
    end
  end
  buf.join("\n")
end