rouge_ecl 0.0.1 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +4 -4
- data/lib/rouge.rb +7 -9
- data/lib/rouge/cli.rb +2 -36
- data/lib/rouge/guessers/glob_mapping.rb +6 -3
- data/lib/rouge/guessers/modeline.rb +3 -4
- data/lib/rouge/guessers/source.rb +16 -6
- data/lib/rouge/lexer.rb +11 -20
- data/lib/rouge/lexers/apiblueprint.rb +4 -0
- data/lib/rouge/lexers/awk.rb +2 -2
- data/lib/rouge/lexers/biml.rb +2 -2
- data/lib/rouge/lexers/c.rb +6 -1
- data/lib/rouge/lexers/coffeescript.rb +2 -2
- data/lib/rouge/lexers/coq.rb +4 -0
- data/lib/rouge/lexers/diff.rb +4 -4
- data/lib/rouge/lexers/digdag.rb +4 -0
- data/lib/rouge/lexers/ecl.rb +32 -20
- data/lib/rouge/lexers/erb.rb +4 -0
- data/lib/rouge/lexers/erlang.rb +4 -0
- data/lib/rouge/lexers/factor.rb +2 -2
- data/lib/rouge/lexers/fsharp.rb +1 -1
- data/lib/rouge/lexers/gherkin.rb +2 -2
- data/lib/rouge/lexers/go.rb +4 -0
- data/lib/rouge/lexers/groovy.rb +2 -2
- data/lib/rouge/lexers/haml.rb +4 -0
- data/lib/rouge/lexers/haskell.rb +5 -4
- data/lib/rouge/lexers/html.rb +5 -6
- data/lib/rouge/lexers/idlang.rb +6 -0
- data/lib/rouge/lexers/ini.rb +4 -0
- data/lib/rouge/lexers/io.rb +2 -2
- data/lib/rouge/lexers/javascript.rb +2 -2
- data/lib/rouge/lexers/julia.rb +2 -2
- data/lib/rouge/lexers/kotlin.rb +15 -10
- data/lib/rouge/lexers/lasso.rb +6 -3
- data/lib/rouge/lexers/llvm.rb +4 -0
- data/lib/rouge/lexers/lua.rb +2 -2
- data/lib/rouge/lexers/make.rb +4 -0
- data/lib/rouge/lexers/matlab.rb +4 -0
- data/lib/rouge/lexers/moonscript.rb +2 -2
- data/lib/rouge/lexers/mosel.rb +3 -3
- data/lib/rouge/lexers/nasm.rb +5 -0
- data/lib/rouge/lexers/objective_c.rb +14 -0
- data/lib/rouge/lexers/perl.rb +4 -3
- data/lib/rouge/lexers/php.rb +6 -6
- data/lib/rouge/lexers/plist.rb +4 -0
- data/lib/rouge/lexers/powershell.rb +1 -1
- data/lib/rouge/lexers/praat.rb +2 -2
- data/lib/rouge/lexers/prolog.rb +5 -0
- data/lib/rouge/lexers/properties.rb +4 -0
- data/lib/rouge/lexers/puppet.rb +3 -3
- data/lib/rouge/lexers/python.rb +2 -3
- data/lib/rouge/lexers/q.rb +4 -0
- data/lib/rouge/lexers/r.rb +2 -2
- data/lib/rouge/lexers/racket.rb +4 -5
- data/lib/rouge/lexers/ruby.rb +3 -3
- data/lib/rouge/lexers/rust.rb +4 -4
- data/lib/rouge/lexers/sass.rb +3 -3
- data/lib/rouge/lexers/scheme.rb +2 -2
- data/lib/rouge/lexers/scss.rb +2 -2
- data/lib/rouge/lexers/sed.rb +2 -2
- data/lib/rouge/lexers/shell.rb +9 -18
- data/lib/rouge/lexers/smarty.rb +11 -0
- data/lib/rouge/lexers/sml.rb +4 -0
- data/lib/rouge/lexers/swift.rb +1 -21
- data/lib/rouge/lexers/tap.rb +4 -0
- data/lib/rouge/lexers/tcl.rb +4 -4
- data/lib/rouge/lexers/tex.rb +2 -2
- data/lib/rouge/lexers/toml.rb +4 -0
- data/lib/rouge/lexers/tulip.rb +3 -2
- data/lib/rouge/lexers/turtle.rb +14 -5
- data/lib/rouge/lexers/vue.rb +6 -4
- data/lib/rouge/lexers/wollok.rb +4 -0
- data/lib/rouge/lexers/xml.rb +6 -4
- data/lib/rouge/lexers/yaml.rb +2 -2
- data/lib/rouge/version.rb +1 -1
- data/rouge.gemspec +1 -6
- metadata +4 -13
- data/lib/rouge/demos/ecl +0 -1
- data/lib/rouge/demos/elm +0 -4
- data/lib/rouge/demos/hack +0 -5
- data/lib/rouge/guessers/disambiguation.rb +0 -101
- data/lib/rouge/guessers/util.rb +0 -32
- data/lib/rouge/lexers/elm.rb +0 -89
- data/lib/rouge/lexers/hack.rb +0 -48
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: af56629a74d2aa10269cf04e548644d0671c3dbe
|
|
4
|
+
data.tar.gz: 9c408275361a52873876b46007aaf008d96bac38
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 23f1ca340154e008b0714c48f6f525edc9d728040650ae8cadf2ac784dd78043c8bdc49c3c02daefd0a94d414dc0016b9fb375e4c17cfeb7f458d970c0794ced
|
|
7
|
+
data.tar.gz: 4f6a04e669eaae23f1c3be31b431b233404b86bb3a50fb4627b52a3440d581f25790f43851cbdb6bf02094744fa6e6769bc778df8213acf1543661ee047042f0
|
data/Gemfile
CHANGED
|
@@ -3,12 +3,12 @@ source 'http://rubygems.org'
|
|
|
3
3
|
gemspec
|
|
4
4
|
|
|
5
5
|
gem 'bundler', '~> 1.15'
|
|
6
|
-
gem 'rake'
|
|
6
|
+
gem 'rake', '~> 12.0'
|
|
7
7
|
|
|
8
|
-
gem 'minitest', '
|
|
9
|
-
gem '
|
|
8
|
+
gem 'minitest', '~> 4.0'
|
|
9
|
+
gem 'wrong'
|
|
10
10
|
|
|
11
|
-
gem 'rubocop', '~> 0.49.1'
|
|
11
|
+
gem 'rubocop', '~> 0.49.1' if RUBY_VERSION >= '2.0.0'
|
|
12
12
|
|
|
13
13
|
# don't try to install redcarpet under jruby
|
|
14
14
|
gem 'redcarpet', :platforms => :ruby
|
data/lib/rouge.rb
CHANGED
|
@@ -41,6 +41,13 @@ load load_dir.join('rouge/util.rb')
|
|
|
41
41
|
load load_dir.join('rouge/text_analyzer.rb')
|
|
42
42
|
load load_dir.join('rouge/token.rb')
|
|
43
43
|
|
|
44
|
+
load load_dir.join('rouge/guesser.rb')
|
|
45
|
+
load load_dir.join('rouge/guessers/glob_mapping.rb')
|
|
46
|
+
load load_dir.join('rouge/guessers/modeline.rb')
|
|
47
|
+
load load_dir.join('rouge/guessers/filename.rb')
|
|
48
|
+
load load_dir.join('rouge/guessers/mimetype.rb')
|
|
49
|
+
load load_dir.join('rouge/guessers/source.rb')
|
|
50
|
+
|
|
44
51
|
load load_dir.join('rouge/lexer.rb')
|
|
45
52
|
load load_dir.join('rouge/regex_lexer.rb')
|
|
46
53
|
load load_dir.join('rouge/template_lexer.rb')
|
|
@@ -50,15 +57,6 @@ Dir.glob(lexers_dir.join('*.rb')).each do |f|
|
|
|
50
57
|
Rouge::Lexers.load_lexer(Pathname.new(f).relative_path_from(lexers_dir).to_s)
|
|
51
58
|
end
|
|
52
59
|
|
|
53
|
-
load load_dir.join('rouge/guesser.rb')
|
|
54
|
-
load load_dir.join('rouge/guessers/util.rb')
|
|
55
|
-
load load_dir.join('rouge/guessers/glob_mapping.rb')
|
|
56
|
-
load load_dir.join('rouge/guessers/modeline.rb')
|
|
57
|
-
load load_dir.join('rouge/guessers/filename.rb')
|
|
58
|
-
load load_dir.join('rouge/guessers/mimetype.rb')
|
|
59
|
-
load load_dir.join('rouge/guessers/source.rb')
|
|
60
|
-
load load_dir.join('rouge/guessers/disambiguation.rb')
|
|
61
|
-
|
|
62
60
|
load load_dir.join('rouge/formatter.rb')
|
|
63
61
|
load load_dir.join('rouge/formatters/html.rb')
|
|
64
62
|
load load_dir.join('rouge/formatters/html_table.rb')
|
data/lib/rouge/cli.rb
CHANGED
|
@@ -13,9 +13,9 @@ module Rouge
|
|
|
13
13
|
def file
|
|
14
14
|
case input
|
|
15
15
|
when '-'
|
|
16
|
-
IO.new($stdin.fileno, '
|
|
16
|
+
IO.new($stdin.fileno, 'r:utf-8')
|
|
17
17
|
when String
|
|
18
|
-
File.new(input, '
|
|
18
|
+
File.new(input, 'r:utf-8')
|
|
19
19
|
when ->(i){ i.respond_to? :read }
|
|
20
20
|
input
|
|
21
21
|
end
|
|
@@ -44,7 +44,6 @@ module Rouge
|
|
|
44
44
|
yield %| help #{Help.desc}|
|
|
45
45
|
yield %| style #{Style.desc}|
|
|
46
46
|
yield %| list #{List.desc}|
|
|
47
|
-
yield %| guess #{Guess.desc}|
|
|
48
47
|
yield %| version #{Version.desc}|
|
|
49
48
|
yield %||
|
|
50
49
|
yield %|See `rougify help <command>` for more info.|
|
|
@@ -98,8 +97,6 @@ module Rouge
|
|
|
98
97
|
Style
|
|
99
98
|
when 'list'
|
|
100
99
|
List
|
|
101
|
-
when 'guess'
|
|
102
|
-
Guess
|
|
103
100
|
end
|
|
104
101
|
end
|
|
105
102
|
|
|
@@ -378,37 +375,6 @@ module Rouge
|
|
|
378
375
|
end
|
|
379
376
|
end
|
|
380
377
|
|
|
381
|
-
class Guess < CLI
|
|
382
|
-
def self.desc
|
|
383
|
-
"guess the languages of file"
|
|
384
|
-
end
|
|
385
|
-
|
|
386
|
-
def self.parse(args)
|
|
387
|
-
new(input_file: args.shift)
|
|
388
|
-
end
|
|
389
|
-
|
|
390
|
-
attr_reader :input_file, :input_source
|
|
391
|
-
|
|
392
|
-
def initialize(opts)
|
|
393
|
-
@input_file = opts[:input_file] || '-'
|
|
394
|
-
@input_source = FileReader.new(@input_file).read
|
|
395
|
-
end
|
|
396
|
-
|
|
397
|
-
def lexers
|
|
398
|
-
Lexer.guesses(
|
|
399
|
-
filename: input_file,
|
|
400
|
-
source: input_source,
|
|
401
|
-
)
|
|
402
|
-
end
|
|
403
|
-
|
|
404
|
-
def run
|
|
405
|
-
lexers.each do |l|
|
|
406
|
-
puts "{ tag: #{l.tag.inspect}, title: #{l.title.inspect}, desc: #{l.desc.inspect} }"
|
|
407
|
-
end
|
|
408
|
-
end
|
|
409
|
-
end
|
|
410
|
-
|
|
411
|
-
|
|
412
378
|
private_class_method
|
|
413
379
|
def self.normalize_syntax(argv)
|
|
414
380
|
out = []
|
|
@@ -3,8 +3,6 @@ module Rouge
|
|
|
3
3
|
# This class allows for custom behavior
|
|
4
4
|
# with glob -> lexer name mappings
|
|
5
5
|
class GlobMapping < Guesser
|
|
6
|
-
include Util
|
|
7
|
-
|
|
8
6
|
def self.by_pairs(mapping, filename)
|
|
9
7
|
glob_map = {}
|
|
10
8
|
mapping.each do |(glob, lexer_name)|
|
|
@@ -31,13 +29,18 @@ module Rouge
|
|
|
31
29
|
|
|
32
30
|
collect_best(lexers) do |lexer|
|
|
33
31
|
score = (@glob_map[lexer.name] || []).map do |pattern|
|
|
34
|
-
if
|
|
32
|
+
if test_pattern(pattern, basename)
|
|
35
33
|
# specificity is better the fewer wildcards there are
|
|
36
34
|
-pattern.scan(/[*?\[]/).size
|
|
37
35
|
end
|
|
38
36
|
end.compact.min
|
|
39
37
|
end
|
|
40
38
|
end
|
|
39
|
+
|
|
40
|
+
private
|
|
41
|
+
def test_pattern(pattern, path)
|
|
42
|
+
File.fnmatch?(pattern, path, File::FNM_DOTMATCH | File::FNM_CASEFOLD)
|
|
43
|
+
end
|
|
41
44
|
end
|
|
42
45
|
end
|
|
43
46
|
end
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
module Rouge
|
|
2
2
|
module Guessers
|
|
3
3
|
class Modeline < Guesser
|
|
4
|
-
include Util
|
|
5
|
-
|
|
6
4
|
# [jneen] regexen stolen from linguist
|
|
7
5
|
EMACS_MODELINE = /-\*-\s*(?:(?!mode)[\w-]+\s*:\s*(?:[\w+-]+)\s*;?\s*)*(?:mode\s*:)?\s*([\w+-]+)\s*(?:;\s*(?!mode)[\w-]+\s*:\s*[\w+-]+\s*)*;?\s*-\*-/i
|
|
8
6
|
|
|
@@ -27,9 +25,10 @@ module Rouge
|
|
|
27
25
|
# don't bother reading the stream if we've already decided
|
|
28
26
|
return lexers if lexers.size == 1
|
|
29
27
|
|
|
30
|
-
source_text =
|
|
28
|
+
source_text = @source
|
|
29
|
+
source_text = source_text.read if source_text.respond_to? :read
|
|
31
30
|
|
|
32
|
-
lines = source_text.split(/\n/)
|
|
31
|
+
lines = source_text.split(/\r?\n/)
|
|
33
32
|
|
|
34
33
|
search_space = (lines.first(@lines) + lines.last(@lines)).join("\n")
|
|
35
34
|
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
module Rouge
|
|
2
2
|
module Guessers
|
|
3
3
|
class Source < Guesser
|
|
4
|
-
include Util
|
|
5
|
-
|
|
6
4
|
attr_reader :source
|
|
7
5
|
def initialize(source)
|
|
8
6
|
@source = source
|
|
@@ -13,15 +11,27 @@ module Rouge
|
|
|
13
11
|
# we've already filtered to 1
|
|
14
12
|
return lexers if lexers.size == 1
|
|
15
13
|
|
|
16
|
-
|
|
14
|
+
# If we're filtering against *all* lexers, we only use confident return
|
|
15
|
+
# values from analyze_text. But if we've filtered down already, we can trust
|
|
16
|
+
# the analysis more.
|
|
17
|
+
threshold = lexers.size < 10 ? 0 : 0.5
|
|
18
|
+
|
|
19
|
+
source_text = case @source
|
|
20
|
+
when String
|
|
21
|
+
@source
|
|
22
|
+
when ->(s){ s.respond_to? :read }
|
|
23
|
+
@source.read
|
|
24
|
+
else
|
|
25
|
+
raise 'invalid source'
|
|
26
|
+
end
|
|
17
27
|
|
|
18
28
|
Lexer.assert_utf8!(source_text)
|
|
19
29
|
|
|
20
30
|
source_text = TextAnalyzer.new(source_text)
|
|
21
31
|
|
|
22
|
-
collect_best(lexers) do |lexer|
|
|
23
|
-
next unless lexer.methods(false).include? :
|
|
24
|
-
lexer.
|
|
32
|
+
collect_best(lexers, threshold: threshold) do |lexer|
|
|
33
|
+
next unless lexer.methods(false).include? :analyze_text
|
|
34
|
+
lexer.analyze_text(source_text)
|
|
25
35
|
end
|
|
26
36
|
end
|
|
27
37
|
end
|
data/lib/rouge/lexer.rb
CHANGED
|
@@ -22,9 +22,7 @@ module Rouge
|
|
|
22
22
|
new(opts).lex(stream, &b)
|
|
23
23
|
end
|
|
24
24
|
|
|
25
|
-
# Given a
|
|
26
|
-
# @param [String] name
|
|
27
|
-
# @return [Class<Rouge::Lexer>,nil]
|
|
25
|
+
# Given a string, return the correct lexer class.
|
|
28
26
|
def find(name)
|
|
29
27
|
registry[name.to_s]
|
|
30
28
|
end
|
|
@@ -44,7 +42,6 @@ module Rouge
|
|
|
44
42
|
# markdown lexer for highlighting internal code blocks.
|
|
45
43
|
#
|
|
46
44
|
def find_fancy(str, code=nil, additional_options={})
|
|
47
|
-
|
|
48
45
|
if str && !str.include?('?') && str != 'guess'
|
|
49
46
|
lexer_class = find(str)
|
|
50
47
|
return lexer_class && lexer_class.new(additional_options)
|
|
@@ -112,7 +109,7 @@ module Rouge
|
|
|
112
109
|
def demo(arg=:absent)
|
|
113
110
|
return @demo = arg unless arg == :absent
|
|
114
111
|
|
|
115
|
-
@demo = File.read(demo_file,
|
|
112
|
+
@demo = File.read(demo_file, encoding: 'utf-8')
|
|
116
113
|
end
|
|
117
114
|
|
|
118
115
|
# @return a list of all lexers.
|
|
@@ -136,7 +133,6 @@ module Rouge
|
|
|
136
133
|
guessers << Guessers::Filename.new(filename) if filename
|
|
137
134
|
guessers << Guessers::Modeline.new(source) if source
|
|
138
135
|
guessers << Guessers::Source.new(source) if source
|
|
139
|
-
guessers << Guessers::Disambiguation.new(filename, source) if source && filename
|
|
140
136
|
|
|
141
137
|
Guesser.guess(guessers, Lexer.all)
|
|
142
138
|
end
|
|
@@ -151,23 +147,16 @@ module Rouge
|
|
|
151
147
|
# The source itself, which, if guessing by mimetype or filename
|
|
152
148
|
# fails, will be searched for shebangs, <!DOCTYPE ...> tags, and
|
|
153
149
|
# other hints.
|
|
154
|
-
# @param [Proc] fallback called if multiple lexers are detected.
|
|
155
|
-
# If omitted, Guesser::Ambiguous is raised.
|
|
156
150
|
#
|
|
157
|
-
# @see Lexer.
|
|
151
|
+
# @see Lexer.analyze_text
|
|
158
152
|
# @see Lexer.guesses
|
|
159
|
-
|
|
160
|
-
def guess(info={}, &fallback)
|
|
153
|
+
def guess(info={})
|
|
161
154
|
lexers = guesses(info)
|
|
162
155
|
|
|
163
156
|
return Lexers::PlainText if lexers.empty?
|
|
164
157
|
return lexers[0] if lexers.size == 1
|
|
165
158
|
|
|
166
|
-
|
|
167
|
-
fallback.call(lexers)
|
|
168
|
-
else
|
|
169
|
-
raise Guesser::Ambiguous.new(lexers)
|
|
170
|
-
end
|
|
159
|
+
raise Guesser::Ambiguous.new(lexers)
|
|
171
160
|
end
|
|
172
161
|
|
|
173
162
|
def guess_by_mimetype(mt)
|
|
@@ -436,14 +425,16 @@ module Rouge
|
|
|
436
425
|
|
|
437
426
|
# @abstract
|
|
438
427
|
#
|
|
439
|
-
# Return
|
|
440
|
-
#
|
|
428
|
+
# Return a number between 0 and 1 indicating the likelihood that
|
|
429
|
+
# the text given should be lexed with this lexer. The default
|
|
430
|
+
# implementation returns 0. Values under 0.5 will only be used
|
|
431
|
+
# to disambiguate filename or mimetype matches.
|
|
441
432
|
#
|
|
442
433
|
# @param [TextAnalyzer] text
|
|
443
434
|
# the text to be analyzed, with a couple of handy methods on it,
|
|
444
435
|
# like {TextAnalyzer#shebang?} and {TextAnalyzer#doctype?}
|
|
445
|
-
def self.
|
|
446
|
-
|
|
436
|
+
def self.analyze_text(text)
|
|
437
|
+
0
|
|
447
438
|
end
|
|
448
439
|
end
|
|
449
440
|
|
data/lib/rouge/lexers/awk.rb
CHANGED
data/lib/rouge/lexers/biml.rb
CHANGED
data/lib/rouge/lexers/c.rb
CHANGED
|
@@ -55,6 +55,11 @@ module Rouge
|
|
|
55
55
|
)
|
|
56
56
|
end
|
|
57
57
|
|
|
58
|
+
# high priority for filename matches
|
|
59
|
+
def self.analyze_text(*)
|
|
60
|
+
0.3
|
|
61
|
+
end
|
|
62
|
+
|
|
58
63
|
def self.builtins
|
|
59
64
|
@builtins ||= []
|
|
60
65
|
end
|
|
@@ -85,7 +90,7 @@ module Rouge
|
|
|
85
90
|
|
|
86
91
|
state :whitespace do
|
|
87
92
|
rule /\n+/m, Text, :bol
|
|
88
|
-
rule %r(//(\\.|.)
|
|
93
|
+
rule %r(//(\\.|.)*?\n), Comment::Single, :bol
|
|
89
94
|
mixin :inline_whitespace
|
|
90
95
|
end
|
|
91
96
|
|
|
@@ -11,8 +11,8 @@ module Rouge
|
|
|
11
11
|
title "CoffeeScript"
|
|
12
12
|
desc 'The Coffeescript programming language (coffeescript.org)'
|
|
13
13
|
|
|
14
|
-
def self.
|
|
15
|
-
return
|
|
14
|
+
def self.analyze_text(text)
|
|
15
|
+
return 1 if text.shebang? 'coffee'
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
def self.keywords
|
data/lib/rouge/lexers/coq.rb
CHANGED
data/lib/rouge/lexers/diff.rb
CHANGED
|
@@ -9,10 +9,10 @@ module Rouge
|
|
|
9
9
|
filenames '*.diff', '*.patch'
|
|
10
10
|
mimetypes 'text/x-diff', 'text/x-patch'
|
|
11
11
|
|
|
12
|
-
def self.
|
|
13
|
-
return
|
|
14
|
-
return
|
|
15
|
-
return
|
|
12
|
+
def self.analyze_text(text)
|
|
13
|
+
return 1 if text.start_with?('Index: ')
|
|
14
|
+
return 1 if text.start_with?('diff ')
|
|
15
|
+
return 0.9 if text.start_with?('--- ')
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
state :root do
|
data/lib/rouge/lexers/digdag.rb
CHANGED
data/lib/rouge/lexers/ecl.rb
CHANGED
|
@@ -67,50 +67,62 @@ module Rouge
|
|
|
67
67
|
|
|
68
68
|
state :root do
|
|
69
69
|
rule /\s+/m, Text
|
|
70
|
-
rule %r(//(\\.|.)*?$),
|
|
71
|
-
rule %r(/\*),
|
|
72
|
-
rule
|
|
73
|
-
rule
|
|
74
|
-
rule
|
|
75
|
-
rule
|
|
76
|
-
rule /\
|
|
77
|
-
rule
|
|
78
|
-
rule
|
|
79
|
-
|
|
70
|
+
rule %r(//(\\.|.)*?$), Literal::String::Regex
|
|
71
|
+
rule %r(/\*), Literal::String::Regex, :multiline_comments
|
|
72
|
+
rule /0x[0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*/, Num::Integer # hex 0x...
|
|
73
|
+
rule /0b[01]+(?:_[01]+)*/, Num::Integer # binary 0b...
|
|
74
|
+
rule /0[0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*x/, Num::Integer # hex 0...x
|
|
75
|
+
rule /0[01]+(?:_[01]+)*b/, Num::Integer # binary 0...b
|
|
76
|
+
rule /\d+\.\d+(e[\+\-]?\d+)?/, Num::Integer # real
|
|
77
|
+
rule /0_?[0-7]+(?:_[0-7]+)*/, Num::Integer # octal
|
|
78
|
+
rule /[\d]+(?:_\d+)*/, Num::Integer # integer
|
|
79
|
+
rule /\b(?i:(all|except|export|group|import|keyed|wild|left|right|self|shared|skip|true|false))\b/, Name::Builtin
|
|
80
|
+
rule /\b(?i:(abs|acos|aggregate|allnodes|apply|ascii|asin|asstring|atan|atan2|ave|case|catch|choose|choosen|choosesets|clustersize|combine|correlation|cos|cosh|count|covariance|cron|dataset|dedup|define|denormalize|dictionary|distribute|distributed|distribution|ebcdic|enth|error|evaluate|event|eventextra|eventname|exists|exp|failcode|failmessage|fetch|fromunicode|fromxml|getenv|getisvalid|global|graph|group|hash|hash32|hash64|hashcrc|hashmd5|having|httpcall|httpheader|if|iff|index|intformat|isvalid|iterate|join|keyunicode|length|library|limit|ln|local|log|loop|map|matched|matchlength|matchposition|matchtext|matchunicode|max|merge|mergejoin|min|nofold|nolocal|nonempty|normalize|parse|pipe|power|preload|process|project|pull|random|range|rank|ranked|realformat|recordof|regexfind|regexreplace|regroup|rejected|rollup|round|roundup|row|rowdiff|sample|set|sin|sinh|sizeof|soapcall|sort|sorted|sqrt|stepped|stored|sum|table|tan|tanh|thisnode|topn|tounicode|toxml|transfer|transform|trim|truncate|typeof|ungroup|unicodeorder|variance|which|workunit|xmldecode|xmlencode|xmltext|xmlunicode))\b/, Keyword::Type
|
|
81
|
+
rule /\b(?i:(data|string|qstring|varstring|varunicode|unicode))\d+\b/, Name::Attribute
|
|
82
|
+
rule /\b(?i:(integer|unsigned))[1-8]\b/, Name::Attribute
|
|
83
|
+
rule /\b(?i:(ascii|big_endian|boolean|data|decimal|ebcdic|grouped|integer|linkcounted|pattern|qstring|real|record|rule|set of|streamed|string|token|udecimal|unicode|unsigned|varstring|varunicode))\b/, Name::Attribute
|
|
84
|
+
rule /\b(?i)(u?)decimal(\d+(_\d+)?)\b/, Name::Attribute
|
|
85
|
+
rule /\b(?i:(apply|assert|build|buildindex|evaluate|fail|keydiff|keypatch|loadxml|nothor|notify|output|parallel|sequential|soapcall|wait))\b/, Name::Class
|
|
86
|
+
rule /\b(?i:(import|as|checkpoint|deprecated|failcode|failmessage|failure|global|independent|onwarning|persist|priority|recovery|stored|success|wait|when))\b/, Name::Entity
|
|
87
|
+
|
|
80
88
|
rule /'/, Str::Single, :single_string
|
|
81
89
|
rule /"/, Name::Variable, :double_string
|
|
82
90
|
rule /`/, Name::Variable, :backtick
|
|
83
91
|
|
|
84
|
-
rule /(#)(?i)(\w+)/,
|
|
92
|
+
rule /(#)(?i)(\w+)/, Generic::Subheading
|
|
85
93
|
|
|
86
94
|
rule /([A-Za-z_]+)\s*(\()/ do |m|
|
|
87
95
|
if !(self.class.keywords.include? m[1].upcase or self.class.builtins.include? m[1].upcase)
|
|
88
|
-
token Name::Function
|
|
96
|
+
token Name::Function, m[1]
|
|
97
|
+
token Punctuation, m[2]
|
|
89
98
|
end
|
|
90
99
|
if self.class.keywords.include? m[1].upcase
|
|
91
|
-
token
|
|
100
|
+
token Generic::Traceback
|
|
92
101
|
end
|
|
93
102
|
if self.class.builtins.include? m[1].upcase
|
|
94
|
-
token
|
|
103
|
+
token Name::Builtin
|
|
95
104
|
end
|
|
96
105
|
end
|
|
106
|
+
rule /[\$\w][\w\d]*/ do |m|
|
|
107
|
+
|
|
108
|
+
#rule for all remaining tokens assigning token Name for those not being a keyword
|
|
97
109
|
rule /[\$\w][\w\d]*/ do |m|
|
|
98
110
|
if self.class.keywords.include? m[0].upcase
|
|
99
|
-
token
|
|
111
|
+
token Generic::Traceback
|
|
100
112
|
else
|
|
101
113
|
token Name
|
|
102
114
|
end
|
|
103
115
|
end
|
|
104
116
|
|
|
105
117
|
rule %r([+*/<>=~!@#%^&|?^-]), Operator
|
|
106
|
-
rule /[;:()\[\],.]/, Punctuation
|
|
118
|
+
rule /[;:{}()\[\],.]/, Punctuation
|
|
107
119
|
end
|
|
108
120
|
|
|
109
121
|
state :multiline_comments do
|
|
110
|
-
rule %r(/[*]),
|
|
111
|
-
rule %r([*]/),
|
|
112
|
-
rule %r([^/*]+),
|
|
113
|
-
rule %r([/*]),
|
|
122
|
+
rule %r(/[*]), Literal::String::Regex, :multiline_comments
|
|
123
|
+
rule %r([*]/), Literal::String::Regex, :pop!
|
|
124
|
+
rule %r([^/*]+), Literal::String::Regex
|
|
125
|
+
rule %r([/*]), Literal::String::Regex
|
|
114
126
|
end
|
|
115
127
|
|
|
116
128
|
state :backtick do
|