rouge_ecl 0.0.1
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 +7 -0
- data/Gemfile +26 -0
- data/LICENSE +186 -0
- data/bin/rougify +17 -0
- data/lib/rouge.rb +82 -0
- data/lib/rouge/cli.rb +429 -0
- data/lib/rouge/demos/abap +6 -0
- data/lib/rouge/demos/actionscript +4 -0
- data/lib/rouge/demos/apache +21 -0
- data/lib/rouge/demos/apiblueprint +33 -0
- data/lib/rouge/demos/applescript +2 -0
- data/lib/rouge/demos/awk +4 -0
- data/lib/rouge/demos/biml +38 -0
- data/lib/rouge/demos/bsl +7 -0
- data/lib/rouge/demos/c +8 -0
- data/lib/rouge/demos/ceylon +7 -0
- data/lib/rouge/demos/cfscript +18 -0
- data/lib/rouge/demos/clojure +5 -0
- data/lib/rouge/demos/cmake +7 -0
- data/lib/rouge/demos/coffeescript +5 -0
- data/lib/rouge/demos/common_lisp +1 -0
- data/lib/rouge/demos/conf +4 -0
- data/lib/rouge/demos/console +6 -0
- data/lib/rouge/demos/coq +13 -0
- data/lib/rouge/demos/cpp +8 -0
- data/lib/rouge/demos/csharp +5 -0
- data/lib/rouge/demos/css +4 -0
- data/lib/rouge/demos/d +16 -0
- data/lib/rouge/demos/dart +6 -0
- data/lib/rouge/demos/diff +7 -0
- data/lib/rouge/demos/digdag +19 -0
- data/lib/rouge/demos/docker +9 -0
- data/lib/rouge/demos/dot +5 -0
- data/lib/rouge/demos/ecl +1 -0
- data/lib/rouge/demos/eiffel +30 -0
- data/lib/rouge/demos/elixir +1 -0
- data/lib/rouge/demos/elm +4 -0
- data/lib/rouge/demos/erb +1 -0
- data/lib/rouge/demos/erlang +7 -0
- data/lib/rouge/demos/factor +5 -0
- data/lib/rouge/demos/fortran +22 -0
- data/lib/rouge/demos/fsharp +12 -0
- data/lib/rouge/demos/gherkin +17 -0
- data/lib/rouge/demos/glsl +14 -0
- data/lib/rouge/demos/go +7 -0
- data/lib/rouge/demos/gradle +10 -0
- data/lib/rouge/demos/graphql +17 -0
- data/lib/rouge/demos/groovy +9 -0
- data/lib/rouge/demos/hack +5 -0
- data/lib/rouge/demos/haml +5 -0
- data/lib/rouge/demos/handlebars +7 -0
- data/lib/rouge/demos/haskell +6 -0
- data/lib/rouge/demos/html +8 -0
- data/lib/rouge/demos/http +14 -0
- data/lib/rouge/demos/hylang +10 -0
- data/lib/rouge/demos/idlang +8 -0
- data/lib/rouge/demos/igorpro +9 -0
- data/lib/rouge/demos/ini +4 -0
- data/lib/rouge/demos/io +11 -0
- data/lib/rouge/demos/irb +4 -0
- data/lib/rouge/demos/irb_output +2 -0
- data/lib/rouge/demos/java +5 -0
- data/lib/rouge/demos/javascript +1 -0
- data/lib/rouge/demos/jinja +9 -0
- data/lib/rouge/demos/json +1 -0
- data/lib/rouge/demos/json-doc +1 -0
- data/lib/rouge/demos/jsonnet +28 -0
- data/lib/rouge/demos/jsx +17 -0
- data/lib/rouge/demos/julia +11 -0
- data/lib/rouge/demos/kotlin +3 -0
- data/lib/rouge/demos/lasso +12 -0
- data/lib/rouge/demos/liquid +11 -0
- data/lib/rouge/demos/literate_coffeescript +3 -0
- data/lib/rouge/demos/literate_haskell +7 -0
- data/lib/rouge/demos/llvm +20 -0
- data/lib/rouge/demos/lua +12 -0
- data/lib/rouge/demos/make +6 -0
- data/lib/rouge/demos/markdown +4 -0
- data/lib/rouge/demos/matlab +6 -0
- data/lib/rouge/demos/moonscript +16 -0
- data/lib/rouge/demos/mosel +10 -0
- data/lib/rouge/demos/mxml +22 -0
- data/lib/rouge/demos/nasm +26 -0
- data/lib/rouge/demos/nginx +5 -0
- data/lib/rouge/demos/nim +27 -0
- data/lib/rouge/demos/nix +19 -0
- data/lib/rouge/demos/objective_c +18 -0
- data/lib/rouge/demos/ocaml +12 -0
- data/lib/rouge/demos/pascal +14 -0
- data/lib/rouge/demos/perl +5 -0
- data/lib/rouge/demos/php +3 -0
- data/lib/rouge/demos/plaintext +1 -0
- data/lib/rouge/demos/plist +142 -0
- data/lib/rouge/demos/pony +17 -0
- data/lib/rouge/demos/powershell +49 -0
- data/lib/rouge/demos/praat +26 -0
- data/lib/rouge/demos/prolog +9 -0
- data/lib/rouge/demos/prometheus +9 -0
- data/lib/rouge/demos/properties +7 -0
- data/lib/rouge/demos/protobuf +5 -0
- data/lib/rouge/demos/puppet +6 -0
- data/lib/rouge/demos/python +6 -0
- data/lib/rouge/demos/q +2 -0
- data/lib/rouge/demos/qml +9 -0
- data/lib/rouge/demos/r +8 -0
- data/lib/rouge/demos/racket +24 -0
- data/lib/rouge/demos/ruby +9 -0
- data/lib/rouge/demos/rust +12 -0
- data/lib/rouge/demos/sass +3 -0
- data/lib/rouge/demos/scala +3 -0
- data/lib/rouge/demos/scheme +4 -0
- data/lib/rouge/demos/scss +5 -0
- data/lib/rouge/demos/sed +4 -0
- data/lib/rouge/demos/shell +2 -0
- data/lib/rouge/demos/sieve +10 -0
- data/lib/rouge/demos/slim +17 -0
- data/lib/rouge/demos/smalltalk +6 -0
- data/lib/rouge/demos/smarty +12 -0
- data/lib/rouge/demos/sml +4 -0
- data/lib/rouge/demos/sql +1 -0
- data/lib/rouge/demos/swift +5 -0
- data/lib/rouge/demos/tap +5 -0
- data/lib/rouge/demos/tcl +1 -0
- data/lib/rouge/demos/tex +1 -0
- data/lib/rouge/demos/toml +9 -0
- data/lib/rouge/demos/tsx +17 -0
- data/lib/rouge/demos/tulip +13 -0
- data/lib/rouge/demos/turtle +26 -0
- data/lib/rouge/demos/twig +9 -0
- data/lib/rouge/demos/typescript +1 -0
- data/lib/rouge/demos/vala +8 -0
- data/lib/rouge/demos/vb +4 -0
- data/lib/rouge/demos/verilog +27 -0
- data/lib/rouge/demos/vhdl +23 -0
- data/lib/rouge/demos/viml +14 -0
- data/lib/rouge/demos/vue +11 -0
- data/lib/rouge/demos/wollok +11 -0
- data/lib/rouge/demos/xml +2 -0
- data/lib/rouge/demos/yaml +4 -0
- data/lib/rouge/formatter.rb +75 -0
- data/lib/rouge/formatters/html.rb +37 -0
- data/lib/rouge/formatters/html_inline.rb +30 -0
- data/lib/rouge/formatters/html_legacy.rb +44 -0
- data/lib/rouge/formatters/html_linewise.rb +27 -0
- data/lib/rouge/formatters/html_pygments.rb +16 -0
- data/lib/rouge/formatters/html_table.rb +61 -0
- data/lib/rouge/formatters/null.rb +19 -0
- data/lib/rouge/formatters/terminal256.rb +180 -0
- data/lib/rouge/guesser.rb +55 -0
- data/lib/rouge/guessers/disambiguation.rb +101 -0
- data/lib/rouge/guessers/filename.rb +25 -0
- data/lib/rouge/guessers/glob_mapping.rb +43 -0
- data/lib/rouge/guessers/mimetype.rb +14 -0
- data/lib/rouge/guessers/modeline.rb +44 -0
- data/lib/rouge/guessers/source.rb +29 -0
- data/lib/rouge/guessers/util.rb +32 -0
- data/lib/rouge/lexer.rb +461 -0
- data/lib/rouge/lexers/abap.rb +238 -0
- data/lib/rouge/lexers/actionscript.rb +195 -0
- data/lib/rouge/lexers/apache.rb +71 -0
- data/lib/rouge/lexers/apache/keywords.yml +764 -0
- data/lib/rouge/lexers/apiblueprint.rb +47 -0
- data/lib/rouge/lexers/apple_script.rb +367 -0
- data/lib/rouge/lexers/awk.rb +161 -0
- data/lib/rouge/lexers/biml.rb +41 -0
- data/lib/rouge/lexers/bsl.rb +81 -0
- data/lib/rouge/lexers/c.rb +212 -0
- data/lib/rouge/lexers/ceylon.rb +123 -0
- data/lib/rouge/lexers/cfscript.rb +153 -0
- data/lib/rouge/lexers/clojure.rb +112 -0
- data/lib/rouge/lexers/cmake.rb +206 -0
- data/lib/rouge/lexers/coffeescript.rb +174 -0
- data/lib/rouge/lexers/common_lisp.rb +345 -0
- data/lib/rouge/lexers/conf.rb +24 -0
- data/lib/rouge/lexers/console.rb +136 -0
- data/lib/rouge/lexers/coq.rb +187 -0
- data/lib/rouge/lexers/cpp.rb +78 -0
- data/lib/rouge/lexers/csharp.rb +114 -0
- data/lib/rouge/lexers/css.rb +273 -0
- data/lib/rouge/lexers/d.rb +176 -0
- data/lib/rouge/lexers/dart.rb +104 -0
- data/lib/rouge/lexers/diff.rb +31 -0
- data/lib/rouge/lexers/digdag.rb +68 -0
- data/lib/rouge/lexers/docker.rb +50 -0
- data/lib/rouge/lexers/dot.rb +68 -0
- data/lib/rouge/lexers/ecl.rb +138 -0
- data/lib/rouge/lexers/eiffel.rb +65 -0
- data/lib/rouge/lexers/elixir.rb +133 -0
- data/lib/rouge/lexers/elm.rb +89 -0
- data/lib/rouge/lexers/erb.rb +52 -0
- data/lib/rouge/lexers/erlang.rb +114 -0
- data/lib/rouge/lexers/factor.rb +302 -0
- data/lib/rouge/lexers/fortran.rb +176 -0
- data/lib/rouge/lexers/fsharp.rb +118 -0
- data/lib/rouge/lexers/gherkin.rb +137 -0
- data/lib/rouge/lexers/gherkin/keywords.rb +14 -0
- data/lib/rouge/lexers/glsl.rb +135 -0
- data/lib/rouge/lexers/go.rb +174 -0
- data/lib/rouge/lexers/gradle.rb +37 -0
- data/lib/rouge/lexers/graphql.rb +243 -0
- data/lib/rouge/lexers/groovy.rb +112 -0
- data/lib/rouge/lexers/hack.rb +48 -0
- data/lib/rouge/lexers/haml.rb +229 -0
- data/lib/rouge/lexers/handlebars.rb +79 -0
- data/lib/rouge/lexers/haskell.rb +182 -0
- data/lib/rouge/lexers/html.rb +139 -0
- data/lib/rouge/lexers/http.rb +80 -0
- data/lib/rouge/lexers/hylang.rb +93 -0
- data/lib/rouge/lexers/idlang.rb +310 -0
- data/lib/rouge/lexers/igorpro.rb +408 -0
- data/lib/rouge/lexers/ini.rb +53 -0
- data/lib/rouge/lexers/io.rb +68 -0
- data/lib/rouge/lexers/irb.rb +66 -0
- data/lib/rouge/lexers/java.rb +87 -0
- data/lib/rouge/lexers/javascript.rb +281 -0
- data/lib/rouge/lexers/jinja.rb +137 -0
- data/lib/rouge/lexers/json.rb +29 -0
- data/lib/rouge/lexers/json_doc.rb +23 -0
- data/lib/rouge/lexers/jsonnet.rb +151 -0
- data/lib/rouge/lexers/jsx.rb +102 -0
- data/lib/rouge/lexers/julia.rb +172 -0
- data/lib/rouge/lexers/kotlin.rb +79 -0
- data/lib/rouge/lexers/lasso.rb +214 -0
- data/lib/rouge/lexers/lasso/keywords.yml +446 -0
- data/lib/rouge/lexers/liquid.rb +287 -0
- data/lib/rouge/lexers/literate_coffeescript.rb +33 -0
- data/lib/rouge/lexers/literate_haskell.rb +36 -0
- data/lib/rouge/lexers/llvm.rb +80 -0
- data/lib/rouge/lexers/lua.rb +125 -0
- data/lib/rouge/lexers/lua/builtins.rb +22 -0
- data/lib/rouge/lexers/make.rb +112 -0
- data/lib/rouge/lexers/markdown.rb +154 -0
- data/lib/rouge/lexers/matlab.rb +71 -0
- data/lib/rouge/lexers/matlab/builtins.rb +11 -0
- data/lib/rouge/lexers/moonscript.rb +114 -0
- data/lib/rouge/lexers/mosel.rb +231 -0
- data/lib/rouge/lexers/mxml.rb +68 -0
- data/lib/rouge/lexers/nasm.rb +198 -0
- data/lib/rouge/lexers/nginx.rb +71 -0
- data/lib/rouge/lexers/nim.rb +152 -0
- data/lib/rouge/lexers/nix.rb +205 -0
- data/lib/rouge/lexers/objective_c.rb +194 -0
- data/lib/rouge/lexers/ocaml.rb +100 -0
- data/lib/rouge/lexers/pascal.rb +66 -0
- data/lib/rouge/lexers/perl.rb +196 -0
- data/lib/rouge/lexers/php.rb +193 -0
- data/lib/rouge/lexers/php/builtins.rb +194 -0
- data/lib/rouge/lexers/plain_text.rb +26 -0
- data/lib/rouge/lexers/plist.rb +45 -0
- data/lib/rouge/lexers/pony.rb +93 -0
- data/lib/rouge/lexers/powershell.rb +678 -0
- data/lib/rouge/lexers/praat.rb +350 -0
- data/lib/rouge/lexers/prolog.rb +59 -0
- data/lib/rouge/lexers/prometheus.rb +121 -0
- data/lib/rouge/lexers/properties.rb +51 -0
- data/lib/rouge/lexers/protobuf.rb +70 -0
- data/lib/rouge/lexers/puppet.rb +128 -0
- data/lib/rouge/lexers/python.rb +232 -0
- data/lib/rouge/lexers/q.rb +123 -0
- data/lib/rouge/lexers/qml.rb +73 -0
- data/lib/rouge/lexers/r.rb +89 -0
- data/lib/rouge/lexers/racket.rb +543 -0
- data/lib/rouge/lexers/ruby.rb +437 -0
- data/lib/rouge/lexers/rust.rb +192 -0
- data/lib/rouge/lexers/sass.rb +74 -0
- data/lib/rouge/lexers/sass/common.rb +180 -0
- data/lib/rouge/lexers/scala.rb +142 -0
- data/lib/rouge/lexers/scheme.rb +112 -0
- data/lib/rouge/lexers/scss.rb +34 -0
- data/lib/rouge/lexers/sed.rb +172 -0
- data/lib/rouge/lexers/shell.rb +189 -0
- data/lib/rouge/lexers/sieve.rb +96 -0
- data/lib/rouge/lexers/slim.rb +228 -0
- data/lib/rouge/lexers/smalltalk.rb +116 -0
- data/lib/rouge/lexers/smarty.rb +80 -0
- data/lib/rouge/lexers/sml.rb +344 -0
- data/lib/rouge/lexers/sql.rb +140 -0
- data/lib/rouge/lexers/swift.rb +181 -0
- data/lib/rouge/lexers/tap.rb +87 -0
- data/lib/rouge/lexers/tcl.rb +192 -0
- data/lib/rouge/lexers/tex.rb +69 -0
- data/lib/rouge/lexers/toml.rb +67 -0
- data/lib/rouge/lexers/tsx.rb +19 -0
- data/lib/rouge/lexers/tulip.rb +106 -0
- data/lib/rouge/lexers/turtle.rb +63 -0
- data/lib/rouge/lexers/twig.rb +39 -0
- data/lib/rouge/lexers/typescript.rb +22 -0
- data/lib/rouge/lexers/typescript/common.rb +33 -0
- data/lib/rouge/lexers/vala.rb +77 -0
- data/lib/rouge/lexers/vb.rb +164 -0
- data/lib/rouge/lexers/verilog.rb +164 -0
- data/lib/rouge/lexers/vhdl.rb +97 -0
- data/lib/rouge/lexers/viml.rb +101 -0
- data/lib/rouge/lexers/viml/keywords.rb +12 -0
- data/lib/rouge/lexers/vue.rb +122 -0
- data/lib/rouge/lexers/wollok.rb +103 -0
- data/lib/rouge/lexers/xml.rb +57 -0
- data/lib/rouge/lexers/yaml.rb +373 -0
- data/lib/rouge/plugins/redcarpet.rb +30 -0
- data/lib/rouge/regex_lexer.rb +441 -0
- data/lib/rouge/template_lexer.rb +20 -0
- data/lib/rouge/text_analyzer.rb +49 -0
- data/lib/rouge/theme.rb +213 -0
- data/lib/rouge/themes/base16.rb +130 -0
- data/lib/rouge/themes/colorful.rb +67 -0
- data/lib/rouge/themes/github.rb +71 -0
- data/lib/rouge/themes/gruvbox.rb +167 -0
- data/lib/rouge/themes/igor_pro.rb +20 -0
- data/lib/rouge/themes/molokai.rb +82 -0
- data/lib/rouge/themes/monokai.rb +92 -0
- data/lib/rouge/themes/monokai_sublime.rb +90 -0
- data/lib/rouge/themes/pastie.rb +69 -0
- data/lib/rouge/themes/thankful_eyes.rb +74 -0
- data/lib/rouge/themes/tulip.rb +69 -0
- data/lib/rouge/token.rb +182 -0
- data/lib/rouge/util.rb +101 -0
- data/lib/rouge/version.rb +7 -0
- data/rouge.gemspec +23 -0
- metadata +365 -0
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
|
|
3
|
+
module Rouge
|
|
4
|
+
module Lexers
|
|
5
|
+
# A lexer for the Slim tempalte language
|
|
6
|
+
# @see http://slim-lang.org
|
|
7
|
+
class Slim < RegexLexer
|
|
8
|
+
include Indentation
|
|
9
|
+
|
|
10
|
+
title "Slim"
|
|
11
|
+
desc 'The Slim template language'
|
|
12
|
+
|
|
13
|
+
tag 'slim'
|
|
14
|
+
|
|
15
|
+
filenames '*.slim'
|
|
16
|
+
|
|
17
|
+
# Ruby identifier characters
|
|
18
|
+
ruby_chars = /[\w\!\?\@\$]/
|
|
19
|
+
|
|
20
|
+
# Since you are allowed to wrap lines with a backslash, include \\\n in characters
|
|
21
|
+
dot = /(\\\n|.)/
|
|
22
|
+
|
|
23
|
+
def ruby
|
|
24
|
+
@ruby ||= Ruby.new(options)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def html
|
|
28
|
+
@html ||= HTML.new(options)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def filters
|
|
32
|
+
@filters ||= {
|
|
33
|
+
'ruby' => ruby,
|
|
34
|
+
'erb' => ERB.new(options),
|
|
35
|
+
'javascript' => Javascript.new(options),
|
|
36
|
+
'css' => CSS.new(options),
|
|
37
|
+
'coffee' => Coffeescript.new(options),
|
|
38
|
+
'markdown' => Markdown.new(options),
|
|
39
|
+
'scss' => Scss.new(options),
|
|
40
|
+
'sass' => Sass.new(options)
|
|
41
|
+
}
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
start { ruby.reset!; html.reset! }
|
|
45
|
+
|
|
46
|
+
state :root do
|
|
47
|
+
rule /\s*\n/, Text
|
|
48
|
+
rule(/\s*/) { |m| token Text; indentation(m[0]) }
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
state :content do
|
|
52
|
+
mixin :css
|
|
53
|
+
|
|
54
|
+
rule /\/#{dot}*/, Comment, :indented_block
|
|
55
|
+
|
|
56
|
+
rule /(doctype)(\s+)(.*)/ do
|
|
57
|
+
groups Name::Namespace, Text::Whitespace, Text
|
|
58
|
+
pop!
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# filters, shamelessly ripped from HAML
|
|
62
|
+
rule /(\w*):\s*\n/ do |m|
|
|
63
|
+
token Name::Decorator
|
|
64
|
+
pop!
|
|
65
|
+
starts_block :filter_block
|
|
66
|
+
|
|
67
|
+
filter_name = m[1].strip
|
|
68
|
+
|
|
69
|
+
@filter_lexer = self.filters[filter_name]
|
|
70
|
+
@filter_lexer.reset! unless @filter_lexer.nil?
|
|
71
|
+
|
|
72
|
+
puts " slim: filter #{filter_name.inspect} #{@filter_lexer.inspect}" if @debug
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Text
|
|
76
|
+
rule %r([\|'](?=\s)) do
|
|
77
|
+
token Punctuation
|
|
78
|
+
pop!
|
|
79
|
+
starts_block :plain_block
|
|
80
|
+
goto :plain_block
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
rule /-|==|=/, Punctuation, :ruby_line
|
|
84
|
+
|
|
85
|
+
# Dynamic tags
|
|
86
|
+
rule /(\*)(#{ruby_chars}+\(.*?\))/ do |m|
|
|
87
|
+
token Punctuation, m[1]
|
|
88
|
+
delegate ruby, m[2]
|
|
89
|
+
push :tag
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
rule /(\*)(#{ruby_chars}+)/ do |m|
|
|
93
|
+
token Punctuation, m[1]
|
|
94
|
+
delegate ruby, m[2]
|
|
95
|
+
push :tag
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
#rule /<\w+(?=.*>)/, Keyword::Constant, :tag # Maybe do this, look ahead and stuff
|
|
99
|
+
rule %r((</?[\w\s\=\'\"]+?/?>)) do |m| # Dirty html
|
|
100
|
+
delegate html, m[1]
|
|
101
|
+
pop!
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# Ordinary slim tags
|
|
105
|
+
rule /\w+/, Name::Tag, :tag
|
|
106
|
+
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
state :tag do
|
|
110
|
+
mixin :css
|
|
111
|
+
mixin :indented_block
|
|
112
|
+
mixin :interpolation
|
|
113
|
+
|
|
114
|
+
# Whitespace control
|
|
115
|
+
rule /[<>]/, Punctuation
|
|
116
|
+
|
|
117
|
+
# Trim whitespace
|
|
118
|
+
rule /\s+?/, Text::Whitespace
|
|
119
|
+
|
|
120
|
+
# Splats, these two might be mergable?
|
|
121
|
+
rule /(\*)(#{ruby_chars}+)/ do |m|
|
|
122
|
+
token Punctuation, m[1]
|
|
123
|
+
delegate ruby, m[2]
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
rule /(\*)(\{#{dot}+?\})/ do |m|
|
|
127
|
+
token Punctuation, m[1]
|
|
128
|
+
delegate ruby, m[2]
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
# Attributes
|
|
132
|
+
rule /([\w\-]+)(\s*)(\=)/ do |m|
|
|
133
|
+
token Name::Attribute, m[1]
|
|
134
|
+
token Text::Whitespace, m[2]
|
|
135
|
+
token Punctuation, m[3]
|
|
136
|
+
push :html_attr
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# Ruby value
|
|
140
|
+
rule /(\=)(#{dot}+)/ do |m|
|
|
141
|
+
token Punctuation, m[1]
|
|
142
|
+
#token Keyword::Constant, m[2]
|
|
143
|
+
delegate ruby, m[2]
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
# HTML Entities
|
|
147
|
+
rule(/&\S*?;/, Name::Entity)
|
|
148
|
+
|
|
149
|
+
rule /#{dot}+?/, Text
|
|
150
|
+
|
|
151
|
+
rule /\s*\n/, Text::Whitespace, :pop!
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
state :css do
|
|
155
|
+
rule(/\.[\w-]*/) { token Name::Class; goto :tag }
|
|
156
|
+
rule(/#[a-zA-Z][\w:-]*/) { token Name::Function; goto :tag }
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
state :html_attr do
|
|
160
|
+
# Strings, double/single quoted
|
|
161
|
+
rule(/\s*(['"])#{dot}*?\1/, Literal::String, :pop!)
|
|
162
|
+
|
|
163
|
+
# Ruby stuff
|
|
164
|
+
rule(/(#{ruby_chars}+\(.*?\))/) { |m| delegate ruby, m[1]; pop! }
|
|
165
|
+
rule(/(#{ruby_chars}+)/) { |m| delegate ruby, m[1]; pop! }
|
|
166
|
+
|
|
167
|
+
rule /\s+/, Text::Whitespace
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
state :ruby_line do
|
|
171
|
+
# Need at top
|
|
172
|
+
mixin :indented_block
|
|
173
|
+
|
|
174
|
+
rule(/,\s*\n/) { delegate ruby }
|
|
175
|
+
rule /[ ]\|[ \t]*\n/, Str::Escape
|
|
176
|
+
rule(/.*?(?=(,$| \|)?[ \t]*$)/) { delegate ruby }
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
state :filter_block do
|
|
180
|
+
rule /([^#\n]|#[^{\n]|(\\\\)*\\#\{)+/ do
|
|
181
|
+
if @filter_lexer
|
|
182
|
+
delegate @filter_lexer
|
|
183
|
+
else
|
|
184
|
+
token Name::Decorator
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
mixin :interpolation
|
|
189
|
+
mixin :indented_block
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
state :plain_block do
|
|
193
|
+
mixin :interpolation
|
|
194
|
+
|
|
195
|
+
rule %r((</?[\w\s\=\'\"]+?/?>)) do |m| # Dirty html
|
|
196
|
+
delegate html, m[1]
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
# HTML Entities
|
|
200
|
+
rule(/&\S*?;/, Name::Entity)
|
|
201
|
+
|
|
202
|
+
#rule /([^#\n]|#[^{\n]|(\\\\)*\\#\{)+/ do
|
|
203
|
+
rule /#{dot}+?/, Text
|
|
204
|
+
|
|
205
|
+
mixin :indented_block
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
state :interpolation do
|
|
209
|
+
rule /#[{]/, Str::Interpol, :ruby_interp
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
state :ruby_interp do
|
|
213
|
+
rule /[}]/, Str::Interpol, :pop!
|
|
214
|
+
mixin :ruby_interp_inner
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
state :ruby_interp_inner do
|
|
218
|
+
rule(/[{]/) { delegate ruby; push :ruby_interp_inner }
|
|
219
|
+
rule(/[}]/) { delegate ruby; pop! }
|
|
220
|
+
rule(/[^{}]+/) { delegate ruby }
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
state :indented_block do
|
|
224
|
+
rule(/(?<!\\)\n/) { token Text; reset_stack }
|
|
225
|
+
end
|
|
226
|
+
end
|
|
227
|
+
end
|
|
228
|
+
end
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
|
|
3
|
+
module Rouge
|
|
4
|
+
module Lexers
|
|
5
|
+
class Smalltalk < RegexLexer
|
|
6
|
+
title "Smalltalk"
|
|
7
|
+
desc 'The Smalltalk programming language'
|
|
8
|
+
|
|
9
|
+
tag 'smalltalk'
|
|
10
|
+
aliases 'st', 'squeak'
|
|
11
|
+
filenames '*.st'
|
|
12
|
+
mimetypes 'text/x-smalltalk'
|
|
13
|
+
|
|
14
|
+
ops = %r([-+*/\\~<>=|&!?,@%])
|
|
15
|
+
|
|
16
|
+
state :root do
|
|
17
|
+
rule /(<)(\w+:)(.*?)(>)/ do
|
|
18
|
+
groups Punctuation, Keyword, Text, Punctuation
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# mixin :squeak_fileout
|
|
22
|
+
mixin :whitespaces
|
|
23
|
+
mixin :method_definition
|
|
24
|
+
rule /([|])([\w\s]*)([|])/ do
|
|
25
|
+
groups Punctuation, Name::Variable, Punctuation
|
|
26
|
+
end
|
|
27
|
+
mixin :objects
|
|
28
|
+
rule /\^|:=|_/, Operator
|
|
29
|
+
|
|
30
|
+
rule /[)}\]]/, Punctuation, :after_object
|
|
31
|
+
rule /[({\[!]/, Punctuation
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
state :method_definition do
|
|
35
|
+
rule /([a-z]\w*:)(\s*)(\w+)/i do
|
|
36
|
+
groups Name::Function, Text, Name::Variable
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
rule /^(\s*)(\b[a-z]\w*\b)(\s*)$/i do
|
|
40
|
+
groups Text, Name::Function, Text
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
rule %r(^(\s*)(#{ops}+)(\s*)(\w+)(\s*)$) do
|
|
44
|
+
groups Text, Name::Function, Text, Name::Variable, Text
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
state :block_variables do
|
|
49
|
+
mixin :whitespaces
|
|
50
|
+
rule /(:)(\s*)(\w+)/ do
|
|
51
|
+
groups Operator, Text, Name::Variable
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
rule /[|]/, Punctuation, :pop!
|
|
55
|
+
|
|
56
|
+
rule(//) { pop! }
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
state :literals do
|
|
60
|
+
rule /'(''|.)*?'/m, Str, :after_object
|
|
61
|
+
rule /[$]./, Str::Char, :after_object
|
|
62
|
+
rule /#[(]/, Str::Symbol, :parenth
|
|
63
|
+
rule /(\d+r)?-?\d+(\.\d+)?(e-?\d+)?/,
|
|
64
|
+
Num, :after_object
|
|
65
|
+
rule /#("[^"]*"|#{ops}+|[\w:]+)/,
|
|
66
|
+
Str::Symbol, :after_object
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
state :parenth do
|
|
70
|
+
rule /[)]/ do
|
|
71
|
+
token Str::Symbol
|
|
72
|
+
goto :after_object
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
mixin :inner_parenth
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
state :inner_parenth do
|
|
79
|
+
rule /#[(]/, Str::Symbol, :inner_parenth
|
|
80
|
+
rule /[)]/, Str::Symbol, :pop!
|
|
81
|
+
mixin :whitespaces
|
|
82
|
+
mixin :literals
|
|
83
|
+
rule /(#{ops}|[\w:])+/, Str::Symbol
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
state :whitespaces do
|
|
87
|
+
rule /! !$/, Keyword # squeak chunk delimiter
|
|
88
|
+
rule /\s+/m, Text
|
|
89
|
+
rule /".*?"/m, Comment
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
state :objects do
|
|
93
|
+
rule /\[/, Punctuation, :block_variables
|
|
94
|
+
rule /(self|super|true|false|nil|thisContext)\b/,
|
|
95
|
+
Name::Builtin::Pseudo, :after_object
|
|
96
|
+
rule /[A-Z]\w*(?!:)\b/, Name::Class, :after_object
|
|
97
|
+
rule /[a-z]\w*(?!:)\b/, Name::Variable, :after_object
|
|
98
|
+
mixin :literals
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
state :after_object do
|
|
102
|
+
mixin :whitespaces
|
|
103
|
+
rule /(ifTrue|ifFalse|whileTrue|whileFalse|timesRepeat):/,
|
|
104
|
+
Name::Builtin, :pop!
|
|
105
|
+
rule /new(?!:)\b/, Name::Builtin
|
|
106
|
+
rule /:=|_/, Operator, :pop!
|
|
107
|
+
rule /[a-z]+\w*:/i, Name::Function, :pop!
|
|
108
|
+
rule /[a-z]+\w*/i, Name::Function
|
|
109
|
+
rule /#{ops}+/, Name::Function, :pop!
|
|
110
|
+
rule /[.]/, Punctuation, :pop!
|
|
111
|
+
rule /;/, Punctuation
|
|
112
|
+
rule(//) { pop! }
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
|
|
3
|
+
module Rouge
|
|
4
|
+
module Lexers
|
|
5
|
+
class Smarty < TemplateLexer
|
|
6
|
+
title "Smarty"
|
|
7
|
+
desc 'Smarty Template Engine'
|
|
8
|
+
tag 'smarty'
|
|
9
|
+
aliases 'smarty'
|
|
10
|
+
filenames '*.tpl', '*.smarty'
|
|
11
|
+
mimetypes 'application/x-smarty', 'text/x-smarty'
|
|
12
|
+
|
|
13
|
+
def self.builtins
|
|
14
|
+
@builtins ||= %w(
|
|
15
|
+
append assign block call capture config_load debug extends
|
|
16
|
+
for foreach foreachelse break continue function if elseif
|
|
17
|
+
else include include_php insert ldelim rdelim literal nocache
|
|
18
|
+
php section sectionelse setfilter strip while
|
|
19
|
+
counter cycle eval fetch html_checkboxes html_image html_options
|
|
20
|
+
html_radios html_select_date html_select_time html_table
|
|
21
|
+
mailto math textformat
|
|
22
|
+
capitalize cat count_characters count_paragraphs
|
|
23
|
+
count_sentences count_words date_format default escape
|
|
24
|
+
from_charset indent lower nl2br regex_replace replace spacify
|
|
25
|
+
string_format strip strip_tags to_charset truncate unescape
|
|
26
|
+
upper wordwrap
|
|
27
|
+
)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
state :root do
|
|
32
|
+
rule(/\{\s+/) { delegate parent }
|
|
33
|
+
|
|
34
|
+
# block comments
|
|
35
|
+
rule /\{\*.*?\*\}/m, Comment
|
|
36
|
+
|
|
37
|
+
rule /\{\/?(?![\s*])/ do
|
|
38
|
+
token Keyword
|
|
39
|
+
push :smarty
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
rule(/.*?(?={[\/a-zA-Z0-9$#*"'])|.*/m) { delegate parent }
|
|
44
|
+
rule(/.+/m) { delegate parent }
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
state :comment do
|
|
48
|
+
rule(/{\*/) { token Comment; push }
|
|
49
|
+
rule(/\*}/) { token Comment; pop! }
|
|
50
|
+
rule(/[^{}]+/m) { token Comment }
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
state :smarty do
|
|
54
|
+
# allow nested tags
|
|
55
|
+
rule /\{\/?(?![\s*])/ do
|
|
56
|
+
token Keyword
|
|
57
|
+
push :smarty
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
rule /}/, Keyword, :pop!
|
|
61
|
+
rule /\s+/m, Text
|
|
62
|
+
rule %r([~!%^&*()+=|\[\]:;,.<>/@?-]), Operator
|
|
63
|
+
rule /#[a-zA-Z_]\w*#/, Name::Variable
|
|
64
|
+
rule /\$[a-zA-Z_]\w*(\.\w+)*/, Name::Variable
|
|
65
|
+
rule /(true|false|null)\b/, Keyword::Constant
|
|
66
|
+
rule /[0-9](\.[0-9]*)?(eE[+-][0-9])?[flFLdD]?|0[xX][0-9a-fA-F]+[Ll]?/, Num
|
|
67
|
+
rule /"(\\.|.)*?"/, Str::Double
|
|
68
|
+
rule /'(\\.|.)*?'/, Str::Single
|
|
69
|
+
rule /([a-zA-Z_]\w*)/ do |m|
|
|
70
|
+
if self.class.builtins.include? m[0]
|
|
71
|
+
token Name::Builtin
|
|
72
|
+
else
|
|
73
|
+
token Name::Attribute
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
|
|
3
|
+
module Rouge
|
|
4
|
+
module Lexers
|
|
5
|
+
class SML < RegexLexer
|
|
6
|
+
title "SML"
|
|
7
|
+
desc 'Standard ML'
|
|
8
|
+
tag 'sml'
|
|
9
|
+
aliases 'ml'
|
|
10
|
+
filenames '*.sml', '*.sig', '*.fun'
|
|
11
|
+
|
|
12
|
+
mimetypes 'text/x-standardml', 'application/x-standardml'
|
|
13
|
+
|
|
14
|
+
def self.keywords
|
|
15
|
+
@keywords ||= Set.new %w(
|
|
16
|
+
abstype and andalso as case datatype do else end exception
|
|
17
|
+
fn fun handle if in infix infixr let local nonfix of op open
|
|
18
|
+
orelse raise rec then type val with withtype while
|
|
19
|
+
eqtype functor include sharing sig signature struct structure
|
|
20
|
+
where
|
|
21
|
+
)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def self.symbolic_reserved
|
|
25
|
+
@symbolic_reserved ||= Set.new %w(: | = => -> # :>)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
id = /[\w']+/i
|
|
29
|
+
symbol = %r([!%&$#/:<=>?@\\~`^|*+-]+)
|
|
30
|
+
|
|
31
|
+
state :whitespace do
|
|
32
|
+
rule /\s+/m, Text
|
|
33
|
+
rule /[(][*]/, Comment, :comment
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
state :delimiters do
|
|
37
|
+
rule /[(\[{]/, Punctuation, :main
|
|
38
|
+
rule /[)\]}]/, Punctuation, :pop!
|
|
39
|
+
|
|
40
|
+
rule /\b(let|if|local)\b(?!')/ do
|
|
41
|
+
token Keyword::Reserved
|
|
42
|
+
push; push
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
rule /\b(struct|sig|while)\b(?!')/ do
|
|
46
|
+
token Keyword::Reserved
|
|
47
|
+
push
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
rule /\b(do|else|end|in|then)\b(?!')/, Keyword::Reserved, :pop!
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def token_for_id_with_dot(id)
|
|
54
|
+
if self.class.keywords.include? id
|
|
55
|
+
Error
|
|
56
|
+
else
|
|
57
|
+
Name::Namespace
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def token_for_final_id(id)
|
|
62
|
+
if self.class.keywords.include? id or self.class.symbolic_reserved.include? id
|
|
63
|
+
Error
|
|
64
|
+
else
|
|
65
|
+
Name
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def token_for_id(id)
|
|
70
|
+
if self.class.keywords.include? id
|
|
71
|
+
Keyword::Reserved
|
|
72
|
+
elsif self.class.symbolic_reserved.include? id
|
|
73
|
+
Punctuation
|
|
74
|
+
else
|
|
75
|
+
Name
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
state :core do
|
|
80
|
+
rule /[()\[\]{},;_]|[.][.][.]/, Punctuation
|
|
81
|
+
rule /#"/, Str::Char, :char
|
|
82
|
+
rule /"/, Str::Double, :string
|
|
83
|
+
rule /~?0x[0-9a-fA-F]+/, Num::Hex
|
|
84
|
+
rule /0wx[0-9a-fA-F]+/, Num::Hex
|
|
85
|
+
rule /0w\d+/, Num::Integer
|
|
86
|
+
rule /~?\d+([.]\d+)?[eE]~?\d+/, Num::Float
|
|
87
|
+
rule /~?\d+[.]\d+/, Num::Float
|
|
88
|
+
rule /~?\d+/, Num::Integer
|
|
89
|
+
|
|
90
|
+
rule /#\s*[1-9][0-9]*/, Name::Label
|
|
91
|
+
rule /#\s*#{id}/, Name::Label
|
|
92
|
+
rule /#\s+#{symbol}/, Name::Label
|
|
93
|
+
|
|
94
|
+
rule /\b(datatype|abstype)\b(?!')/, Keyword::Reserved, :dname
|
|
95
|
+
rule(/(?=\bexception\b(?!'))/) { push :ename }
|
|
96
|
+
rule /\b(functor|include|open|signature|structure)\b(?!')/,
|
|
97
|
+
Keyword::Reserved, :sname
|
|
98
|
+
rule /\b(type|eqtype)\b(?!')/, Keyword::Reserved, :tname
|
|
99
|
+
|
|
100
|
+
rule /'#{id}/, Name::Decorator
|
|
101
|
+
rule /(#{id})([.])/ do |m|
|
|
102
|
+
groups(token_for_id_with_dot(m[1]), Punctuation)
|
|
103
|
+
push :dotted
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
rule id do |m|
|
|
107
|
+
token token_for_id(m[0])
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
rule symbol do |m|
|
|
111
|
+
token token_for_id(m[0])
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
state :dotted do
|
|
116
|
+
rule /(#{id})([.])/ do |m|
|
|
117
|
+
groups(token_for_id_with_dot(m[1]), Punctuation)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
rule id do |m|
|
|
121
|
+
token token_for_id(m[0])
|
|
122
|
+
pop!
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
rule symbol do |m|
|
|
126
|
+
token token_for_id(m[0])
|
|
127
|
+
pop!
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
state :root do
|
|
132
|
+
rule /#!.*?\n/, Comment::Preproc
|
|
133
|
+
rule(//) { push :main }
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
state :main do
|
|
137
|
+
mixin :whitespace
|
|
138
|
+
|
|
139
|
+
rule /\b(val|and)\b(?!')/, Keyword::Reserved, :vname
|
|
140
|
+
rule /\b(fun)\b(?!')/ do
|
|
141
|
+
token Keyword::Reserved
|
|
142
|
+
goto :main_fun
|
|
143
|
+
push :fname
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
mixin :delimiters
|
|
147
|
+
mixin :core
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
state :main_fun do
|
|
151
|
+
mixin :whitespace
|
|
152
|
+
rule /\b(fun|and)\b(?!')/, Keyword::Reserved, :fname
|
|
153
|
+
rule /\bval\b(?!')/ do
|
|
154
|
+
token Keyword::Reserved
|
|
155
|
+
goto :main
|
|
156
|
+
push :vname
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
rule /[|]/, Punctuation, :fname
|
|
160
|
+
rule /\b(case|handle)\b(?!')/ do
|
|
161
|
+
token Keyword::Reserved
|
|
162
|
+
goto :main
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
mixin :delimiters
|
|
166
|
+
mixin :core
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
state :has_escapes do
|
|
170
|
+
rule /\\[\\"abtnvfr]/, Str::Escape
|
|
171
|
+
rule /\\\^[\x40-\x5e]/, Str::Escape
|
|
172
|
+
rule /\\[0-9]{3}/, Str::Escape
|
|
173
|
+
rule /\\u\h{4}/, Str::Escape
|
|
174
|
+
rule /\\\s+\\/, Str::Interpol
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
state :string do
|
|
178
|
+
rule /[^"\\]+/, Str::Double
|
|
179
|
+
rule /"/, Str::Double, :pop!
|
|
180
|
+
mixin :has_escapes
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
state :char do
|
|
184
|
+
rule /[^"\\]+/, Str::Char
|
|
185
|
+
rule /"/, Str::Char, :pop!
|
|
186
|
+
mixin :has_escapes
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
state :breakout do
|
|
190
|
+
rule /(?=\b(#{SML.keywords.to_a.join('|')})\b(?!'))/ do
|
|
191
|
+
pop!
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
state :sname do
|
|
196
|
+
mixin :whitespace
|
|
197
|
+
mixin :breakout
|
|
198
|
+
rule id, Name::Namespace
|
|
199
|
+
rule(//) { pop! }
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
state :has_annotations do
|
|
203
|
+
rule /'[\w']*/, Name::Decorator
|
|
204
|
+
rule /[(]/, Punctuation, :tyvarseq
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
state :fname do
|
|
208
|
+
mixin :whitespace
|
|
209
|
+
mixin :has_annotations
|
|
210
|
+
|
|
211
|
+
rule id, Name::Function, :pop!
|
|
212
|
+
rule symbol, Name::Function, :pop!
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
state :vname do
|
|
216
|
+
mixin :whitespace
|
|
217
|
+
mixin :has_annotations
|
|
218
|
+
|
|
219
|
+
rule /(#{id})(\s*)(=(?!#{symbol}))/m do
|
|
220
|
+
groups Name::Variable, Text, Punctuation
|
|
221
|
+
pop!
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
rule /(#{symbol})(\s*)(=(?!#{symbol}))/m do
|
|
225
|
+
groups Name::Variable, Text, Punctuation
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
rule id, Name::Variable, :pop!
|
|
229
|
+
rule symbol, Name::Variable, :pop!
|
|
230
|
+
|
|
231
|
+
rule(//) { pop! }
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
state :tname do
|
|
235
|
+
mixin :whitespace
|
|
236
|
+
mixin :breakout
|
|
237
|
+
mixin :has_annotations
|
|
238
|
+
|
|
239
|
+
rule /'[\w']*/, Name::Decorator
|
|
240
|
+
rule /[(]/, Punctuation, :tyvarseq
|
|
241
|
+
|
|
242
|
+
rule %r(=(?!#{symbol})) do
|
|
243
|
+
token Punctuation
|
|
244
|
+
goto :typbind
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
rule id, Keyword::Type
|
|
248
|
+
rule symbol, Keyword::Type
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
state :typbind do
|
|
252
|
+
mixin :whitespace
|
|
253
|
+
|
|
254
|
+
rule /\b(and)\b(?!')/ do
|
|
255
|
+
token Keyword::Reserved
|
|
256
|
+
goto :tname
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
mixin :breakout
|
|
260
|
+
mixin :core
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
state :dname do
|
|
264
|
+
mixin :whitespace
|
|
265
|
+
mixin :breakout
|
|
266
|
+
mixin :has_annotations
|
|
267
|
+
|
|
268
|
+
rule /(=)(\s*)(datatype)\b/ do
|
|
269
|
+
groups Punctuation, Text, Keyword::Reserved
|
|
270
|
+
pop!
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
rule %r(=(?!#{symbol})) do
|
|
274
|
+
token Punctuation
|
|
275
|
+
goto :datbind
|
|
276
|
+
push :datcon
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
rule id, Keyword::Type
|
|
280
|
+
rule symbol, Keyword::Type
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
state :datbind do
|
|
284
|
+
mixin :whitespace
|
|
285
|
+
rule /\b(and)\b(?!')/ do
|
|
286
|
+
token Keyword::Reserved; goto :dname
|
|
287
|
+
end
|
|
288
|
+
rule /\b(withtype)\b(?!')/ do
|
|
289
|
+
token Keyword::Reserved; goto :tname
|
|
290
|
+
end
|
|
291
|
+
rule /\bof\b(?!')/, Keyword::Reserved
|
|
292
|
+
rule /([|])(\s*)(#{id})/ do
|
|
293
|
+
groups(Punctuation, Text, Name::Class)
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
rule /([|])(\s+)(#{symbol})/ do
|
|
297
|
+
groups(Punctuation, Text, Name::Class)
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
mixin :breakout
|
|
301
|
+
mixin :core
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
state :ename do
|
|
305
|
+
mixin :whitespace
|
|
306
|
+
rule /(exception|and)(\s+)(#{id})/ do
|
|
307
|
+
groups Keyword::Reserved, Text, Name::Class
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
rule /(exception|and)(\s*)(#{symbol})/ do
|
|
311
|
+
groups Keyword::Reserved, Text, Name::Class
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
rule /\b(of)\b(?!')/, Keyword::Reserved
|
|
315
|
+
mixin :breakout
|
|
316
|
+
mixin :core
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
state :datcon do
|
|
320
|
+
mixin :whitespace
|
|
321
|
+
rule id, Name::Class, :pop!
|
|
322
|
+
rule symbol, Name::Class, :pop!
|
|
323
|
+
end
|
|
324
|
+
|
|
325
|
+
state :tyvarseq do
|
|
326
|
+
mixin :whitespace
|
|
327
|
+
rule /'[\w']*/, Name::Decorator
|
|
328
|
+
rule id, Name
|
|
329
|
+
rule /,/, Punctuation
|
|
330
|
+
rule /[)]/, Punctuation, :pop!
|
|
331
|
+
rule symbol, Name
|
|
332
|
+
end
|
|
333
|
+
|
|
334
|
+
state :comment do
|
|
335
|
+
rule /[^(*)]+/, Comment::Multiline
|
|
336
|
+
rule /[(][*]/ do
|
|
337
|
+
token Comment::Multiline; push
|
|
338
|
+
end
|
|
339
|
+
rule /[*][)]/, Comment::Multiline, :pop!
|
|
340
|
+
rule /[(*)]/, Comment::Multiline
|
|
341
|
+
end
|
|
342
|
+
end
|
|
343
|
+
end
|
|
344
|
+
end
|