# File lib/coderay/scanners/java.rb, line 48 48: def scan_tokens tokens, options 49: 50: state = :initial 51: string_delimiter = nil 52: import_clause = class_name_follows = last_token_dot = false 53: 54: until eos? 55: 56: kind = nil 57: match = nil 58: 59: case state 60: 61: when :initial 62: 63: if match = scan(/ \s+ | \\\n /) 64: tokens << [match, :space] 65: next 66: 67: elsif match = scan(% // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !x) 68: tokens << [match, :comment] 69: next 70: 71: elsif import_clause && scan(/ #{IDENT} (?: \. #{IDENT} )* /x) 72: kind = :include 73: 74: elsif match = scan(/ #{IDENT} | \[\] /x) 75: kind = IDENT_KIND[match] 76: if last_token_dot 77: kind = :ident 78: elsif class_name_follows 79: kind = :class 80: class_name_follows = false 81: else 82: import_clause = true if match == 'import' 83: class_name_follows = true if match == 'class' || match == 'interface' 84: end 85: 86: elsif scan(/ \.(?!\d) | [,?:()\[\]}] | -- | \+\+ | && | \|\| | \*\*=? | [-+*\/%^~&|<>=!]=? | <<<?=? | >>>?=? /) 87: kind = :operator 88: 89: elsif scan(/;/) 90: import_clause = false 91: kind = :operator 92: 93: elsif scan(/\{/) 94: class_name_follows = false 95: kind = :operator 96: 97: elsif check(/[\d.]/) 98: if scan(/0[xX][0-9A-Fa-f]+/) 99: kind = :hex 100: elsif scan(/(?>0[0-7]+)(?![89.eEfF])/) 101: kind = :oct 102: elsif scan(/\d+[fFdD]|\d*\.\d+(?:[eE][+-]?\d+)?[fFdD]?|\d+[eE][+-]?\d+[fFdD]?/) 103: kind = :float 104: elsif scan(/\d+[lL]?/) 105: kind = :integer 106: end 107: 108: elsif match = scan(/["']/) 109: tokens << [:open, :string] 110: state = :string 111: string_delimiter = match 112: kind = :delimiter 113: 114: elsif scan(/ @ #{IDENT} /x) 115: kind = :annotation 116: 117: else 118: getch 119: kind = :error 120: 121: end 122: 123: when :string 124: if scan(STRING_CONTENT_PATTERN[string_delimiter]) 125: kind = :content 126: elsif match = scan(/["'\/]/) 127: tokens << [match, :delimiter] 128: tokens << [:close, state] 129: string_delimiter = nil 130: state = :initial 131: next 132: elsif state == :string && (match = scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /ox)) 133: if string_delimiter == "'" && !(match == "\\\\" || match == "\\'") 134: kind = :content 135: else 136: kind = :char 137: end 138: elsif scan(/\\./) 139: kind = :content 140: elsif scan(/ \\ | $ /) 141: tokens << [:close, state] 142: kind = :error 143: state = :initial 144: else 145: raise_inspect "else case \" reached; %p not handled." % peek(1), tokens 146: end 147: 148: else 149: raise_inspect 'Unknown state', tokens 150: 151: end 152: 153: match ||= matched 154: if $CODERAY_DEBUG and not kind 155: raise_inspect 'Error token %p in line %d' % 156: [[match, kind], line], tokens 157: end 158: raise_inspect 'Empty token', tokens unless match 159: 160: last_token_dot = match == '.' 161: 162: tokens << [match, kind] 163: 164: end 165: 166: if state == :string 167: tokens << [:close, state] 168: end 169: 170: tokens 171: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.