Parent

Kramdown::Utils::StringScanner

This patched StringScanner adds line number information for current scan position and a start_line_number override for nested StringScanners.

Attributes

start_line_number[R]

The start line number. Used for nested StringScanners that scan a sub-string of the source document. The kramdown parser uses this, e.g., for span level parsers.

Public Class Methods

new(string, start_line_number = 1) click to toggle source

Takes the start line number as optional second argument.

Note: The original second argument is no longer used so this should be safe.

# File lib/kramdown/utils/string_scanner.rb, line 18
def initialize(string, start_line_number = 1)
  super(string)
  @start_line_number = start_line_number || 1
  @previous_pos = 0
  @previous_line_number = @start_line_number
end

Public Instance Methods

best_pos() click to toggle source
# File lib/kramdown/utils/string_scanner.rb, line 31
def best_pos
  charpos
end
current_line_number() click to toggle source

Returns the line number for current charpos.

NOTE: Requires that all line endings are normalized to 'n'

NOTE: Normally we'd have to add one to the count of newlines to get the correct line number. However we add the one indirectly by using a one-based start_line_number.

# File lib/kramdown/utils/string_scanner.rb, line 46
def current_line_number
  # Not using string[@previous_pos..best_pos].count('\n') because it is slower
  strscan = ::StringScanner.new(string)
  strscan.pos = @previous_pos
  old_pos = pos + 1
  @previous_line_number += 1 while strscan.skip_until(/\n/) && strscan.pos <= old_pos

  @previous_pos = (eos? ? best_pos : best_pos + 1)
  @previous_line_number
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.