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,31 @@
|
|
|
1
|
+
module Rouge
|
|
2
|
+
module Lexers
|
|
3
|
+
class Diff < RegexLexer
|
|
4
|
+
title 'diff'
|
|
5
|
+
desc 'Lexes unified diffs or patches'
|
|
6
|
+
|
|
7
|
+
tag 'diff'
|
|
8
|
+
aliases 'patch', 'udiff'
|
|
9
|
+
filenames '*.diff', '*.patch'
|
|
10
|
+
mimetypes 'text/x-diff', 'text/x-patch'
|
|
11
|
+
|
|
12
|
+
def self.detect?(text)
|
|
13
|
+
return true if text.start_with?('Index: ')
|
|
14
|
+
return true if text =~ %r(\Adiff[^\n]*?\ba/[^\n]*\bb/)
|
|
15
|
+
return true if text =~ /(---|[+][+][+]).*?\n(---|[+][+][+])/
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
state :root do
|
|
19
|
+
rule(/^ .*$\n?/, Text)
|
|
20
|
+
rule(/^---$\n?/, Text)
|
|
21
|
+
rule(/^\+.*$\n?/, Generic::Inserted)
|
|
22
|
+
rule(/^-+.*$\n?/, Generic::Deleted)
|
|
23
|
+
rule(/^!.*$\n?/, Generic::Strong)
|
|
24
|
+
rule(/^@.*$\n?/, Generic::Subheading)
|
|
25
|
+
rule(/^([Ii]ndex|diff).*$\n?/, Generic::Heading)
|
|
26
|
+
rule(/^=.*$\n?/, Generic::Heading)
|
|
27
|
+
rule(/.*$\n?/, Text)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
require 'set'
|
|
2
|
+
module Rouge
|
|
3
|
+
module Lexers
|
|
4
|
+
load_lexer 'yaml.rb'
|
|
5
|
+
|
|
6
|
+
class Digdag < YAML
|
|
7
|
+
title 'digdag'
|
|
8
|
+
desc 'A simple, open source, multi-cloud workflow engine (https://www.digdag.io/)'
|
|
9
|
+
tag 'digdag'
|
|
10
|
+
filenames '*.dig'
|
|
11
|
+
|
|
12
|
+
mimetypes 'application/x-digdag'
|
|
13
|
+
|
|
14
|
+
# http://docs.digdag.io/operators.html
|
|
15
|
+
# as of digdag v0.9.10
|
|
16
|
+
KEYWORD_PATTERN = Regexp.union(%w(
|
|
17
|
+
call
|
|
18
|
+
require
|
|
19
|
+
loop
|
|
20
|
+
for_each
|
|
21
|
+
if
|
|
22
|
+
fail
|
|
23
|
+
echo
|
|
24
|
+
|
|
25
|
+
td
|
|
26
|
+
td_run
|
|
27
|
+
td_ddl
|
|
28
|
+
td_load
|
|
29
|
+
td_for_each
|
|
30
|
+
td_wait
|
|
31
|
+
td_wait_table
|
|
32
|
+
td_partial_delete
|
|
33
|
+
td_table_export
|
|
34
|
+
|
|
35
|
+
pg
|
|
36
|
+
|
|
37
|
+
mail
|
|
38
|
+
http
|
|
39
|
+
s3_wait
|
|
40
|
+
redshift
|
|
41
|
+
redshift_load
|
|
42
|
+
redshift_unload
|
|
43
|
+
emr
|
|
44
|
+
|
|
45
|
+
gcs_wait
|
|
46
|
+
bq
|
|
47
|
+
bq_ddl
|
|
48
|
+
bq_extract
|
|
49
|
+
bq_load
|
|
50
|
+
|
|
51
|
+
sh
|
|
52
|
+
py
|
|
53
|
+
rb
|
|
54
|
+
embulk
|
|
55
|
+
).map { |name| "#{name}>"} + %w(
|
|
56
|
+
_do
|
|
57
|
+
_parallel
|
|
58
|
+
))
|
|
59
|
+
|
|
60
|
+
prepend :block_nodes do
|
|
61
|
+
rule /(#{KEYWORD_PATTERN})(:)(?=\s|$)/ do |m|
|
|
62
|
+
groups Keyword::Reserved, Punctuation::Indicator
|
|
63
|
+
set_indent m[0], :implicit => true
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
|
|
3
|
+
module Rouge
|
|
4
|
+
module Lexers
|
|
5
|
+
class Docker < RegexLexer
|
|
6
|
+
title "Docker"
|
|
7
|
+
desc "Dockerfile syntax"
|
|
8
|
+
tag 'docker'
|
|
9
|
+
aliases 'dockerfile'
|
|
10
|
+
filenames 'Dockerfile', '*.docker'
|
|
11
|
+
mimetypes 'text/x-dockerfile-config'
|
|
12
|
+
|
|
13
|
+
KEYWORDS = %w(
|
|
14
|
+
FROM MAINTAINER CMD LABEL EXPOSE ENV ADD COPY ENTRYPOINT VOLUME USER WORKDIR ARG STOPSIGNAL HEALTHCHECK SHELL
|
|
15
|
+
).join('|')
|
|
16
|
+
|
|
17
|
+
start { @shell = Shell.new(@options) }
|
|
18
|
+
|
|
19
|
+
state :root do
|
|
20
|
+
rule /\s+/, Text
|
|
21
|
+
|
|
22
|
+
rule /^(ONBUILD)(\s+)(#{KEYWORDS})(.*)/io do |m|
|
|
23
|
+
groups Keyword, Text::Whitespace, Keyword, Str
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
rule /^(#{KEYWORDS})\b(.*)/io do |m|
|
|
27
|
+
groups Keyword, Str
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
rule /#.*?$/, Comment
|
|
31
|
+
|
|
32
|
+
rule /^(ONBUILD\s+)?RUN(\s+)/i do
|
|
33
|
+
token Keyword
|
|
34
|
+
push :run
|
|
35
|
+
@shell.reset!
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
rule /\w+/, Text
|
|
39
|
+
rule /[^\w]+/, Text
|
|
40
|
+
rule /./, Text
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
state :run do
|
|
44
|
+
rule /\n/, Text, :pop!
|
|
45
|
+
rule /\\./m, Str::Escape
|
|
46
|
+
rule(/(\\.|[^\n\\])+/) { delegate @shell }
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
|
|
3
|
+
module Rouge
|
|
4
|
+
module Lexers
|
|
5
|
+
class Dot < RegexLexer
|
|
6
|
+
title "DOT"
|
|
7
|
+
desc "graph description language"
|
|
8
|
+
|
|
9
|
+
tag 'dot'
|
|
10
|
+
filenames '*.dot'
|
|
11
|
+
mimetypes 'text/vnd.graphviz'
|
|
12
|
+
|
|
13
|
+
start do
|
|
14
|
+
@html = HTML.new(options)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
state :comments_and_whitespace do
|
|
18
|
+
rule /\s+/, Text
|
|
19
|
+
rule %r(#.*?\n), Comment::Single
|
|
20
|
+
rule %r(//.*?\n), Comment::Single
|
|
21
|
+
rule %r(/(\\\n)?[*].*?[*](\\\n)?/)m, Comment::Multiline
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
state :html do
|
|
25
|
+
rule /[^<>]+/ do
|
|
26
|
+
delegate @html
|
|
27
|
+
end
|
|
28
|
+
rule /<.+?>/m do
|
|
29
|
+
delegate @html
|
|
30
|
+
end
|
|
31
|
+
rule />/, Punctuation, :pop!
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
state :ID do
|
|
35
|
+
rule /([a-zA-Z][a-zA-Z_0-9]*)(\s*)(=)/ do |m|
|
|
36
|
+
token Name, m[1]
|
|
37
|
+
token Text, m[2]
|
|
38
|
+
token Punctuation, m[3]
|
|
39
|
+
end
|
|
40
|
+
rule /[a-zA-Z][a-zA-Z_0-9]*/, Name::Variable
|
|
41
|
+
rule /([0-9]+)?\.[0-9]+/, Num::Float
|
|
42
|
+
rule /[0-9]+/, Num::Integer
|
|
43
|
+
rule /"(\\"|[^"])*"/, Str::Double
|
|
44
|
+
rule /</ do
|
|
45
|
+
token Punctuation
|
|
46
|
+
@html.reset!
|
|
47
|
+
push :html
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
state :a_list do
|
|
52
|
+
mixin :comments_and_whitespace
|
|
53
|
+
mixin :ID
|
|
54
|
+
rule /[=;,]/, Punctuation
|
|
55
|
+
rule /\]/, Operator, :pop!
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
state :root do
|
|
59
|
+
mixin :comments_and_whitespace
|
|
60
|
+
rule /\b(strict|graph|digraph|subgraph|node|edge)\b/i, Keyword
|
|
61
|
+
rule /[{};:=]/, Punctuation
|
|
62
|
+
rule /-[->]/, Operator
|
|
63
|
+
rule /\[/, Operator, :a_list
|
|
64
|
+
mixin :ID
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
|
|
3
|
+
module Rouge
|
|
4
|
+
module Lexers
|
|
5
|
+
class ECL < RegexLexer
|
|
6
|
+
title "ECL"
|
|
7
|
+
desc "The ECL Programming Language (hpccsystems.com/about#Platform)"
|
|
8
|
+
|
|
9
|
+
tag 'ECL'
|
|
10
|
+
aliases 'ecl'
|
|
11
|
+
|
|
12
|
+
filenames '*.ecl'
|
|
13
|
+
|
|
14
|
+
mimetypes 'text/x-ecl', 'application/x-ecl'
|
|
15
|
+
|
|
16
|
+
def self.keywords
|
|
17
|
+
@keywords ||= Set.new %w(
|
|
18
|
+
AND OR IN NOT ALL ANY AS FROM ATMOST BEFORE BEGINC BEST BETWEEN CASE CONST
|
|
19
|
+
COUNTER CSV DESCEND EMBED ENCRYPT END ENDC ENDEMBED ENDMACRO ENUM EXCEPT
|
|
20
|
+
EXCLUSIVE EXPIRE EXPORT EXTEND FAIL FEW FIRST FLAT FULL FUNCTION FUNCTIONMACRO
|
|
21
|
+
GROUP HEADING HOLE IFBLOCK IMPORT IN JOINED KEEP KEYED LAST LEFT LIMIT LOAD
|
|
22
|
+
LOCAL LOCALE LOOKUP MACRO MANY MAXCOUNT MAXLENGTH MIN SKEW MODULE INTERFACE
|
|
23
|
+
NAMED NOCASE NOROOT NOSCAN NOSORT OF ONLY OPT OUTER OVERWRITE PACKED
|
|
24
|
+
PARTITION PENALTY PHYSICALLENGTH PIPE QUOTE RECORD REPEAT RETURN RIGHT
|
|
25
|
+
ROWS SCAN SELF SEPARATOR SERVICE SHARED SKEW SKIP SQL STORE TERMINATOR
|
|
26
|
+
THOR THRESHOLD TOKEN TRANSFORM TRIM TYPE UNICODEORDER UNSORTED VALIDATE
|
|
27
|
+
VIRTUAL WHOLE WILD WITHIN XML XPATH AFTER CLUSTER COMPRESSED COMPRESSION
|
|
28
|
+
DEFAULT ENCODING ESCAPE FILEPOSITION FORWARD GROUPED INNER INTERNAL
|
|
29
|
+
LINKCOUNTED LITERAL LITTLE_ENDIAN LZW MOFN MULTIPLE NAMESPACE NOCASE
|
|
30
|
+
WNOTRIM NOXPATH ONFAIL OVERWRITE PREFETCH RETRY RIGHT1 RIGHT2 ROWSET
|
|
31
|
+
XPATH SCOPE SMART SOAPACTION STABLE TIMELIMIT TIMEOUT UNORDERED UNSTABLE
|
|
32
|
+
UPDATE USE WIDTH __COMPRESSED__
|
|
33
|
+
)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def self.builtins
|
|
37
|
+
@builtins ||= Set.new %w(
|
|
38
|
+
ABS ACOS AGGREGATE ALLNODES APPLY ASCII ASIN ASSTRING ATAN ATAN2 AVE CASE
|
|
39
|
+
CATCH CHOOSE CHOOSEN CHOOSESETS CLUSTERSIZE COMBINE CORRELATION COS COSH
|
|
40
|
+
COUNT COVARIANCE CRON DATASET DEDUP DEFINE DENORMALIZE DICTIONARY DISTRIBUTE
|
|
41
|
+
DISTRIBUTED DISTRIBUTION EBCDIC ENTH ERROR EVALUATE EVENT EVENTEXTRA EVENTNAME
|
|
42
|
+
EXISTS EXP FAILCODE FAILMESSAGE FETCH FROMUNICODE FROMXML GETENV GETISVALID GLOBAL
|
|
43
|
+
GRAPH GROUP HASH HASH32 HASH64 HASHCRC HASHMD5 HAVING HTTPCALL HTTPHEADER IF IFF
|
|
44
|
+
INDEX INTFORMAT ISVALID ITERATE JOIN KEYUNICODE LENGTH LIBRARY LIMIT LN LOCAL LOG
|
|
45
|
+
LOOP MAP MATCHED MATCHLENGTH MATCHPOSITION MATCHTEXT MATCHUNICODE MAX MERGE MERGEJOIN
|
|
46
|
+
MIN NOFOLD NOLOCAL NONEMPTY NORMALIZE PARSE PIPE POWER PRELOAD PROCESS PROJECT PULL RANDOM
|
|
47
|
+
RANGE RANK RANKED REALFORMAT RECORDOF REGEXFIND REGEXREPLACE REGROUP REJECTED ROLLUP ROUND
|
|
48
|
+
ROUNDUP ROW ROWDIFF SAMPLE SET SIN SINH SIZEOF SOAPCALL SORT SORTED SQRT STEPPED STORED
|
|
49
|
+
SUM TABLE TAN TANH THISNODE TOPN TOUNICODE TOXML TRANSFER TRANSFORM TRIM TRUNCATE TYPEOF
|
|
50
|
+
UNGROUP UNICODEORDER VARIANCE WHICH WORKUNIT XMLDECODE XMLENCODE XMLTEXT XMLUNICODE
|
|
51
|
+
)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def self.actions
|
|
55
|
+
@actions ||= Set.new %w(
|
|
56
|
+
APPLY ASSERT BUILD BUILDINDEX EVALUATE FAIL KEYDIFF KEYPATCH LOADXML NOTHOR NOTIFY OUTPUT
|
|
57
|
+
PARALLEL SEQUENTIAL SOAPCALL WAIT
|
|
58
|
+
)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def self.template
|
|
62
|
+
@template ||= Set.new %w(
|
|
63
|
+
APPEND BREAK DECLARE DEMANGLE END FOR GETDATATYPE IF INMODULE LOOP MANGLE ONWARNING OPTION
|
|
64
|
+
SET STORED UNIQUENAME WORKUNIT
|
|
65
|
+
)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
state :root do
|
|
69
|
+
rule /\s+/m, Text
|
|
70
|
+
rule %r(//(\\.|.)*?$), Comment::Single
|
|
71
|
+
rule %r(/\*), Comment::Multiline, :multiline_comments
|
|
72
|
+
rule /\d+/, Num::Integer
|
|
73
|
+
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/, Operator
|
|
74
|
+
rule /\b(?i:(data|string|qstring|varstring|varunicode|unicode))\d+\b/, Keyword::Type
|
|
75
|
+
rule /\b(?i:(integer|unsigned))[1-8]\b/, Keyword::Type
|
|
76
|
+
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/, Keyword::Type
|
|
77
|
+
rule /\b(?i)(u?)decimal(\d+(_\d+)?)\b/, Keyword::Type
|
|
78
|
+
rule /\b(?i:(apply|assert|build|buildindex|evaluate|fail|keydiff|keypatch|loadxml|nothor|notify|output|parallel|sequential|soapcall|wait))\b/, Operator
|
|
79
|
+
|
|
80
|
+
rule /'/, Str::Single, :single_string
|
|
81
|
+
rule /"/, Name::Variable, :double_string
|
|
82
|
+
rule /`/, Name::Variable, :backtick
|
|
83
|
+
|
|
84
|
+
rule /(#)(?i)(\w+)/, Operator
|
|
85
|
+
|
|
86
|
+
rule /([A-Za-z_]+)\s*(\()/ do |m|
|
|
87
|
+
if !(self.class.keywords.include? m[1].upcase or self.class.builtins.include? m[1].upcase)
|
|
88
|
+
token Name::Function
|
|
89
|
+
end
|
|
90
|
+
if self.class.keywords.include? m[1].upcase
|
|
91
|
+
token Keyword
|
|
92
|
+
end
|
|
93
|
+
if self.class.builtins.include? m[1].upcase
|
|
94
|
+
token Operator
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
rule /[\$\w][\w\d]*/ do |m|
|
|
98
|
+
if self.class.keywords.include? m[0].upcase
|
|
99
|
+
token Keyword
|
|
100
|
+
else
|
|
101
|
+
token Name
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
rule %r([+*/<>=~!@#%^&|?^-]), Operator
|
|
106
|
+
rule /[;:()\[\],.]/, Punctuation
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
state :multiline_comments do
|
|
110
|
+
rule %r(/[*]), Comment::Multiline, :multiline_comments
|
|
111
|
+
rule %r([*]/), Comment::Multiline, :pop!
|
|
112
|
+
rule %r([^/*]+), Comment::Multiline
|
|
113
|
+
rule %r([/*]), Comment::Multiline
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
state :backtick do
|
|
117
|
+
rule /\\./, Str::Escape
|
|
118
|
+
rule /``/, Str::Escape
|
|
119
|
+
rule /`/, Name::Variable, :pop!
|
|
120
|
+
rule /[^\\`]+/, Name::Variable
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
state :single_string do
|
|
124
|
+
rule /\\./, Str::Escape
|
|
125
|
+
rule /''/, Str::Escape
|
|
126
|
+
rule /'/, Str::Single, :pop!
|
|
127
|
+
rule /[^\\']+/, Str::Single
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
state :double_string do
|
|
131
|
+
rule /\\./, Str::Escape
|
|
132
|
+
rule /""/, Str::Escape
|
|
133
|
+
rule /"/, Name::Variable, :pop!
|
|
134
|
+
rule /[^\\"]+/, Name::Variable
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
|
|
3
|
+
module Rouge
|
|
4
|
+
module Lexers
|
|
5
|
+
class Eiffel < RegexLexer
|
|
6
|
+
title "Eiffel"
|
|
7
|
+
desc "Eiffel programming language"
|
|
8
|
+
|
|
9
|
+
tag 'eiffel'
|
|
10
|
+
filenames '*.e'
|
|
11
|
+
mimetypes 'text/x-eiffel'
|
|
12
|
+
|
|
13
|
+
LanguageKeywords = %w(
|
|
14
|
+
across agent alias all and attached as assign attribute check
|
|
15
|
+
class convert create debug deferred detachable do else elseif end
|
|
16
|
+
ensure expanded export external feature from frozen if implies inherit
|
|
17
|
+
inspect invariant like local loop not note obsolete old once or
|
|
18
|
+
Precursor redefine rename require rescue retry select separate
|
|
19
|
+
some then undefine until variant Void when xor
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
BooleanConstants = %w(True False)
|
|
23
|
+
|
|
24
|
+
LanguageVariables = %w(Current Result)
|
|
25
|
+
|
|
26
|
+
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)*)\/)+?/
|
|
27
|
+
|
|
28
|
+
state :root do
|
|
29
|
+
rule /"\[/, Str::Other, :aligned_verbatim_string
|
|
30
|
+
rule /"\{/, Str::Other, :non_aligned_verbatim_string
|
|
31
|
+
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
|
|
32
|
+
rule /--.*/, Comment::Single
|
|
33
|
+
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
|
|
34
|
+
|
|
35
|
+
rule /(?:#{LanguageKeywords.join('|')})\b/, Keyword
|
|
36
|
+
rule /(?:#{LanguageVariables.join('|')})\b/, Keyword::Variable
|
|
37
|
+
rule /(?:#{BooleanConstants.join('|')})\b/, Keyword::Constant
|
|
38
|
+
|
|
39
|
+
rule /\b0[xX][\da-fA-F](?:_*[\da-fA-F])*b/, Num::Hex
|
|
40
|
+
rule /\b0[cC][0-7](?:_*[0-7])*\b/, Num::Oct
|
|
41
|
+
rule /\b0[bB][01](?:_*[01])*\b/, Num::Bin
|
|
42
|
+
rule /\d(?:_*\d)*/, Num::Integer
|
|
43
|
+
rule /(?:\d(?:_*\d)*)?\.(?:(?:\d(?:_*\d)*)?[eE][+-]?)?\d(?:_*\d)*|\d(?:_*\d)*\.?/, Num::Float
|
|
44
|
+
|
|
45
|
+
rule /:=|<<|>>|\(\||\|\)|->|\.|[{}\[\];(),:?]/, Punctuation::Indicator
|
|
46
|
+
rule /\\\\|\|\.\.\||\.\.|\/[~\/]?|[><\/]=?|[-+*^=~]/, Operator
|
|
47
|
+
|
|
48
|
+
rule /[A-Z][\dA-Z_]*/, Name::Class
|
|
49
|
+
rule /[A-Za-z][\dA-Za-z_]*/, Name
|
|
50
|
+
rule /\s+/, Text
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
state :aligned_verbatim_string do
|
|
54
|
+
rule /]"/, Str::Other, :pop!
|
|
55
|
+
rule SimpleString, Str::Other
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
state :non_aligned_verbatim_string do
|
|
59
|
+
rule /}"/, Str::Other, :pop!
|
|
60
|
+
rule SimpleString, Str::Other
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
|
|
3
|
+
module Rouge
|
|
4
|
+
module Lexers
|
|
5
|
+
# Direct port of pygments Lexer.
|
|
6
|
+
# See: https://bitbucket.org/birkenfeld/pygments-main/src/7304e4759ae65343d89a51359ca538912519cc31/pygments/lexers/functional.py?at=default#cl-2362
|
|
7
|
+
class Elixir < RegexLexer
|
|
8
|
+
title "Elixir"
|
|
9
|
+
desc "Elixir language (elixir-lang.org)"
|
|
10
|
+
|
|
11
|
+
tag 'elixir'
|
|
12
|
+
aliases 'elixir', 'exs'
|
|
13
|
+
|
|
14
|
+
filenames '*.ex', '*.exs'
|
|
15
|
+
|
|
16
|
+
mimetypes 'text/x-elixir', 'application/x-elixir'
|
|
17
|
+
|
|
18
|
+
state :root do
|
|
19
|
+
rule /\s+/m, Text
|
|
20
|
+
rule /#.*$/, Comment::Single
|
|
21
|
+
rule %r{\b(case|cond|end|bc|lc|if|unless|try|loop|receive|fn|defmodule|
|
|
22
|
+
defp?|defprotocol|defimpl|defrecord|defmacrop?|defdelegate|
|
|
23
|
+
defexception|exit|raise|throw|after|rescue|catch|else)\b(?![?!])|
|
|
24
|
+
(?<!\.)\b(do|\-\>)\b}x, Keyword
|
|
25
|
+
rule /\b(import|require|use|recur|quote|unquote|super|refer)\b(?![?!])/, Keyword::Namespace
|
|
26
|
+
rule /(?<!\.)\b(and|not|or|when|xor|in)\b/, Operator::Word
|
|
27
|
+
rule %r{%=|\*=|\*\*=|\+=|\-=|\^=|\|\|=|
|
|
28
|
+
<=>|<(?!<|=)|>(?!<|=|>)|<=|>=|===|==|=~|!=|!~|(?=[\s\t])\?|
|
|
29
|
+
(?<=[\s\t])!+|&(&&?|(?!\d))|\|\||\^|\*|\+|\-|/|
|
|
30
|
+
\||\+\+|\-\-|\*\*|\/\/|\<\-|\<\>|<<|>>|=|\.|~~~}x, Operator
|
|
31
|
+
rule %r{(?<!:)(:)([a-zA-Z_]\w*([?!]|=(?![>=]))?|\<\>|===?|>=?|<=?|
|
|
32
|
+
<=>|&&?|%\(\)|%\[\]|%\{\}|\+\+?|\-\-?|\|\|?|\!|//|[%&`/\|]|
|
|
33
|
+
\*\*?|=?~|<\-)|([a-zA-Z_]\w*([?!])?)(:)(?!:)}, Str::Symbol
|
|
34
|
+
rule /:"/, Str::Symbol, :interpoling_symbol
|
|
35
|
+
rule /\b(nil|true|false)\b(?![?!])|\b[A-Z]\w*\b/, Name::Constant
|
|
36
|
+
rule /\b(__(FILE|LINE|MODULE|MAIN|FUNCTION)__)\b(?![?!])/, Name::Builtin::Pseudo
|
|
37
|
+
rule /[a-zA-Z_!][\w_]*[!\?]?/, Name
|
|
38
|
+
rule %r{::|[%(){};,/\|:\\\[\]]}, Punctuation
|
|
39
|
+
rule /@[a-zA-Z_]\w*|&\d/, Name::Variable
|
|
40
|
+
rule %r{\b(0[xX][0-9A-Fa-f]+|\d(_?\d)*(\.(?![^\d\s])
|
|
41
|
+
(_?\d)*)?([eE][-+]?\d(_?\d)*)?|0[bB][01]+)\b}x, Num
|
|
42
|
+
|
|
43
|
+
mixin :strings
|
|
44
|
+
mixin :sigil_strings
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
state :strings do
|
|
48
|
+
rule /(%[A-Ba-z])?"""(?:.|\n)*?"""/, Str::Doc
|
|
49
|
+
rule /'''(?:.|\n)*?'''/, Str::Doc
|
|
50
|
+
rule /"/, Str::Doc, :dqs
|
|
51
|
+
rule /'.*?'/, Str::Single
|
|
52
|
+
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
|
|
53
|
+
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
state :dqs do
|
|
57
|
+
rule /"/, Str::Double, :pop!
|
|
58
|
+
mixin :enddoublestr
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
state :interpoling do
|
|
62
|
+
rule /#\{/, Str::Interpol, :interpoling_string
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
state :interpoling_string do
|
|
66
|
+
rule /\}/, Str::Interpol, :pop!
|
|
67
|
+
mixin :root
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
state :interpoling_symbol do
|
|
71
|
+
rule /"/, Str::Symbol, :pop!
|
|
72
|
+
mixin :interpoling
|
|
73
|
+
rule /[^#"]+/, Str::Symbol
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
state :enddoublestr do
|
|
77
|
+
mixin :interpoling
|
|
78
|
+
rule /[^#"]+/, Str::Double
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
state :sigil_strings do
|
|
82
|
+
# ~-sigiled strings
|
|
83
|
+
# ~(abc), ~[abc], ~<abc>, ~|abc|, ~r/abc/, etc
|
|
84
|
+
# Cribbed and adjusted from Ruby lexer
|
|
85
|
+
delimiter_map = { '{' => '}', '[' => ']', '(' => ')', '<' => '>' }
|
|
86
|
+
# Match a-z for custom sigils too
|
|
87
|
+
sigil_opens = Regexp.union(delimiter_map.keys + %w(| / ' "))
|
|
88
|
+
rule /~([A-Za-z])?(#{sigil_opens})/ do |m|
|
|
89
|
+
open = Regexp.escape(m[2])
|
|
90
|
+
close = Regexp.escape(delimiter_map[m[2]] || m[2])
|
|
91
|
+
interp = /[SRCW]/ === m[1]
|
|
92
|
+
toktype = Str::Other
|
|
93
|
+
|
|
94
|
+
puts " open: #{open.inspect}" if @debug
|
|
95
|
+
puts " close: #{close.inspect}" if @debug
|
|
96
|
+
|
|
97
|
+
# regexes
|
|
98
|
+
if 'Rr'.include? m[1]
|
|
99
|
+
toktype = Str::Regex
|
|
100
|
+
push :regex_flags
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
if 'Ww'.include? m[1]
|
|
104
|
+
push :list_flags
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
token toktype
|
|
108
|
+
|
|
109
|
+
push do
|
|
110
|
+
rule /#{close}/, toktype, :pop!
|
|
111
|
+
|
|
112
|
+
if interp
|
|
113
|
+
mixin :interpoling
|
|
114
|
+
rule /#/, toktype
|
|
115
|
+
else
|
|
116
|
+
rule /[\\#]/, toktype
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
rule /[^##{open}#{close}\\]+/m, toktype
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
state :regex_flags do
|
|
125
|
+
rule /[fgimrsux]*/, Str::Regex, :pop!
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
state :list_flags do
|
|
129
|
+
rule /[csa]?/, Str::Other, :pop!
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
end
|