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

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

Overview

This represents a source of lines that can be consumed.

It is the twin of CharSource.

Constant Summary

Constants included from Strings

Strings::Abbreviation, Strings::AttributeDefinitionList, Strings::Definition, Strings::EMailAddress, Strings::FootnoteText, Strings::HeaderWithAttributes, Strings::HeaderWithId, Strings::IncompleteLink, Strings::InlineAttributeList, Strings::LinkRegex, Strings::MightBeTableHeader, Strings::Sep, Strings::TabSize, Strings::TableSeparator

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Strings

#add_tabs, #dbg_describe_ary, #force_linebreak?, #line_md_type, #normalize_key_and_value, #num_leading_hashes, #number_of_leading_spaces, #parse_email_headers, #sanitize_ref_id, #spaces_before_first_char, #split_lines, #strip_hashes, #strip_indent, #unquote

Constructor Details

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

Returns a new instance of LineSource.



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

def initialize(lines, parent=nil, parent_offset=nil)
  raise "NIL lines? " if not lines
  @lines = lines
  @lines_index = 0
  @parent = parent
  @parent_offset = parent_offset
end

Instance Attribute Details

#parentObject (readonly)

Returns the value of attribute parent.



31
32
33
# File 'lib/maruku/input/linesource.rb', line 31

def parent
  @parent
end

Instance Method Details

#cur_indexObject



87
88
89
# File 'lib/maruku/input/linesource.rb', line 87

def cur_index
  @lines_index
end

#cur_lineObject



41
# File 'lib/maruku/input/linesource.rb', line 41

def cur_line()  @lines[@lines_index] end

#describeObject



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/maruku/input/linesource.rb', line 56

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
  
  for i in from..to
    prefix = (i == @lines_index) ? '--> ' : '    ';
    l = @lines[i]
    s += "%10s %4s|%s" %
      [@lines[i].md_type.to_s, prefix, l]
      
    s += "|\n"
  end
  
#   if @parent 
#     s << "Parent context is: \n"
#     s << add_tabs(@parent.describe,1,'|')
#   end
  s
end

#ignore_lineObject



51
52
53
54
# File 'lib/maruku/input/linesource.rb', line 51

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

#next_lineObject



42
# File 'lib/maruku/input/linesource.rb', line 42

def next_line() @lines[@lines_index+1] end

#original_line_number(index) ⇒ Object



79
80
81
82
83
84
85
# File 'lib/maruku/input/linesource.rb', line 79

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

#shift_lineObject



44
45
46
47
48
49
# File 'lib/maruku/input/linesource.rb', line 44

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

#tell_me_the_futureObject

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



93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/maruku/input/linesource.rb', line 93

def tell_me_the_future
  s = ""; num_e = 0;
  for i in @lines_index..@lines.size-1
    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