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,193 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class TCL < RegexLexer
7
+ title "Tcl"
8
+ desc "The Tool Command Language (tcl.tk)"
9
+ tag 'tcl'
10
+ filenames '*.tcl'
11
+ mimetypes 'text/x-tcl', 'text/x-script.tcl', 'application/x-tcl'
12
+
13
+ def self.detect?(text)
14
+ return true if text.shebang? 'tclsh'
15
+ return true if text.shebang? 'wish'
16
+ return true if text.shebang? 'jimsh'
17
+ end
18
+
19
+ KEYWORDS = %w(
20
+ after apply array break catch continue elseif else error
21
+ eval expr for foreach global if namespace proc rename return
22
+ set switch then trace unset update uplevel upvar variable
23
+ vwait while
24
+ )
25
+
26
+ BUILTINS = %w(
27
+ append bgerror binary cd chan clock close concat dde dict
28
+ encoding eof exec exit fblocked fconfigure fcopy file
29
+ fileevent flush format gets glob history http incr info interp
30
+ join lappend lassign lindex linsert list llength load loadTk
31
+ lrange lrepeat lreplace lreverse lsearch lset lsort mathfunc
32
+ mathop memory msgcat open package pid pkg::create pkg_mkIndex
33
+ platform platform::shell puts pwd re_syntax read refchan
34
+ regexp registry regsub scan seek socket source split string
35
+ subst tell time tm unknown unload
36
+ )
37
+
38
+ OPEN = %w| \( \[ \{ " |
39
+ CLOSE = %w| \) \] \} |
40
+ ALL = OPEN + CLOSE
41
+ END_LINE = CLOSE + %w(; \n)
42
+ END_WORD = END_LINE + %w(\s)
43
+
44
+ CHARS = lambda { |list| Regexp.new %/[#{list.join}]/ }
45
+ NOT_CHARS = lambda { |list| Regexp.new %/[^#{list.join}]/ }
46
+
47
+ state :word do
48
+ rule /\{\*\}/, Keyword
49
+
50
+ mixin :brace_abort
51
+ mixin :interp
52
+ rule /\{/, Punctuation, :brace
53
+ rule /\(/, Punctuation, :paren
54
+ rule /"/, Str::Double, :string
55
+ rule /#{NOT_CHARS[END_WORD]}+?(?=#{CHARS[OPEN+['\\\\']]})/, Text
56
+ end
57
+
58
+ def self.gen_command_state(name='')
59
+ state(:"command#{name}") do
60
+ mixin :word
61
+
62
+ rule /##{NOT_CHARS[END_LINE]}+/, Comment::Single
63
+
64
+ rule /(?=#{CHARS[END_WORD]})/ do
65
+ push :"params#{name}"
66
+ end
67
+
68
+ rule /#{NOT_CHARS[END_WORD]}+/ do |m|
69
+ if KEYWORDS.include? m[0]
70
+ token Keyword
71
+ elsif BUILTINS.include? m[0]
72
+ token Name::Builtin
73
+ else
74
+ token Text
75
+ end
76
+ end
77
+
78
+ mixin :whitespace
79
+ end
80
+ end
81
+
82
+ def self.gen_delimiter_states(name, close, opts={})
83
+ gen_command_state("_in_#{name}")
84
+
85
+ state :"params_in_#{name}" do
86
+ rule close do
87
+ token Punctuation
88
+ pop! 2
89
+ end
90
+
91
+ # mismatched delimiters. Braced strings with mismatched
92
+ # closing delimiters should be okay, since this is standard
93
+ # practice, like {]]]]}
94
+ if opts[:strict]
95
+ rule CHARS[CLOSE - [close]], Error
96
+ else
97
+ rule CHARS[CLOSE - [close]], Text
98
+ end
99
+
100
+ mixin :params
101
+ end
102
+
103
+ state name do
104
+ rule close, Punctuation, :pop!
105
+ mixin :"command_in_#{name}"
106
+ end
107
+ end
108
+
109
+
110
+ # tcl is freaking impossible. If we're in braces and we encounter
111
+ # a close brace, we have to drop everything and close the brace.
112
+ # This is so silly things like {abc"def} and {abc]def} don't b0rk
113
+ # everything after them.
114
+
115
+ # TODO: TCL seems to have this aborting behavior quite a lot.
116
+ # such things as [ abc" ] are a runtime error, but will still
117
+ # parse. Currently something like this will muck up the lex.
118
+ state :brace_abort do
119
+ rule /}/ do
120
+ if in_state? :brace
121
+ pop! until state? :brace
122
+ pop!
123
+ token Punctuation
124
+ else
125
+ token Error
126
+ end
127
+ end
128
+ end
129
+
130
+ state :params do
131
+ rule /;/, Punctuation, :pop!
132
+ rule /\n/, Text, :pop!
133
+ rule /else|elseif|then/, Keyword
134
+ mixin :word
135
+ mixin :whitespace
136
+ rule /#{NOT_CHARS[END_WORD]}+/, Text
137
+ end
138
+
139
+ gen_delimiter_states :brace, /\}/, :strict => false
140
+ gen_delimiter_states :paren, /\)/, :strict => true
141
+ gen_delimiter_states :bracket, /\]/, :strict => true
142
+ gen_command_state
143
+
144
+ state :root do
145
+ mixin :command
146
+ end
147
+
148
+ state :whitespace do
149
+ # not a multiline regex because we want to capture \n sometimes
150
+ rule /\s+/, Text
151
+ end
152
+
153
+ state :interp do
154
+ rule /\[/, Punctuation, :bracket
155
+ rule /\$[a-z0-9.:-]+/, Name::Variable
156
+ rule /\$\{.*?\}/m, Name::Variable
157
+ rule /\$/, Text
158
+
159
+ # escape sequences
160
+ rule /\\[0-7]{3}/, Str::Escape
161
+ rule /\\x[0-9a-f]{2}/i, Str::Escape
162
+ rule /\\u[0-9a-f]{4}/i, Str::Escape
163
+ rule /\\./m, Str::Escape
164
+ end
165
+
166
+ state :string do
167
+ rule /"/, Str::Double, :pop!
168
+ mixin :interp
169
+ rule /[^\\\[\$"{}]+/m, Str::Double
170
+
171
+ # strings have to keep count of their internal braces, to support
172
+ # for example { "{ }" }.
173
+ rule /{/ do
174
+ @brace_count ||= 0
175
+ @brace_count += 1
176
+
177
+ token Str::Double
178
+ end
179
+
180
+ rule /}/ do
181
+ if in_state? :brace and @brace_count.to_i == 0
182
+ pop! until state? :brace
183
+ pop!
184
+ token Punctuation
185
+ else
186
+ @brace_count -= 1
187
+ token Str::Double
188
+ end
189
+ end
190
+ end
191
+ end
192
+ end
193
+ end
@@ -0,0 +1,105 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ load_lexer 'hcl.rb'
7
+
8
+ class Terraform < Hcl
9
+ title "Terraform"
10
+ desc "Terraform HCL Interpolations"
11
+
12
+ tag 'terraform'
13
+ aliases 'tf'
14
+ filenames '*.tf'
15
+
16
+ def self.keywords
17
+ @keywords ||= Set.new %w(
18
+ terraform module provider variable resource data provisioner output
19
+ )
20
+ end
21
+
22
+ def self.declarations
23
+ @declarations ||= Set.new %w(
24
+ var local
25
+ )
26
+ end
27
+
28
+ def self.reserved
29
+ @reserved ||= Set.new %w()
30
+ end
31
+
32
+ def self.constants
33
+ @constants ||= Set.new %w(true false null)
34
+ end
35
+
36
+ def self.builtins
37
+ @builtins ||= %w()
38
+ end
39
+
40
+ state :strings do
41
+ rule /\\./, Str::Escape
42
+ rule /\$\{/ do
43
+ token Keyword
44
+ push :interpolation
45
+ end
46
+ end
47
+
48
+ state :dq do
49
+ rule /[^\\"\$]+/, Str::Double
50
+ mixin :strings
51
+ rule /"/, Str::Double, :pop!
52
+ end
53
+
54
+ state :sq do
55
+ rule /[^\\'\$]+/, Str::Single
56
+ mixin :strings
57
+ rule /'/, Str::Single, :pop!
58
+ end
59
+
60
+ state :heredoc do
61
+ rule /\n/, Str::Heredoc, :heredoc_nl
62
+ rule /[^$\n\$]+/, Str::Heredoc
63
+ rule /[$]/, Str::Heredoc
64
+ mixin :strings
65
+ end
66
+
67
+ state :interpolation do
68
+ rule /\}/ do
69
+ token Keyword
70
+ pop!
71
+ end
72
+
73
+ mixin :expression
74
+ end
75
+
76
+ id = /[$a-z_\-][a-z0-9_\-]*/io
77
+
78
+ state :expression do
79
+ mixin :primitives
80
+ rule /\s+/, Text
81
+
82
+ rule %r(\+\+ | -- | ~ | && | \|\| | \\(?=\n) | << | >>>? | == | != )x, Operator
83
+ rule %r([-<>+*%&|\^/!=?:]=?), Operator
84
+ rule /[(\[,]/, Punctuation
85
+ rule /[)\].]/, Punctuation
86
+
87
+ rule id do |m|
88
+ if self.class.keywords.include? m[0]
89
+ token Keyword
90
+ elsif self.class.declarations.include? m[0]
91
+ token Keyword::Declaration
92
+ elsif self.class.reserved.include? m[0]
93
+ token Keyword::Reserved
94
+ elsif self.class.constants.include? m[0]
95
+ token Keyword::Constant
96
+ elsif self.class.builtins.include? m[0]
97
+ token Name::Builtin
98
+ else
99
+ token Name::Other
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,70 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class TeX < RegexLexer
7
+ title "TeX"
8
+ desc "The TeX typesetting system"
9
+ tag 'tex'
10
+ aliases 'TeX', 'LaTeX', 'latex'
11
+
12
+ filenames '*.tex', '*.aux', '*.toc', '*.sty', '*.cls'
13
+ mimetypes 'text/x-tex', 'text/x-latex'
14
+
15
+ def self.detect?(text)
16
+ return true if text =~ /\A\s*\\(documentclass|input|documentstyle|relax|ProvidesPackage|ProvidesClass)/
17
+ end
18
+
19
+ command = /\\([a-z]+|\s+|.)/i
20
+
21
+ state :general do
22
+ rule /%.*$/, Comment
23
+ rule /[{}&_^]/, Punctuation
24
+ end
25
+
26
+ state :root do
27
+ rule /\\\[/, Punctuation, :displaymath
28
+ rule /\\\(/, Punctuation, :inlinemath
29
+ rule /\$\$/, Punctuation, :displaymath
30
+ rule /\$/, Punctuation, :inlinemath
31
+ rule /\\(begin|end)\{.*?\}/, Name::Tag
32
+
33
+ rule /(\\verb)\b(\S)(.*?)(\2)/ do |m|
34
+ groups Name::Builtin, Keyword::Pseudo, Str::Other, Keyword::Pseudo
35
+ end
36
+
37
+ rule command, Keyword, :command
38
+ mixin :general
39
+ rule /[^\\$%&_^{}]+/, Text
40
+ end
41
+
42
+ state :math do
43
+ rule command, Name::Variable
44
+ mixin :general
45
+ rule /[0-9]+/, Num
46
+ rule /[-=!+*\/()\[\]]/, Operator
47
+ rule /[^=!+*\/()\[\]\\$%&_^{}0-9-]+/, Name::Builtin
48
+ end
49
+
50
+ state :inlinemath do
51
+ rule /\\\)/, Punctuation, :pop!
52
+ rule /\$/, Punctuation, :pop!
53
+ mixin :math
54
+ end
55
+
56
+ state :displaymath do
57
+ rule /\\\]/, Punctuation, :pop!
58
+ rule /\$\$/, Punctuation, :pop!
59
+ rule /\$/, Name::Builtin
60
+ mixin :math
61
+ end
62
+
63
+ state :command do
64
+ rule /\[.*?\]/, Name::Attribute
65
+ rule /\*/, Keyword
66
+ rule(//) { pop! }
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,68 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class TOML < RegexLexer
7
+ title "TOML"
8
+ desc 'the TOML configuration format (https://github.com/mojombo/toml)'
9
+ tag 'toml'
10
+
11
+ filenames '*.toml'
12
+ mimetypes 'text/x-toml'
13
+
14
+ identifier = /[\w.\S]+/
15
+
16
+ state :basic do
17
+ rule /\s+/, Text
18
+ rule /#.*?$/, Comment
19
+ rule /(true|false)/, Keyword::Constant
20
+ rule /(?<!=)\s*\[[\w\d\S]+\]/, Name::Namespace
21
+
22
+ rule /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z/, Literal::Date
23
+
24
+ rule /(\d+\.\d*|\d*\.\d+)([eE][+-]?[0-9]+)?j?/, Num::Float
25
+ rule /\d+[eE][+-]?[0-9]+j?/, Num::Float
26
+ rule /\-?\d+/, Num::Integer
27
+ end
28
+
29
+ state :root do
30
+ mixin :basic
31
+
32
+ rule /(#{identifier})(\s*)(=)/ do
33
+ groups Name::Property, Text, Punctuation
34
+ push :value
35
+ end
36
+
37
+ end
38
+
39
+ state :value do
40
+ rule /\n/, Text, :pop!
41
+ mixin :content
42
+ end
43
+
44
+ state :content do
45
+ mixin :basic
46
+ rule /"/, Str, :dq
47
+ mixin :esc_str
48
+ rule /\,/, Punctuation
49
+ rule /\[/, Punctuation, :array
50
+ end
51
+
52
+ state :dq do
53
+ rule /"/, Str, :pop!
54
+ mixin :esc_str
55
+ rule /[^\\"]+/, Str
56
+ end
57
+
58
+ state :esc_str do
59
+ rule /\\[0t\tn\n "\\ r]/, Str::Escape
60
+ end
61
+
62
+ state :array do
63
+ mixin :content
64
+ rule /\]/, Punctuation, :pop!
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,20 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ load_lexer 'jsx.rb'
7
+ load_lexer 'typescript/common.rb'
8
+
9
+ class TSX < JSX
10
+ include TypescriptCommon
11
+
12
+ title 'TypeScript'
13
+ desc 'tsx'
14
+
15
+ tag 'tsx'
16
+ filenames '*.tsx'
17
+ end
18
+ end
19
+ end
20
+
@@ -0,0 +1,108 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Tulip < RegexLexer
6
+ desc 'the tulip programming language (twitter.com/tuliplang)'
7
+ tag 'tulip'
8
+ aliases 'tulip'
9
+
10
+ filenames '*.tlp'
11
+
12
+ mimetypes 'text/x-tulip', 'application/x-tulip'
13
+
14
+ def self.detect?(text)
15
+ return true if text.shebang? 'tulip'
16
+ end
17
+
18
+ id = /[a-z][\w-]*/i
19
+ upper_id = /[A-Z][\w-]*/
20
+
21
+ state :comments_and_whitespace do
22
+ rule /\s+/, Text
23
+ rule /#.*?$/, Comment
24
+ end
25
+
26
+ state :root do
27
+ mixin :comments_and_whitespace
28
+
29
+ rule /@#{id}/, Keyword
30
+
31
+
32
+ rule /(\\#{id})([{])/ do
33
+ groups Name::Function, Str
34
+ push :nested_string
35
+ end
36
+
37
+ rule /([+]#{id})([{])/ do
38
+ groups Name::Decorator, Str
39
+ push :nested_string
40
+ end
41
+
42
+ rule /\\#{id}/, Name::Function
43
+ rule /[+]#{id}/, Name::Decorator
44
+
45
+ rule /"[{]/, Str, :dqi
46
+ rule /"/, Str, :dq
47
+
48
+ rule /'{/, Str, :nested_string
49
+ rule /'#{id}/, Str
50
+
51
+ rule /[.]#{id}/, Name::Tag
52
+ rule /[$]#{id}?/, Name::Variable
53
+ rule /-#{id}:?/, Name::Label
54
+ rule /%#{id}/, Name::Function
55
+ rule /`#{id}/, Operator::Word
56
+
57
+ rule /[?~%._>,!\[\]:{}()=;\/-]/, Punctuation
58
+
59
+ rule /[0-9]+([.][0-9]+)?/, Num
60
+
61
+ rule /#{id}/, Name
62
+
63
+ rule /</, Comment::Preproc, :angle_brackets
64
+ end
65
+
66
+ state :dq do
67
+ rule /[^\\"]+/, Str
68
+ rule /"/, Str, :pop!
69
+ rule /\\./, Str::Escape
70
+ end
71
+
72
+ state :dqi do
73
+ rule /[$][(]/, Str::Interpol, :interp_root
74
+ rule /[{]/, Str, :dqi
75
+ rule /[}]/, Str, :pop!
76
+ rule /[^{}$]+/, Str
77
+ rule /./, Str
78
+ end
79
+
80
+ state :interp_root do
81
+ rule /[)]/, Str::Interpol, :pop!
82
+ mixin :interp
83
+ end
84
+
85
+ state :interp do
86
+ rule /[(]/, Punctuation, :interp
87
+ rule /[)]/, Punctuation, :pop!
88
+ mixin :root
89
+ end
90
+
91
+ state :nested_string do
92
+ rule /\\./, Str::Escape
93
+ rule(/{/) { token Str; push :nested_string }
94
+ rule(/}/) { token Str; pop! }
95
+ rule(/[^{}\\]+/) { token Str }
96
+ end
97
+
98
+ state :angle_brackets do
99
+ mixin :comments_and_whitespace
100
+ rule />/, Comment::Preproc, :pop!
101
+ rule /[*:]/, Punctuation
102
+ rule /#{upper_id}/, Keyword::Type
103
+ rule /#{id}/, Name::Variable
104
+ end
105
+ end
106
+ end
107
+ end
108
+
@@ -0,0 +1,64 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class Turtle < RegexLexer
7
+ title "Turtle/TriG"
8
+ desc "Terse RDF Triple Language, TriG"
9
+ tag 'turtle'
10
+ filenames *%w(*.ttl *.trig)
11
+ mimetypes *%w(
12
+ text/turtle
13
+ application/trig
14
+ )
15
+
16
+ state :root do
17
+ rule /@base\b/, Keyword::Declaration
18
+ rule /@prefix\b/, Keyword::Declaration
19
+ rule /true\b/, Keyword::Constant
20
+ rule /false\b/, Keyword::Constant
21
+
22
+ rule /""".*?"""/m, Literal::String
23
+ rule /"([^"\\]|\\.)*"/, Literal::String
24
+ rule /'''.*?'''/m, Literal::String
25
+ rule /'([^'\\]|\\.)*'/, Literal::String
26
+
27
+ rule /#.*$/, Comment::Single
28
+
29
+ rule /@[^\s,.; ]+/, Name::Attribute
30
+
31
+ rule /[+-]?[0-9]+\.[0-9]*E[+-]?[0-9]+/, Literal::Number::Float
32
+ rule /[+-]?\.[0-9]+E[+-]?[0-9]+/, Literal::Number::Float
33
+ rule /[+-]?[0-9]+E[+-]?[0-9]+/, Literal::Number::Float
34
+
35
+ rule /[+-]?[0-9]*\.[0-9]+?/, Literal::Number::Float
36
+
37
+ rule /[+-]?[0-9]+/, Literal::Number::Integer
38
+
39
+ rule /\./, Punctuation
40
+ rule /,/, Punctuation
41
+ rule /;/, Punctuation
42
+ rule /\(/, Punctuation
43
+ rule /\)/, Punctuation
44
+ rule /\{/, Punctuation
45
+ rule /\}/, Punctuation
46
+ rule /\[/, Punctuation
47
+ rule /\]/, Punctuation
48
+ rule /\^\^/, Punctuation
49
+
50
+ rule /<[^>]*>/, Name::Label
51
+
52
+ rule /base\b/i, Keyword::Declaration
53
+ rule /prefix\b/i, Keyword::Declaration
54
+ rule /GRAPH\b/, Keyword
55
+ rule /a\b/, Keyword
56
+
57
+ rule /\s+/, Text::Whitespace
58
+
59
+ rule /[^:;<>#\@"\(\).\[\]\{\} ]+:/, Name::Namespace
60
+ rule /[^:;<>#\@"\(\).\[\]\{\} ]+/, Name
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,40 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ load_lexer 'jinja.rb'
7
+
8
+ class Twig < Jinja
9
+ title "Twig"
10
+ desc "Twig template engine (twig.sensiolabs.org)"
11
+
12
+ tag "twig"
13
+
14
+ filenames '*.twig'
15
+
16
+ mimetypes 'application/x-twig', 'text/html+twig'
17
+
18
+ def self.keywords
19
+ @@keywords ||= %w(as do extends flush from import include use else starts
20
+ ends with without autoescape endautoescape block endblock
21
+ embed endembed filter endfilter for endfor if endif
22
+ macro endmacro sandbox endsandbox set endset
23
+ spaceless endspaceless verbatim endverbatim)
24
+ end
25
+
26
+ def self.tests
27
+ @@tests ||= %w(constant defined divisibleby empty even iterable null odd
28
+ sameas)
29
+ end
30
+
31
+ def self.pseudo_keywords
32
+ @@pseudo_keywords ||= %w(true false none)
33
+ end
34
+
35
+ def self.word_operators
36
+ @@word_operators ||= %w(b-and b-or b-xor is in and or not)
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,34 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ module TypescriptCommon
7
+ def self.keywords
8
+ @keywords ||= super + Set.new(%w(
9
+ is namespace static private protected public
10
+ implements readonly
11
+ ))
12
+ end
13
+
14
+ def self.declarations
15
+ @declarations ||= super + Set.new(%w(
16
+ type abstract
17
+ ))
18
+ end
19
+
20
+ def self.reserved
21
+ @reserved ||= super + Set.new(%w(
22
+ string any void number namespace module
23
+ declare default interface keyof
24
+ ))
25
+ end
26
+
27
+ def self.builtins
28
+ @builtins ||= super + %w(
29
+ Pick Partial Readonly Record
30
+ )
31
+ end
32
+ end
33
+ end
34
+ end