summaryrefslogtreecommitdiff
path: root/lib/coderay/scanners/java_script.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/coderay/scanners/java_script.rb')
-rw-r--r--lib/coderay/scanners/java_script.rb16
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