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.
Files changed (319) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +26 -0
  3. data/LICENSE +186 -0
  4. data/bin/rougify +17 -0
  5. data/lib/rouge.rb +82 -0
  6. data/lib/rouge/cli.rb +429 -0
  7. data/lib/rouge/demos/abap +6 -0
  8. data/lib/rouge/demos/actionscript +4 -0
  9. data/lib/rouge/demos/apache +21 -0
  10. data/lib/rouge/demos/apiblueprint +33 -0
  11. data/lib/rouge/demos/applescript +2 -0
  12. data/lib/rouge/demos/awk +4 -0
  13. data/lib/rouge/demos/biml +38 -0
  14. data/lib/rouge/demos/bsl +7 -0
  15. data/lib/rouge/demos/c +8 -0
  16. data/lib/rouge/demos/ceylon +7 -0
  17. data/lib/rouge/demos/cfscript +18 -0
  18. data/lib/rouge/demos/clojure +5 -0
  19. data/lib/rouge/demos/cmake +7 -0
  20. data/lib/rouge/demos/coffeescript +5 -0
  21. data/lib/rouge/demos/common_lisp +1 -0
  22. data/lib/rouge/demos/conf +4 -0
  23. data/lib/rouge/demos/console +6 -0
  24. data/lib/rouge/demos/coq +13 -0
  25. data/lib/rouge/demos/cpp +8 -0
  26. data/lib/rouge/demos/csharp +5 -0
  27. data/lib/rouge/demos/css +4 -0
  28. data/lib/rouge/demos/d +16 -0
  29. data/lib/rouge/demos/dart +6 -0
  30. data/lib/rouge/demos/diff +7 -0
  31. data/lib/rouge/demos/digdag +19 -0
  32. data/lib/rouge/demos/docker +9 -0
  33. data/lib/rouge/demos/dot +5 -0
  34. data/lib/rouge/demos/ecl +1 -0
  35. data/lib/rouge/demos/eiffel +30 -0
  36. data/lib/rouge/demos/elixir +1 -0
  37. data/lib/rouge/demos/elm +4 -0
  38. data/lib/rouge/demos/erb +1 -0
  39. data/lib/rouge/demos/erlang +7 -0
  40. data/lib/rouge/demos/factor +5 -0
  41. data/lib/rouge/demos/fortran +22 -0
  42. data/lib/rouge/demos/fsharp +12 -0
  43. data/lib/rouge/demos/gherkin +17 -0
  44. data/lib/rouge/demos/glsl +14 -0
  45. data/lib/rouge/demos/go +7 -0
  46. data/lib/rouge/demos/gradle +10 -0
  47. data/lib/rouge/demos/graphql +17 -0
  48. data/lib/rouge/demos/groovy +9 -0
  49. data/lib/rouge/demos/hack +5 -0
  50. data/lib/rouge/demos/haml +5 -0
  51. data/lib/rouge/demos/handlebars +7 -0
  52. data/lib/rouge/demos/haskell +6 -0
  53. data/lib/rouge/demos/html +8 -0
  54. data/lib/rouge/demos/http +14 -0
  55. data/lib/rouge/demos/hylang +10 -0
  56. data/lib/rouge/demos/idlang +8 -0
  57. data/lib/rouge/demos/igorpro +9 -0
  58. data/lib/rouge/demos/ini +4 -0
  59. data/lib/rouge/demos/io +11 -0
  60. data/lib/rouge/demos/irb +4 -0
  61. data/lib/rouge/demos/irb_output +2 -0
  62. data/lib/rouge/demos/java +5 -0
  63. data/lib/rouge/demos/javascript +1 -0
  64. data/lib/rouge/demos/jinja +9 -0
  65. data/lib/rouge/demos/json +1 -0
  66. data/lib/rouge/demos/json-doc +1 -0
  67. data/lib/rouge/demos/jsonnet +28 -0
  68. data/lib/rouge/demos/jsx +17 -0
  69. data/lib/rouge/demos/julia +11 -0
  70. data/lib/rouge/demos/kotlin +3 -0
  71. data/lib/rouge/demos/lasso +12 -0
  72. data/lib/rouge/demos/liquid +11 -0
  73. data/lib/rouge/demos/literate_coffeescript +3 -0
  74. data/lib/rouge/demos/literate_haskell +7 -0
  75. data/lib/rouge/demos/llvm +20 -0
  76. data/lib/rouge/demos/lua +12 -0
  77. data/lib/rouge/demos/make +6 -0
  78. data/lib/rouge/demos/markdown +4 -0
  79. data/lib/rouge/demos/matlab +6 -0
  80. data/lib/rouge/demos/moonscript +16 -0
  81. data/lib/rouge/demos/mosel +10 -0
  82. data/lib/rouge/demos/mxml +22 -0
  83. data/lib/rouge/demos/nasm +26 -0
  84. data/lib/rouge/demos/nginx +5 -0
  85. data/lib/rouge/demos/nim +27 -0
  86. data/lib/rouge/demos/nix +19 -0
  87. data/lib/rouge/demos/objective_c +18 -0
  88. data/lib/rouge/demos/ocaml +12 -0
  89. data/lib/rouge/demos/pascal +14 -0
  90. data/lib/rouge/demos/perl +5 -0
  91. data/lib/rouge/demos/php +3 -0
  92. data/lib/rouge/demos/plaintext +1 -0
  93. data/lib/rouge/demos/plist +142 -0
  94. data/lib/rouge/demos/pony +17 -0
  95. data/lib/rouge/demos/powershell +49 -0
  96. data/lib/rouge/demos/praat +26 -0
  97. data/lib/rouge/demos/prolog +9 -0
  98. data/lib/rouge/demos/prometheus +9 -0
  99. data/lib/rouge/demos/properties +7 -0
  100. data/lib/rouge/demos/protobuf +5 -0
  101. data/lib/rouge/demos/puppet +6 -0
  102. data/lib/rouge/demos/python +6 -0
  103. data/lib/rouge/demos/q +2 -0
  104. data/lib/rouge/demos/qml +9 -0
  105. data/lib/rouge/demos/r +8 -0
  106. data/lib/rouge/demos/racket +24 -0
  107. data/lib/rouge/demos/ruby +9 -0
  108. data/lib/rouge/demos/rust +12 -0
  109. data/lib/rouge/demos/sass +3 -0
  110. data/lib/rouge/demos/scala +3 -0
  111. data/lib/rouge/demos/scheme +4 -0
  112. data/lib/rouge/demos/scss +5 -0
  113. data/lib/rouge/demos/sed +4 -0
  114. data/lib/rouge/demos/shell +2 -0
  115. data/lib/rouge/demos/sieve +10 -0
  116. data/lib/rouge/demos/slim +17 -0
  117. data/lib/rouge/demos/smalltalk +6 -0
  118. data/lib/rouge/demos/smarty +12 -0
  119. data/lib/rouge/demos/sml +4 -0
  120. data/lib/rouge/demos/sql +1 -0
  121. data/lib/rouge/demos/swift +5 -0
  122. data/lib/rouge/demos/tap +5 -0
  123. data/lib/rouge/demos/tcl +1 -0
  124. data/lib/rouge/demos/tex +1 -0
  125. data/lib/rouge/demos/toml +9 -0
  126. data/lib/rouge/demos/tsx +17 -0
  127. data/lib/rouge/demos/tulip +13 -0
  128. data/lib/rouge/demos/turtle +26 -0
  129. data/lib/rouge/demos/twig +9 -0
  130. data/lib/rouge/demos/typescript +1 -0
  131. data/lib/rouge/demos/vala +8 -0
  132. data/lib/rouge/demos/vb +4 -0
  133. data/lib/rouge/demos/verilog +27 -0
  134. data/lib/rouge/demos/vhdl +23 -0
  135. data/lib/rouge/demos/viml +14 -0
  136. data/lib/rouge/demos/vue +11 -0
  137. data/lib/rouge/demos/wollok +11 -0
  138. data/lib/rouge/demos/xml +2 -0
  139. data/lib/rouge/demos/yaml +4 -0
  140. data/lib/rouge/formatter.rb +75 -0
  141. data/lib/rouge/formatters/html.rb +37 -0
  142. data/lib/rouge/formatters/html_inline.rb +30 -0
  143. data/lib/rouge/formatters/html_legacy.rb +44 -0
  144. data/lib/rouge/formatters/html_linewise.rb +27 -0
  145. data/lib/rouge/formatters/html_pygments.rb +16 -0
  146. data/lib/rouge/formatters/html_table.rb +61 -0
  147. data/lib/rouge/formatters/null.rb +19 -0
  148. data/lib/rouge/formatters/terminal256.rb +180 -0
  149. data/lib/rouge/guesser.rb +55 -0
  150. data/lib/rouge/guessers/disambiguation.rb +101 -0
  151. data/lib/rouge/guessers/filename.rb +25 -0
  152. data/lib/rouge/guessers/glob_mapping.rb +43 -0
  153. data/lib/rouge/guessers/mimetype.rb +14 -0
  154. data/lib/rouge/guessers/modeline.rb +44 -0
  155. data/lib/rouge/guessers/source.rb +29 -0
  156. data/lib/rouge/guessers/util.rb +32 -0
  157. data/lib/rouge/lexer.rb +461 -0
  158. data/lib/rouge/lexers/abap.rb +238 -0
  159. data/lib/rouge/lexers/actionscript.rb +195 -0
  160. data/lib/rouge/lexers/apache.rb +71 -0
  161. data/lib/rouge/lexers/apache/keywords.yml +764 -0
  162. data/lib/rouge/lexers/apiblueprint.rb +47 -0
  163. data/lib/rouge/lexers/apple_script.rb +367 -0
  164. data/lib/rouge/lexers/awk.rb +161 -0
  165. data/lib/rouge/lexers/biml.rb +41 -0
  166. data/lib/rouge/lexers/bsl.rb +81 -0
  167. data/lib/rouge/lexers/c.rb +212 -0
  168. data/lib/rouge/lexers/ceylon.rb +123 -0
  169. data/lib/rouge/lexers/cfscript.rb +153 -0
  170. data/lib/rouge/lexers/clojure.rb +112 -0
  171. data/lib/rouge/lexers/cmake.rb +206 -0
  172. data/lib/rouge/lexers/coffeescript.rb +174 -0
  173. data/lib/rouge/lexers/common_lisp.rb +345 -0
  174. data/lib/rouge/lexers/conf.rb +24 -0
  175. data/lib/rouge/lexers/console.rb +136 -0
  176. data/lib/rouge/lexers/coq.rb +187 -0
  177. data/lib/rouge/lexers/cpp.rb +78 -0
  178. data/lib/rouge/lexers/csharp.rb +114 -0
  179. data/lib/rouge/lexers/css.rb +273 -0
  180. data/lib/rouge/lexers/d.rb +176 -0
  181. data/lib/rouge/lexers/dart.rb +104 -0
  182. data/lib/rouge/lexers/diff.rb +31 -0
  183. data/lib/rouge/lexers/digdag.rb +68 -0
  184. data/lib/rouge/lexers/docker.rb +50 -0
  185. data/lib/rouge/lexers/dot.rb +68 -0
  186. data/lib/rouge/lexers/ecl.rb +138 -0
  187. data/lib/rouge/lexers/eiffel.rb +65 -0
  188. data/lib/rouge/lexers/elixir.rb +133 -0
  189. data/lib/rouge/lexers/elm.rb +89 -0
  190. data/lib/rouge/lexers/erb.rb +52 -0
  191. data/lib/rouge/lexers/erlang.rb +114 -0
  192. data/lib/rouge/lexers/factor.rb +302 -0
  193. data/lib/rouge/lexers/fortran.rb +176 -0
  194. data/lib/rouge/lexers/fsharp.rb +118 -0
  195. data/lib/rouge/lexers/gherkin.rb +137 -0
  196. data/lib/rouge/lexers/gherkin/keywords.rb +14 -0
  197. data/lib/rouge/lexers/glsl.rb +135 -0
  198. data/lib/rouge/lexers/go.rb +174 -0
  199. data/lib/rouge/lexers/gradle.rb +37 -0
  200. data/lib/rouge/lexers/graphql.rb +243 -0
  201. data/lib/rouge/lexers/groovy.rb +112 -0
  202. data/lib/rouge/lexers/hack.rb +48 -0
  203. data/lib/rouge/lexers/haml.rb +229 -0
  204. data/lib/rouge/lexers/handlebars.rb +79 -0
  205. data/lib/rouge/lexers/haskell.rb +182 -0
  206. data/lib/rouge/lexers/html.rb +139 -0
  207. data/lib/rouge/lexers/http.rb +80 -0
  208. data/lib/rouge/lexers/hylang.rb +93 -0
  209. data/lib/rouge/lexers/idlang.rb +310 -0
  210. data/lib/rouge/lexers/igorpro.rb +408 -0
  211. data/lib/rouge/lexers/ini.rb +53 -0
  212. data/lib/rouge/lexers/io.rb +68 -0
  213. data/lib/rouge/lexers/irb.rb +66 -0
  214. data/lib/rouge/lexers/java.rb +87 -0
  215. data/lib/rouge/lexers/javascript.rb +281 -0
  216. data/lib/rouge/lexers/jinja.rb +137 -0
  217. data/lib/rouge/lexers/json.rb +29 -0
  218. data/lib/rouge/lexers/json_doc.rb +23 -0
  219. data/lib/rouge/lexers/jsonnet.rb +151 -0
  220. data/lib/rouge/lexers/jsx.rb +102 -0
  221. data/lib/rouge/lexers/julia.rb +172 -0
  222. data/lib/rouge/lexers/kotlin.rb +79 -0
  223. data/lib/rouge/lexers/lasso.rb +214 -0
  224. data/lib/rouge/lexers/lasso/keywords.yml +446 -0
  225. data/lib/rouge/lexers/liquid.rb +287 -0
  226. data/lib/rouge/lexers/literate_coffeescript.rb +33 -0
  227. data/lib/rouge/lexers/literate_haskell.rb +36 -0
  228. data/lib/rouge/lexers/llvm.rb +80 -0
  229. data/lib/rouge/lexers/lua.rb +125 -0
  230. data/lib/rouge/lexers/lua/builtins.rb +22 -0
  231. data/lib/rouge/lexers/make.rb +112 -0
  232. data/lib/rouge/lexers/markdown.rb +154 -0
  233. data/lib/rouge/lexers/matlab.rb +71 -0
  234. data/lib/rouge/lexers/matlab/builtins.rb +11 -0
  235. data/lib/rouge/lexers/moonscript.rb +114 -0
  236. data/lib/rouge/lexers/mosel.rb +231 -0
  237. data/lib/rouge/lexers/mxml.rb +68 -0
  238. data/lib/rouge/lexers/nasm.rb +198 -0
  239. data/lib/rouge/lexers/nginx.rb +71 -0
  240. data/lib/rouge/lexers/nim.rb +152 -0
  241. data/lib/rouge/lexers/nix.rb +205 -0
  242. data/lib/rouge/lexers/objective_c.rb +194 -0
  243. data/lib/rouge/lexers/ocaml.rb +100 -0
  244. data/lib/rouge/lexers/pascal.rb +66 -0
  245. data/lib/rouge/lexers/perl.rb +196 -0
  246. data/lib/rouge/lexers/php.rb +193 -0
  247. data/lib/rouge/lexers/php/builtins.rb +194 -0
  248. data/lib/rouge/lexers/plain_text.rb +26 -0
  249. data/lib/rouge/lexers/plist.rb +45 -0
  250. data/lib/rouge/lexers/pony.rb +93 -0
  251. data/lib/rouge/lexers/powershell.rb +678 -0
  252. data/lib/rouge/lexers/praat.rb +350 -0
  253. data/lib/rouge/lexers/prolog.rb +59 -0
  254. data/lib/rouge/lexers/prometheus.rb +121 -0
  255. data/lib/rouge/lexers/properties.rb +51 -0
  256. data/lib/rouge/lexers/protobuf.rb +70 -0
  257. data/lib/rouge/lexers/puppet.rb +128 -0
  258. data/lib/rouge/lexers/python.rb +232 -0
  259. data/lib/rouge/lexers/q.rb +123 -0
  260. data/lib/rouge/lexers/qml.rb +73 -0
  261. data/lib/rouge/lexers/r.rb +89 -0
  262. data/lib/rouge/lexers/racket.rb +543 -0
  263. data/lib/rouge/lexers/ruby.rb +437 -0
  264. data/lib/rouge/lexers/rust.rb +192 -0
  265. data/lib/rouge/lexers/sass.rb +74 -0
  266. data/lib/rouge/lexers/sass/common.rb +180 -0
  267. data/lib/rouge/lexers/scala.rb +142 -0
  268. data/lib/rouge/lexers/scheme.rb +112 -0
  269. data/lib/rouge/lexers/scss.rb +34 -0
  270. data/lib/rouge/lexers/sed.rb +172 -0
  271. data/lib/rouge/lexers/shell.rb +189 -0
  272. data/lib/rouge/lexers/sieve.rb +96 -0
  273. data/lib/rouge/lexers/slim.rb +228 -0
  274. data/lib/rouge/lexers/smalltalk.rb +116 -0
  275. data/lib/rouge/lexers/smarty.rb +80 -0
  276. data/lib/rouge/lexers/sml.rb +344 -0
  277. data/lib/rouge/lexers/sql.rb +140 -0
  278. data/lib/rouge/lexers/swift.rb +181 -0
  279. data/lib/rouge/lexers/tap.rb +87 -0
  280. data/lib/rouge/lexers/tcl.rb +192 -0
  281. data/lib/rouge/lexers/tex.rb +69 -0
  282. data/lib/rouge/lexers/toml.rb +67 -0
  283. data/lib/rouge/lexers/tsx.rb +19 -0
  284. data/lib/rouge/lexers/tulip.rb +106 -0
  285. data/lib/rouge/lexers/turtle.rb +63 -0
  286. data/lib/rouge/lexers/twig.rb +39 -0
  287. data/lib/rouge/lexers/typescript.rb +22 -0
  288. data/lib/rouge/lexers/typescript/common.rb +33 -0
  289. data/lib/rouge/lexers/vala.rb +77 -0
  290. data/lib/rouge/lexers/vb.rb +164 -0
  291. data/lib/rouge/lexers/verilog.rb +164 -0
  292. data/lib/rouge/lexers/vhdl.rb +97 -0
  293. data/lib/rouge/lexers/viml.rb +101 -0
  294. data/lib/rouge/lexers/viml/keywords.rb +12 -0
  295. data/lib/rouge/lexers/vue.rb +122 -0
  296. data/lib/rouge/lexers/wollok.rb +103 -0
  297. data/lib/rouge/lexers/xml.rb +57 -0
  298. data/lib/rouge/lexers/yaml.rb +373 -0
  299. data/lib/rouge/plugins/redcarpet.rb +30 -0
  300. data/lib/rouge/regex_lexer.rb +441 -0
  301. data/lib/rouge/template_lexer.rb +20 -0
  302. data/lib/rouge/text_analyzer.rb +49 -0
  303. data/lib/rouge/theme.rb +213 -0
  304. data/lib/rouge/themes/base16.rb +130 -0
  305. data/lib/rouge/themes/colorful.rb +67 -0
  306. data/lib/rouge/themes/github.rb +71 -0
  307. data/lib/rouge/themes/gruvbox.rb +167 -0
  308. data/lib/rouge/themes/igor_pro.rb +20 -0
  309. data/lib/rouge/themes/molokai.rb +82 -0
  310. data/lib/rouge/themes/monokai.rb +92 -0
  311. data/lib/rouge/themes/monokai_sublime.rb +90 -0
  312. data/lib/rouge/themes/pastie.rb +69 -0
  313. data/lib/rouge/themes/thankful_eyes.rb +74 -0
  314. data/lib/rouge/themes/tulip.rb +69 -0
  315. data/lib/rouge/token.rb +182 -0
  316. data/lib/rouge/util.rb +101 -0
  317. data/lib/rouge/version.rb +7 -0
  318. data/rouge.gemspec +23 -0
  319. 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