Class: MathML::LaTeX::Scanner
- Inherits:
-
StringScanner
- Object
- StringScanner
- MathML::LaTeX::Scanner
- Defined in:
- lib/math_ml.rb
Instance Method Summary collapse
- #_check ⇒ Object
- #_eos? ⇒ Object
- #_scan ⇒ Object
- #check(re) ⇒ Object
- #check_any(remain_space = false) ⇒ Object
- #check_block ⇒ Object
- #check_command ⇒ Object
- #check_option ⇒ Object
- #done ⇒ Object
- #eos? ⇒ Boolean
- #peek_command ⇒ Object
- #scan(re) ⇒ Object
- #scan_any(remain_space = false) ⇒ Object
- #scan_block ⇒ Object
- #scan_command ⇒ Object
- #scan_option ⇒ Object
- #scan_space ⇒ Object
- #skip_space_and(check_mode) ⇒ Object
Instance Method Details
#_check ⇒ Object
309 |
# File 'lib/math_ml.rb', line 309 alias :_check :check |
#_eos? ⇒ Object
319 |
# File 'lib/math_ml.rb', line 319 alias :_eos? :eos? |
#_scan ⇒ Object
314 |
# File 'lib/math_ml.rb', line 314 alias :_scan :scan |
#check(re) ⇒ Object
310 311 312 |
# File 'lib/math_ml.rb', line 310 def check(re) skip_space_and(true){_check(re)} end |
#check_any(remain_space = false) ⇒ Object
363 364 365 |
# File 'lib/math_ml.rb', line 363 def check_any(remain_space=false) skip_space_and(true){scan_any(remain_space)} end |
#check_block ⇒ Object
336 337 338 |
# File 'lib/math_ml.rb', line 336 def check_block skip_space_and(true){scan_block} end |
#check_command ⇒ Object
324 325 326 |
# File 'lib/math_ml.rb', line 324 def check_command check(RE::COMMANDS) end |
#check_option ⇒ Object
400 401 402 |
# File 'lib/math_ml.rb', line 400 def check_option skip_space_and(true){scan_option} end |
#done ⇒ Object
293 294 295 |
# File 'lib/math_ml.rb', line 293 def done self.string[0, pos] end |
#eos? ⇒ Boolean
320 321 322 |
# File 'lib/math_ml.rb', line 320 def eos? _eos? || _check(/#{RE::SPACE}+\z/) end |
#peek_command ⇒ Object
332 333 334 |
# File 'lib/math_ml.rb', line 332 def peek_command check_command ? self[1] : nil end |
#scan(re) ⇒ Object
315 316 317 |
# File 'lib/math_ml.rb', line 315 def scan(re) skip_space_and(false){_scan(re)} end |
#scan_any(remain_space = false) ⇒ Object
367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 |
# File 'lib/math_ml.rb', line 367 def scan_any(remain_space=false) p = pos scan_space r = remain_space ? matched.to_s : "" case when s = scan_block when s = scan_command else unless _scan(/./) || remain_space self.pos = p return nil end s = matched.to_s end r << s end |
#scan_block ⇒ Object
340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 |
# File 'lib/math_ml.rb', line 340 def scan_block return nil unless scan(/\{/) block = "{" bpos = pos-1 nest = 1 while _scan(/(#{MBEC}*?)([\{\}])/) block << matched case self[2] when "{" nest+=1 when "}" nest-=1 break if nest==0 end end if nest>0 self.pos = bpos raise BlockNotClosed end self.pos = bpos _scan(/\A\{(#{Regexp.escape(block[RE::BLOCK, 1].to_s)})\}/) end |
#scan_command ⇒ Object
328 329 330 |
# File 'lib/math_ml.rb', line 328 def scan_command scan(RE::COMMANDS) end |
#scan_option ⇒ Object
384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 |
# File 'lib/math_ml.rb', line 384 def scan_option return nil unless scan(/\[/) opt = "[" p = pos-1 until (s=scan_any(true)) =~ /\A#{RE::SPACE}*\]\z/ opt << s if eos? self.pos = p raise OptionNotClosed end end opt << s self.pos = p _scan(/\A\[(#{Regexp.escape(opt[RE::OPTION, 1].to_s)})\]/) end |
#scan_space ⇒ Object
297 298 299 |
# File 'lib/math_ml.rb', line 297 def scan_space _scan(/#{RE::SPACE}+/) end |
#skip_space_and(check_mode) ⇒ Object
301 302 303 304 305 306 307 |
# File 'lib/math_ml.rb', line 301 def skip_space_and(check_mode) opos = pos scan_space r = yield self.pos = opos if check_mode || !r r end |