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,34 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
|
|
3
|
+
module Rouge
|
|
4
|
+
module Lexers
|
|
5
|
+
load_lexer 'sass/common.rb'
|
|
6
|
+
|
|
7
|
+
class Scss < SassCommon
|
|
8
|
+
title "SCSS"
|
|
9
|
+
desc "SCSS stylesheets (sass-lang.com)"
|
|
10
|
+
tag 'scss'
|
|
11
|
+
filenames '*.scss'
|
|
12
|
+
mimetypes 'text/x-scss'
|
|
13
|
+
|
|
14
|
+
state :root do
|
|
15
|
+
rule /\s+/, Text
|
|
16
|
+
rule %r(//.*?$), Comment::Single
|
|
17
|
+
rule %r(/[*].*?[*]/)m, Comment::Multiline
|
|
18
|
+
rule /@import\b/, Keyword, :value
|
|
19
|
+
|
|
20
|
+
mixin :content_common
|
|
21
|
+
|
|
22
|
+
rule(/(?=[^;{}][;}])/) { push :attribute }
|
|
23
|
+
rule(/(?=[^;{}:\[]+:[^a-z])/) { push :attribute }
|
|
24
|
+
|
|
25
|
+
rule(//) { push :selector }
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
state :end_section do
|
|
29
|
+
rule /\n/, Text
|
|
30
|
+
rule(/[;{}]/) { token Punctuation; reset_stack }
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
|
|
3
|
+
module Rouge
|
|
4
|
+
module Lexers
|
|
5
|
+
class Sed < RegexLexer
|
|
6
|
+
title "sed"
|
|
7
|
+
desc 'sed, the ultimate stream editor'
|
|
8
|
+
|
|
9
|
+
tag 'sed'
|
|
10
|
+
filenames '*.sed'
|
|
11
|
+
mimetypes 'text/x-sed'
|
|
12
|
+
|
|
13
|
+
def self.detect?(text)
|
|
14
|
+
return true if text.shebang? 'sed'
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
class Regex < RegexLexer
|
|
18
|
+
state :root do
|
|
19
|
+
rule /\\./, Str::Escape
|
|
20
|
+
rule /\[/, Punctuation, :brackets
|
|
21
|
+
rule /[$^.*]/, Operator
|
|
22
|
+
rule /[()]/, Punctuation
|
|
23
|
+
rule /./, Str::Regex
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
state :brackets do
|
|
27
|
+
rule /\^/ do
|
|
28
|
+
token Punctuation
|
|
29
|
+
goto :brackets_int
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
rule(//) { goto :brackets_int }
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
state :brackets_int do
|
|
36
|
+
# ranges
|
|
37
|
+
rule /.-./, Name::Variable
|
|
38
|
+
rule /\]/, Punctuation, :pop!
|
|
39
|
+
rule /./, Str::Regex
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
class Replacement < RegexLexer
|
|
44
|
+
state :root do
|
|
45
|
+
rule /\\./m, Str::Escape
|
|
46
|
+
rule /&/, Operator
|
|
47
|
+
rule /[^\\&]+/m, Text
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def regex
|
|
52
|
+
@regex ||= Regex.new(options)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def replacement
|
|
56
|
+
@replacement ||= Replacement.new(options)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
start { regex.reset!; replacement.reset! }
|
|
60
|
+
|
|
61
|
+
state :whitespace do
|
|
62
|
+
rule /\s+/m, Text
|
|
63
|
+
rule(/#.*?\n/) { token Comment; reset_stack }
|
|
64
|
+
rule(/\n/) { token Text; reset_stack }
|
|
65
|
+
rule(/;/) { token Punctuation; reset_stack }
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
state :root do
|
|
69
|
+
mixin :addr_range
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
edot = /\\.|./m
|
|
73
|
+
|
|
74
|
+
state :command do
|
|
75
|
+
mixin :whitespace
|
|
76
|
+
|
|
77
|
+
# subst and transliteration
|
|
78
|
+
rule /(s)(.)(#{edot}*?)(\2)(#{edot}*?)(\2)/m do |m|
|
|
79
|
+
token Keyword, m[1]
|
|
80
|
+
token Punctuation, m[2]
|
|
81
|
+
delegate regex, m[3]
|
|
82
|
+
token Punctuation, m[4]
|
|
83
|
+
delegate replacement, m[5]
|
|
84
|
+
token Punctuation, m[6]
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
goto :flags
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
rule /(y)(.)(#{edot}*?)(\2)(#{edot}*?)(\2)/m do |m|
|
|
91
|
+
token Keyword, m[1]
|
|
92
|
+
token Punctuation, m[2]
|
|
93
|
+
delegate replacement, m[3]
|
|
94
|
+
token Punctuation, m[4]
|
|
95
|
+
delegate replacement, m[5]
|
|
96
|
+
token Punctuation, m[6]
|
|
97
|
+
|
|
98
|
+
pop!
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# commands that take a text segment as an argument
|
|
102
|
+
rule /([aic])(\s*)/ do
|
|
103
|
+
groups Keyword, Text; goto :text
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
rule /[pd]/, Keyword
|
|
107
|
+
|
|
108
|
+
# commands that take a number argument
|
|
109
|
+
rule /([qQl])(\s+)(\d+)/i do
|
|
110
|
+
groups Keyword, Text, Num
|
|
111
|
+
pop!
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# no-argument commands
|
|
115
|
+
rule /[={}dDgGhHlnpPqx]/, Keyword, :pop!
|
|
116
|
+
|
|
117
|
+
# commands that take a filename argument
|
|
118
|
+
rule /([rRwW])(\s+)(\S+)/ do
|
|
119
|
+
groups Keyword, Text, Name
|
|
120
|
+
pop!
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# commands that take a label argument
|
|
124
|
+
rule /([:btT])(\s+)(\S+)/ do
|
|
125
|
+
groups Keyword, Text, Name::Label
|
|
126
|
+
pop!
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
state :addr_range do
|
|
131
|
+
mixin :whitespace
|
|
132
|
+
|
|
133
|
+
### address ranges ###
|
|
134
|
+
addr_tok = Keyword::Namespace
|
|
135
|
+
rule /\d+/, addr_tok
|
|
136
|
+
rule /[$,~+!]/, addr_tok
|
|
137
|
+
|
|
138
|
+
rule %r((/)((?:\\.|.)*?)(/)) do |m|
|
|
139
|
+
token addr_tok, m[1]; delegate regex, m[2]; token addr_tok, m[3]
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
# alternate regex rage delimiters
|
|
143
|
+
rule %r((\\)(.)(\\.|.)*?(\2)) do |m|
|
|
144
|
+
token addr_tok, m[1] + m[2]
|
|
145
|
+
delegate regex, m[3]
|
|
146
|
+
token addr_tok, m[4]
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
rule(//) { push :command }
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
state :text do
|
|
153
|
+
rule /[^\\\n]+/, Str
|
|
154
|
+
rule /\\\n/, Str::Escape
|
|
155
|
+
rule /\\/, Str
|
|
156
|
+
rule /\n/, Text, :pop!
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
state :flags do
|
|
160
|
+
rule /[gp]+/, Keyword, :pop!
|
|
161
|
+
|
|
162
|
+
# writing to a file with the subst command.
|
|
163
|
+
# who'da thunk...?
|
|
164
|
+
rule /([wW])(\s+)(\S+)/ do
|
|
165
|
+
token Keyword; token Text; token Name
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
rule(//) { pop! }
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
end
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
|
|
3
|
+
module Rouge
|
|
4
|
+
module Lexers
|
|
5
|
+
class Shell < RegexLexer
|
|
6
|
+
title "shell"
|
|
7
|
+
desc "Various shell languages, including sh and bash"
|
|
8
|
+
|
|
9
|
+
tag 'shell'
|
|
10
|
+
aliases 'bash', 'zsh', 'ksh', 'sh'
|
|
11
|
+
filenames '*.sh', '*.bash', '*.zsh', '*.ksh',
|
|
12
|
+
'.bashrc', '.zshrc', '.kshrc', '.profile', 'PKGBUILD'
|
|
13
|
+
|
|
14
|
+
mimetypes 'application/x-sh', 'application/x-shellscript'
|
|
15
|
+
|
|
16
|
+
def self.detect?(text)
|
|
17
|
+
return true if text.shebang?(/(ba|z|k)?sh/)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
KEYWORDS = %w(
|
|
21
|
+
if fi else while do done for then return function
|
|
22
|
+
select continue until esac elif in
|
|
23
|
+
).join('|')
|
|
24
|
+
|
|
25
|
+
BUILTINS = %w(
|
|
26
|
+
alias bg bind break builtin caller cd command compgen
|
|
27
|
+
complete declare dirs disown enable eval exec exit
|
|
28
|
+
export false fc fg getopts hash help history jobs let
|
|
29
|
+
local logout mapfile popd pushd pwd read readonly set
|
|
30
|
+
shift shopt source suspend test time times trap true type
|
|
31
|
+
typeset ulimit umask unalias unset wait
|
|
32
|
+
|
|
33
|
+
cat tac nl od base32 base64 fmt pr fold head tail split csplit
|
|
34
|
+
wc sum cksum b2sum md5sum sha1sum sha224sum sha256sum sha384sum
|
|
35
|
+
sha512sum sort shuf uniq comm ptx tsort cut paste join tr expand
|
|
36
|
+
unexpand ls dir vdir dircolors cp dd install mv rm shred link ln
|
|
37
|
+
mkdir mkfifo mknod readlink rmdir unlink chown chgrp chmod touch
|
|
38
|
+
df du stat sync truncate echo printf yes expr tee basename dirname
|
|
39
|
+
pathchk mktemp realpath pwd stty printenv tty id logname whoami
|
|
40
|
+
groups users who date arch nproc uname hostname hostid uptime chcon
|
|
41
|
+
runcon chroot env nice nohup stdbuf timeout kill sleep factor numfmt
|
|
42
|
+
seq tar grep sudo awk sed gzip gunzip
|
|
43
|
+
).join('|')
|
|
44
|
+
|
|
45
|
+
state :basic do
|
|
46
|
+
rule /#.*$/, Comment
|
|
47
|
+
|
|
48
|
+
rule /\b(#{KEYWORDS})\s*\b/, Keyword
|
|
49
|
+
rule /\bcase\b/, Keyword, :case
|
|
50
|
+
|
|
51
|
+
rule /\b(#{BUILTINS})\s*\b(?!(\.|-))/, Name::Builtin
|
|
52
|
+
rule /[.](?=\s)/, Name::Builtin
|
|
53
|
+
|
|
54
|
+
rule /(\b\w+)(=)/ do |m|
|
|
55
|
+
groups Name::Variable, Operator
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
rule /[\[\]{}()!=>]/, Operator
|
|
59
|
+
rule /&&|\|\|/, Operator
|
|
60
|
+
|
|
61
|
+
# here-string
|
|
62
|
+
rule /<<</, Operator
|
|
63
|
+
|
|
64
|
+
rule /(<<-?)(\s*)(\'?)(\\?)(\w+)(\3)/ do |m|
|
|
65
|
+
groups Operator, Text, Str::Heredoc, Str::Heredoc, Name::Constant, Str::Heredoc
|
|
66
|
+
@heredocstr = Regexp.escape(m[5])
|
|
67
|
+
push :heredoc
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
state :heredoc do
|
|
72
|
+
rule /\n/, Str::Heredoc, :heredoc_nl
|
|
73
|
+
rule /[^$\n]+/, Str::Heredoc
|
|
74
|
+
mixin :interp
|
|
75
|
+
rule /[$]/, Str::Heredoc
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
state :heredoc_nl do
|
|
79
|
+
rule /\s*(\w+)\s*\n/ do |m|
|
|
80
|
+
if m[1] == @heredocstr
|
|
81
|
+
token Name::Constant
|
|
82
|
+
pop! 2
|
|
83
|
+
else
|
|
84
|
+
token Str::Heredoc
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
rule(//) { pop! }
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
state :double_quotes do
|
|
93
|
+
# NB: "abc$" is literally the string abc$.
|
|
94
|
+
# Here we prevent :interp from interpreting $" as a variable.
|
|
95
|
+
rule /(?:\$#?)?"/, Str::Double, :pop!
|
|
96
|
+
mixin :interp
|
|
97
|
+
rule /[^"`\\$]+/, Str::Double
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
state :ansi_string do
|
|
101
|
+
rule /\\./, Str::Escape
|
|
102
|
+
rule /[^\\']+/, Str::Single
|
|
103
|
+
mixin :single_quotes
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
state :single_quotes do
|
|
107
|
+
rule /'/, Str::Single, :pop!
|
|
108
|
+
rule /[^']+/, Str::Single
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
state :data do
|
|
112
|
+
rule /\s+/, Text
|
|
113
|
+
rule /\\./, Str::Escape
|
|
114
|
+
rule /\$?"/, Str::Double, :double_quotes
|
|
115
|
+
rule /\$'/, Str::Single, :ansi_string
|
|
116
|
+
|
|
117
|
+
# single quotes are much easier than double quotes - we can
|
|
118
|
+
# literally just scan until the next single quote.
|
|
119
|
+
# POSIX: Enclosing characters in single-quotes ( '' )
|
|
120
|
+
# shall preserve the literal value of each character within the
|
|
121
|
+
# single-quotes. A single-quote cannot occur within single-quotes.
|
|
122
|
+
rule /'/, Str::Single, :single_quotes
|
|
123
|
+
|
|
124
|
+
rule /\*/, Keyword
|
|
125
|
+
|
|
126
|
+
rule /;/, Punctuation
|
|
127
|
+
|
|
128
|
+
rule /--?[\w-]+/, Name::Tag
|
|
129
|
+
rule /[^=\*\s{}()$"'`;\\<]+/, Text
|
|
130
|
+
rule /\d+(?= |\Z)/, Num
|
|
131
|
+
rule /</, Text
|
|
132
|
+
mixin :interp
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
state :curly do
|
|
136
|
+
rule /}/, Keyword, :pop!
|
|
137
|
+
rule /:-/, Keyword
|
|
138
|
+
rule /[a-zA-Z0-9_]+/, Name::Variable
|
|
139
|
+
rule /[^}:"`'$]+/, Punctuation
|
|
140
|
+
mixin :root
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
state :paren do
|
|
144
|
+
rule /\)/, Keyword, :pop!
|
|
145
|
+
mixin :root
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
state :math do
|
|
149
|
+
rule /\)\)/, Keyword, :pop!
|
|
150
|
+
rule %r([-+*/%^|&!]|\*\*|\|\|), Operator
|
|
151
|
+
rule /\d+(#\w+)?/, Num
|
|
152
|
+
mixin :root
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
state :case do
|
|
156
|
+
rule /\besac\b/, Keyword, :pop!
|
|
157
|
+
rule /\|/, Punctuation
|
|
158
|
+
rule /\)/, Punctuation, :case_stanza
|
|
159
|
+
mixin :root
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
state :case_stanza do
|
|
163
|
+
rule /;;/, Punctuation, :pop!
|
|
164
|
+
mixin :root
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
state :backticks do
|
|
168
|
+
rule /`/, Str::Backtick, :pop!
|
|
169
|
+
mixin :root
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
state :interp do
|
|
173
|
+
rule /\\$/, Str::Escape # line continuation
|
|
174
|
+
rule /\\./, Str::Escape
|
|
175
|
+
rule /\$\(\(/, Keyword, :math
|
|
176
|
+
rule /\$\(/, Keyword, :paren
|
|
177
|
+
rule /\${#?/, Keyword, :curly
|
|
178
|
+
rule /`/, Str::Backtick, :backticks
|
|
179
|
+
rule /\$#?(\w+|.)/, Name::Variable
|
|
180
|
+
rule /\$[*@]/, Name::Variable
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
state :root do
|
|
184
|
+
mixin :basic
|
|
185
|
+
mixin :data
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
end
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
|
|
3
|
+
module Rouge
|
|
4
|
+
module Lexers
|
|
5
|
+
class Sieve < RegexLexer
|
|
6
|
+
title "Sieve"
|
|
7
|
+
desc "mail filtering language"
|
|
8
|
+
|
|
9
|
+
tag 'sieve'
|
|
10
|
+
filenames '*.sieve'
|
|
11
|
+
|
|
12
|
+
id = /:?[a-zA-Z_][a-zA-Z0-9_]*/
|
|
13
|
+
|
|
14
|
+
# control commands (rfc5228 § 3)
|
|
15
|
+
def self.controls
|
|
16
|
+
@controls ||= %w(if elsif else require stop)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def self.actions
|
|
20
|
+
@actions ||= Set.new(
|
|
21
|
+
# action commands (rfc5228 § 2.9)
|
|
22
|
+
%w(keep fileinto redirect discard) +
|
|
23
|
+
# Editheader Extension (rfc5293)
|
|
24
|
+
%w(addheader deleteheader) +
|
|
25
|
+
# Reject and Extended Reject Extensions (rfc5429)
|
|
26
|
+
%w(reject ereject) +
|
|
27
|
+
# Extension for Notifications (rfc5435)
|
|
28
|
+
%w(notify) +
|
|
29
|
+
# Imap4flags Extension (rfc5232)
|
|
30
|
+
%w(setflag addflag removeflag) +
|
|
31
|
+
# Vacation Extension (rfc5230)
|
|
32
|
+
%w(vacation) +
|
|
33
|
+
# MIME Part Tests, Iteration, Extraction, Replacement, and Enclosure (rfc5703)
|
|
34
|
+
%w(replace enclose extracttext)
|
|
35
|
+
)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def self.tests
|
|
39
|
+
@tests ||= Set.new(
|
|
40
|
+
# test commands (rfc5228 § 5)
|
|
41
|
+
%w(address allof anyof exists false header not size true) +
|
|
42
|
+
# Body Extension (rfc5173)
|
|
43
|
+
%w(body) +
|
|
44
|
+
# Imap4flags Extension (rfc5232)
|
|
45
|
+
%w(hasflag) +
|
|
46
|
+
# Spamtest and Virustest Extensions (rfc5235)
|
|
47
|
+
%w(spamtest virustest) +
|
|
48
|
+
# Date and Index Extensions (rfc5260)
|
|
49
|
+
%w(date currentdate) +
|
|
50
|
+
# Extension for Notifications (rfc5435)
|
|
51
|
+
%w(valid_notify_method notify_method_capability) +
|
|
52
|
+
# Extensions for Checking Mailbox Status and Accessing Mailbox
|
|
53
|
+
# Metadata (rfc5490)
|
|
54
|
+
%w(mailboxexists metadata metadataexists servermetadata servermetadataexists)
|
|
55
|
+
)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
state :comments_and_whitespace do
|
|
59
|
+
rule /\s+/, Text
|
|
60
|
+
rule %r(#.*?\n), Comment::Single
|
|
61
|
+
rule %r(/(\\\n)?[*].*?[*](\\\n)?/)m, Comment::Multiline
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
state :string do
|
|
65
|
+
rule /\\./, Str::Escape
|
|
66
|
+
rule /"/, Str::Double, :pop!
|
|
67
|
+
# Variables Extension (rfc5229)
|
|
68
|
+
rule /\${(?:[0-9][.0-9]*|[a-zA-Z_][.a-zA-Z0-9_]*)}/, Str::Interpol
|
|
69
|
+
rule /./, Str::Double
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
state :root do
|
|
73
|
+
mixin :comments_and_whitespace
|
|
74
|
+
|
|
75
|
+
rule /[\[\](),;{}]/, Punctuation
|
|
76
|
+
|
|
77
|
+
rule id do |m|
|
|
78
|
+
if self.class.controls.include? m[0]
|
|
79
|
+
token Keyword
|
|
80
|
+
elsif self.class.tests.include? m[0]
|
|
81
|
+
token Name::Variable
|
|
82
|
+
elsif self.class.actions.include? m[0]
|
|
83
|
+
token Name::Function
|
|
84
|
+
elsif m[0] =~ /^:/ # tags like :contains, :matches etc.
|
|
85
|
+
token Operator
|
|
86
|
+
else
|
|
87
|
+
token Name::Other
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
rule /"/, Str::Double, :string
|
|
92
|
+
rule /[0-9]+[KMG]/, Num::Integer
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|