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,112 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
|
|
3
|
+
module Rouge
|
|
4
|
+
module Lexers
|
|
5
|
+
class Groovy < RegexLexer
|
|
6
|
+
title "Groovy"
|
|
7
|
+
desc 'The Groovy programming language (http://www.groovy-lang.org/)'
|
|
8
|
+
tag 'groovy'
|
|
9
|
+
filenames '*.groovy', 'Jenkinsfile'
|
|
10
|
+
mimetypes 'text/x-groovy'
|
|
11
|
+
|
|
12
|
+
ws = %r((?:\s|//.*?\n|/[*].*?[*]/)+)
|
|
13
|
+
|
|
14
|
+
def self.detect?(text)
|
|
15
|
+
return true if text.shebang?(/groovy/)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.keywords
|
|
19
|
+
@keywords ||= Set.new %w(
|
|
20
|
+
assert break case catch continue default do else finally for
|
|
21
|
+
if goto instanceof new return switch this throw try while in as
|
|
22
|
+
)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def self.declarations
|
|
26
|
+
@declarations ||= Set.new %w(
|
|
27
|
+
abstract const enum extends final implements native private
|
|
28
|
+
protected public static strictfp super synchronized throws
|
|
29
|
+
transient volatile
|
|
30
|
+
)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def self.types
|
|
34
|
+
@types ||= Set.new %w(
|
|
35
|
+
def boolean byte char double float int long short void
|
|
36
|
+
)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def self.constants
|
|
40
|
+
@constants ||= Set.new %w(true false null)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
state :root do
|
|
44
|
+
rule %r(^
|
|
45
|
+
(\s*(?:\w[\w\d.\[\]]*\s+)+?) # return arguments
|
|
46
|
+
(\w[\w\d]*) # method name
|
|
47
|
+
(\s*) (\() # signature start
|
|
48
|
+
)x do |m|
|
|
49
|
+
delegate self.clone, m[1]
|
|
50
|
+
token Name::Function, m[2]
|
|
51
|
+
token Text, m[3]
|
|
52
|
+
token Operator, m[4]
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# whitespace
|
|
56
|
+
rule /[^\S\n]+/, Text
|
|
57
|
+
rule %r(//.*?$), Comment::Single
|
|
58
|
+
rule %r(/[*].*?[*]/)m, Comment::Multiline
|
|
59
|
+
rule /@\w[\w\d.]*/, Name::Decorator
|
|
60
|
+
rule /(class|interface|trait)\b/, Keyword::Declaration, :class
|
|
61
|
+
rule /package\b/, Keyword::Namespace, :import
|
|
62
|
+
rule /import\b/, Keyword::Namespace, :import
|
|
63
|
+
|
|
64
|
+
# TODO: highlight backslash escapes
|
|
65
|
+
rule /""".*?"""/m, Str::Double
|
|
66
|
+
rule /'''.*?'''/m, Str::Single
|
|
67
|
+
|
|
68
|
+
rule /"(\\.|\\\n|.)*?"/, Str::Double
|
|
69
|
+
rule /'(\\.|\\\n|.)*?'/, Str::Single
|
|
70
|
+
rule %r(\$/(\$.|.)*?/\$)m, Str
|
|
71
|
+
rule %r(/(\\.|\\\n|.)*?/), Str
|
|
72
|
+
rule /'\\.'|'[^\\]'|'\\u[0-9a-f]{4}'/, Str::Char
|
|
73
|
+
rule /(\.)([a-zA-Z_][a-zA-Z0-9_]*)/ do
|
|
74
|
+
groups Operator, Name::Attribute
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
rule /[a-zA-Z_][a-zA-Z0-9_]*:/, Name::Label
|
|
78
|
+
rule /[a-zA-Z_\$][a-zA-Z0-9_]*/ do |m|
|
|
79
|
+
if self.class.keywords.include? m[0]
|
|
80
|
+
token Keyword
|
|
81
|
+
elsif self.class.declarations.include? m[0]
|
|
82
|
+
token Keyword::Declaration
|
|
83
|
+
elsif self.class.types.include? m[0]
|
|
84
|
+
token Keyword::Type
|
|
85
|
+
elsif self.class.constants.include? m[0]
|
|
86
|
+
token Keyword::Constant
|
|
87
|
+
else
|
|
88
|
+
token Name
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
rule %r([~^*!%&\[\](){}<>\|+=:;,./?-]), Operator
|
|
93
|
+
|
|
94
|
+
# numbers
|
|
95
|
+
rule /\d+\.\d+([eE]\d+)?[fd]?/, Num::Float
|
|
96
|
+
rule /0x[0-9a-f]+/, Num::Hex
|
|
97
|
+
rule /[0-9]+L?/, Num::Integer
|
|
98
|
+
rule /\n/, Text
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
state :class do
|
|
102
|
+
rule /\s+/, Text
|
|
103
|
+
rule /\w[\w\d]*/, Name::Class, :pop!
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
state :import do
|
|
107
|
+
rule /\s+/, Text
|
|
108
|
+
rule /[\w\d.]+[*]?/, Name::Namespace, :pop!
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
|
|
3
|
+
module Rouge
|
|
4
|
+
module Lexers
|
|
5
|
+
load_lexer 'php.rb'
|
|
6
|
+
|
|
7
|
+
class Hack < PHP
|
|
8
|
+
title 'Hack'
|
|
9
|
+
desc 'The Hack programming language (hacklang.org)'
|
|
10
|
+
tag 'hack'
|
|
11
|
+
aliases 'hack', 'hh'
|
|
12
|
+
filenames '*.php', '*.hh'
|
|
13
|
+
|
|
14
|
+
def self.detect?(text)
|
|
15
|
+
return true if /<\?hh/ =~ text
|
|
16
|
+
return true if text.shebang?('hhvm')
|
|
17
|
+
return true if /async function [a-zA-Z]/ =~ text
|
|
18
|
+
return true if /\): Awaitable</ =~ text
|
|
19
|
+
|
|
20
|
+
return false
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def self.keywords
|
|
24
|
+
@hh_keywords ||= super.merge Set.new %w(
|
|
25
|
+
type newtype enum
|
|
26
|
+
as super
|
|
27
|
+
async await Awaitable
|
|
28
|
+
vec dict keyset
|
|
29
|
+
void int string bool float double
|
|
30
|
+
arraykey num Stringish
|
|
31
|
+
)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
prepend :template do
|
|
35
|
+
rule /<\?hh(\s*\/\/\s*(strict|decl|partial))?$/, Comment::Preproc, :php
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
prepend :php do
|
|
39
|
+
rule %r((/\*\s*)(HH_(?:IGNORE_ERROR|FIXME)\[\d+\])([^*]*)(\*/)) do
|
|
40
|
+
groups Comment::Preproc, Comment::Preproc, Comment::Multiline, Comment::Preproc
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
rule %r(// UNSAFE(?:_EXPR|_BLOCK)?), Comment::Preproc
|
|
44
|
+
rule %r(/\*\s*UNSAFE_EXPR\s*\*/), Comment::Preproc
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
|
|
3
|
+
module Rouge
|
|
4
|
+
module Lexers
|
|
5
|
+
# A lexer for the Haml templating system for Ruby.
|
|
6
|
+
# @see http://haml.info
|
|
7
|
+
class Haml < RegexLexer
|
|
8
|
+
include Indentation
|
|
9
|
+
|
|
10
|
+
title "Haml"
|
|
11
|
+
desc "The Haml templating system for Ruby (haml.info)"
|
|
12
|
+
|
|
13
|
+
tag 'haml'
|
|
14
|
+
aliases 'HAML'
|
|
15
|
+
|
|
16
|
+
filenames '*.haml'
|
|
17
|
+
mimetypes 'text/x-haml'
|
|
18
|
+
|
|
19
|
+
option 'filters[filter_name]', 'Mapping of lexers to use for haml :filters'
|
|
20
|
+
attr_reader :filters
|
|
21
|
+
# @option opts :filters
|
|
22
|
+
# A hash of filter name to lexer of how various filters should be
|
|
23
|
+
# highlighted. By default, :javascript, :css, :ruby, and :erb
|
|
24
|
+
# are supported.
|
|
25
|
+
def initialize(opts={})
|
|
26
|
+
super
|
|
27
|
+
|
|
28
|
+
default_filters = {
|
|
29
|
+
'javascript' => Javascript.new(options),
|
|
30
|
+
'css' => CSS.new(options),
|
|
31
|
+
'ruby' => ruby,
|
|
32
|
+
'erb' => ERB.new(options),
|
|
33
|
+
'markdown' => Markdown.new(options),
|
|
34
|
+
'sass' => Sass.new(options),
|
|
35
|
+
# TODO
|
|
36
|
+
# 'textile' => Textile.new(options),
|
|
37
|
+
# 'maruku' => Maruku.new(options),
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
@filters = hash_option(:filters, default_filters) do |v|
|
|
41
|
+
as_lexer(v) || PlainText.new(@options)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def ruby
|
|
46
|
+
@ruby ||= Ruby.new(@options)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def html
|
|
50
|
+
@html ||= HTML.new(@options)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def ruby!(state)
|
|
54
|
+
ruby.reset!
|
|
55
|
+
push state
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
start { ruby.reset!; html.reset! }
|
|
59
|
+
|
|
60
|
+
identifier = /[\w:-]+/
|
|
61
|
+
ruby_var = /[a-z]\w*/
|
|
62
|
+
|
|
63
|
+
# Haml can include " |\n" anywhere,
|
|
64
|
+
# which is ignored and used to wrap long lines.
|
|
65
|
+
# To accomodate this, use this custom faux dot instead.
|
|
66
|
+
dot = /[ ]\|\n(?=.*[ ]\|)|./
|
|
67
|
+
|
|
68
|
+
# In certain places, a comma at the end of the line
|
|
69
|
+
# allows line wrapping as well.
|
|
70
|
+
comma_dot = /,\s*\n|#{dot}/
|
|
71
|
+
|
|
72
|
+
state :root do
|
|
73
|
+
rule /\s*\n/, Text
|
|
74
|
+
rule(/\s*/) { |m| token Text; indentation(m[0]) }
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
state :content do
|
|
78
|
+
mixin :css
|
|
79
|
+
rule(/%#{identifier}/) { token Name::Tag; goto :tag }
|
|
80
|
+
rule /!!!#{dot}*\n/, Name::Namespace, :pop!
|
|
81
|
+
rule %r(
|
|
82
|
+
(/) (\[#{dot}*?\]) (#{dot}*\n)
|
|
83
|
+
)x do
|
|
84
|
+
groups Comment, Comment::Special, Comment
|
|
85
|
+
pop!
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
rule %r(/#{dot}*\n) do
|
|
89
|
+
token Comment
|
|
90
|
+
pop!
|
|
91
|
+
starts_block :html_comment_block
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
rule /-##{dot}*\n/ do
|
|
95
|
+
token Comment
|
|
96
|
+
pop!
|
|
97
|
+
starts_block :haml_comment_block
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
rule /-/ do
|
|
101
|
+
token Punctuation
|
|
102
|
+
reset_stack
|
|
103
|
+
ruby! :ruby_line
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# filters
|
|
107
|
+
rule /:(#{dot}*)\n/ do |m|
|
|
108
|
+
token Name::Decorator
|
|
109
|
+
pop!
|
|
110
|
+
starts_block :filter_block
|
|
111
|
+
|
|
112
|
+
filter_name = m[1].strip
|
|
113
|
+
|
|
114
|
+
@filter_lexer = self.filters[filter_name]
|
|
115
|
+
@filter_lexer.reset! unless @filter_lexer.nil?
|
|
116
|
+
|
|
117
|
+
puts " haml: filter #{filter_name.inspect} #{@filter_lexer.inspect}" if @debug
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
mixin :eval_or_plain
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
state :css do
|
|
124
|
+
rule(/\.#{identifier}/) { token Name::Class; goto :tag }
|
|
125
|
+
rule(/##{identifier}/) { token Name::Function; goto :tag }
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
state :tag do
|
|
129
|
+
mixin :css
|
|
130
|
+
rule(/[{]/) { token Punctuation; ruby! :ruby_tag }
|
|
131
|
+
rule(/\[#{dot}*?\]/) { delegate ruby }
|
|
132
|
+
|
|
133
|
+
rule /\(/, Punctuation, :html_attributes
|
|
134
|
+
rule /\s*\n/, Text, :pop!
|
|
135
|
+
|
|
136
|
+
# whitespace chompers
|
|
137
|
+
rule /[<>]{1,2}(?=[ \t=])/, Punctuation
|
|
138
|
+
|
|
139
|
+
mixin :eval_or_plain
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
state :plain do
|
|
143
|
+
rule(/([^#\n]|#[^{\n]|(\\\\)*\\#\{)+/) { delegate html }
|
|
144
|
+
mixin :interpolation
|
|
145
|
+
rule(/\n/) { token Text; reset_stack }
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
state :eval_or_plain do
|
|
149
|
+
rule /[&!]?==/, Punctuation, :plain
|
|
150
|
+
rule /[&!]?[=!]/ do
|
|
151
|
+
token Punctuation
|
|
152
|
+
reset_stack
|
|
153
|
+
ruby! :ruby_line
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
rule(//) { push :plain }
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
state :ruby_line do
|
|
160
|
+
rule /\n/, Text, :pop!
|
|
161
|
+
rule(/,[ \t]*\n/) { delegate ruby }
|
|
162
|
+
rule /[ ]\|[ \t]*\n/, Str::Escape
|
|
163
|
+
rule(/.*?(?=(,$| \|)?[ \t]*$)/) { delegate ruby }
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
state :ruby_tag do
|
|
167
|
+
mixin :ruby_inner
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
state :html_attributes do
|
|
171
|
+
rule /\s+/, Text
|
|
172
|
+
rule /#{identifier}\s*=/, Name::Attribute, :html_attribute_value
|
|
173
|
+
rule identifier, Name::Attribute
|
|
174
|
+
rule /\)/, Text, :pop!
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
state :html_attribute_value do
|
|
178
|
+
rule /\s+/, Text
|
|
179
|
+
rule ruby_var, Name::Variable, :pop!
|
|
180
|
+
rule /@#{ruby_var}/, Name::Variable::Instance, :pop!
|
|
181
|
+
rule /\$#{ruby_var}/, Name::Variable::Global, :pop!
|
|
182
|
+
rule /'(\\\\|\\'|[^'\n])*'/, Str, :pop!
|
|
183
|
+
rule /"(\\\\|\\"|[^"\n])*"/, Str, :pop!
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
state :html_comment_block do
|
|
187
|
+
rule /#{dot}+/, Comment
|
|
188
|
+
mixin :indented_block
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
state :haml_comment_block do
|
|
192
|
+
rule /#{dot}+/, Comment::Preproc
|
|
193
|
+
mixin :indented_block
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
state :filter_block do
|
|
197
|
+
rule /([^#\n]|#[^{\n]|(\\\\)*\\#\{)+/ do
|
|
198
|
+
if @filter_lexer
|
|
199
|
+
delegate @filter_lexer
|
|
200
|
+
else
|
|
201
|
+
token Name::Decorator
|
|
202
|
+
end
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
mixin :interpolation
|
|
206
|
+
mixin :indented_block
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
state :interpolation do
|
|
210
|
+
rule /#[{]/, Str::Interpol, :ruby
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
state :ruby do
|
|
214
|
+
rule /[}]/, Str::Interpol, :pop!
|
|
215
|
+
mixin :ruby_inner
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
state :ruby_inner do
|
|
219
|
+
rule(/[{]/) { delegate ruby; push :ruby_inner }
|
|
220
|
+
rule(/[}]/) { delegate ruby; pop! }
|
|
221
|
+
rule(/[^{}]+/) { delegate ruby }
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
state :indented_block do
|
|
225
|
+
rule(/\n/) { token Text; reset_stack }
|
|
226
|
+
end
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
end
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
|
|
3
|
+
module Rouge
|
|
4
|
+
module Lexers
|
|
5
|
+
class Handlebars < TemplateLexer
|
|
6
|
+
title "Handlebars"
|
|
7
|
+
desc 'the Handlebars and Mustache templating languages'
|
|
8
|
+
tag 'handlebars'
|
|
9
|
+
aliases 'hbs', 'mustache'
|
|
10
|
+
filenames '*.handlebars', '*.hbs', '*.mustache'
|
|
11
|
+
mimetypes 'text/x-handlebars', 'text/x-mustache'
|
|
12
|
+
|
|
13
|
+
id = %r([\w$-]+)
|
|
14
|
+
|
|
15
|
+
state :root do
|
|
16
|
+
# escaped slashes
|
|
17
|
+
rule(/\\{+/) { delegate parent }
|
|
18
|
+
|
|
19
|
+
# block comments
|
|
20
|
+
rule /{{!--/, Comment, :comment
|
|
21
|
+
rule /{{!.*?}}/, Comment
|
|
22
|
+
|
|
23
|
+
rule /{{{?/ do
|
|
24
|
+
token Keyword
|
|
25
|
+
push :stache
|
|
26
|
+
push :open_sym
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
rule(/(.+?)(?=\\|{{)/m) { delegate parent }
|
|
30
|
+
|
|
31
|
+
# if we get here, there's no more mustache tags, so we eat
|
|
32
|
+
# the rest of the doc
|
|
33
|
+
rule(/.+/m) { delegate parent }
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
state :comment do
|
|
37
|
+
rule(/{{/) { token Comment; push }
|
|
38
|
+
rule(/}}/) { token Comment; pop! }
|
|
39
|
+
rule(/[^{}]+/m) { token Comment }
|
|
40
|
+
rule(/[{}]/) { token Comment }
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
state :stache do
|
|
44
|
+
rule /}}}?/, Keyword, :pop!
|
|
45
|
+
rule /\s+/m, Text
|
|
46
|
+
rule /[=]/, Operator
|
|
47
|
+
rule /[\[\]]/, Punctuation
|
|
48
|
+
rule /[.](?=[}\s])/, Name::Variable
|
|
49
|
+
rule /[.][.]/, Name::Variable
|
|
50
|
+
rule %r([/.]), Punctuation
|
|
51
|
+
rule /"(\\.|.)*?"/, Str::Double
|
|
52
|
+
rule /'(\\.|.)*?'/, Str::Single
|
|
53
|
+
rule /\d+(?=}\s)/, Num
|
|
54
|
+
rule /(true|false)(?=[}\s])/, Keyword::Constant
|
|
55
|
+
rule /else(?=[}\s])/, Keyword
|
|
56
|
+
rule /this(?=[}\s])/, Name::Builtin::Pseudo
|
|
57
|
+
rule /@#{id}/, Name::Attribute
|
|
58
|
+
rule id, Name::Variable
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
state :open_sym do
|
|
62
|
+
rule %r([#/]) do
|
|
63
|
+
token Keyword
|
|
64
|
+
goto :block_name
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
rule /[>^&]/, Keyword
|
|
68
|
+
|
|
69
|
+
rule(//) { pop! }
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
state :block_name do
|
|
73
|
+
rule /if(?=[}\s])/, Keyword
|
|
74
|
+
rule id, Name::Namespace, :pop!
|
|
75
|
+
rule(//) { pop! }
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|