by Josh Goebel
# File lib/coderay/scanners/sql.rb, line 43 43: def scan_tokens tokens, options 44: 45: state = :initial 46: string_type = nil 47: string_content = '' 48: 49: until eos? 50: 51: kind = nil 52: match = nil 53: 54: if state == :initial 55: 56: if scan(/ \s+ | \\\n /) 57: kind = :space 58: 59: elsif scan(/^(?:--\s?|#).*/) 60: kind = :comment 61: 62: elsif scan(% /\* (?: .*? \*/ | .* ) !x) 63: kind = :comment 64: 65: elsif scan(/ [-+*\/=<>;,!&^|()\[\]{}~%] | \.(?!\d) /) 66: kind = :operator 67: 68: elsif scan(/(#{STRING_PREFIXES})?([`"'])/) 69: prefix = self[1] 70: string_type = self[2] 71: tokens << [:open, :string] 72: tokens << [prefix, :modifier] if prefix 73: match = string_type 74: state = :string 75: kind = :delimiter 76: 77: elsif match = scan(/ @? [A-Za-z_][A-Za-z_0-9]* /) 78: kind = match[0] == @@ ? :variable : IDENT_KIND[match.downcase] 79: 80: elsif scan(/0[xX][0-9A-Fa-f]+/) 81: kind = :hex 82: 83: elsif scan(/0[0-7]+(?![89.eEfF])/) 84: kind = :oct 85: 86: elsif scan(/(?>\d+)(?![.eEfF])/) 87: kind = :integer 88: 89: elsif scan(/\d[fF]|\d*\.\d+(?:[eE][+-]?\d+)?|\d+[eE][+-]?\d+/) 90: kind = :float 91: 92: else 93: getch 94: kind = :error 95: 96: end 97: 98: elsif state == :string 99: if match = scan(/[^\\"'`]+/) 100: string_content << match 101: next 102: elsif match = scan(/["'`]/) 103: if string_type == match 104: if peek(1) == string_type # doubling means escape 105: string_content << string_type << getch 106: next 107: end 108: unless string_content.empty? 109: tokens << [string_content, :content] 110: string_content = '' 111: end 112: tokens << [matched, :delimiter] 113: tokens << [:close, :string] 114: state = :initial 115: string_type = nil 116: next 117: else 118: string_content << match 119: end 120: next 121: elsif scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /ox) 122: unless string_content.empty? 123: tokens << [string_content, :content] 124: string_content = '' 125: end 126: kind = :char 127: elsif match = scan(/ \\ . /ox) 128: string_content << match 129: next 130: elsif scan(/ \\ | $ /) 131: unless string_content.empty? 132: tokens << [string_content, :content] 133: string_content = '' 134: end 135: kind = :error 136: state = :initial 137: else 138: raise "else case \" reached; %p not handled." % peek(1), tokens 139: end 140: 141: else 142: raise 'else-case reached', tokens 143: 144: end 145: 146: match ||= matched 147: unless kind 148: raise_inspect 'Error token %p in line %d' % 149: [[match, kind], line], tokens, state 150: end 151: raise_inspect 'Empty token', tokens unless match 152: 153: tokens << [match, kind] 154: 155: end 156: tokens 157: 158: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.