Class | Kwalify::BaseParser |
In: |
kwalify/parser/base.rb
|
Parent: | Object |
base class for Yaml::Parser
CHAR_TABLE | = | { "\""=>"\"", "\\"=>"\\", "n"=>"\n", "r"=>"\r", "t"=>"\t", "b"=>"\b" } |
column | [R] | |
filename | [R] | |
linenum | [R] |
# File kwalify/parser/base.rb, line 67 def _getch ch = @scanner.getch() if ch == "\n" @linenum += 1 @column = 0 else @column += 1 end return ch end
# File kwalify/parser/base.rb, line 36 def _set_column_and_linenum(s) pos = s.rindex(?\n) if pos @column = s.length - pos @linenum += s.count("\n") else @column += s.length end end
# File kwalify/parser/base.rb, line 18 def reset(input, filename=nil, untabify=false) input = Kwalify::Util.untabify(input) if untabify @scanner = StringScanner.new(input) @filename = filename @linenum = 1 @column = 1 end
# File kwalify/parser/base.rb, line 28 def scan(regexp) ret = @scanner.scan(regexp) return nil if ret.nil? _set_column_and_linenum(ret) return ret end
# File kwalify/parser/base.rb, line 81 def scan_string ch = _getch() ch == '"' || ch == "'" or raise "assertion error" endch = ch s = '' while !(ch = _getch()).nil? && ch != endch if ch != '\\' s << ch elsif (ch = _getch()).nil? raise _syntax_error("%s: string is not closed." % (endch == '"' ? "'\"'" : '"\'"')) elsif endch == '"' if CHAR_TABLE.key?(ch) s << CHAR_TABLE[ch] elsif ch == 'u' ch2 = scan(/(?:[0-9a-f][0-9a-f]){1,4}/) unless ch2 raise _syntax_error("\\x: invalid unicode format.") end s << [ch2.hex].pack('U*') elsif ch == 'x' ch2 = scan(/[0-9a-zA-Z][0-9a-zA-Z]/) unless ch2 raise _syntax_error("\\x: invalid binary format.") end s << [ch2].pack('H2') else s << "\\" << ch end elsif endch == "'" ch == '\'' || ch == '\\' ? s << ch : s << '\\' << ch else raise "unreachable" end end #_getch() return s end