af0f607e75
New syntax colouring modes. In addition to the existing html, xml, ruby we now support yaml, ansic, javascript, sqlite, css
59 lines
1.9 KiB
Ruby
59 lines
1.9 KiB
Ruby
require 'syntax'
|
|
|
|
module Syntax
|
|
|
|
class Javascript < Tokenizer
|
|
|
|
JAVASCRIPT_KEYWORDS =
|
|
%w{abstract break case catch class const continue
|
|
debugger default delete do else enum export extends
|
|
final finally for function goto if implements
|
|
import in instanceof interface native new
|
|
package private protected public return
|
|
static super switch synchronized this throw
|
|
throws transient try typeof
|
|
var void volatile while with} unless const_defined?(:JAVASCRIPT_KEYWORDS)
|
|
|
|
JAVASCRIPT_PREDEFINED_TYPES =
|
|
%w{boolean byte char double float int long short} unless const_defined?(:JAVASCRIPT_PREDEFINED_TYPES)
|
|
|
|
JAVASCRIPT_PREDEFINED_CONSTANTS =
|
|
%w{null true false} unless const_defined?(:JAVASCRIPT_PREDEFINED_CONSTANTS)
|
|
|
|
def step
|
|
case
|
|
when scan(/\s+/)
|
|
start_group :normal, matched
|
|
when scan(/\\u[0-9a-f]{4}/i)
|
|
start_group :unicode, matched
|
|
when scan(/0[xX][0-9A-Fa-f]+/)
|
|
start_group :hex, matched
|
|
when scan(/(?:0[0-7]+)(?![89.eEfF])/)
|
|
start_group :oct, matched
|
|
when scan(/(?:\d+)(?![.eEfF])/)
|
|
start_group :integer, matched
|
|
when scan(/\d[fF]?|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]?/)
|
|
start_group :float, matched
|
|
when (scan(/"(?:[^"\\]|\\.)*"/) or scan(/'(?:[^'\\]|\\.)*'/) )
|
|
start_group :string, matched
|
|
when scan(/[a-z_$][a-z_\d]*/i)
|
|
if JAVASCRIPT_KEYWORDS.include?( matched )
|
|
start_group :keyword, matched
|
|
elsif JAVASCRIPT_PREDEFINED_TYPES.include?( matched )
|
|
start_group :predefined_types, matched
|
|
else
|
|
start_group :ident, matched
|
|
end
|
|
when scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx)
|
|
start_group :comment, matched
|
|
else
|
|
start_group :other, scan(/./x)
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
SYNTAX["javascript"] = Javascript
|
|
|
|
end
|