diff options
author | Nathan Youngman <git@nathany.com> | 2012-10-27 14:01:54 -0600 |
---|---|---|
committer | Nathan Youngman <git@nathany.com> | 2012-10-27 14:01:54 -0600 |
commit | 9a085f2e9e658c9eeba2560b899cef214ddc8f35 (patch) | |
tree | 76dee8bba83293e4f4c28ccc68fac484827e0ff1 /lib/coderay/scanners | |
parent | f688a6d7bee39d7c17aa2bd07f5074b42c1efac2 (diff) | |
download | coderay-io-scanner.tar.gz |
lint: character class has a duplicated rangeio-scanner
Diffstat (limited to 'lib/coderay/scanners')
-rw-r--r-- | lib/coderay/scanners/io.rb | 52 |
1 files changed, 26 insertions, 26 deletions
diff --git a/lib/coderay/scanners/io.rb b/lib/coderay/scanners/io.rb index 664d893..22f50cc 100644 --- a/lib/coderay/scanners/io.rb +++ b/lib/coderay/scanners/io.rb @@ -1,18 +1,18 @@ module CodeRay module Scanners - + #A simple scanner for a simple language: Io - + class Io < Scanner register_for :io - + RESERVED_WORDS = [ 'clone','init', 'method', 'list', 'vector', 'block', 'if','ifTrue','ifFalse','ifTrueIfFalse','then', 'for','loop', 'reverseForeach','foreach','map','continue','break','while','do','return', 'self','sender','target','proto','parent','protos'] PREDEFINED_TYPES = [] - PREDEFINED_CONSTANTS = ['Object', 'Lobby', + PREDEFINED_CONSTANTS = ['Object', 'Lobby', 'TRUE','true','FALSE','false','NULL','null','Null','Nil','nil','YES','NO'] IDENT_KIND = WordList.new(:ident). @@ -20,7 +20,7 @@ module CodeRay module Scanners add(PREDEFINED_TYPES, :pre_type). add(PREDEFINED_CONSTANTS, :pre_constant) - ESCAPE = / [rbfnrtv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x + ESCAPE = / [rbfntv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x UNICODE_ESCAPE = / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x def scan_tokens tokens, options @@ -33,24 +33,24 @@ module CodeRay module Scanners match = nil if state == :initial - + if scan(/ \s+ | \\\n /x) kind = :space - + elsif scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx) kind = :comment - + elsif scan(/ [-+*\/\$\@=<>?:;,!&^|()\[\]{}~%]+ | \.(?!\d) /x) kind = :operator - + elsif match = scan(/ [A-Za-z_][A-Za-z_0-9]* /x) kind = IDENT_KIND[match] if kind == :ident and check(/:(?!:)/) match << scan(/:/) kind = :label end - + elsif match = scan(/L?"/) tokens << [:open, :string] if match[0] == ?L @@ -59,30 +59,30 @@ module CodeRay module Scanners end state = :string kind = :delimiter - + elsif scan(/#\s*(\w*)/) kind = :preprocessor # FIXME multiline preprocs state = :include_expected if self[1] == 'include' - + elsif scan(/ L?' (?: [^\'\n\\] | \\ #{ESCAPE} )? '? /ox) kind = :char - + elsif scan(/0[xX][0-9A-Fa-f]+/) kind = :hex - + elsif scan(/(?:0[0-7]+)(?![89.eEfF])/) kind = :oct - + elsif scan(/(?:\d+)(?![.eEfF])/) kind = :integer - + elsif scan(/\d[fF]?|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]?/) kind = :float else getch end - + elsif state == :string if scan(/[^\\"]+/) kind = :content @@ -99,33 +99,33 @@ module CodeRay module Scanners else raise "else case \" reached; %p not handled." % peek(1), tokens end - + elsif state == :include_expected if scan(/<[^>\n]+>?|"[^"\n\\]*(?:\\.[^"\n\\]*)*"?/) kind = :include state = :initial - + elsif match = scan(/\s+/) kind = :space state = :initial if match.index ?\n - + else getch - + end - + else raise 'else-case reached', tokens - + end - + match ||= matched raise [match, kind], tokens if kind == :error tokens << [match, kind] - + end - + tokens end |