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,80 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class Handlebars < TemplateLexer
7
+ title "Handlebars"
8
+ desc 'the Handlebars and Mustache templating languages'
9
+ tag 'handlebars'
10
+ aliases 'hbs', 'mustache'
11
+ filenames '*.handlebars', '*.hbs', '*.mustache'
12
+ mimetypes 'text/x-handlebars', 'text/x-mustache'
13
+
14
+ id = %r([\w$-]+)
15
+
16
+ state :root do
17
+ # escaped slashes
18
+ rule(/\\{+/) { delegate parent }
19
+
20
+ # block comments
21
+ rule /{{!--/, Comment, :comment
22
+ rule /{{!.*?}}/, Comment
23
+
24
+ rule /{{{?/ do
25
+ token Keyword
26
+ push :stache
27
+ push :open_sym
28
+ end
29
+
30
+ rule(/(.+?)(?=\\|{{)/m) { delegate parent }
31
+
32
+ # if we get here, there's no more mustache tags, so we eat
33
+ # the rest of the doc
34
+ rule(/.+/m) { delegate parent }
35
+ end
36
+
37
+ state :comment do
38
+ rule(/{{/) { token Comment; push }
39
+ rule(/}}/) { token Comment; pop! }
40
+ rule(/[^{}]+/m) { token Comment }
41
+ rule(/[{}]/) { token Comment }
42
+ end
43
+
44
+ state :stache do
45
+ rule /}}}?/, Keyword, :pop!
46
+ rule /\s+/m, Text
47
+ rule /[=]/, Operator
48
+ rule /[\[\]]/, Punctuation
49
+ rule /[.](?=[}\s])/, Name::Variable
50
+ rule /[.][.]/, Name::Variable
51
+ rule %r([/.]), Punctuation
52
+ rule /"(\\.|.)*?"/, Str::Double
53
+ rule /'(\\.|.)*?'/, Str::Single
54
+ rule /\d+(?=}\s)/, Num
55
+ rule /(true|false)(?=[}\s])/, Keyword::Constant
56
+ rule /else(?=[}\s])/, Keyword
57
+ rule /this(?=[}\s])/, Name::Builtin::Pseudo
58
+ rule /@#{id}/, Name::Attribute
59
+ rule id, Name::Variable
60
+ end
61
+
62
+ state :open_sym do
63
+ rule %r([#/]) do
64
+ token Keyword
65
+ goto :block_name
66
+ end
67
+
68
+ rule /[>^&]/, Keyword
69
+
70
+ rule(//) { pop! }
71
+ end
72
+
73
+ state :block_name do
74
+ rule /if(?=[}\s])/, Keyword
75
+ rule id, Name::Namespace, :pop!
76
+ rule(//) { pop! }
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,198 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class Haskell < RegexLexer
7
+ title "Haskell"
8
+ desc "The Haskell programming language (haskell.org)"
9
+
10
+ tag 'haskell'
11
+ aliases 'hs'
12
+ filenames '*.hs'
13
+ mimetypes 'text/x-haskell'
14
+
15
+ def self.detect?(text)
16
+ return true if text.shebang?('runhaskell')
17
+ end
18
+
19
+ reserved = %w(
20
+ _ case class data default deriving do else if in
21
+ infix[lr]? instance let newtype of then type where
22
+ )
23
+
24
+ ascii = %w(
25
+ NUL SOH [SE]TX EOT ENQ ACK BEL BS HT LF VT FF CR S[OI] DLE
26
+ DC[1-4] NAK SYN ETB CAN EM SUB ESC [FGRU]S SP DEL
27
+ )
28
+
29
+ state :basic do
30
+ rule /\s+/m, Text
31
+ rule /{-#/, Comment::Preproc, :comment_preproc
32
+ rule /{-/, Comment::Multiline, :comment
33
+ rule /^--\s+\|.*?$/, Comment::Doc
34
+ # this is complicated in order to support custom symbols
35
+ # like -->
36
+ rule /--(?![!#\$\%&*+.\/<=>?@\^\|_~]).*?$/, Comment::Single
37
+ end
38
+
39
+ # nested commenting
40
+ state :comment do
41
+ rule /-}/, Comment::Multiline, :pop!
42
+ rule /{-/, Comment::Multiline, :comment
43
+ rule /[^-{}]+/, Comment::Multiline
44
+ rule /[-{}]/, Comment::Multiline
45
+ end
46
+
47
+ state :comment_preproc do
48
+ rule /-}/, Comment::Preproc, :pop!
49
+ rule /{-/, Comment::Preproc, :comment
50
+ rule /[^-{}]+/, Comment::Preproc
51
+ rule /[-{}]/, Comment::Preproc
52
+ end
53
+
54
+ state :root do
55
+ mixin :basic
56
+
57
+ rule /\bimport\b/, Keyword::Reserved, :import
58
+ rule /\bmodule\b/, Keyword::Reserved, :module
59
+ rule /\b(?:#{reserved.join('|')})\b/, Keyword::Reserved
60
+ # not sure why, but ^ doesn't work here
61
+ # rule /^[_a-z][\w']*/, Name::Function
62
+ rule /[_a-z][\w']*/, Name
63
+ rule /[A-Z][\w']*/, Keyword::Type
64
+
65
+ # lambda operator
66
+ rule %r(\\(?![:!#\$\%&*+.\\/<=>?@^\|~-]+)), Name::Function
67
+ # special operators
68
+ rule %r((<-|::|->|=>|=)(?![:!#\$\%&*+.\\/<=>?@^\|~-]+)), Operator
69
+ # constructor/type operators
70
+ rule %r(:[:!#\$\%&*+.\\/<=>?@^\|~-]*), Operator
71
+ # other operators
72
+ rule %r([:!#\$\%&*+.\\/<=>?@^\|~-]+), Operator
73
+
74
+ rule /\d+e[+-]?\d+/i, Num::Float
75
+ rule /\d+\.\d+(e[+-]?\d+)?/i, Num::Float
76
+ rule /0o[0-7]+/i, Num::Oct
77
+ rule /0x[\da-f]+/i, Num::Hex
78
+ rule /\d+/, Num::Integer
79
+
80
+ rule /'/, Str::Char, :character
81
+ rule /"/, Str, :string
82
+
83
+ rule /\[\s*\]/, Keyword::Type
84
+ rule /\(\s*\)/, Name::Builtin
85
+
86
+ # Quasiquotations
87
+ rule /(\[)([_a-z][\w']*)(\|)/ do |m|
88
+ token Operator, m[1]
89
+ token Name, m[2]
90
+ token Operator, m[3]
91
+ push :quasiquotation
92
+ end
93
+
94
+ rule /[\[\](),;`{}]/, Punctuation
95
+ end
96
+
97
+ state :import do
98
+ rule /\s+/, Text
99
+ rule /"/, Str, :string
100
+ rule /\bqualified\b/, Keyword
101
+ # import X as Y
102
+ rule /([A-Z][\w.]*)(\s+)(as)(\s+)([A-Z][a-zA-Z0-9_.]*)/ do
103
+ groups(
104
+ Name::Namespace, # X
105
+ Text, Keyword, # as
106
+ Text, Name # Y
107
+ )
108
+ pop!
109
+ end
110
+
111
+ # import X hiding (functions)
112
+ rule /([A-Z][\w.]*)(\s+)(hiding)(\s+)(\()/ do
113
+ groups(
114
+ Name::Namespace, # X
115
+ Text, Keyword, # hiding
116
+ Text, Punctuation # (
117
+ )
118
+ goto :funclist
119
+ end
120
+
121
+ # import X (functions)
122
+ rule /([A-Z][\w.]*)(\s+)(\()/ do
123
+ groups(
124
+ Name::Namespace, # X
125
+ Text,
126
+ Punctuation # (
127
+ )
128
+ goto :funclist
129
+ end
130
+
131
+ rule /[\w.]+/, Name::Namespace, :pop!
132
+ end
133
+
134
+ state :module do
135
+ rule /\s+/, Text
136
+ # module Foo (functions)
137
+ rule /([A-Z][\w.]*)(\s+)(\()/ do
138
+ groups Name::Namespace, Text, Punctuation
139
+ push :funclist
140
+ end
141
+
142
+ rule /\bwhere\b/, Keyword::Reserved, :pop!
143
+
144
+ rule /[A-Z][a-zA-Z0-9_.]*/, Name::Namespace, :pop!
145
+ end
146
+
147
+ state :funclist do
148
+ mixin :basic
149
+ rule /[A-Z]\w*/, Keyword::Type
150
+ rule /(_[\w\']+|[a-z][\w\']*)/, Name::Function
151
+ rule /,/, Punctuation
152
+ rule /[:!#\$\%&*+.\\\/<=>?@^\|~-]+/, Operator
153
+ rule /\(/, Punctuation, :funclist
154
+ rule /\)/, Punctuation, :pop!
155
+ end
156
+
157
+ state :character do
158
+ rule /\\/ do
159
+ token Str::Escape
160
+ goto :character_end
161
+ push :escape
162
+ end
163
+
164
+ rule /./ do
165
+ token Str::Char
166
+ goto :character_end
167
+ end
168
+ end
169
+
170
+ state :character_end do
171
+ rule /'/, Str::Char, :pop!
172
+ rule /./, Error, :pop!
173
+ end
174
+
175
+ state :quasiquotation do
176
+ rule /\|\]/, Operator, :pop!
177
+ rule /[^\|]+/m, Text
178
+ rule /\|/, Text
179
+ end
180
+
181
+ state :string do
182
+ rule /"/, Str, :pop!
183
+ rule /\\/, Str::Escape, :escape
184
+ rule /[^\\"]+/, Str
185
+ end
186
+
187
+ state :escape do
188
+ rule /[abfnrtv"'&\\]/, Str::Escape, :pop!
189
+ rule /\^[\]\[A-Z@\^_]/, Str::Escape, :pop!
190
+ rule /#{ascii.join('|')}/, Str::Escape, :pop!
191
+ rule /o[0-7]+/i, Str::Escape, :pop!
192
+ rule /x[\da-f]+/i, Str::Escape, :pop!
193
+ rule /\d+/, Str::Escape, :pop!
194
+ rule /\s+\\/, Str::Escape, :pop!
195
+ end
196
+ end
197
+ end
198
+ end
@@ -0,0 +1,163 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class Hcl < RegexLexer
7
+ tag 'hcl'
8
+
9
+ title 'Hashicorp Configuration Language'
10
+ desc 'Hashicorp Configuration Language, used by Terraform and other Hashicorp tools'
11
+
12
+ state :multiline_comment do
13
+ rule %r([*]/), Comment::Multiline, :pop!
14
+ rule %r([^*/]+), Comment::Multiline
15
+ rule %r([*/]), Comment::Multiline
16
+ end
17
+
18
+ state :comments_and_whitespace do
19
+ rule /\s+/, Text
20
+ rule %r(//.*?$), Comment::Single
21
+ rule %r(#.*?$), Comment::Single
22
+ rule %r(/[*]), Comment::Multiline, :multiline_comment
23
+ end
24
+
25
+ state :primitives do
26
+ rule /[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?([kKmMgG]b?)?/, Num::Float
27
+ rule /[0-9]+([kKmMgG]b?)?/, Num::Integer
28
+
29
+ rule /"/, Str::Double, :dq
30
+ rule /'/, Str::Single, :sq
31
+ rule /(<<-?)(\s*)(\'?)(\\?)(\w+)(\3)/ do |m|
32
+ groups Operator, Text, Str::Heredoc, Str::Heredoc, Name::Constant, Str::Heredoc
33
+ @heredocstr = Regexp.escape(m[5])
34
+ push :heredoc
35
+ end
36
+ end
37
+
38
+ def self.keywords
39
+ @keywords ||= Set.new %w()
40
+ end
41
+
42
+ def self.declarations
43
+ @declarations ||= Set.new %w()
44
+ end
45
+
46
+ def self.reserved
47
+ @reserved ||= Set.new %w()
48
+ end
49
+
50
+ def self.constants
51
+ @constants ||= Set.new %w(true false null)
52
+ end
53
+
54
+ def self.builtins
55
+ @builtins ||= %w()
56
+ end
57
+
58
+ id = /[$a-z_][a-z0-9_]*/io
59
+
60
+ state :root do
61
+ mixin :comments_and_whitespace
62
+ mixin :primitives
63
+
64
+ rule /\{/ do
65
+ token Punctuation
66
+ push :hash
67
+ end
68
+ rule /\[/ do
69
+ token Punctuation
70
+ push :array
71
+ end
72
+
73
+ rule id do |m|
74
+ if self.class.keywords.include? m[0]
75
+ token Keyword
76
+ push :composite
77
+ elsif self.class.declarations.include? m[0]
78
+ token Keyword::Declaration
79
+ push :composite
80
+ elsif self.class.reserved.include? m[0]
81
+ token Keyword::Reserved
82
+ elsif self.class.constants.include? m[0]
83
+ token Keyword::Constant
84
+ elsif self.class.builtins.include? m[0]
85
+ token Name::Builtin
86
+ else
87
+ token Name::Other
88
+ push :composite
89
+ end
90
+ end
91
+ end
92
+
93
+ state :composite do
94
+ mixin :comments_and_whitespace
95
+
96
+ rule /[{]/ do
97
+ token Punctuation
98
+ pop!
99
+ push :hash
100
+ end
101
+
102
+ rule /[\[]/ do
103
+ token Punctuation
104
+ pop!
105
+ push :array
106
+ end
107
+
108
+ mixin :root
109
+
110
+ rule //, Text, :pop!
111
+ end
112
+
113
+ state :hash do
114
+ mixin :comments_and_whitespace
115
+
116
+ rule /\=/, Punctuation
117
+ rule /\}/, Punctuation, :pop!
118
+
119
+ mixin :root
120
+ end
121
+
122
+ state :array do
123
+ mixin :comments_and_whitespace
124
+
125
+ rule /,/, Punctuation
126
+ rule /\]/, Punctuation, :pop!
127
+
128
+ mixin :root
129
+ end
130
+
131
+ state :dq do
132
+ rule /[^\\"]+/, Str::Double
133
+ rule /\\"/, Str::Escape
134
+ rule /"/, Str::Double, :pop!
135
+ end
136
+
137
+ state :sq do
138
+ rule /[^\\']+/, Str::Single
139
+ rule /\\'/, Str::Escape
140
+ rule /'/, Str::Single, :pop!
141
+ end
142
+
143
+ state :heredoc do
144
+ rule /\n/, Str::Heredoc, :heredoc_nl
145
+ rule /[^$\n]+/, Str::Heredoc
146
+ rule /[$]/, Str::Heredoc
147
+ end
148
+
149
+ state :heredoc_nl do
150
+ rule /\s*(\w+)\s*\n/ do |m|
151
+ if m[1] == @heredocstr
152
+ token Name::Constant
153
+ pop! 2
154
+ else
155
+ token Str::Heredoc
156
+ end
157
+ end
158
+
159
+ rule(//) { pop! }
160
+ end
161
+ end
162
+ end
163
+ end
@@ -0,0 +1,140 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class HTML < RegexLexer
7
+ title "HTML"
8
+ desc "HTML, the markup language of the web"
9
+ tag 'html'
10
+ filenames '*.htm', '*.html', '*.xhtml'
11
+ mimetypes 'text/html', 'application/xhtml+xml'
12
+
13
+ def self.detect?(text)
14
+ return true if text.doctype?(/\bhtml\b/i)
15
+ return true if text =~ /<\s*html\b/
16
+ end
17
+
18
+ start do
19
+ @javascript = Javascript.new(options)
20
+ @css = CSS.new(options)
21
+ end
22
+
23
+ state :root do
24
+ rule /[^<&]+/m, Text
25
+ rule /&\S*?;/, Name::Entity
26
+ rule /<!DOCTYPE .*?>/im, Comment::Preproc
27
+ rule /<!\[CDATA\[.*?\]\]>/m, Comment::Preproc
28
+ rule /<!--/, Comment, :comment
29
+ rule /<\?.*?\?>/m, Comment::Preproc # php? really?
30
+
31
+ rule /<\s*script\s*/m do
32
+ token Name::Tag
33
+ @javascript.reset!
34
+ push :script_content
35
+ push :tag
36
+ end
37
+
38
+ rule /<\s*style\s*/m do
39
+ token Name::Tag
40
+ @css.reset!
41
+ @lang = @css
42
+ push :style_content
43
+ push :tag
44
+ end
45
+
46
+ rule /<\//, Name::Tag, :tag_end
47
+ rule /</, Name::Tag, :tag_start
48
+
49
+ rule %r(<\s*[a-zA-Z0-9:-]+), Name::Tag, :tag # opening tags
50
+ rule %r(<\s*/\s*[a-zA-Z0-9:-]+\s*>), Name::Tag # closing tags
51
+ end
52
+
53
+ state :tag_end do
54
+ mixin :tag_end_end
55
+ rule /[a-zA-Z0-9:-]+/ do
56
+ token Name::Tag
57
+ goto :tag_end_end
58
+ end
59
+ end
60
+
61
+ state :tag_end_end do
62
+ rule /\s+/, Text
63
+ rule />/, Name::Tag, :pop!
64
+ end
65
+
66
+ state :tag_start do
67
+ rule /\s+/, Text
68
+
69
+ rule /[a-zA-Z0-9:-]+/ do
70
+ token Name::Tag
71
+ goto :tag
72
+ end
73
+
74
+ rule(//) { goto :tag }
75
+ end
76
+
77
+ state :comment do
78
+ rule /[^-]+/, Comment
79
+ rule /-->/, Comment, :pop!
80
+ rule /-/, Comment
81
+ end
82
+
83
+ state :tag do
84
+ rule /\s+/m, Text
85
+ rule /[a-zA-Z0-9_:-]+\s*=\s*/m, Name::Attribute, :attr
86
+ rule /[a-zA-Z0-9_:-]+/, Name::Attribute
87
+ rule %r(/?\s*>)m, Name::Tag, :pop!
88
+ end
89
+
90
+ state :attr do
91
+ # TODO: are backslash escapes valid here?
92
+ rule /"/ do
93
+ token Str
94
+ goto :dq
95
+ end
96
+
97
+ rule /'/ do
98
+ token Str
99
+ goto :sq
100
+ end
101
+
102
+ rule /[^\s>]+/, Str, :pop!
103
+ end
104
+
105
+ state :dq do
106
+ rule /"/, Str, :pop!
107
+ rule /[^"]+/, Str
108
+ end
109
+
110
+ state :sq do
111
+ rule /'/, Str, :pop!
112
+ rule /[^']+/, Str
113
+ end
114
+
115
+ state :script_content do
116
+ rule %r([^<]+) do
117
+ delegate @javascript
118
+ end
119
+
120
+ rule %r(<\s*/\s*script\s*>)m, Name::Tag, :pop!
121
+
122
+ rule %r(<) do
123
+ delegate @javascript
124
+ end
125
+ end
126
+
127
+ state :style_content do
128
+ rule /[^<]+/ do
129
+ delegate @lang
130
+ end
131
+
132
+ rule %r(<\s*/\s*style\s*>)m, Name::Tag, :pop!
133
+
134
+ rule /</ do
135
+ delegate @lang
136
+ end
137
+ end
138
+ end
139
+ end
140
+ end
@@ -0,0 +1,81 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class HTTP < RegexLexer
7
+ tag 'http'
8
+ title "HTTP"
9
+ desc 'http requests and responses'
10
+
11
+ def self.http_methods
12
+ @http_methods ||= %w(GET POST PUT DELETE HEAD OPTIONS TRACE PATCH)
13
+ end
14
+
15
+ def content_lexer
16
+ return Lexers::PlainText unless @content_type
17
+
18
+ @content_lexer ||= Lexer.guess_by_mimetype(@content_type)
19
+ rescue Lexer::AmbiguousGuess
20
+ @content_lexer = Lexers::PlainText
21
+ end
22
+
23
+ start { @content_type = 'text/plain' }
24
+
25
+ state :root do
26
+ # request
27
+ rule %r(
28
+ (#{HTTP.http_methods.join('|')})([ ]+) # method
29
+ ([^ ]+)([ ]+) # path
30
+ (HTTPS?)(/)(1[.][01])(\r?\n|$) # http version
31
+ )ox do
32
+ groups(
33
+ Name::Function, Text,
34
+ Name::Namespace, Text,
35
+ Keyword, Operator, Num, Text
36
+ )
37
+
38
+ push :headers
39
+ end
40
+
41
+ # response
42
+ rule %r(
43
+ (HTTPS?)(/)(1[.][01])([ ]+) # http version
44
+ (\d{3})([ ]+) # status
45
+ ([^\r\n]+)(\r?\n|$) # status message
46
+ )x do
47
+ groups(
48
+ Keyword, Operator, Num, Text,
49
+ Num, Text,
50
+ Name::Exception, Text
51
+ )
52
+ push :headers
53
+ end
54
+ end
55
+
56
+ state :headers do
57
+ rule /([^\s:]+)( *)(:)( *)([^\r\n]+)(\r?\n|$)/ do |m|
58
+ key = m[1]
59
+ value = m[5]
60
+ if key.strip.casecmp('content-type').zero?
61
+ @content_type = value.split(';')[0].downcase
62
+ end
63
+
64
+ groups Name::Attribute, Text, Punctuation, Text, Str, Text
65
+ end
66
+
67
+ rule /([^\r\n]+)(\r?\n|$)/ do
68
+ groups Str, Text
69
+ end
70
+
71
+ rule /\r?\n/, Text, :content
72
+ end
73
+
74
+ state :content do
75
+ rule /.+/m do |m|
76
+ delegate(content_lexer)
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end