rouge-alda 3.3.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 +7 -0
- data/Gemfile +28 -0
- data/LICENSE +186 -0
- data/bin/rougify +18 -0
- data/lib/rouge/cli.rb +432 -0
- data/lib/rouge/demos/abap +6 -0
- data/lib/rouge/demos/actionscript +4 -0
- data/lib/rouge/demos/alda +10 -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/crystal +45 -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/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/hcl +7 -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/jsp +29 -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/m68k +16 -0
- data/lib/rouge/demos/make +6 -0
- data/lib/rouge/demos/markdown +4 -0
- data/lib/rouge/demos/mathematica +8 -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/sqf +14 -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/terraform +31 -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 +76 -0
- data/lib/rouge/formatters/html.rb +38 -0
- data/lib/rouge/formatters/html_inline.rb +31 -0
- data/lib/rouge/formatters/html_legacy.rb +45 -0
- data/lib/rouge/formatters/html_linewise.rb +28 -0
- data/lib/rouge/formatters/html_pygments.rb +18 -0
- data/lib/rouge/formatters/html_table.rb +62 -0
- data/lib/rouge/formatters/null.rb +20 -0
- data/lib/rouge/formatters/terminal256.rb +181 -0
- data/lib/rouge/guesser.rb +57 -0
- data/lib/rouge/guessers/disambiguation.rb +106 -0
- data/lib/rouge/guessers/filename.rb +27 -0
- data/lib/rouge/guessers/glob_mapping.rb +45 -0
- data/lib/rouge/guessers/mimetype.rb +16 -0
- data/lib/rouge/guessers/modeline.rb +46 -0
- data/lib/rouge/guessers/source.rb +31 -0
- data/lib/rouge/guessers/util.rb +34 -0
- data/lib/rouge/lexer.rb +462 -0
- data/lib/rouge/lexers/abap.rb +240 -0
- data/lib/rouge/lexers/actionscript.rb +196 -0
- data/lib/rouge/lexers/alda.rb +43 -0
- data/lib/rouge/lexers/apache/keywords.yml +764 -0
- data/lib/rouge/lexers/apache.rb +73 -0
- data/lib/rouge/lexers/apiblueprint.rb +49 -0
- data/lib/rouge/lexers/apple_script.rb +369 -0
- data/lib/rouge/lexers/awk.rb +162 -0
- data/lib/rouge/lexers/biml.rb +43 -0
- data/lib/rouge/lexers/bsl.rb +82 -0
- data/lib/rouge/lexers/c.rb +213 -0
- data/lib/rouge/lexers/ceylon.rb +124 -0
- data/lib/rouge/lexers/cfscript.rb +154 -0
- data/lib/rouge/lexers/clojure.rb +113 -0
- data/lib/rouge/lexers/cmake.rb +207 -0
- data/lib/rouge/lexers/coffeescript.rb +175 -0
- data/lib/rouge/lexers/common_lisp.rb +346 -0
- data/lib/rouge/lexers/conf.rb +25 -0
- data/lib/rouge/lexers/console.rb +137 -0
- data/lib/rouge/lexers/coq.rb +188 -0
- data/lib/rouge/lexers/cpp.rb +79 -0
- data/lib/rouge/lexers/crystal.rb +430 -0
- data/lib/rouge/lexers/csharp.rb +115 -0
- data/lib/rouge/lexers/css.rb +274 -0
- data/lib/rouge/lexers/d.rb +177 -0
- data/lib/rouge/lexers/dart.rb +105 -0
- data/lib/rouge/lexers/diff.rb +33 -0
- data/lib/rouge/lexers/digdag.rb +70 -0
- data/lib/rouge/lexers/docker.rb +51 -0
- data/lib/rouge/lexers/dot.rb +69 -0
- data/lib/rouge/lexers/eiffel.rb +66 -0
- data/lib/rouge/lexers/elixir.rb +134 -0
- data/lib/rouge/lexers/elm.rb +90 -0
- data/lib/rouge/lexers/erb.rb +53 -0
- data/lib/rouge/lexers/erlang.rb +115 -0
- data/lib/rouge/lexers/factor.rb +303 -0
- data/lib/rouge/lexers/fortran.rb +178 -0
- data/lib/rouge/lexers/fsharp.rb +119 -0
- data/lib/rouge/lexers/gherkin/keywords.rb +16 -0
- data/lib/rouge/lexers/gherkin.rb +138 -0
- data/lib/rouge/lexers/glsl.rb +136 -0
- data/lib/rouge/lexers/go.rb +175 -0
- data/lib/rouge/lexers/gradle.rb +38 -0
- data/lib/rouge/lexers/graphql.rb +254 -0
- data/lib/rouge/lexers/groovy.rb +113 -0
- data/lib/rouge/lexers/hack.rb +49 -0
- data/lib/rouge/lexers/haml.rb +230 -0
- data/lib/rouge/lexers/handlebars.rb +80 -0
- data/lib/rouge/lexers/haskell.rb +198 -0
- data/lib/rouge/lexers/hcl.rb +163 -0
- data/lib/rouge/lexers/html.rb +140 -0
- data/lib/rouge/lexers/http.rb +81 -0
- data/lib/rouge/lexers/hylang.rb +94 -0
- data/lib/rouge/lexers/idlang.rb +312 -0
- data/lib/rouge/lexers/igorpro.rb +664 -0
- data/lib/rouge/lexers/ini.rb +54 -0
- data/lib/rouge/lexers/io.rb +69 -0
- data/lib/rouge/lexers/irb.rb +67 -0
- data/lib/rouge/lexers/java.rb +88 -0
- data/lib/rouge/lexers/javascript.rb +283 -0
- data/lib/rouge/lexers/jinja.rb +138 -0
- data/lib/rouge/lexers/json.rb +30 -0
- data/lib/rouge/lexers/json_doc.rb +24 -0
- data/lib/rouge/lexers/jsonnet.rb +152 -0
- data/lib/rouge/lexers/jsp.rb +120 -0
- data/lib/rouge/lexers/jsx.rb +104 -0
- data/lib/rouge/lexers/julia.rb +167 -0
- data/lib/rouge/lexers/kotlin.rb +127 -0
- data/lib/rouge/lexers/lasso/keywords.yml +446 -0
- data/lib/rouge/lexers/lasso.rb +215 -0
- data/lib/rouge/lexers/liquid.rb +288 -0
- data/lib/rouge/lexers/literate_coffeescript.rb +34 -0
- data/lib/rouge/lexers/literate_haskell.rb +37 -0
- data/lib/rouge/lexers/llvm.rb +81 -0
- data/lib/rouge/lexers/lua/builtins.rb +24 -0
- data/lib/rouge/lexers/lua.rb +126 -0
- data/lib/rouge/lexers/m68k.rb +144 -0
- data/lib/rouge/lexers/make.rb +113 -0
- data/lib/rouge/lexers/markdown.rb +155 -0
- data/lib/rouge/lexers/mathematica/builtins.rb +13 -0
- data/lib/rouge/lexers/mathematica.rb +96 -0
- data/lib/rouge/lexers/matlab/builtins.rb +13 -0
- data/lib/rouge/lexers/matlab.rb +72 -0
- data/lib/rouge/lexers/moonscript.rb +115 -0
- data/lib/rouge/lexers/mosel.rb +232 -0
- data/lib/rouge/lexers/mxml.rb +69 -0
- data/lib/rouge/lexers/nasm.rb +199 -0
- data/lib/rouge/lexers/nginx.rb +72 -0
- data/lib/rouge/lexers/nim.rb +153 -0
- data/lib/rouge/lexers/nix.rb +211 -0
- data/lib/rouge/lexers/objective_c.rb +195 -0
- data/lib/rouge/lexers/ocaml.rb +101 -0
- data/lib/rouge/lexers/pascal.rb +67 -0
- data/lib/rouge/lexers/perl.rb +201 -0
- data/lib/rouge/lexers/php/builtins.rb +196 -0
- data/lib/rouge/lexers/php.rb +194 -0
- data/lib/rouge/lexers/plain_text.rb +27 -0
- data/lib/rouge/lexers/plist.rb +47 -0
- data/lib/rouge/lexers/pony.rb +94 -0
- data/lib/rouge/lexers/powershell.rb +679 -0
- data/lib/rouge/lexers/praat.rb +351 -0
- data/lib/rouge/lexers/prolog.rb +61 -0
- data/lib/rouge/lexers/prometheus.rb +123 -0
- data/lib/rouge/lexers/properties.rb +52 -0
- data/lib/rouge/lexers/protobuf.rb +71 -0
- data/lib/rouge/lexers/puppet.rb +129 -0
- data/lib/rouge/lexers/python.rb +247 -0
- data/lib/rouge/lexers/q.rb +125 -0
- data/lib/rouge/lexers/qml.rb +74 -0
- data/lib/rouge/lexers/r.rb +90 -0
- data/lib/rouge/lexers/racket.rb +545 -0
- data/lib/rouge/lexers/ruby.rb +439 -0
- data/lib/rouge/lexers/rust.rb +198 -0
- data/lib/rouge/lexers/sass/common.rb +181 -0
- data/lib/rouge/lexers/sass.rb +75 -0
- data/lib/rouge/lexers/scala.rb +143 -0
- data/lib/rouge/lexers/scheme.rb +113 -0
- data/lib/rouge/lexers/scss.rb +35 -0
- data/lib/rouge/lexers/sed.rb +173 -0
- data/lib/rouge/lexers/shell.rb +190 -0
- data/lib/rouge/lexers/sieve.rb +97 -0
- data/lib/rouge/lexers/slim.rb +229 -0
- data/lib/rouge/lexers/smalltalk.rb +117 -0
- data/lib/rouge/lexers/smarty.rb +81 -0
- data/lib/rouge/lexers/sml.rb +345 -0
- data/lib/rouge/lexers/sqf/commands.rb +15 -0
- data/lib/rouge/lexers/sqf.rb +109 -0
- data/lib/rouge/lexers/sql.rb +141 -0
- data/lib/rouge/lexers/swift.rb +182 -0
- data/lib/rouge/lexers/tap.rb +89 -0
- data/lib/rouge/lexers/tcl.rb +193 -0
- data/lib/rouge/lexers/terraform.rb +105 -0
- data/lib/rouge/lexers/tex.rb +70 -0
- data/lib/rouge/lexers/toml.rb +68 -0
- data/lib/rouge/lexers/tsx.rb +20 -0
- data/lib/rouge/lexers/tulip.rb +108 -0
- data/lib/rouge/lexers/turtle.rb +64 -0
- data/lib/rouge/lexers/twig.rb +40 -0
- data/lib/rouge/lexers/typescript/common.rb +34 -0
- data/lib/rouge/lexers/typescript.rb +23 -0
- data/lib/rouge/lexers/vala.rb +78 -0
- data/lib/rouge/lexers/vb.rb +165 -0
- data/lib/rouge/lexers/verilog.rb +165 -0
- data/lib/rouge/lexers/vhdl.rb +98 -0
- data/lib/rouge/lexers/viml/keywords.rb +14 -0
- data/lib/rouge/lexers/viml.rb +102 -0
- data/lib/rouge/lexers/vue.rb +124 -0
- data/lib/rouge/lexers/wollok.rb +104 -0
- data/lib/rouge/lexers/xml.rb +58 -0
- data/lib/rouge/lexers/yaml.rb +374 -0
- data/lib/rouge/plugins/redcarpet.rb +31 -0
- data/lib/rouge/regex_lexer.rb +442 -0
- data/lib/rouge/template_lexer.rb +21 -0
- data/lib/rouge/text_analyzer.rb +50 -0
- data/lib/rouge/theme.rb +214 -0
- data/lib/rouge/themes/base16.rb +131 -0
- data/lib/rouge/themes/colorful.rb +68 -0
- data/lib/rouge/themes/github.rb +72 -0
- data/lib/rouge/themes/gruvbox.rb +168 -0
- data/lib/rouge/themes/igor_pro.rb +21 -0
- data/lib/rouge/themes/molokai.rb +83 -0
- data/lib/rouge/themes/monokai.rb +93 -0
- data/lib/rouge/themes/monokai_sublime.rb +92 -0
- data/lib/rouge/themes/pastie.rb +70 -0
- data/lib/rouge/themes/thankful_eyes.rb +75 -0
- data/lib/rouge/themes/tulip.rb +70 -0
- data/lib/rouge/token.rb +183 -0
- data/lib/rouge/util.rb +102 -0
- data/lib/rouge/version.rb +8 -0
- data/lib/rouge.rb +84 -0
- data/rouge.gemspec +25 -0
- metadata +384 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Lexers
|
|
6
|
+
class Docker < RegexLexer
|
|
7
|
+
title "Docker"
|
|
8
|
+
desc "Dockerfile syntax"
|
|
9
|
+
tag 'docker'
|
|
10
|
+
aliases 'dockerfile'
|
|
11
|
+
filenames 'Dockerfile', '*.docker'
|
|
12
|
+
mimetypes 'text/x-dockerfile-config'
|
|
13
|
+
|
|
14
|
+
KEYWORDS = %w(
|
|
15
|
+
FROM MAINTAINER CMD LABEL EXPOSE ENV ADD COPY ENTRYPOINT VOLUME USER WORKDIR ARG STOPSIGNAL HEALTHCHECK SHELL
|
|
16
|
+
).join('|')
|
|
17
|
+
|
|
18
|
+
start { @shell = Shell.new(@options) }
|
|
19
|
+
|
|
20
|
+
state :root do
|
|
21
|
+
rule /\s+/, Text
|
|
22
|
+
|
|
23
|
+
rule /^(ONBUILD)(\s+)(#{KEYWORDS})(.*)/io do |m|
|
|
24
|
+
groups Keyword, Text::Whitespace, Keyword, Str
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
rule /^(#{KEYWORDS})\b(.*)/io do |m|
|
|
28
|
+
groups Keyword, Str
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
rule /#.*?$/, Comment
|
|
32
|
+
|
|
33
|
+
rule /^(ONBUILD\s+)?RUN(\s+)/i do
|
|
34
|
+
token Keyword
|
|
35
|
+
push :run
|
|
36
|
+
@shell.reset!
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
rule /\w+/, Text
|
|
40
|
+
rule /[^\w]+/, Text
|
|
41
|
+
rule /./, Text
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
state :run do
|
|
45
|
+
rule /\n/, Text, :pop!
|
|
46
|
+
rule /\\./m, Str::Escape
|
|
47
|
+
rule(/(\\.|[^\n\\])+/) { delegate @shell }
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Lexers
|
|
6
|
+
class Dot < RegexLexer
|
|
7
|
+
title "DOT"
|
|
8
|
+
desc "graph description language"
|
|
9
|
+
|
|
10
|
+
tag 'dot'
|
|
11
|
+
filenames '*.dot'
|
|
12
|
+
mimetypes 'text/vnd.graphviz'
|
|
13
|
+
|
|
14
|
+
start do
|
|
15
|
+
@html = HTML.new(options)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
state :comments_and_whitespace do
|
|
19
|
+
rule /\s+/, Text
|
|
20
|
+
rule %r(#.*?\n), Comment::Single
|
|
21
|
+
rule %r(//.*?\n), Comment::Single
|
|
22
|
+
rule %r(/(\\\n)?[*].*?[*](\\\n)?/)m, Comment::Multiline
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
state :html do
|
|
26
|
+
rule /[^<>]+/ do
|
|
27
|
+
delegate @html
|
|
28
|
+
end
|
|
29
|
+
rule /<.+?>/m do
|
|
30
|
+
delegate @html
|
|
31
|
+
end
|
|
32
|
+
rule />/, Punctuation, :pop!
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
state :ID do
|
|
36
|
+
rule /([a-zA-Z][a-zA-Z_0-9]*)(\s*)(=)/ do |m|
|
|
37
|
+
token Name, m[1]
|
|
38
|
+
token Text, m[2]
|
|
39
|
+
token Punctuation, m[3]
|
|
40
|
+
end
|
|
41
|
+
rule /[a-zA-Z][a-zA-Z_0-9]*/, Name::Variable
|
|
42
|
+
rule /([0-9]+)?\.[0-9]+/, Num::Float
|
|
43
|
+
rule /[0-9]+/, Num::Integer
|
|
44
|
+
rule /"(\\"|[^"])*"/, Str::Double
|
|
45
|
+
rule /</ do
|
|
46
|
+
token Punctuation
|
|
47
|
+
@html.reset!
|
|
48
|
+
push :html
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
state :a_list do
|
|
53
|
+
mixin :comments_and_whitespace
|
|
54
|
+
mixin :ID
|
|
55
|
+
rule /[=;,]/, Punctuation
|
|
56
|
+
rule /\]/, Operator, :pop!
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
state :root do
|
|
60
|
+
mixin :comments_and_whitespace
|
|
61
|
+
rule /\b(strict|graph|digraph|subgraph|node|edge)\b/i, Keyword
|
|
62
|
+
rule /[{};:=]/, Punctuation
|
|
63
|
+
rule /-[->]/, Operator
|
|
64
|
+
rule /\[/, Operator, :a_list
|
|
65
|
+
mixin :ID
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Lexers
|
|
6
|
+
class Eiffel < RegexLexer
|
|
7
|
+
title "Eiffel"
|
|
8
|
+
desc "Eiffel programming language"
|
|
9
|
+
|
|
10
|
+
tag 'eiffel'
|
|
11
|
+
filenames '*.e'
|
|
12
|
+
mimetypes 'text/x-eiffel'
|
|
13
|
+
|
|
14
|
+
LanguageKeywords = %w(
|
|
15
|
+
across agent alias all and attached as assign attribute check
|
|
16
|
+
class convert create debug deferred detachable do else elseif end
|
|
17
|
+
ensure expanded export external feature from frozen if implies inherit
|
|
18
|
+
inspect invariant like local loop not note obsolete old once or
|
|
19
|
+
Precursor redefine rename require rescue retry select separate
|
|
20
|
+
some then undefine until variant Void when xor
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
BooleanConstants = %w(True False)
|
|
24
|
+
|
|
25
|
+
LanguageVariables = %w(Current Result)
|
|
26
|
+
|
|
27
|
+
SimpleString = /(?:[^"%\b\f\v]|%[A-DFHLNQR-V%'"()<>]|%\/(?:0[xX][\da-fA-F](?:_*[\da-fA-F])*|0[cC][0-7](?:_*[0-7])*|0[bB][01](?:_*[01])*|\d(?:_*\d)*)\/)+?/
|
|
28
|
+
|
|
29
|
+
state :root do
|
|
30
|
+
rule /"\[/, Str::Other, :aligned_verbatim_string
|
|
31
|
+
rule /"\{/, Str::Other, :non_aligned_verbatim_string
|
|
32
|
+
rule /"(?:[^%\b\f\n\r\v]|%[A-DFHLNQR-V%'"()<>]|%\/(?:0[xX][\da-fA-F](?:_*[\da-fA-F])*|0[cC][0-7](?:_*[0-7])*|0[bB][01](?:_*[01])*|\d(?:_*\d)*)\/)*?"/, Str::Double
|
|
33
|
+
rule /--.*/, Comment::Single
|
|
34
|
+
rule /'(?:[^%\b\f\n\r\t\v]|%[A-DFHLNQR-V%'"()<>]|%\/(?:0[xX][\da-fA-F](?:_*[\da-fA-F])*|0[cC][0-7](?:_*[0-7])*|0[bB][01](?:_*[01])*|\d(?:_*\d)*)\/)'/, Str::Char
|
|
35
|
+
|
|
36
|
+
rule /(?:#{LanguageKeywords.join('|')})\b/, Keyword
|
|
37
|
+
rule /(?:#{LanguageVariables.join('|')})\b/, Keyword::Variable
|
|
38
|
+
rule /(?:#{BooleanConstants.join('|')})\b/, Keyword::Constant
|
|
39
|
+
|
|
40
|
+
rule /\b0[xX][\da-fA-F](?:_*[\da-fA-F])*b/, Num::Hex
|
|
41
|
+
rule /\b0[cC][0-7](?:_*[0-7])*\b/, Num::Oct
|
|
42
|
+
rule /\b0[bB][01](?:_*[01])*\b/, Num::Bin
|
|
43
|
+
rule /\d(?:_*\d)*/, Num::Integer
|
|
44
|
+
rule /(?:\d(?:_*\d)*)?\.(?:(?:\d(?:_*\d)*)?[eE][+-]?)?\d(?:_*\d)*|\d(?:_*\d)*\.?/, Num::Float
|
|
45
|
+
|
|
46
|
+
rule /:=|<<|>>|\(\||\|\)|->|\.|[{}\[\];(),:?]/, Punctuation::Indicator
|
|
47
|
+
rule /\\\\|\|\.\.\||\.\.|\/[~\/]?|[><\/]=?|[-+*^=~]/, Operator
|
|
48
|
+
|
|
49
|
+
rule /[A-Z][\dA-Z_]*/, Name::Class
|
|
50
|
+
rule /[A-Za-z][\dA-Za-z_]*/, Name
|
|
51
|
+
rule /\s+/, Text
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
state :aligned_verbatim_string do
|
|
55
|
+
rule /]"/, Str::Other, :pop!
|
|
56
|
+
rule SimpleString, Str::Other
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
state :non_aligned_verbatim_string do
|
|
60
|
+
rule /}"/, Str::Other, :pop!
|
|
61
|
+
rule SimpleString, Str::Other
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Lexers
|
|
6
|
+
# Direct port of pygments Lexer.
|
|
7
|
+
# See: https://bitbucket.org/birkenfeld/pygments-main/src/7304e4759ae65343d89a51359ca538912519cc31/pygments/lexers/functional.py?at=default#cl-2362
|
|
8
|
+
class Elixir < RegexLexer
|
|
9
|
+
title "Elixir"
|
|
10
|
+
desc "Elixir language (elixir-lang.org)"
|
|
11
|
+
|
|
12
|
+
tag 'elixir'
|
|
13
|
+
aliases 'elixir', 'exs'
|
|
14
|
+
|
|
15
|
+
filenames '*.ex', '*.exs'
|
|
16
|
+
|
|
17
|
+
mimetypes 'text/x-elixir', 'application/x-elixir'
|
|
18
|
+
|
|
19
|
+
state :root do
|
|
20
|
+
rule /\s+/m, Text
|
|
21
|
+
rule /#.*$/, Comment::Single
|
|
22
|
+
rule %r{\b(case|cond|end|bc|lc|if|unless|try|loop|receive|fn|defmodule|
|
|
23
|
+
defp?|defprotocol|defimpl|defrecord|defmacrop?|defdelegate|
|
|
24
|
+
defexception|defguardp?|defstruct|exit|raise|throw|after|rescue|catch|else)\b(?![?!])|
|
|
25
|
+
(?<!\.)\b(do|\-\>)\b}x, Keyword
|
|
26
|
+
rule /\b(import|require|use|recur|quote|unquote|super|refer)\b(?![?!])/, Keyword::Namespace
|
|
27
|
+
rule /(?<!\.)\b(and|not|or|when|xor|in)\b/, Operator::Word
|
|
28
|
+
rule %r{%=|\*=|\*\*=|\+=|\-=|\^=|\|\|=|
|
|
29
|
+
<=>|<(?!<|=)|>(?!<|=|>)|<=|>=|===|==|=~|!=|!~|(?=[\s\t])\?|
|
|
30
|
+
(?<=[\s\t])!+|&(&&?|(?!\d))|\|\||\^|\*|\+|\-|/|
|
|
31
|
+
\||\+\+|\-\-|\*\*|\/\/|\<\-|\<\>|<<|>>|=|\.|~~~}x, Operator
|
|
32
|
+
rule %r{(?<!:)(:)([a-zA-Z_]\w*([?!]|=(?![>=]))?|\<\>|===?|>=?|<=?|
|
|
33
|
+
<=>|&&?|%\(\)|%\[\]|%\{\}|\+\+?|\-\-?|\|\|?|\!|//|[%&`/\|]|
|
|
34
|
+
\*\*?|=?~|<\-)|([a-zA-Z_]\w*([?!])?)(:)(?!:)}, Str::Symbol
|
|
35
|
+
rule /:"/, Str::Symbol, :interpoling_symbol
|
|
36
|
+
rule /\b(nil|true|false)\b(?![?!])|\b[A-Z]\w*\b/, Name::Constant
|
|
37
|
+
rule /\b(__(FILE|LINE|MODULE|MAIN|FUNCTION)__)\b(?![?!])/, Name::Builtin::Pseudo
|
|
38
|
+
rule /[a-zA-Z_!][\w_]*[!\?]?/, Name
|
|
39
|
+
rule %r{::|[%(){};,/\|:\\\[\]]}, Punctuation
|
|
40
|
+
rule /@[a-zA-Z_]\w*|&\d/, Name::Variable
|
|
41
|
+
rule %r{\b(0[xX][0-9A-Fa-f]+|\d(_?\d)*(\.(?![^\d\s])
|
|
42
|
+
(_?\d)*)?([eE][-+]?\d(_?\d)*)?|0[bB][01]+)\b}x, Num
|
|
43
|
+
|
|
44
|
+
mixin :strings
|
|
45
|
+
mixin :sigil_strings
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
state :strings do
|
|
49
|
+
rule /(%[A-Ba-z])?"""(?:.|\n)*?"""/, Str::Doc
|
|
50
|
+
rule /'''(?:.|\n)*?'''/, Str::Doc
|
|
51
|
+
rule /"/, Str::Doc, :dqs
|
|
52
|
+
rule /'.*?'/, Str::Single
|
|
53
|
+
rule %r{(?<!\w)\?(\\(x\d{1,2}|\h{1,2}(?!\h)\b|0[0-7]{0,2}(?![0-7])\b[^x0MC])|(\\[MC]-)+\w|[^\s\\])}, Str::Other
|
|
54
|
+
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
state :dqs do
|
|
58
|
+
rule /"/, Str::Double, :pop!
|
|
59
|
+
mixin :enddoublestr
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
state :interpoling do
|
|
63
|
+
rule /#\{/, Str::Interpol, :interpoling_string
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
state :interpoling_string do
|
|
67
|
+
rule /\}/, Str::Interpol, :pop!
|
|
68
|
+
mixin :root
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
state :interpoling_symbol do
|
|
72
|
+
rule /"/, Str::Symbol, :pop!
|
|
73
|
+
mixin :interpoling
|
|
74
|
+
rule /[^#"]+/, Str::Symbol
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
state :enddoublestr do
|
|
78
|
+
mixin :interpoling
|
|
79
|
+
rule /[^#"]+/, Str::Double
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
state :sigil_strings do
|
|
83
|
+
# ~-sigiled strings
|
|
84
|
+
# ~(abc), ~[abc], ~<abc>, ~|abc|, ~r/abc/, etc
|
|
85
|
+
# Cribbed and adjusted from Ruby lexer
|
|
86
|
+
delimiter_map = { '{' => '}', '[' => ']', '(' => ')', '<' => '>' }
|
|
87
|
+
# Match a-z for custom sigils too
|
|
88
|
+
sigil_opens = Regexp.union(delimiter_map.keys + %w(| / ' "))
|
|
89
|
+
rule /~([A-Za-z])?(#{sigil_opens})/ do |m|
|
|
90
|
+
open = Regexp.escape(m[2])
|
|
91
|
+
close = Regexp.escape(delimiter_map[m[2]] || m[2])
|
|
92
|
+
interp = /[SRCW]/ === m[1]
|
|
93
|
+
toktype = Str::Other
|
|
94
|
+
|
|
95
|
+
puts " open: #{open.inspect}" if @debug
|
|
96
|
+
puts " close: #{close.inspect}" if @debug
|
|
97
|
+
|
|
98
|
+
# regexes
|
|
99
|
+
if 'Rr'.include? m[1]
|
|
100
|
+
toktype = Str::Regex
|
|
101
|
+
push :regex_flags
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
if 'Ww'.include? m[1]
|
|
105
|
+
push :list_flags
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
token toktype
|
|
109
|
+
|
|
110
|
+
push do
|
|
111
|
+
rule /#{close}/, toktype, :pop!
|
|
112
|
+
|
|
113
|
+
if interp
|
|
114
|
+
mixin :interpoling
|
|
115
|
+
rule /#/, toktype
|
|
116
|
+
else
|
|
117
|
+
rule /[\\#]/, toktype
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
rule /[^##{open}#{close}\\]+/m, toktype
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
state :regex_flags do
|
|
126
|
+
rule /[fgimrsux]*/, Str::Regex, :pop!
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
state :list_flags do
|
|
130
|
+
rule /[csa]?/, Str::Other, :pop!
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Lexers
|
|
6
|
+
class Elm < RegexLexer
|
|
7
|
+
title "Elm"
|
|
8
|
+
desc "The Elm programming language (http://elm-lang.org/)"
|
|
9
|
+
|
|
10
|
+
tag 'elm'
|
|
11
|
+
filenames '*.elm'
|
|
12
|
+
mimetypes 'text/x-elm'
|
|
13
|
+
|
|
14
|
+
# Keywords are logically grouped by lines
|
|
15
|
+
keywords = %w(
|
|
16
|
+
module exposing port
|
|
17
|
+
import as
|
|
18
|
+
type alias
|
|
19
|
+
if then else
|
|
20
|
+
case of
|
|
21
|
+
let in
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
state :root do
|
|
25
|
+
# Whitespaces
|
|
26
|
+
rule /\s+/m, Text
|
|
27
|
+
# Single line comments
|
|
28
|
+
rule /--.*/, Comment::Single
|
|
29
|
+
# Multiline comments
|
|
30
|
+
rule /{-/, Comment::Multiline, :multiline_comment
|
|
31
|
+
|
|
32
|
+
# Keywords
|
|
33
|
+
rule /\b(#{keywords.join('|')})\b/, Keyword
|
|
34
|
+
|
|
35
|
+
# Variable or a function
|
|
36
|
+
rule /[a-z][\w]*/, Name
|
|
37
|
+
# Underscore is a name for a variable, when it won't be used later
|
|
38
|
+
rule /_/, Name
|
|
39
|
+
# Type
|
|
40
|
+
rule /[A-Z][\w]*/, Keyword::Type
|
|
41
|
+
|
|
42
|
+
# Two symbol operators: -> :: // .. && || ++ |> <| << >> == /= <= >=
|
|
43
|
+
rule /(->|::|\/\/|\.\.|&&|\|\||\+\+|\|>|<\||>>|<<|==|\/=|<=|>=)/, Operator
|
|
44
|
+
# One symbol operators: + - / * % = < > ^ | !
|
|
45
|
+
rule /[+-\/*%=<>^\|!]/, Operator
|
|
46
|
+
# Lambda operator
|
|
47
|
+
rule /\\/, Operator
|
|
48
|
+
# Not standard Elm operators, but these symbols can be used for custom inflix operators. We need to highlight them as operators as well.
|
|
49
|
+
rule /[@\#$&~?]/, Operator
|
|
50
|
+
|
|
51
|
+
# Single, double quotes, and triple double quotes
|
|
52
|
+
rule /"""/, Str, :multiline_string
|
|
53
|
+
rule /'(\\.|.)'/, Str::Char
|
|
54
|
+
rule /"/, Str, :double_quote
|
|
55
|
+
|
|
56
|
+
# Numbers
|
|
57
|
+
rule /0x[\da-f]+/i, Num::Hex
|
|
58
|
+
rule /\d+e[+-]?\d+/i, Num::Float
|
|
59
|
+
rule /\d+\.\d+(e[+-]?\d+)?/i, Num::Float
|
|
60
|
+
rule /\d+/, Num::Integer
|
|
61
|
+
|
|
62
|
+
# Punctuation: [ ] ( ) , ; ` { } :
|
|
63
|
+
rule /[\[\](),;`{}:]/, Punctuation
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Multiline and nested commenting
|
|
67
|
+
state :multiline_comment do
|
|
68
|
+
rule /-}/, Comment::Multiline, :pop!
|
|
69
|
+
rule /{-/, Comment::Multiline, :multiline_comment
|
|
70
|
+
rule /[^-{}]+/, Comment::Multiline
|
|
71
|
+
rule /[-{}]/, Comment::Multiline
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Double quotes
|
|
75
|
+
state :double_quote do
|
|
76
|
+
rule /[^\\"]+/, Str::Double
|
|
77
|
+
rule /\\"/, Str::Escape
|
|
78
|
+
rule /"/, Str::Double, :pop!
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# Multiple line string with tripple double quotes, e.g. """ multi """
|
|
82
|
+
state :multiline_string do
|
|
83
|
+
rule /\s*"""/, Str, :pop!
|
|
84
|
+
rule /.*/, Str
|
|
85
|
+
rule /\s*/, Str
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Lexers
|
|
6
|
+
class ERB < TemplateLexer
|
|
7
|
+
title "ERB"
|
|
8
|
+
desc "Embedded ruby template files"
|
|
9
|
+
|
|
10
|
+
tag 'erb'
|
|
11
|
+
aliases 'eruby', 'rhtml'
|
|
12
|
+
|
|
13
|
+
filenames '*.erb', '*.erubis', '*.rhtml', '*.eruby'
|
|
14
|
+
|
|
15
|
+
def initialize(opts={})
|
|
16
|
+
@ruby_lexer = Ruby.new(opts)
|
|
17
|
+
|
|
18
|
+
super(opts)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
start do
|
|
22
|
+
parent.reset!
|
|
23
|
+
@ruby_lexer.reset!
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
open = /<%%|<%=|<%#|<%-|<%/
|
|
27
|
+
close = /%%>|-%>|%>/
|
|
28
|
+
|
|
29
|
+
state :root do
|
|
30
|
+
rule /<%#/, Comment, :comment
|
|
31
|
+
|
|
32
|
+
rule open, Comment::Preproc, :ruby
|
|
33
|
+
|
|
34
|
+
rule /.+?(?=#{open})|.+/m do
|
|
35
|
+
delegate parent
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
state :comment do
|
|
40
|
+
rule close, Comment, :pop!
|
|
41
|
+
rule /.+?(?=#{close})|.+/m, Comment
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
state :ruby do
|
|
45
|
+
rule close, Comment::Preproc, :pop!
|
|
46
|
+
|
|
47
|
+
rule /.+?(?=#{close})|.+/m do
|
|
48
|
+
delegate @ruby_lexer
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Lexers
|
|
6
|
+
class Erlang < RegexLexer
|
|
7
|
+
title "Erlang"
|
|
8
|
+
desc "The Erlang programming language (erlang.org)"
|
|
9
|
+
tag 'erlang'
|
|
10
|
+
aliases 'erl'
|
|
11
|
+
filenames '*.erl', '*.hrl'
|
|
12
|
+
|
|
13
|
+
mimetypes 'text/x-erlang', 'application/x-erlang'
|
|
14
|
+
|
|
15
|
+
keywords = %w(
|
|
16
|
+
after begin case catch cond end fun if
|
|
17
|
+
let of query receive try when
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
builtins = %w(
|
|
21
|
+
abs append_element apply atom_to_list binary_to_list
|
|
22
|
+
bitstring_to_list binary_to_term bit_size bump_reductions
|
|
23
|
+
byte_size cancel_timer check_process_code delete_module
|
|
24
|
+
demonitor disconnect_node display element erase exit
|
|
25
|
+
float float_to_list fun_info fun_to_list
|
|
26
|
+
function_exported garbage_collect get get_keys
|
|
27
|
+
group_leader hash hd integer_to_list iolist_to_binary
|
|
28
|
+
iolist_size is_atom is_binary is_bitstring is_boolean
|
|
29
|
+
is_builtin is_float is_function is_integer is_list
|
|
30
|
+
is_number is_pid is_port is_process_alive is_record
|
|
31
|
+
is_reference is_tuple length link list_to_atom
|
|
32
|
+
list_to_binary list_to_bitstring list_to_existing_atom
|
|
33
|
+
list_to_float list_to_integer list_to_pid list_to_tuple
|
|
34
|
+
load_module localtime_to_universaltime make_tuple md5
|
|
35
|
+
md5_final md5_update memory module_loaded monitor
|
|
36
|
+
monitor_node node nodes open_port phash phash2
|
|
37
|
+
pid_to_list port_close port_command port_connect
|
|
38
|
+
port_control port_call port_info port_to_list
|
|
39
|
+
process_display process_flag process_info purge_module
|
|
40
|
+
put read_timer ref_to_list register resume_process
|
|
41
|
+
round send send_after send_nosuspend set_cookie
|
|
42
|
+
setelement size spawn spawn_link spawn_monitor
|
|
43
|
+
spawn_opt split_binary start_timer statistics
|
|
44
|
+
suspend_process system_flag system_info system_monitor
|
|
45
|
+
system_profile term_to_binary tl trace trace_delivered
|
|
46
|
+
trace_info trace_pattern trunc tuple_size tuple_to_list
|
|
47
|
+
universaltime_to_localtime unlink unregister whereis
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
operators = %r{(\+\+?|--?|\*|/|<|>|/=|=:=|=/=|=<|>=|==?|<-|!|\?)}
|
|
51
|
+
word_operators = %w(
|
|
52
|
+
and andalso band bnot bor bsl bsr bxor
|
|
53
|
+
div not or orelse rem xor
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
atom_re = %r{(?:[a-z][a-zA-Z0-9_]*|'[^\n']*[^\\]')}
|
|
57
|
+
|
|
58
|
+
variable_re = %r{(?:[A-Z_][a-zA-Z0-9_]*)}
|
|
59
|
+
|
|
60
|
+
escape_re = %r{(?:\\(?:[bdefnrstv\'"\\/]|[0-7][0-7]?[0-7]?|\^[a-zA-Z]))}
|
|
61
|
+
|
|
62
|
+
macro_re = %r{(?:#{variable_re}|#{atom_re})}
|
|
63
|
+
|
|
64
|
+
base_re = %r{(?:[2-9]|[12][0-9]|3[0-6])}
|
|
65
|
+
|
|
66
|
+
state :root do
|
|
67
|
+
rule(/\s+/, Text)
|
|
68
|
+
rule(/%.*\n/, Comment)
|
|
69
|
+
rule(%r{(#{keywords.join('|')})\b}, Keyword)
|
|
70
|
+
rule(%r{(#{builtins.join('|')})\b}, Name::Builtin)
|
|
71
|
+
rule(%r{(#{word_operators.join('|')})\b}, Operator::Word)
|
|
72
|
+
rule(/^-/, Punctuation, :directive)
|
|
73
|
+
rule(operators, Operator)
|
|
74
|
+
rule(/"/, Str, :string)
|
|
75
|
+
rule(/<</, Name::Label)
|
|
76
|
+
rule(/>>/, Name::Label)
|
|
77
|
+
rule %r{(#{atom_re})(:)} do
|
|
78
|
+
groups Name::Namespace, Punctuation
|
|
79
|
+
end
|
|
80
|
+
rule %r{(?:^|(?<=:))(#{atom_re})(\s*)(\()} do
|
|
81
|
+
groups Name::Function, Text, Punctuation
|
|
82
|
+
end
|
|
83
|
+
rule(%r{[+-]?#{base_re}#[0-9a-zA-Z]+}, Num::Integer)
|
|
84
|
+
rule(/[+-]?\d+/, Num::Integer)
|
|
85
|
+
rule(/[+-]?\d+.\d+/, Num::Float)
|
|
86
|
+
rule(%r{[\]\[:_@\".{}()|;,]}, Punctuation)
|
|
87
|
+
rule(variable_re, Name::Variable)
|
|
88
|
+
rule(atom_re, Name)
|
|
89
|
+
rule(%r{\?#{macro_re}}, Name::Constant)
|
|
90
|
+
rule(%r{\$(?:#{escape_re}|\\[ %]|[^\\])}, Str::Char)
|
|
91
|
+
rule(%r{##{atom_re}(:?\.#{atom_re})?}, Name::Label)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
state :string do
|
|
95
|
+
rule(escape_re, Str::Escape)
|
|
96
|
+
rule(/"/, Str, :pop!)
|
|
97
|
+
rule(%r{~[0-9.*]*[~#+bBcdefginpPswWxX]}, Str::Interpol)
|
|
98
|
+
rule(%r{[^"\\~]+}, Str)
|
|
99
|
+
rule(/~/, Str)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
state :directive do
|
|
103
|
+
rule %r{(define)(\s*)(\()(#{macro_re})} do
|
|
104
|
+
groups Name::Entity, Text, Punctuation, Name::Constant
|
|
105
|
+
pop!
|
|
106
|
+
end
|
|
107
|
+
rule %r{(record)(\s*)(\()(#{macro_re})} do
|
|
108
|
+
groups Name::Entity, Text, Punctuation, Name::Label
|
|
109
|
+
pop!
|
|
110
|
+
end
|
|
111
|
+
rule(atom_re, Name::Entity, :pop!)
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|