diff options
| author | murphy <murphy@rubychan.de> | 2009-01-22 14:01:04 +0000 | 
|---|---|---|
| committer | murphy <murphy@rubychan.de> | 2009-01-22 14:01:04 +0000 | 
| commit | 4c64867ce924aca00fc40849e83acbfe2fcc3b29 (patch) | |
| tree | 52655e22c541cec554bf9ffdcd486f83307ccb56 | |
| parent | c0e1923167357a6c210bcf0857f70a8a8fa4495f (diff) | |
| download | coderay-4c64867ce924aca00fc40849e83acbfe2fcc3b29.tar.gz | |
Fixed JavaScript scanner, highlighting of strings as keys.
| -rw-r--r-- | lib/coderay/scanners/java_script.rb | 16 | 
1 files changed, 12 insertions, 4 deletions
diff --git a/lib/coderay/scanners/java_script.rb b/lib/coderay/scanners/java_script.rb index b3dd52e..0187e5b 100644 --- a/lib/coderay/scanners/java_script.rb +++ b/lib/coderay/scanners/java_script.rb @@ -94,13 +94,21 @@ module Scanners              kind = IDENT_KIND[match]              value_expected = (kind == :keyword) && KEYWORDS_EXPECTING_VALUE[match]              if kind == :ident -              if match.index(?$) +              if match.index(?$)  # $ allowed inside an identifier                  kind = :predefined                elsif key_expected && check(/\s*:/)                  kind = :key                end              end              key_expected = false +           +          # TODO: string key recognition +          # There's a problem with expressions like: PAIRS: { 'slide':  ['SlideDown','SlideUp'], ... }. +          # elsif key_expected && match = scan(/["']/) +          #   tokens << [:open, :key] +          #   state = :key +          #   string_delimiter = match +          #   kind = :delimiter            elsif match = scan(/["']/)              tokens << [:open, :string] @@ -125,7 +133,7 @@ module Scanners            end -        when :string, :regexp +        when :string, :regexp, :key            if scan(STRING_CONTENT_PATTERN[string_delimiter])              kind = :content            elsif match = scan(/["'\/]/) @@ -139,7 +147,7 @@ module Scanners              key_expected = value_expected = false              state = :initial              next -          elsif state == :string && (match = scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox)) +          elsif state != :regexp && (match = scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox))              if string_delimiter == "'" && !(match == "\\\\" || match == "\\'")                kind = :content              else @@ -150,7 +158,7 @@ module Scanners            elsif scan(/\\./m)              kind = :content            elsif scan(/ \\ | $ /x) -            tokens << [:close, :delimiter] +            tokens << [:close, state]              kind = :error              key_expected = value_expected = false              state = :initial  | 
