Class: MaRuKu::In::Markdown::SpanLevelParser::CharSourceStrscan
- Inherits:
-
Object
- Object
- MaRuKu::In::Markdown::SpanLevelParser::CharSourceStrscan
- Defined in:
- lib/maruku/input/charsource.rb,
lib/maruku/input/charsource.rb
Overview
a wrapper around StringScanner
Instance Method Summary collapse
- #consume_whitespace ⇒ Object
-
#cur_char ⇒ Object
Return current char as a String (or nil).
-
#cur_chars(n) ⇒ Object
Return the next n chars as a String.
-
#cur_chars_are(string) ⇒ Object
Returns true if string matches what we’re pointing to.
-
#current_remaining_buffer ⇒ Object
Return the rest of the string.
- #describe ⇒ Object
-
#ignore_char ⇒ Object
Advance the pointer.
-
#ignore_chars(n) ⇒ Object
Advance the pointer by n.
-
#initialize(s, parent = nil) ⇒ CharSourceStrscan
constructor
A new instance of CharSourceStrscan.
-
#next_char ⇒ Object
Return the char after current char as a String (or nil).
-
#next_matches(r) ⇒ Object
Returns true if Regexp r matches what we’re pointing to.
- #read_regexp(r) ⇒ Object
-
#shift_char ⇒ Object
Return a character as a String, advancing the pointer.
Constructor Details
#initialize(s, parent = nil) ⇒ CharSourceStrscan
Returns a new instance of CharSourceStrscan.
139 140 141 142 |
# File 'lib/maruku/input/charsource.rb', line 139 def initialize(s, parent=nil) @scanner = StringScanner.new(s) @size = s.size end |
Instance Method Details
#consume_whitespace ⇒ Object
193 194 195 |
# File 'lib/maruku/input/charsource.rb', line 193 def consume_whitespace @scanner.skip(/\s+/) end |
#cur_char ⇒ Object
Return current char as a String (or nil).
145 146 147 |
# File 'lib/maruku/input/charsource.rb', line 145 def cur_char @scanner.peek(1)[0] end |
#cur_chars(n) ⇒ Object
Return the next n chars as a String.
150 151 152 |
# File 'lib/maruku/input/charsource.rb', line 150 def cur_chars(n) @scanner.peek(n) end |
#cur_chars_are(string) ⇒ Object
Returns true if string matches what we’re pointing to
180 181 182 |
# File 'lib/maruku/input/charsource.rb', line 180 def cur_chars_are(string) @scanner.peek(string.size) == string end |
#current_remaining_buffer ⇒ Object
Return the rest of the string
175 176 177 |
# File 'lib/maruku/input/charsource.rb', line 175 def current_remaining_buffer @scanner.rest end |
#describe ⇒ Object
197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 |
# File 'lib/maruku/input/charsource.rb', line 197 def describe len = 75 num_before = [len/2, @scanner.pos].min num_after = [len/2, @scanner.rest_size].min num_before_max = @scanner.pos num_after_max = @scanner.rest_size num_before = [num_before_max, len - num_after].min num_after = [num_after_max, len - num_before].min index_start = [@scanner.pos - num_before, 0].max index_end = [@scanner.pos + num_after, @size].min size = index_end - index_start str = @scanner.string[index_start, size] str.gsub!("\n", 'N') str.gsub!("\t", 'T') if index_end == @size str += "EOF" end pre_s = @scanner.pos - index_start pre_s = [pre_s, 0].max pre_s2 = [len-pre_s, 0].max pre = " " * pre_s "-" * len + "\n" + str + "\n" + "-" * pre_s + "|" + "-" * pre_s2 + "\n" + pre + "+--- Byte #{@scanner.pos}\n" + "Shown bytes [#{index_start} to #{size}] of #{@size}:\n" + @scanner.string.gsub(/^/, ">") end |
#ignore_char ⇒ Object
Advance the pointer
165 166 167 |
# File 'lib/maruku/input/charsource.rb', line 165 def ignore_char @scanner.getch end |
#ignore_chars(n) ⇒ Object
Advance the pointer by n
170 171 172 |
# File 'lib/maruku/input/charsource.rb', line 170 def ignore_chars(n) n.times { @scanner.getch } end |
#next_char ⇒ Object
Return the char after current char as a String (or nil).
155 156 157 |
# File 'lib/maruku/input/charsource.rb', line 155 def next_char @scanner.peek(2)[1] end |
#next_matches(r) ⇒ Object
Returns true if Regexp r matches what we’re pointing to
185 186 187 |
# File 'lib/maruku/input/charsource.rb', line 185 def next_matches(r) @scanner.check(r) end |
#read_regexp(r) ⇒ Object
189 190 191 |
# File 'lib/maruku/input/charsource.rb', line 189 def read_regexp(r) r.match(@scanner.scan(r)) end |
#shift_char ⇒ Object
Return a character as a String, advancing the pointer.
160 161 162 |
# File 'lib/maruku/input/charsource.rb', line 160 def shift_char @scanner.getch[0] end |