Class: MaRuKu::In::Markdown::BlockLevelParser::LineSource

Inherits:
Object
  • Object
show all
Defined in:
lib/maruku/input/linesource.rb

Overview

This represents a source of lines that can be consumed.

It is the twin of CharSource.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(lines, parent = nil, parent_offset = nil) ⇒ LineSource

Returns a new instance of LineSource.


11
12
13
14
15
16
17
# File 'lib/maruku/input/linesource.rb', line 11

def initialize(lines, parent=nil, parent_offset=nil)
  raise "NIL lines? " unless lines
  @lines = lines.map {|l| l.kind_of?(MaRuKu::MDLine) ? l : MaRuKu::MDLine.new(l) }
  @lines_index = 0
  @parent = parent
  @parent_offset = parent_offset
end

Instance Attribute Details

#parentObject (readonly)

Returns the value of attribute parent


9
10
11
# File 'lib/maruku/input/linesource.rb', line 9

def parent
  @parent
end

Instance Method Details

#cur_indexObject


66
67
68
# File 'lib/maruku/input/linesource.rb', line 66

def cur_index
  @lines_index
end

#cur_lineObject


19
20
21
# File 'lib/maruku/input/linesource.rb', line 19

def cur_line
  @lines[@lines_index]
end

#describeObject


39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/maruku/input/linesource.rb', line 39

def describe
  s = "At line #{original_line_number(@lines_index)}\n"

  context = 3 # lines
  from = [@lines_index - context, 0].max
  to   = [@lines_index + context, @lines.size - 1].min

  from.upto(to) do |i|
    prefix = (i == @lines_index) ? '--> ' : '    ';
    l = @lines[i]
    s += "%10s %4s|%s" %
      [@lines[i].md_type.to_s, prefix, l]

    s += "|\n"
  end

  s
end

#ignore_lineObject


34
35
36
37
# File 'lib/maruku/input/linesource.rb', line 34

def ignore_line
  raise "Over the rainbow" if @lines_index >= @lines.size
  @lines_index += 1
end

#next_lineObject


23
24
25
# File 'lib/maruku/input/linesource.rb', line 23

def next_line
  @lines[@lines_index + 1]
end

#original_line_number(index) ⇒ Object


58
59
60
61
62
63
64
# File 'lib/maruku/input/linesource.rb', line 58

def original_line_number(index)
  if @parent
    index + @parent.original_line_number(@parent_offset)
  else
    1 + index
  end
end

#shift_lineObject


27
28
29
30
31
32
# File 'lib/maruku/input/linesource.rb', line 27

def shift_line
  raise "Over the rainbow" if @lines_index >= @lines.size
  l = @lines[@lines_index]
  @lines_index += 1
  l
end

#tell_me_the_futureObject

Returns the type of next line as a string breaks at first :definition


72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/maruku/input/linesource.rb', line 72

def tell_me_the_future
  s = ""
  num_e = 0

  @lines_index.upto(@lines.size - 1) do |i|
    c = case @lines[i].md_type
        when :text; "t"
        when :empty; num_e += 1; "e"
        when :definition; "d"
        else "o"
        end
    s << c
    break if c == "d" or num_e > 1
  end
  s
end