rouge-alda 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +28 -0
  3. data/LICENSE +186 -0
  4. data/bin/rougify +18 -0
  5. data/lib/rouge/cli.rb +432 -0
  6. data/lib/rouge/demos/abap +6 -0
  7. data/lib/rouge/demos/actionscript +4 -0
  8. data/lib/rouge/demos/alda +10 -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/crystal +45 -0
  27. data/lib/rouge/demos/csharp +5 -0
  28. data/lib/rouge/demos/css +4 -0
  29. data/lib/rouge/demos/d +16 -0
  30. data/lib/rouge/demos/dart +6 -0
  31. data/lib/rouge/demos/diff +7 -0
  32. data/lib/rouge/demos/digdag +19 -0
  33. data/lib/rouge/demos/docker +9 -0
  34. data/lib/rouge/demos/dot +5 -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/hcl +7 -0
  54. data/lib/rouge/demos/html +8 -0
  55. data/lib/rouge/demos/http +14 -0
  56. data/lib/rouge/demos/hylang +10 -0
  57. data/lib/rouge/demos/idlang +8 -0
  58. data/lib/rouge/demos/igorpro +9 -0
  59. data/lib/rouge/demos/ini +4 -0
  60. data/lib/rouge/demos/io +11 -0
  61. data/lib/rouge/demos/irb +4 -0
  62. data/lib/rouge/demos/irb_output +2 -0
  63. data/lib/rouge/demos/java +5 -0
  64. data/lib/rouge/demos/javascript +1 -0
  65. data/lib/rouge/demos/jinja +9 -0
  66. data/lib/rouge/demos/json +1 -0
  67. data/lib/rouge/demos/json-doc +1 -0
  68. data/lib/rouge/demos/jsonnet +28 -0
  69. data/lib/rouge/demos/jsp +29 -0
  70. data/lib/rouge/demos/jsx +17 -0
  71. data/lib/rouge/demos/julia +11 -0
  72. data/lib/rouge/demos/kotlin +3 -0
  73. data/lib/rouge/demos/lasso +12 -0
  74. data/lib/rouge/demos/liquid +11 -0
  75. data/lib/rouge/demos/literate_coffeescript +3 -0
  76. data/lib/rouge/demos/literate_haskell +7 -0
  77. data/lib/rouge/demos/llvm +20 -0
  78. data/lib/rouge/demos/lua +12 -0
  79. data/lib/rouge/demos/m68k +16 -0
  80. data/lib/rouge/demos/make +6 -0
  81. data/lib/rouge/demos/markdown +4 -0
  82. data/lib/rouge/demos/mathematica +8 -0
  83. data/lib/rouge/demos/matlab +6 -0
  84. data/lib/rouge/demos/moonscript +16 -0
  85. data/lib/rouge/demos/mosel +10 -0
  86. data/lib/rouge/demos/mxml +22 -0
  87. data/lib/rouge/demos/nasm +26 -0
  88. data/lib/rouge/demos/nginx +5 -0
  89. data/lib/rouge/demos/nim +27 -0
  90. data/lib/rouge/demos/nix +19 -0
  91. data/lib/rouge/demos/objective_c +18 -0
  92. data/lib/rouge/demos/ocaml +12 -0
  93. data/lib/rouge/demos/pascal +14 -0
  94. data/lib/rouge/demos/perl +5 -0
  95. data/lib/rouge/demos/php +3 -0
  96. data/lib/rouge/demos/plaintext +1 -0
  97. data/lib/rouge/demos/plist +142 -0
  98. data/lib/rouge/demos/pony +17 -0
  99. data/lib/rouge/demos/powershell +49 -0
  100. data/lib/rouge/demos/praat +26 -0
  101. data/lib/rouge/demos/prolog +9 -0
  102. data/lib/rouge/demos/prometheus +9 -0
  103. data/lib/rouge/demos/properties +7 -0
  104. data/lib/rouge/demos/protobuf +5 -0
  105. data/lib/rouge/demos/puppet +6 -0
  106. data/lib/rouge/demos/python +6 -0
  107. data/lib/rouge/demos/q +2 -0
  108. data/lib/rouge/demos/qml +9 -0
  109. data/lib/rouge/demos/r +8 -0
  110. data/lib/rouge/demos/racket +24 -0
  111. data/lib/rouge/demos/ruby +9 -0
  112. data/lib/rouge/demos/rust +12 -0
  113. data/lib/rouge/demos/sass +3 -0
  114. data/lib/rouge/demos/scala +3 -0
  115. data/lib/rouge/demos/scheme +4 -0
  116. data/lib/rouge/demos/scss +5 -0
  117. data/lib/rouge/demos/sed +4 -0
  118. data/lib/rouge/demos/shell +2 -0
  119. data/lib/rouge/demos/sieve +10 -0
  120. data/lib/rouge/demos/slim +17 -0
  121. data/lib/rouge/demos/smalltalk +6 -0
  122. data/lib/rouge/demos/smarty +12 -0
  123. data/lib/rouge/demos/sml +4 -0
  124. data/lib/rouge/demos/sqf +14 -0
  125. data/lib/rouge/demos/sql +1 -0
  126. data/lib/rouge/demos/swift +5 -0
  127. data/lib/rouge/demos/tap +5 -0
  128. data/lib/rouge/demos/tcl +1 -0
  129. data/lib/rouge/demos/terraform +31 -0
  130. data/lib/rouge/demos/tex +1 -0
  131. data/lib/rouge/demos/toml +9 -0
  132. data/lib/rouge/demos/tsx +17 -0
  133. data/lib/rouge/demos/tulip +13 -0
  134. data/lib/rouge/demos/turtle +26 -0
  135. data/lib/rouge/demos/twig +9 -0
  136. data/lib/rouge/demos/typescript +1 -0
  137. data/lib/rouge/demos/vala +8 -0
  138. data/lib/rouge/demos/vb +4 -0
  139. data/lib/rouge/demos/verilog +27 -0
  140. data/lib/rouge/demos/vhdl +23 -0
  141. data/lib/rouge/demos/viml +14 -0
  142. data/lib/rouge/demos/vue +11 -0
  143. data/lib/rouge/demos/wollok +11 -0
  144. data/lib/rouge/demos/xml +2 -0
  145. data/lib/rouge/demos/yaml +4 -0
  146. data/lib/rouge/formatter.rb +76 -0
  147. data/lib/rouge/formatters/html.rb +38 -0
  148. data/lib/rouge/formatters/html_inline.rb +31 -0
  149. data/lib/rouge/formatters/html_legacy.rb +45 -0
  150. data/lib/rouge/formatters/html_linewise.rb +28 -0
  151. data/lib/rouge/formatters/html_pygments.rb +18 -0
  152. data/lib/rouge/formatters/html_table.rb +62 -0
  153. data/lib/rouge/formatters/null.rb +20 -0
  154. data/lib/rouge/formatters/terminal256.rb +181 -0
  155. data/lib/rouge/guesser.rb +57 -0
  156. data/lib/rouge/guessers/disambiguation.rb +106 -0
  157. data/lib/rouge/guessers/filename.rb +27 -0
  158. data/lib/rouge/guessers/glob_mapping.rb +45 -0
  159. data/lib/rouge/guessers/mimetype.rb +16 -0
  160. data/lib/rouge/guessers/modeline.rb +46 -0
  161. data/lib/rouge/guessers/source.rb +31 -0
  162. data/lib/rouge/guessers/util.rb +34 -0
  163. data/lib/rouge/lexer.rb +462 -0
  164. data/lib/rouge/lexers/abap.rb +240 -0
  165. data/lib/rouge/lexers/actionscript.rb +196 -0
  166. data/lib/rouge/lexers/alda.rb +43 -0
  167. data/lib/rouge/lexers/apache/keywords.yml +764 -0
  168. data/lib/rouge/lexers/apache.rb +73 -0
  169. data/lib/rouge/lexers/apiblueprint.rb +49 -0
  170. data/lib/rouge/lexers/apple_script.rb +369 -0
  171. data/lib/rouge/lexers/awk.rb +162 -0
  172. data/lib/rouge/lexers/biml.rb +43 -0
  173. data/lib/rouge/lexers/bsl.rb +82 -0
  174. data/lib/rouge/lexers/c.rb +213 -0
  175. data/lib/rouge/lexers/ceylon.rb +124 -0
  176. data/lib/rouge/lexers/cfscript.rb +154 -0
  177. data/lib/rouge/lexers/clojure.rb +113 -0
  178. data/lib/rouge/lexers/cmake.rb +207 -0
  179. data/lib/rouge/lexers/coffeescript.rb +175 -0
  180. data/lib/rouge/lexers/common_lisp.rb +346 -0
  181. data/lib/rouge/lexers/conf.rb +25 -0
  182. data/lib/rouge/lexers/console.rb +137 -0
  183. data/lib/rouge/lexers/coq.rb +188 -0
  184. data/lib/rouge/lexers/cpp.rb +79 -0
  185. data/lib/rouge/lexers/crystal.rb +430 -0
  186. data/lib/rouge/lexers/csharp.rb +115 -0
  187. data/lib/rouge/lexers/css.rb +274 -0
  188. data/lib/rouge/lexers/d.rb +177 -0
  189. data/lib/rouge/lexers/dart.rb +105 -0
  190. data/lib/rouge/lexers/diff.rb +33 -0
  191. data/lib/rouge/lexers/digdag.rb +70 -0
  192. data/lib/rouge/lexers/docker.rb +51 -0
  193. data/lib/rouge/lexers/dot.rb +69 -0
  194. data/lib/rouge/lexers/eiffel.rb +66 -0
  195. data/lib/rouge/lexers/elixir.rb +134 -0
  196. data/lib/rouge/lexers/elm.rb +90 -0
  197. data/lib/rouge/lexers/erb.rb +53 -0
  198. data/lib/rouge/lexers/erlang.rb +115 -0
  199. data/lib/rouge/lexers/factor.rb +303 -0
  200. data/lib/rouge/lexers/fortran.rb +178 -0
  201. data/lib/rouge/lexers/fsharp.rb +119 -0
  202. data/lib/rouge/lexers/gherkin/keywords.rb +16 -0
  203. data/lib/rouge/lexers/gherkin.rb +138 -0
  204. data/lib/rouge/lexers/glsl.rb +136 -0
  205. data/lib/rouge/lexers/go.rb +175 -0
  206. data/lib/rouge/lexers/gradle.rb +38 -0
  207. data/lib/rouge/lexers/graphql.rb +254 -0
  208. data/lib/rouge/lexers/groovy.rb +113 -0
  209. data/lib/rouge/lexers/hack.rb +49 -0
  210. data/lib/rouge/lexers/haml.rb +230 -0
  211. data/lib/rouge/lexers/handlebars.rb +80 -0
  212. data/lib/rouge/lexers/haskell.rb +198 -0
  213. data/lib/rouge/lexers/hcl.rb +163 -0
  214. data/lib/rouge/lexers/html.rb +140 -0
  215. data/lib/rouge/lexers/http.rb +81 -0
  216. data/lib/rouge/lexers/hylang.rb +94 -0
  217. data/lib/rouge/lexers/idlang.rb +312 -0
  218. data/lib/rouge/lexers/igorpro.rb +664 -0
  219. data/lib/rouge/lexers/ini.rb +54 -0
  220. data/lib/rouge/lexers/io.rb +69 -0
  221. data/lib/rouge/lexers/irb.rb +67 -0
  222. data/lib/rouge/lexers/java.rb +88 -0
  223. data/lib/rouge/lexers/javascript.rb +283 -0
  224. data/lib/rouge/lexers/jinja.rb +138 -0
  225. data/lib/rouge/lexers/json.rb +30 -0
  226. data/lib/rouge/lexers/json_doc.rb +24 -0
  227. data/lib/rouge/lexers/jsonnet.rb +152 -0
  228. data/lib/rouge/lexers/jsp.rb +120 -0
  229. data/lib/rouge/lexers/jsx.rb +104 -0
  230. data/lib/rouge/lexers/julia.rb +167 -0
  231. data/lib/rouge/lexers/kotlin.rb +127 -0
  232. data/lib/rouge/lexers/lasso/keywords.yml +446 -0
  233. data/lib/rouge/lexers/lasso.rb +215 -0
  234. data/lib/rouge/lexers/liquid.rb +288 -0
  235. data/lib/rouge/lexers/literate_coffeescript.rb +34 -0
  236. data/lib/rouge/lexers/literate_haskell.rb +37 -0
  237. data/lib/rouge/lexers/llvm.rb +81 -0
  238. data/lib/rouge/lexers/lua/builtins.rb +24 -0
  239. data/lib/rouge/lexers/lua.rb +126 -0
  240. data/lib/rouge/lexers/m68k.rb +144 -0
  241. data/lib/rouge/lexers/make.rb +113 -0
  242. data/lib/rouge/lexers/markdown.rb +155 -0
  243. data/lib/rouge/lexers/mathematica/builtins.rb +13 -0
  244. data/lib/rouge/lexers/mathematica.rb +96 -0
  245. data/lib/rouge/lexers/matlab/builtins.rb +13 -0
  246. data/lib/rouge/lexers/matlab.rb +72 -0
  247. data/lib/rouge/lexers/moonscript.rb +115 -0
  248. data/lib/rouge/lexers/mosel.rb +232 -0
  249. data/lib/rouge/lexers/mxml.rb +69 -0
  250. data/lib/rouge/lexers/nasm.rb +199 -0
  251. data/lib/rouge/lexers/nginx.rb +72 -0
  252. data/lib/rouge/lexers/nim.rb +153 -0
  253. data/lib/rouge/lexers/nix.rb +211 -0
  254. data/lib/rouge/lexers/objective_c.rb +195 -0
  255. data/lib/rouge/lexers/ocaml.rb +101 -0
  256. data/lib/rouge/lexers/pascal.rb +67 -0
  257. data/lib/rouge/lexers/perl.rb +201 -0
  258. data/lib/rouge/lexers/php/builtins.rb +196 -0
  259. data/lib/rouge/lexers/php.rb +194 -0
  260. data/lib/rouge/lexers/plain_text.rb +27 -0
  261. data/lib/rouge/lexers/plist.rb +47 -0
  262. data/lib/rouge/lexers/pony.rb +94 -0
  263. data/lib/rouge/lexers/powershell.rb +679 -0
  264. data/lib/rouge/lexers/praat.rb +351 -0
  265. data/lib/rouge/lexers/prolog.rb +61 -0
  266. data/lib/rouge/lexers/prometheus.rb +123 -0
  267. data/lib/rouge/lexers/properties.rb +52 -0
  268. data/lib/rouge/lexers/protobuf.rb +71 -0
  269. data/lib/rouge/lexers/puppet.rb +129 -0
  270. data/lib/rouge/lexers/python.rb +247 -0
  271. data/lib/rouge/lexers/q.rb +125 -0
  272. data/lib/rouge/lexers/qml.rb +74 -0
  273. data/lib/rouge/lexers/r.rb +90 -0
  274. data/lib/rouge/lexers/racket.rb +545 -0
  275. data/lib/rouge/lexers/ruby.rb +439 -0
  276. data/lib/rouge/lexers/rust.rb +198 -0
  277. data/lib/rouge/lexers/sass/common.rb +181 -0
  278. data/lib/rouge/lexers/sass.rb +75 -0
  279. data/lib/rouge/lexers/scala.rb +143 -0
  280. data/lib/rouge/lexers/scheme.rb +113 -0
  281. data/lib/rouge/lexers/scss.rb +35 -0
  282. data/lib/rouge/lexers/sed.rb +173 -0
  283. data/lib/rouge/lexers/shell.rb +190 -0
  284. data/lib/rouge/lexers/sieve.rb +97 -0
  285. data/lib/rouge/lexers/slim.rb +229 -0
  286. data/lib/rouge/lexers/smalltalk.rb +117 -0
  287. data/lib/rouge/lexers/smarty.rb +81 -0
  288. data/lib/rouge/lexers/sml.rb +345 -0
  289. data/lib/rouge/lexers/sqf/commands.rb +15 -0
  290. data/lib/rouge/lexers/sqf.rb +109 -0
  291. data/lib/rouge/lexers/sql.rb +141 -0
  292. data/lib/rouge/lexers/swift.rb +182 -0
  293. data/lib/rouge/lexers/tap.rb +89 -0
  294. data/lib/rouge/lexers/tcl.rb +193 -0
  295. data/lib/rouge/lexers/terraform.rb +105 -0
  296. data/lib/rouge/lexers/tex.rb +70 -0
  297. data/lib/rouge/lexers/toml.rb +68 -0
  298. data/lib/rouge/lexers/tsx.rb +20 -0
  299. data/lib/rouge/lexers/tulip.rb +108 -0
  300. data/lib/rouge/lexers/turtle.rb +64 -0
  301. data/lib/rouge/lexers/twig.rb +40 -0
  302. data/lib/rouge/lexers/typescript/common.rb +34 -0
  303. data/lib/rouge/lexers/typescript.rb +23 -0
  304. data/lib/rouge/lexers/vala.rb +78 -0
  305. data/lib/rouge/lexers/vb.rb +165 -0
  306. data/lib/rouge/lexers/verilog.rb +165 -0
  307. data/lib/rouge/lexers/vhdl.rb +98 -0
  308. data/lib/rouge/lexers/viml/keywords.rb +14 -0
  309. data/lib/rouge/lexers/viml.rb +102 -0
  310. data/lib/rouge/lexers/vue.rb +124 -0
  311. data/lib/rouge/lexers/wollok.rb +104 -0
  312. data/lib/rouge/lexers/xml.rb +58 -0
  313. data/lib/rouge/lexers/yaml.rb +374 -0
  314. data/lib/rouge/plugins/redcarpet.rb +31 -0
  315. data/lib/rouge/regex_lexer.rb +442 -0
  316. data/lib/rouge/template_lexer.rb +21 -0
  317. data/lib/rouge/text_analyzer.rb +50 -0
  318. data/lib/rouge/theme.rb +214 -0
  319. data/lib/rouge/themes/base16.rb +131 -0
  320. data/lib/rouge/themes/colorful.rb +68 -0
  321. data/lib/rouge/themes/github.rb +72 -0
  322. data/lib/rouge/themes/gruvbox.rb +168 -0
  323. data/lib/rouge/themes/igor_pro.rb +21 -0
  324. data/lib/rouge/themes/molokai.rb +83 -0
  325. data/lib/rouge/themes/monokai.rb +93 -0
  326. data/lib/rouge/themes/monokai_sublime.rb +92 -0
  327. data/lib/rouge/themes/pastie.rb +70 -0
  328. data/lib/rouge/themes/thankful_eyes.rb +75 -0
  329. data/lib/rouge/themes/tulip.rb +70 -0
  330. data/lib/rouge/token.rb +183 -0
  331. data/lib/rouge/util.rb +102 -0
  332. data/lib/rouge/version.rb +8 -0
  333. data/lib/rouge.rb +84 -0
  334. data/rouge.gemspec +25 -0
  335. metadata +384 -0
@@ -0,0 +1,254 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class GraphQL < RegexLexer
7
+ desc 'GraphQL'
8
+ tag 'graphql'
9
+ filenames '*.graphql', '*.gql'
10
+ mimetypes 'application/graphql'
11
+
12
+ name = /[_A-Za-z][_0-9A-Za-z]*/
13
+
14
+ state :root do
15
+ rule /\b(?:query|mutation|subscription)\b/, Keyword, :query_definition
16
+ rule /\{/ do
17
+ token Punctuation
18
+ push :query_definition
19
+ push :selection_set
20
+ end
21
+
22
+ rule /\bfragment\b/, Keyword, :fragment_definition
23
+
24
+ rule /\b(?:type|interface|enum)\b/, Keyword, :type_definition
25
+ rule /\b(?:input|schema)\b/, Keyword, :type_definition
26
+
27
+ rule /\bunion\b/, Keyword, :union_definition
28
+
29
+ mixin :basic
30
+
31
+ # Markdown descriptions
32
+ rule /(""")(.*?)(""")/m do |m|
33
+ token Str::Double, m[1]
34
+ delegate Markdown, m[2]
35
+ token Str::Double, m[3]
36
+ end
37
+ end
38
+
39
+ state :basic do
40
+ rule /\s+/m, Text::Whitespace
41
+ rule /#.*$/, Comment
42
+
43
+ rule /[!,]/, Punctuation
44
+ end
45
+
46
+ state :has_directives do
47
+ rule /(@#{name})(\s*)(\()/ do
48
+ groups Keyword, Text::Whitespace, Punctuation
49
+ push :arguments
50
+ end
51
+ rule /@#{name}\b/, Keyword
52
+ end
53
+
54
+ state :fragment_definition do
55
+ rule /\bon\b/, Keyword
56
+
57
+ mixin :query_definition
58
+ end
59
+
60
+ state :query_definition do
61
+ mixin :has_directives
62
+
63
+ rule /\b#{name}\b/, Name
64
+ rule /\(/, Punctuation, :variable_definitions
65
+ rule /\{/, Punctuation, :selection_set
66
+
67
+ mixin :basic
68
+ end
69
+
70
+ state :type_definition do
71
+ rule /\bimplements\b/, Keyword
72
+ rule /\b#{name}\b/, Name
73
+ rule /\(/, Punctuation, :variable_definitions
74
+ rule /\{/, Punctuation, :type_definition_set
75
+
76
+ mixin :basic
77
+ end
78
+
79
+ state :union_definition do
80
+ rule /\b#{name}\b/, Name
81
+ rule /\=/, Punctuation, :union_definition_variant
82
+
83
+ mixin :basic
84
+ end
85
+
86
+ state :union_definition_variant do
87
+ rule /\b#{name}\b/ do
88
+ token Name
89
+ pop!
90
+ push :union_definition_pipe
91
+ end
92
+
93
+ mixin :basic
94
+ end
95
+
96
+ state :union_definition_pipe do
97
+ rule /\|/ do
98
+ token Punctuation
99
+ pop!
100
+ push :union_definition_variant
101
+ end
102
+
103
+ rule /(?!\||\s+|#[^\n]*)/ do
104
+ pop! 2
105
+ end
106
+
107
+ mixin :basic
108
+ end
109
+
110
+ state :type_definition_set do
111
+ rule /\}/ do
112
+ token Punctuation
113
+ pop! 2
114
+ end
115
+
116
+ rule /\b(#{name})(\s*)(\()/ do
117
+ groups Name, Text::Whitespace, Punctuation
118
+ push :variable_definitions
119
+ end
120
+ rule /\b#{name}\b/, Name
121
+
122
+ rule /:/, Punctuation, :type_names
123
+
124
+ mixin :basic
125
+ end
126
+
127
+ state :arguments do
128
+ rule /\)/ do
129
+ token Punctuation
130
+ pop!
131
+ end
132
+
133
+ rule /\b#{name}\b/, Name
134
+ rule /:/, Punctuation, :value
135
+
136
+ mixin :basic
137
+ end
138
+
139
+ state :variable_definitions do
140
+ rule /\)/ do
141
+ token Punctuation
142
+ pop!
143
+ end
144
+
145
+ rule /\$#{name}\b/, Name::Variable
146
+ rule /\b#{name}\b/, Name
147
+ rule /:/, Punctuation, :type_names
148
+ rule /\=/, Punctuation, :value
149
+
150
+ mixin :basic
151
+ end
152
+
153
+ state :type_names do
154
+ rule /\b(?:Int|Float|String|Boolean|ID)\b/, Name::Builtin, :pop!
155
+ rule /\b#{name}\b/, Name, :pop!
156
+
157
+ rule /\[/, Punctuation, :type_name_list
158
+
159
+ mixin :basic
160
+ end
161
+
162
+ state :type_name_list do
163
+ rule /\b(?:Int|Float|String|Boolean|ID)\b/, Name::Builtin
164
+ rule /\b#{name}\b/, Name
165
+
166
+ rule /\]/ do
167
+ token Punctuation
168
+ pop! 2
169
+ end
170
+
171
+ mixin :basic
172
+ end
173
+
174
+ state :selection_set do
175
+ mixin :has_directives
176
+
177
+ rule /\}/ do
178
+ token Punctuation
179
+ pop!
180
+ pop! if state?(:query_definition) || state?(:fragment_definition)
181
+ end
182
+
183
+ rule /\b(#{name})(\s*)(\()/ do
184
+ groups Name, Text::Whitespace, Punctuation
185
+ push :arguments
186
+ end
187
+
188
+ rule /\b(#{name})(\s*)(:)/ do
189
+ groups Name, Text::Whitespace, Punctuation
190
+ end
191
+
192
+ rule /\b#{name}\b/, Name
193
+
194
+ rule /(\.\.\.)(\s+)(on)\b/ do
195
+ groups Punctuation, Text::Whitespace, Keyword
196
+ end
197
+ rule /\.\.\./, Punctuation
198
+
199
+ rule /\{/, Punctuation, :selection_set
200
+
201
+ mixin :basic
202
+ end
203
+
204
+ state :list do
205
+ rule /\]/ do
206
+ token Punctuation
207
+ pop!
208
+ pop! if state?(:value)
209
+ end
210
+
211
+ mixin :value
212
+ end
213
+
214
+ state :object do
215
+ rule /\}/ do
216
+ token Punctuation
217
+ pop!
218
+ pop! if state?(:value)
219
+ end
220
+
221
+ rule /\b(#{name})(\s*)(:)/ do
222
+ groups Name, Text::Whitespace, Punctuation
223
+ push :value
224
+ end
225
+
226
+ mixin :basic
227
+ end
228
+
229
+ state :value do
230
+ pop_unless_list = ->(t) {
231
+ ->(m) {
232
+ token t
233
+ pop! unless state?(:list)
234
+ }
235
+ }
236
+
237
+ # Multiline strings
238
+ rule /""".*?"""/m, Str::Double
239
+
240
+ rule /\$#{name}\b/, &pop_unless_list[Name::Variable]
241
+ rule /\b(?:true|false|null)\b/, &pop_unless_list[Keyword::Constant]
242
+ rule /[+-]?[0-9]+\.[0-9]+(?:[eE][+-]?[0-9]+)?/, &pop_unless_list[Num::Float]
243
+ rule /[+-]?[1-9][0-9]*(?:[eE][+-]?[0-9]+)?/, &pop_unless_list[Num::Integer]
244
+ rule /"(\\[\\"]|[^"])*"/, &pop_unless_list[Str::Double]
245
+ rule /\b#{name}\b/, &pop_unless_list[Name]
246
+
247
+ rule /\{/, Punctuation, :object
248
+ rule /\[/, Punctuation, :list
249
+
250
+ mixin :basic
251
+ end
252
+ end
253
+ end
254
+ end
@@ -0,0 +1,113 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class Groovy < RegexLexer
7
+ title "Groovy"
8
+ desc 'The Groovy programming language (http://www.groovy-lang.org/)'
9
+ tag 'groovy'
10
+ filenames '*.groovy', 'Jenkinsfile'
11
+ mimetypes 'text/x-groovy'
12
+
13
+ ws = %r((?:\s|//.*?\n|/[*].*?[*]/)+)
14
+
15
+ def self.detect?(text)
16
+ return true if text.shebang?(/groovy/)
17
+ end
18
+
19
+ def self.keywords
20
+ @keywords ||= Set.new %w(
21
+ assert break case catch continue default do else finally for
22
+ if goto instanceof new return switch this throw try while in as
23
+ )
24
+ end
25
+
26
+ def self.declarations
27
+ @declarations ||= Set.new %w(
28
+ abstract const enum extends final implements native private
29
+ protected public static strictfp super synchronized throws
30
+ transient volatile
31
+ )
32
+ end
33
+
34
+ def self.types
35
+ @types ||= Set.new %w(
36
+ def boolean byte char double float int long short void
37
+ )
38
+ end
39
+
40
+ def self.constants
41
+ @constants ||= Set.new %w(true false null)
42
+ end
43
+
44
+ state :root do
45
+ rule %r(^
46
+ (\s*(?:\w[\w\d.\[\]]*\s+)+?) # return arguments
47
+ (\w[\w\d]*) # method name
48
+ (\s*) (\() # signature start
49
+ )x do |m|
50
+ delegate self.clone, m[1]
51
+ token Name::Function, m[2]
52
+ token Text, m[3]
53
+ token Operator, m[4]
54
+ end
55
+
56
+ # whitespace
57
+ rule /[^\S\n]+/, Text
58
+ rule %r(//.*?$), Comment::Single
59
+ rule %r(/[*].*?[*]/)m, Comment::Multiline
60
+ rule /@\w[\w\d.]*/, Name::Decorator
61
+ rule /(class|interface|trait)\b/, Keyword::Declaration, :class
62
+ rule /package\b/, Keyword::Namespace, :import
63
+ rule /import\b/, Keyword::Namespace, :import
64
+
65
+ # TODO: highlight backslash escapes
66
+ rule /""".*?"""/m, Str::Double
67
+ rule /'''.*?'''/m, Str::Single
68
+
69
+ rule /"(\\.|\\\n|.)*?"/, Str::Double
70
+ rule /'(\\.|\\\n|.)*?'/, Str::Single
71
+ rule %r(\$/(\$.|.)*?/\$)m, Str
72
+ rule %r(/(\\.|\\\n|.)*?/), Str
73
+ rule /'\\.'|'[^\\]'|'\\u[0-9a-f]{4}'/, Str::Char
74
+ rule /(\.)([a-zA-Z_][a-zA-Z0-9_]*)/ do
75
+ groups Operator, Name::Attribute
76
+ end
77
+
78
+ rule /[a-zA-Z_][a-zA-Z0-9_]*:/, Name::Label
79
+ rule /[a-zA-Z_\$][a-zA-Z0-9_]*/ do |m|
80
+ if self.class.keywords.include? m[0]
81
+ token Keyword
82
+ elsif self.class.declarations.include? m[0]
83
+ token Keyword::Declaration
84
+ elsif self.class.types.include? m[0]
85
+ token Keyword::Type
86
+ elsif self.class.constants.include? m[0]
87
+ token Keyword::Constant
88
+ else
89
+ token Name
90
+ end
91
+ end
92
+
93
+ rule %r([~^*!%&\[\](){}<>\|+=:;,./?-]), Operator
94
+
95
+ # numbers
96
+ rule /\d+\.\d+([eE]\d+)?[fd]?/, Num::Float
97
+ rule /0x[0-9a-f]+/, Num::Hex
98
+ rule /[0-9]+L?/, Num::Integer
99
+ rule /\n/, Text
100
+ end
101
+
102
+ state :class do
103
+ rule /\s+/, Text
104
+ rule /\w[\w\d]*/, Name::Class, :pop!
105
+ end
106
+
107
+ state :import do
108
+ rule /\s+/, Text
109
+ rule /[\w\d.]+[*]?/, Name::Namespace, :pop!
110
+ end
111
+ end
112
+ end
113
+ end
@@ -0,0 +1,49 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ load_lexer 'php.rb'
7
+
8
+ class Hack < PHP
9
+ title 'Hack'
10
+ desc 'The Hack programming language (hacklang.org)'
11
+ tag 'hack'
12
+ aliases 'hack', 'hh'
13
+ filenames '*.php', '*.hh'
14
+
15
+ def self.detect?(text)
16
+ return true if /<\?hh/ =~ text
17
+ return true if text.shebang?('hhvm')
18
+ return true if /async function [a-zA-Z]/ =~ text
19
+ return true if /\): Awaitable</ =~ text
20
+
21
+ return false
22
+ end
23
+
24
+ def self.keywords
25
+ @hh_keywords ||= super.merge Set.new %w(
26
+ type newtype enum
27
+ as super
28
+ async await Awaitable
29
+ vec dict keyset
30
+ void int string bool float double
31
+ arraykey num Stringish
32
+ )
33
+ end
34
+
35
+ prepend :template do
36
+ rule /<\?hh(\s*\/\/\s*(strict|decl|partial))?$/, Comment::Preproc, :php
37
+ end
38
+
39
+ prepend :php do
40
+ rule %r((/\*\s*)(HH_(?:IGNORE_ERROR|FIXME)\[\d+\])([^*]*)(\*/)) do
41
+ groups Comment::Preproc, Comment::Preproc, Comment::Multiline, Comment::Preproc
42
+ end
43
+
44
+ rule %r(// UNSAFE(?:_EXPR|_BLOCK)?), Comment::Preproc
45
+ rule %r(/\*\s*UNSAFE_EXPR\s*\*/), Comment::Preproc
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,230 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ # A lexer for the Haml templating system for Ruby.
7
+ # @see http://haml.info
8
+ class Haml < RegexLexer
9
+ include Indentation
10
+
11
+ title "Haml"
12
+ desc "The Haml templating system for Ruby (haml.info)"
13
+
14
+ tag 'haml'
15
+ aliases 'HAML'
16
+
17
+ filenames '*.haml'
18
+ mimetypes 'text/x-haml'
19
+
20
+ option 'filters[filter_name]', 'Mapping of lexers to use for haml :filters'
21
+ attr_reader :filters
22
+ # @option opts :filters
23
+ # A hash of filter name to lexer of how various filters should be
24
+ # highlighted. By default, :javascript, :css, :ruby, and :erb
25
+ # are supported.
26
+ def initialize(opts={})
27
+ super
28
+
29
+ default_filters = {
30
+ 'javascript' => Javascript.new(options),
31
+ 'css' => CSS.new(options),
32
+ 'ruby' => ruby,
33
+ 'erb' => ERB.new(options),
34
+ 'markdown' => Markdown.new(options),
35
+ 'sass' => Sass.new(options),
36
+ # TODO
37
+ # 'textile' => Textile.new(options),
38
+ # 'maruku' => Maruku.new(options),
39
+ }
40
+
41
+ @filters = hash_option(:filters, default_filters) do |v|
42
+ as_lexer(v) || PlainText.new(@options)
43
+ end
44
+ end
45
+
46
+ def ruby
47
+ @ruby ||= Ruby.new(@options)
48
+ end
49
+
50
+ def html
51
+ @html ||= HTML.new(@options)
52
+ end
53
+
54
+ def ruby!(state)
55
+ ruby.reset!
56
+ push state
57
+ end
58
+
59
+ start { ruby.reset!; html.reset! }
60
+
61
+ identifier = /[\w:-]+/
62
+ ruby_var = /[a-z]\w*/
63
+
64
+ # Haml can include " |\n" anywhere,
65
+ # which is ignored and used to wrap long lines.
66
+ # To accomodate this, use this custom faux dot instead.
67
+ dot = /[ ]\|\n(?=.*[ ]\|)|./
68
+
69
+ # In certain places, a comma at the end of the line
70
+ # allows line wrapping as well.
71
+ comma_dot = /,\s*\n|#{dot}/
72
+
73
+ state :root do
74
+ rule /\s*\n/, Text
75
+ rule(/\s*/) { |m| token Text; indentation(m[0]) }
76
+ end
77
+
78
+ state :content do
79
+ mixin :css
80
+ rule(/%#{identifier}/) { token Name::Tag; goto :tag }
81
+ rule /!!!#{dot}*\n/, Name::Namespace, :pop!
82
+ rule %r(
83
+ (/) (\[#{dot}*?\]) (#{dot}*\n)
84
+ )x do
85
+ groups Comment, Comment::Special, Comment
86
+ pop!
87
+ end
88
+
89
+ rule %r(/#{dot}*\n) do
90
+ token Comment
91
+ pop!
92
+ starts_block :html_comment_block
93
+ end
94
+
95
+ rule /-##{dot}*\n/ do
96
+ token Comment
97
+ pop!
98
+ starts_block :haml_comment_block
99
+ end
100
+
101
+ rule /-/ do
102
+ token Punctuation
103
+ reset_stack
104
+ ruby! :ruby_line
105
+ end
106
+
107
+ # filters
108
+ rule /:(#{dot}*)\n/ do |m|
109
+ token Name::Decorator
110
+ pop!
111
+ starts_block :filter_block
112
+
113
+ filter_name = m[1].strip
114
+
115
+ @filter_lexer = self.filters[filter_name]
116
+ @filter_lexer.reset! unless @filter_lexer.nil?
117
+
118
+ puts " haml: filter #{filter_name.inspect} #{@filter_lexer.inspect}" if @debug
119
+ end
120
+
121
+ mixin :eval_or_plain
122
+ end
123
+
124
+ state :css do
125
+ rule(/\.#{identifier}/) { token Name::Class; goto :tag }
126
+ rule(/##{identifier}/) { token Name::Function; goto :tag }
127
+ end
128
+
129
+ state :tag do
130
+ mixin :css
131
+ rule(/[{]/) { token Punctuation; ruby! :ruby_tag }
132
+ rule(/\[#{dot}*?\]/) { delegate ruby }
133
+
134
+ rule /\(/, Punctuation, :html_attributes
135
+ rule /\s*\n/, Text, :pop!
136
+
137
+ # whitespace chompers
138
+ rule /[<>]{1,2}(?=[ \t=])/, Punctuation
139
+
140
+ mixin :eval_or_plain
141
+ end
142
+
143
+ state :plain do
144
+ rule(/([^#\n]|#[^{\n]|(\\\\)*\\#\{)+/) { delegate html }
145
+ mixin :interpolation
146
+ rule(/\n/) { token Text; reset_stack }
147
+ end
148
+
149
+ state :eval_or_plain do
150
+ rule /[&!]?==/, Punctuation, :plain
151
+ rule /[&!]?[=!]/ do
152
+ token Punctuation
153
+ reset_stack
154
+ ruby! :ruby_line
155
+ end
156
+
157
+ rule(//) { push :plain }
158
+ end
159
+
160
+ state :ruby_line do
161
+ rule /\n/, Text, :pop!
162
+ rule(/,[ \t]*\n/) { delegate ruby }
163
+ rule /[ ]\|[ \t]*\n/, Str::Escape
164
+ rule(/.*?(?=(,$| \|)?[ \t]*$)/) { delegate ruby }
165
+ end
166
+
167
+ state :ruby_tag do
168
+ mixin :ruby_inner
169
+ end
170
+
171
+ state :html_attributes do
172
+ rule /\s+/, Text
173
+ rule /#{identifier}\s*=/, Name::Attribute, :html_attribute_value
174
+ rule identifier, Name::Attribute
175
+ rule /\)/, Text, :pop!
176
+ end
177
+
178
+ state :html_attribute_value do
179
+ rule /\s+/, Text
180
+ rule ruby_var, Name::Variable, :pop!
181
+ rule /@#{ruby_var}/, Name::Variable::Instance, :pop!
182
+ rule /\$#{ruby_var}/, Name::Variable::Global, :pop!
183
+ rule /'(\\\\|\\'|[^'\n])*'/, Str, :pop!
184
+ rule /"(\\\\|\\"|[^"\n])*"/, Str, :pop!
185
+ end
186
+
187
+ state :html_comment_block do
188
+ rule /#{dot}+/, Comment
189
+ mixin :indented_block
190
+ end
191
+
192
+ state :haml_comment_block do
193
+ rule /#{dot}+/, Comment::Preproc
194
+ mixin :indented_block
195
+ end
196
+
197
+ state :filter_block do
198
+ rule /([^#\n]|#[^{\n]|(\\\\)*\\#\{)+/ do
199
+ if @filter_lexer
200
+ delegate @filter_lexer
201
+ else
202
+ token Name::Decorator
203
+ end
204
+ end
205
+
206
+ mixin :interpolation
207
+ mixin :indented_block
208
+ end
209
+
210
+ state :interpolation do
211
+ rule /#[{]/, Str::Interpol, :ruby
212
+ end
213
+
214
+ state :ruby do
215
+ rule /[}]/, Str::Interpol, :pop!
216
+ mixin :ruby_inner
217
+ end
218
+
219
+ state :ruby_inner do
220
+ rule(/[{]/) { delegate ruby; push :ruby_inner }
221
+ rule(/[}]/) { delegate ruby; pop! }
222
+ rule(/[^{}]+/) { delegate ruby }
223
+ end
224
+
225
+ state :indented_block do
226
+ rule(/\n/) { token Text; reset_stack }
227
+ end
228
+ end
229
+ end
230
+ end