From 9a5f5e6217db0b7689b64ca0892feacf32be3d66 Mon Sep 17 00:00:00 2001 From: murphy Date: Sun, 21 Sep 2008 16:25:44 +0000 Subject: New: *Java Scanner* (closes #42). * Based on JavaScript, does a good job, but may need more polish. * Java::BuiltinTypes::List is a helper constant that contains 2389 Java types. ** The list was generated from TextMate's Java bundle with the help of SimpleRegexpScanner. * I added the JRuby core classes as example code for testing (1.8 MB) JavaScript Scanner: * Fixed recognition of floats and algebraic signs. ** Still needs work - we need to distinguish i-1 from i+-1. More changes: * New: "SimpleRegexpScanner":http://murfy.de/simple-regexp-scanner * Added new token class :annotation along with CSS styles. ** Should be useful for Python, too. * coderay_suite warns if no scanner was found for this language. * PluginHost#default can be called without parameter (will return default id) --- lib/coderay/scanners/java_script.rb | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) (limited to 'lib/coderay/scanners/java_script.rb') diff --git a/lib/coderay/scanners/java_script.rb b/lib/coderay/scanners/java_script.rb index f13c5d3..b3dd52e 100644 --- a/lib/coderay/scanners/java_script.rb +++ b/lib/coderay/scanners/java_script.rb @@ -68,10 +68,18 @@ module Scanners value_expected = true kind = :comment - elsif scan(/[+-]?(?:\d+)(?![.eEfF])/) - value_expected = false - kind = :integer - + elsif check(/\d/) + key_expected = value_expected = false + if scan(/0[xX][0-9A-Fa-f]+/) + kind = :hex + elsif scan(/(?>0[0-7]+)(?![89.eEfF])/) + kind = :oct + elsif scan(/\d+[fF]|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]?/) + kind = :float + elsif scan(/\d+/) + kind = :integer + end + elsif match = scan(/ [-+*=<>?:;,!&^|(\[{~%]+ | \.(?!\d) /x) value_expected = true last_operator = match[-1] @@ -111,18 +119,6 @@ module Scanners key_expected = false kind = :operator - elsif scan(/0[xX][0-9A-Fa-f]+/) - key_expected = value_expected = false - kind = :hex - - elsif scan(/(?:0[0-7]+)(?![89.eEfF])/) - key_expected = value_expected = false - kind = :oct - - elsif scan(/\d[fF]?|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]?/) - key_expected = value_expected = false - kind = :float - else getch kind = :error -- cgit v1.2.1