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
data/lib/rouge/lexers/turtle.rb
CHANGED
|
@@ -12,21 +12,29 @@ module Rouge
|
|
|
12
12
|
application/trig
|
|
13
13
|
)
|
|
14
14
|
|
|
15
|
+
def self.analyze_text(text)
|
|
16
|
+
start = text[0..1000]
|
|
17
|
+
return 0.5 if start =~ %r(@prefix\b)
|
|
18
|
+
return 0.5 if start =~ %r(@base\b)
|
|
19
|
+
return 0.4 if start =~ %r(PREFIX\b)i
|
|
20
|
+
return 0.4 if start =~ %r(BASE\b)i
|
|
21
|
+
end
|
|
22
|
+
|
|
15
23
|
state :root do
|
|
16
24
|
rule /@base\b/, Keyword::Declaration
|
|
17
25
|
rule /@prefix\b/, Keyword::Declaration
|
|
18
26
|
rule /true\b/, Keyword::Constant
|
|
19
27
|
rule /false\b/, Keyword::Constant
|
|
20
|
-
|
|
28
|
+
|
|
21
29
|
rule /""".*?"""/m, Literal::String
|
|
22
30
|
rule /"([^"\\]|\\.)*"/, Literal::String
|
|
23
31
|
rule /'''.*?'''/m, Literal::String
|
|
24
32
|
rule /'([^'\\]|\\.)*'/, Literal::String
|
|
25
|
-
|
|
33
|
+
|
|
26
34
|
rule /#.*$/, Comment::Single
|
|
27
|
-
|
|
35
|
+
|
|
28
36
|
rule /@[^\s,.; ]+/, Name::Attribute
|
|
29
|
-
|
|
37
|
+
|
|
30
38
|
rule /[+-]?[0-9]+\.[0-9]*E[+-]?[0-9]+/, Literal::Number::Float
|
|
31
39
|
rule /[+-]?\.[0-9]+E[+-]?[0-9]+/, Literal::Number::Float
|
|
32
40
|
rule /[+-]?[0-9]+E[+-]?[0-9]+/, Literal::Number::Float
|
|
@@ -45,7 +53,7 @@ module Rouge
|
|
|
45
53
|
rule /\[/, Punctuation
|
|
46
54
|
rule /\]/, Punctuation
|
|
47
55
|
rule /\^\^/, Punctuation
|
|
48
|
-
|
|
56
|
+
|
|
49
57
|
rule /<[^>]*>/, Name::Label
|
|
50
58
|
|
|
51
59
|
rule /base\b/i, Keyword::Declaration
|
|
@@ -57,6 +65,7 @@ module Rouge
|
|
|
57
65
|
|
|
58
66
|
rule /[^:;<>#\@"\(\).\[\]\{\} ]+:/, Name::Namespace
|
|
59
67
|
rule /[^:;<>#\@"\(\).\[\]\{\} ]+/, Name
|
|
68
|
+
|
|
60
69
|
end
|
|
61
70
|
end
|
|
62
71
|
end
|
data/lib/rouge/lexers/vue.rb
CHANGED
|
@@ -15,16 +15,18 @@ module Rouge
|
|
|
15
15
|
@js = Javascript.new(options)
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
+
def self.analyze_text(text)
|
|
19
|
+
return 0
|
|
20
|
+
end
|
|
21
|
+
|
|
18
22
|
def lookup_lang(lang)
|
|
19
|
-
lang.downcase!
|
|
20
|
-
lang = lang.gsub(/["']*/, '')
|
|
21
23
|
case lang
|
|
22
24
|
when 'html' then HTML
|
|
23
25
|
when 'css' then CSS
|
|
24
26
|
when 'javascript' then Javascript
|
|
25
27
|
when 'sass' then Sass
|
|
26
28
|
when 'scss' then Scss
|
|
27
|
-
when 'coffee' then
|
|
29
|
+
when 'coffee' then CoffeeScript
|
|
28
30
|
# TODO: add more when the lexers are done
|
|
29
31
|
else
|
|
30
32
|
PlainText
|
|
@@ -79,7 +81,7 @@ module Rouge
|
|
|
79
81
|
state :lang_tag do
|
|
80
82
|
rule /(lang\s*=)(\s*)("(?:\\.|[^\\])*?"|'(\\.|[^\\])*?'|[^\s>]+)/ do |m|
|
|
81
83
|
groups Name::Attribute, Text, Str
|
|
82
|
-
@lang = lookup_lang(m[
|
|
84
|
+
@lang = lookup_lang(m[2])
|
|
83
85
|
end
|
|
84
86
|
|
|
85
87
|
mixin :tag
|
data/lib/rouge/lexers/wollok.rb
CHANGED
data/lib/rouge/lexers/xml.rb
CHANGED
|
@@ -15,10 +15,12 @@ module Rouge
|
|
|
15
15
|
application/atom+xml
|
|
16
16
|
)
|
|
17
17
|
|
|
18
|
-
def self.
|
|
19
|
-
return
|
|
20
|
-
return
|
|
21
|
-
|
|
18
|
+
def self.analyze_text(text)
|
|
19
|
+
return 0.9 if text.doctype?
|
|
20
|
+
return 0.8 if text =~ /\A<\?xml\b/
|
|
21
|
+
start = text[0..1000]
|
|
22
|
+
return 0.6 if start =~ %r(<xml\b)
|
|
23
|
+
return 0.3 if start =~ %r(<.+?>.*?</.+?>)m
|
|
22
24
|
end
|
|
23
25
|
|
|
24
26
|
state :root do
|
data/lib/rouge/lexers/yaml.rb
CHANGED
|
@@ -10,9 +10,9 @@ module Rouge
|
|
|
10
10
|
aliases 'yml'
|
|
11
11
|
filenames '*.yaml', '*.yml'
|
|
12
12
|
|
|
13
|
-
def self.
|
|
13
|
+
def self.analyze_text(text)
|
|
14
14
|
# look for the %YAML directive
|
|
15
|
-
return
|
|
15
|
+
return 1 if text =~ /\A\s*%YAML/m
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
SPECIAL_VALUES = Regexp.union(%w(true false null))
|
data/lib/rouge/version.rb
CHANGED
data/rouge.gemspec
CHANGED
|
@@ -2,7 +2,7 @@ require './lib/rouge/version'
|
|
|
2
2
|
|
|
3
3
|
Gem::Specification.new do |s|
|
|
4
4
|
s.name = "rouge_ecl"
|
|
5
|
-
s.version = "0.0
|
|
5
|
+
s.version = "1.0.0"
|
|
6
6
|
s.authors = ["Jeanine Adkisson"]
|
|
7
7
|
s.email = ["jneen@jneen.net"]
|
|
8
8
|
s.summary = "A pure-ruby colorizer based on pygments"
|
|
@@ -15,9 +15,4 @@ Gem::Specification.new do |s|
|
|
|
15
15
|
s.files = Dir['Gemfile', 'LICENSE', 'rouge.gemspec', 'lib/**/*.rb', 'lib/**/*.yml', 'bin/rougify', 'lib/rouge/demos/*']
|
|
16
16
|
s.executables = %w(rougify)
|
|
17
17
|
s.licenses = ['MIT', 'BSD-2-Clause']
|
|
18
|
-
s.required_ruby_version = '>= 2.0'
|
|
19
|
-
s.metadata = {
|
|
20
|
-
'source_code_uri' => 'https://github.com/jneen/rouge',
|
|
21
|
-
'changelog_uri' => 'https://github.com/jneen/rouge/blob/master/CHANGELOG.md'
|
|
22
|
-
}
|
|
23
18
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rouge_ecl
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0
|
|
4
|
+
version: 1.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jeanine Adkisson
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2018-04-
|
|
11
|
+
date: 2018-04-11 00:00:00.000000000 Z
|
|
12
12
|
dependencies: []
|
|
13
13
|
description: Rouge aims to a be a simple, easy-to-extend drop-in replacement for pygments.
|
|
14
14
|
email:
|
|
@@ -50,10 +50,8 @@ files:
|
|
|
50
50
|
- lib/rouge/demos/digdag
|
|
51
51
|
- lib/rouge/demos/docker
|
|
52
52
|
- lib/rouge/demos/dot
|
|
53
|
-
- lib/rouge/demos/ecl
|
|
54
53
|
- lib/rouge/demos/eiffel
|
|
55
54
|
- lib/rouge/demos/elixir
|
|
56
|
-
- lib/rouge/demos/elm
|
|
57
55
|
- lib/rouge/demos/erb
|
|
58
56
|
- lib/rouge/demos/erlang
|
|
59
57
|
- lib/rouge/demos/factor
|
|
@@ -65,7 +63,6 @@ files:
|
|
|
65
63
|
- lib/rouge/demos/gradle
|
|
66
64
|
- lib/rouge/demos/graphql
|
|
67
65
|
- lib/rouge/demos/groovy
|
|
68
|
-
- lib/rouge/demos/hack
|
|
69
66
|
- lib/rouge/demos/haml
|
|
70
67
|
- lib/rouge/demos/handlebars
|
|
71
68
|
- lib/rouge/demos/haskell
|
|
@@ -166,13 +163,11 @@ files:
|
|
|
166
163
|
- lib/rouge/formatters/null.rb
|
|
167
164
|
- lib/rouge/formatters/terminal256.rb
|
|
168
165
|
- lib/rouge/guesser.rb
|
|
169
|
-
- lib/rouge/guessers/disambiguation.rb
|
|
170
166
|
- lib/rouge/guessers/filename.rb
|
|
171
167
|
- lib/rouge/guessers/glob_mapping.rb
|
|
172
168
|
- lib/rouge/guessers/mimetype.rb
|
|
173
169
|
- lib/rouge/guessers/modeline.rb
|
|
174
170
|
- lib/rouge/guessers/source.rb
|
|
175
|
-
- lib/rouge/guessers/util.rb
|
|
176
171
|
- lib/rouge/lexer.rb
|
|
177
172
|
- lib/rouge/lexers/abap.rb
|
|
178
173
|
- lib/rouge/lexers/actionscript.rb
|
|
@@ -205,7 +200,6 @@ files:
|
|
|
205
200
|
- lib/rouge/lexers/ecl.rb
|
|
206
201
|
- lib/rouge/lexers/eiffel.rb
|
|
207
202
|
- lib/rouge/lexers/elixir.rb
|
|
208
|
-
- lib/rouge/lexers/elm.rb
|
|
209
203
|
- lib/rouge/lexers/erb.rb
|
|
210
204
|
- lib/rouge/lexers/erlang.rb
|
|
211
205
|
- lib/rouge/lexers/factor.rb
|
|
@@ -218,7 +212,6 @@ files:
|
|
|
218
212
|
- lib/rouge/lexers/gradle.rb
|
|
219
213
|
- lib/rouge/lexers/graphql.rb
|
|
220
214
|
- lib/rouge/lexers/groovy.rb
|
|
221
|
-
- lib/rouge/lexers/hack.rb
|
|
222
215
|
- lib/rouge/lexers/haml.rb
|
|
223
216
|
- lib/rouge/lexers/handlebars.rb
|
|
224
217
|
- lib/rouge/lexers/haskell.rb
|
|
@@ -339,9 +332,7 @@ homepage: http://rouge.jneen.net/
|
|
|
339
332
|
licenses:
|
|
340
333
|
- MIT
|
|
341
334
|
- BSD-2-Clause
|
|
342
|
-
metadata:
|
|
343
|
-
source_code_uri: https://github.com/jneen/rouge
|
|
344
|
-
changelog_uri: https://github.com/jneen/rouge/blob/master/CHANGELOG.md
|
|
335
|
+
metadata: {}
|
|
345
336
|
post_install_message:
|
|
346
337
|
rdoc_options: []
|
|
347
338
|
require_paths:
|
|
@@ -350,7 +341,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
350
341
|
requirements:
|
|
351
342
|
- - ">="
|
|
352
343
|
- !ruby/object:Gem::Version
|
|
353
|
-
version: '
|
|
344
|
+
version: '0'
|
|
354
345
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
355
346
|
requirements:
|
|
356
347
|
- - ">="
|
data/lib/rouge/demos/ecl
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
OUTPUT('Hello, world!');
|
data/lib/rouge/demos/elm
DELETED
data/lib/rouge/demos/hack
DELETED
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
module Rouge
|
|
2
|
-
module Guessers
|
|
3
|
-
class Disambiguation < Guesser
|
|
4
|
-
include Util
|
|
5
|
-
include Lexers
|
|
6
|
-
|
|
7
|
-
def initialize(filename, source)
|
|
8
|
-
@filename = File.basename(filename)
|
|
9
|
-
@source = source
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def filter(lexers)
|
|
13
|
-
return lexers if lexers.size == 1
|
|
14
|
-
return lexers if lexers.size == Lexer.all.size
|
|
15
|
-
|
|
16
|
-
@analyzer = TextAnalyzer.new(get_source(@source))
|
|
17
|
-
|
|
18
|
-
self.class.disambiguators.each do |disambiguator|
|
|
19
|
-
next unless disambiguator.match?(@filename)
|
|
20
|
-
|
|
21
|
-
filtered = disambiguator.decide!(self)
|
|
22
|
-
return filtered if filtered
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
return lexers
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def contains?(text)
|
|
29
|
-
return @analyzer.include?(text)
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def matches?(re)
|
|
33
|
-
return !!(@analyzer =~ re)
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
@disambiguators = []
|
|
37
|
-
def self.disambiguate(*patterns, &decider)
|
|
38
|
-
@disambiguators << Disambiguator.new(patterns, &decider)
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def self.disambiguators
|
|
42
|
-
@disambiguators
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
class Disambiguator
|
|
46
|
-
include Util
|
|
47
|
-
|
|
48
|
-
def initialize(patterns, &decider)
|
|
49
|
-
@patterns = patterns
|
|
50
|
-
@decider = decider
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def decide!(guesser)
|
|
54
|
-
out = guesser.instance_eval(&@decider)
|
|
55
|
-
case out
|
|
56
|
-
when Array then out
|
|
57
|
-
when nil then nil
|
|
58
|
-
else [out]
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
def match?(filename)
|
|
63
|
-
@patterns.any? { |p| test_glob(p, filename) }
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
disambiguate '*.pl' do
|
|
68
|
-
next Perl if contains?('my $')
|
|
69
|
-
next Prolog if contains?(':-')
|
|
70
|
-
next Prolog if matches?(/\A\w+(\(\w+\,\s*\w+\))*\./)
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
disambiguate '*.h' do
|
|
74
|
-
next ObjectiveC if matches?(/@(end|implementation|protocol|property)\b/)
|
|
75
|
-
next ObjectiveC if contains?('@"')
|
|
76
|
-
|
|
77
|
-
C
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
disambiguate '*.m' do
|
|
81
|
-
next ObjectiveC if matches?(/@(end|implementation|protocol|property)\b/)
|
|
82
|
-
next ObjectiveC if contains?('@"')
|
|
83
|
-
|
|
84
|
-
next Matlab if matches?(/^\s*?%/)
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
disambiguate '*.php' do
|
|
88
|
-
# PHP always takes precedence over Hack
|
|
89
|
-
PHP
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
disambiguate '*.hh' do
|
|
93
|
-
next Cpp if matches?(/^\s*#include/)
|
|
94
|
-
next Hack if matches?(/^<\?hh/)
|
|
95
|
-
next Hack if matches?(/(\(|, ?)\$\$/)
|
|
96
|
-
|
|
97
|
-
Cpp
|
|
98
|
-
end
|
|
99
|
-
end
|
|
100
|
-
end
|
|
101
|
-
end
|
data/lib/rouge/guessers/util.rb
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
module Rouge
|
|
2
|
-
module Guessers
|
|
3
|
-
module Util
|
|
4
|
-
module SourceNormalizer
|
|
5
|
-
UTF8_BOM = "\xEF\xBB\xBF"
|
|
6
|
-
UTF8_BOM_RE = /\A#{UTF8_BOM}/
|
|
7
|
-
|
|
8
|
-
# @param [String,nil] source
|
|
9
|
-
# @return [String,nil]
|
|
10
|
-
def self.normalize(source)
|
|
11
|
-
source.sub(UTF8_BOM_RE, '').gsub(/\r\n/, "\n")
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def test_glob(pattern, path)
|
|
16
|
-
File.fnmatch?(pattern, path, File::FNM_DOTMATCH | File::FNM_CASEFOLD)
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
# @param [String,IO] source
|
|
20
|
-
# @return [String]
|
|
21
|
-
def get_source(source)
|
|
22
|
-
if source.respond_to?(:to_str)
|
|
23
|
-
SourceNormalizer.normalize(source.to_str)
|
|
24
|
-
elsif source.respond_to?(:read)
|
|
25
|
-
SourceNormalizer.normalize(source.read)
|
|
26
|
-
else
|
|
27
|
-
raise ArgumentError, "Invalid source: #{source.inspect}"
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
data/lib/rouge/lexers/elm.rb
DELETED
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*- #
|
|
2
|
-
|
|
3
|
-
module Rouge
|
|
4
|
-
module Lexers
|
|
5
|
-
class Elm < RegexLexer
|
|
6
|
-
title "Elm"
|
|
7
|
-
desc "The Elm programming language (http://elm-lang.org/)"
|
|
8
|
-
|
|
9
|
-
tag 'elm'
|
|
10
|
-
filenames '*.elm'
|
|
11
|
-
mimetypes 'text/x-elm'
|
|
12
|
-
|
|
13
|
-
# Keywords are logically grouped by lines
|
|
14
|
-
keywords = %w(
|
|
15
|
-
module exposing port
|
|
16
|
-
import as
|
|
17
|
-
type alias
|
|
18
|
-
if then else
|
|
19
|
-
case of
|
|
20
|
-
let in
|
|
21
|
-
)
|
|
22
|
-
|
|
23
|
-
state :root do
|
|
24
|
-
# Whitespaces
|
|
25
|
-
rule /\s+/m, Text
|
|
26
|
-
# Single line comments
|
|
27
|
-
rule /--.*/, Comment::Single
|
|
28
|
-
# Multiline comments
|
|
29
|
-
rule /{-/, Comment::Multiline, :multiline_comment
|
|
30
|
-
|
|
31
|
-
# Keywords
|
|
32
|
-
rule /\b(#{keywords.join('|')})\b/, Keyword
|
|
33
|
-
|
|
34
|
-
# Variable or a function
|
|
35
|
-
rule /[a-z][\w]*/, Name
|
|
36
|
-
# Underscore is a name for a variable, when it won't be used later
|
|
37
|
-
rule /_/, Name
|
|
38
|
-
# Type
|
|
39
|
-
rule /[A-Z][\w]*/, Keyword::Type
|
|
40
|
-
|
|
41
|
-
# Two symbol operators: -> :: // .. && || ++ |> <| << >> == /= <= >=
|
|
42
|
-
rule /(->|::|\/\/|\.\.|&&|\|\||\+\+|\|>|<\||>>|<<|==|\/=|<=|>=)/, Operator
|
|
43
|
-
# One symbol operators: + - / * % = < > ^ | !
|
|
44
|
-
rule /[+-\/*%=<>^\|!]/, Operator
|
|
45
|
-
# Lambda operator
|
|
46
|
-
rule /\\/, Operator
|
|
47
|
-
# Not standard Elm operators, but these symbols can be used for custom inflix operators. We need to highlight them as operators as well.
|
|
48
|
-
rule /[@\#$&~?]/, Operator
|
|
49
|
-
|
|
50
|
-
# Single, double quotes, and triple double quotes
|
|
51
|
-
rule /"""/, Str, :multiline_string
|
|
52
|
-
rule /'(\\.|.)'/, Str::Char
|
|
53
|
-
rule /"/, Str, :double_quote
|
|
54
|
-
|
|
55
|
-
# Numbers
|
|
56
|
-
rule /0x[\da-f]+/i, Num::Hex
|
|
57
|
-
rule /\d+e[+-]?\d+/i, Num::Float
|
|
58
|
-
rule /\d+\.\d+(e[+-]?\d+)?/i, Num::Float
|
|
59
|
-
rule /\d+/, Num::Integer
|
|
60
|
-
|
|
61
|
-
# Punctuation: [ ] ( ) , ; ` { } :
|
|
62
|
-
rule /[\[\](),;`{}:]/, Punctuation
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
# Multiline and nested commenting
|
|
66
|
-
state :multiline_comment do
|
|
67
|
-
rule /-}/, Comment::Multiline, :pop!
|
|
68
|
-
rule /{-/, Comment::Multiline, :multiline_comment
|
|
69
|
-
rule /[^-{}]+/, Comment::Multiline
|
|
70
|
-
rule /[-{}]/, Comment::Multiline
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
# Double quotes
|
|
74
|
-
state :double_quote do
|
|
75
|
-
rule /[^\\"]+/, Str::Double
|
|
76
|
-
rule /\\"/, Str::Escape
|
|
77
|
-
rule /"/, Str::Double, :pop!
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
# Multiple line string with tripple double quotes, e.g. """ multi """
|
|
81
|
-
state :multiline_string do
|
|
82
|
-
rule /\s*"""/, Str, :pop!
|
|
83
|
-
rule /.*/, Str
|
|
84
|
-
rule /\s*/, Str
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
end
|