Class: MathML::LaTeX::Scanner
- Inherits:
-
StringScanner
- Object
- StringScanner
- MathML::LaTeX::Scanner
- Defined in:
- lib/math_ml/latex.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
55 |
# File 'lib/math_ml/latex.rb', line 55 alias :_check :check |
#_eos? ⇒ Object
54 |
# File 'lib/math_ml/latex.rb', line 54 alias :_eos? :eos? |
#_scan ⇒ Object
56 |
# File 'lib/math_ml/latex.rb', line 56 alias :_scan :scan |
#check(re) ⇒ Object
59 60 61 |
# File 'lib/math_ml/latex.rb', line 59 def check(re) skip_space_and(true){_check(re)} end |
#check_any(remain_space = false) ⇒ Object
110 111 112 |
# File 'lib/math_ml/latex.rb', line 110 def check_any(remain_space=false) skip_space_and(true){scan_any(remain_space)} end |
#check_block ⇒ Object
83 84 85 |
# File 'lib/math_ml/latex.rb', line 83 def check_block skip_space_and(true){scan_block} end |
#check_command ⇒ Object
71 72 73 |
# File 'lib/math_ml/latex.rb', line 71 def check_command check(RE::COMMANDS) end |
#check_option ⇒ Object
147 148 149 |
# File 'lib/math_ml/latex.rb', line 147 def check_option skip_space_and(true){scan_option} end |
#done ⇒ Object
37 38 39 |
# File 'lib/math_ml/latex.rb', line 37 def done self.string[0, pos] end |
#eos? ⇒ Boolean
67 68 69 |
# File 'lib/math_ml/latex.rb', line 67 def eos? _eos? || _check(/#{RE::SPACE}+\z/) end |
#peek_command ⇒ Object
79 80 81 |
# File 'lib/math_ml/latex.rb', line 79 def peek_command check_command ? self[1] : nil end |
#scan(re) ⇒ Object
63 64 65 |
# File 'lib/math_ml/latex.rb', line 63 def scan(re) skip_space_and(false){_scan(re)} end |
#scan_any(remain_space = false) ⇒ Object
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/math_ml/latex.rb', line 114 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
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/math_ml/latex.rb', line 87 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
75 76 77 |
# File 'lib/math_ml/latex.rb', line 75 def scan_command scan(RE::COMMANDS) end |
#scan_option ⇒ Object
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/math_ml/latex.rb', line 131 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
41 42 43 |
# File 'lib/math_ml/latex.rb', line 41 def scan_space _scan(/#{RE::SPACE}+/) end |
#skip_space_and(check_mode) ⇒ Object
45 46 47 48 49 50 51 |
# File 'lib/math_ml/latex.rb', line 45 def skip_space_and(check_mode) opos = pos scan_space r = yield self.pos = opos if check_mode || !r r end |