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,94 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class HyLang < RegexLexer
7
+ title "HyLang"
8
+ desc "The HyLang programming language (hylang.org)"
9
+
10
+ tag 'hylang'
11
+ aliases 'hy'
12
+
13
+ filenames '*.hy'
14
+
15
+ mimetypes 'text/x-hy', 'application/x-hy'
16
+
17
+ def self.keywords
18
+ @keywords ||= Set.new %w(
19
+ False None True and as assert break class continue def
20
+ del elif else except finally for from global if import
21
+ in is lambda nonlocal not or pass raise return try
22
+ )
23
+ end
24
+
25
+ def self.builtins
26
+ @builtins ||= Set.new %w(
27
+ != % %= & &= * ** **= *= *map
28
+ + += , - -= -> ->> . / //
29
+ //= /= < << <<= <= = > >= >>
30
+ >>= @ @= ^ ^= accumulate apply as-> assoc butlast
31
+ calling-module-name car cdr chain coll? combinations comp complement compress cond
32
+ cons cons? constantly count cut cycle dec defclass defmacro defmacro!
33
+ defmacro/g! defmain defn defreader dict-comp disassemble dispatch-reader-macro distinct do doto
34
+ drop drop-last drop-while empty? eval eval-and-compile eval-when-compile even? every? filter
35
+ first flatten float? fn for* fraction genexpr gensym get group-by
36
+ identity if* if-not if-python2 inc input instance? integer integer-char? integer?
37
+ interleave interpose islice iterable? iterate iterator? juxt keyword keyword? last
38
+ let lif lif-not list* list-comp macro-error macroexpand macroexpand-1 map merge-with
39
+ multicombinations name neg? none? not-in not? nth numeric? odd? partition
40
+ permutations pos? product quasiquote quote range read read-str reduce remove
41
+ repeat repeatedly require rest second set-comp setv some string string?
42
+ symbol? take take-nth take-while tee unless unquote unquote-splicing when with*
43
+ with-decorator with-gensyms xor yield-from zero? zip zip-longest | |= ~
44
+ )
45
+ end
46
+
47
+ identifier = %r([\w!$%*+,<=>?/.-]+)
48
+ keyword = %r([\w!\#$%*+,<=>?/.-]+)
49
+
50
+ def name_token(name)
51
+ return Keyword if self.class.keywords.include?(name)
52
+ return Name::Builtin if self.class.builtins.include?(name)
53
+ nil
54
+ end
55
+
56
+ state :root do
57
+ rule /;.*?$/, Comment::Single
58
+ rule /\s+/m, Text::Whitespace
59
+
60
+ rule /-?\d+\.\d+/, Num::Float
61
+ rule /-?\d+/, Num::Integer
62
+ rule /0x-?[0-9a-fA-F]+/, Num::Hex
63
+
64
+ rule /"(\\.|[^"])*"/, Str
65
+ rule /'#{keyword}/, Str::Symbol
66
+ rule /::?#{keyword}/, Name::Constant
67
+ rule /\\(.|[a-z]+)/i, Str::Char
68
+
69
+
70
+ rule /~@|[`\'#^~&@]/, Operator
71
+
72
+ rule /(\()(\s*)(#{identifier})/m do |m|
73
+ token Punctuation, m[1]
74
+ token Text::Whitespace, m[2]
75
+ token(name_token(m[3]) || Name::Function, m[3])
76
+ end
77
+
78
+ rule identifier do |m|
79
+ token name_token(m[0]) || Name
80
+ end
81
+
82
+ # vectors
83
+ rule /[\[\]]/, Punctuation
84
+
85
+ # maps
86
+ rule /[{}]/, Punctuation
87
+
88
+ # parentheses
89
+ rule /[()]/, Punctuation
90
+ end
91
+ end
92
+ end
93
+ end
94
+
@@ -0,0 +1,312 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ # vim: set ts=2 sw=2 et:
5
+
6
+ module Rouge
7
+ module Lexers
8
+ class IDLang < RegexLexer
9
+ title "IDL"
10
+ desc "Interactive Data Language"
11
+
12
+ tag 'idlang'
13
+ filenames '*.idl'
14
+
15
+ name = /[_A-Z]\w*/i
16
+ kind_param = /(\d+|#{name})/
17
+ exponent = /[dDeE][+-]\d+/
18
+
19
+ def self.exec_unit
20
+ @exec_unit ||= Set.new %w(
21
+ PRO FUNCTION
22
+ )
23
+ end
24
+
25
+ def self.keywords
26
+ @keywords ||= Set.new %w(
27
+ STRUCT INHERITS
28
+ RETURN CONTINUE BEGIN END BREAK GOTO
29
+ )
30
+ end
31
+
32
+ def self.standalone_statements
33
+ # Must not have a comma afterwards
34
+ @standalone_statements ||= Set.new %w(
35
+ COMMON FORWARD_FUNCTION
36
+ )
37
+ end
38
+
39
+ def self.decorators
40
+ # Must not have a comma afterwards
41
+ @decorators ||= Set.new %w(
42
+ COMPILE_OPT
43
+ )
44
+ end
45
+
46
+ def self.operators
47
+ @operators ||= Set.new %w(
48
+ AND= EQ= GE= GT= LE= LT= MOD= NE= OR= XOR= NOT=
49
+ )
50
+ end
51
+
52
+ def self.conditionals
53
+ @conditionals ||= Set.new %w(
54
+ OF DO ENDIF ENDELSE ENDFOR ENDFOREACH ENDWHILE ENDREP ENDCASE ENDSWITCH
55
+ IF THEN ELSE FOR FOREACH WHILE REPEAT UNTIL CASE SWITCH
56
+ AND EQ GE GT LE LT MOD NE OR XOR NOT
57
+ )
58
+ end
59
+
60
+ def self.routines
61
+ @routines ||= Set.new %w(
62
+ A_CORRELATE ABS ACOS ADAPT_HIST_EQUAL ALOG ALOG10
63
+ AMOEBA ANNOTATE ARG_PRESENT ARRAY_EQUAL
64
+ ARRAY_INDICES ARROW ASCII_TEMPLATE ASIN ASSOC ATAN
65
+ AXIS BAR_PLOT BESELI BESELJ BESELK BESELY BETA
66
+ BILINEAR BIN_DATE BINARY_TEMPLATE BINDGEN BINOMIAL
67
+ BLAS_AXPY BLK_CON BOX_CURSOR BREAK BREAKPOINT
68
+ BROYDEN BYTARR BYTE BYTEORDER BYTSCL C_CORRELATE
69
+ CALDAT CALENDAR CALL_EXTERNAL CALL_FUNCTION
70
+ CALL_METHOD CALL_PROCEDURE CATCH CD CEIL CHEBYSHEV
71
+ CHECK_MATH CHISQR_CVF CHISQR_PDF CHOLDC CHOLSOL
72
+ CINDGEN CIR_3PNT CLOSE CLUST_WTS CLUSTER
73
+ COLOR_CONVERT COLOR_QUAN COLORMAP_APPLICABLE COMFIT
74
+ COMPLEX COMPLEXARR COMPLEXROUND
75
+ COMPUTE_MESH_NORMALS COND CONGRID CONJ
76
+ CONSTRAINED_MIN CONTOUR CONVERT_COORD CONVOL
77
+ COORD2TO3 CORRELATE COS COSH CRAMER CREATE_STRUCT
78
+ CREATE_VIEW CROSSP CRVLENGTH CT_LUMINANCE CTI_TEST
79
+ CURSOR CURVEFIT CV_COORD CVTTOBM CW_ANIMATE
80
+ CW_ANIMATE_GETP CW_ANIMATE_LOAD CW_ANIMATE_RUN
81
+ CW_ARCBALL CW_BGROUP CW_CLR_INDEX CW_COLORSEL
82
+ CW_DEFROI CW_FIELD CW_FILESEL CW_FORM CW_FSLIDER
83
+ CW_LIGHT_EDITOR CW_LIGHT_EDITOR_GET
84
+ CW_LIGHT_EDITOR_SET CW_ORIENT CW_PALETTE_EDITOR
85
+ CW_PALETTE_EDITOR_GET CW_PALETTE_EDITOR_SET
86
+ CW_PDMENU CW_RGBSLIDER CW_TMPL CW_ZOOM DBLARR
87
+ DCINDGEN DCOMPLEX DCOMPLEXARR DEFINE_KEY DEFROI
88
+ DEFSYSV DELETE_SYMBOL DELLOG DELVAR DERIV DERIVSIG
89
+ DETERM DEVICE DFPMIN DIALOG_MESSAGE
90
+ DIALOG_PICKFILE DIALOG_PRINTERSETUP
91
+ DIALOG_PRINTJOB DIALOG_READ_IMAGE
92
+ DIALOG_WRITE_IMAGE DICTIONARY DIGITAL_FILTER DILATE DINDGEN
93
+ DISSOLVE DIST DLM_LOAD DLM_REGISTER
94
+ DO_APPLE_SCRIPT DOC_LIBRARY DOUBLE DRAW_ROI EFONT
95
+ EIGENQL EIGENVEC ELMHES EMPTY ENABLE_SYSRTN EOF
96
+ ERASE ERODE ERRORF ERRPLOT EXECUTE EXIT EXP EXPAND
97
+ EXPAND_PATH EXPINT EXTRAC EXTRACT_SLICE F_CVF
98
+ F_PDF FACTORIAL FFT FILE_CHMOD FILE_DELETE
99
+ FILE_EXPAND_PATH FILE_MKDIR FILE_TEST FILE_WHICH
100
+ FILE_SEARCH PATH_SEP FILE_DIRNAME FILE_BASENAME
101
+ FILE_INFO FILE_MOVE FILE_COPY FILE_LINK FILE_POLL_INPUT
102
+ FILEPATH FINDFILE FINDGEN FINITE FIX FLICK FLOAT
103
+ FLOOR FLOW3 FLTARR FLUSH FORMAT_AXIS_VALUES
104
+ FORWARD_FUNCTION FREE_LUN FSTAT FULSTR FUNCT
105
+ FV_TEST FX_ROOT FZ_ROOTS GAMMA GAMMA_CT
106
+ GAUSS_CVF GAUSS_PDF GAUSS2DFIT GAUSSFIT GAUSSINT
107
+ GET_DRIVE_LIST GET_KBRD GET_LUN GET_SCREEN_SIZE
108
+ GET_SYMBOL GETENV GOTO GREG2JUL GRID_TPS GRID3 GS_ITER
109
+ H_EQ_CT H_EQ_INT HANNING HASH HEAP_GC HELP HILBERT
110
+ HIST_2D HIST_EQUAL HISTOGRAM HLS HOUGH HQR HSV
111
+ IBETA IDENTITY IDL_CONTAINER IDLANROI
112
+ IDLANROIGROUP IDLFFDICOM IDLFFDXF IDLFFLANGUAGECAT
113
+ IDLFFSHAPE IDLGRAXIS IDLGRBUFFER IDLGRCLIPBOARD
114
+ IDLGRCOLORBAR IDLGRCONTOUR IDLGRFONT IDLGRIMAGE
115
+ IDLGRLEGEND IDLGRLIGHT IDLGRMODEL IDLGRMPEG
116
+ IDLGRPALETTE IDLGRPATTERN IDLGRPLOT IDLGRPOLYGON
117
+ IDLGRPOLYLINE IDLGRPRINTER IDLGRROI IDLGRROIGROUP
118
+ IDLGRSCENE IDLGRSURFACE IDLGRSYMBOL
119
+ IDLGRTESSELLATOR IDLGRTEXT IDLGRVIEW
120
+ IDLGRVIEWGROUP IDLGRVOLUME IDLGRVRML IDLGRWINDOW
121
+ IGAMMA IMAGE_CONT IMAGE_STATISTICS IMAGINARY
122
+ INDGEN INT_2D INT_3D INT_TABULATED INTARR INTERPOL
123
+ INTERPOLATE INVERT IOCTL ISA ISHFT ISOCONTOUR
124
+ ISOSURFACE JOURNAL JUL2GREG JULDAY KEYWORD_SET KRIG2D
125
+ KURTOSIS KW_TEST L64INDGEN LABEL_DATE LABEL_REGION
126
+ LADFIT LAGUERRE LEEFILT LEGENDRE LINBCG LINDGEN
127
+ LINFIT LINKIMAGE LIST LIVE_CONTOUR LIVE_CONTROL
128
+ LIVE_DESTROY LIVE_EXPORT LIVE_IMAGE LIVE_INFO
129
+ LIVE_LINE LIVE_LOAD LIVE_OPLOT LIVE_PLOT
130
+ LIVE_PRINT LIVE_RECT LIVE_STYLE LIVE_SURFACE
131
+ LIVE_TEXT LJLCT LL_ARC_DISTANCE LMFIT LMGR LNGAMMA
132
+ LNP_TEST LOADCT LOCALE_GET LON64ARR LONARR LONG
133
+ LONG64 LSODE LU_COMPLEX LUDC LUMPROVE LUSOL
134
+ M_CORRELATE MACHAR MAKE_ARRAY MAKE_DLL MAP_2POINTS
135
+ MAP_CONTINENTS MAP_GRID MAP_IMAGE MAP_PATCH
136
+ MAP_PROJ_INFO MAP_SET MAX MATRIX_MULTIPLY MD_TEST MEAN
137
+ MEANABSDEV MEDIAN MEMORY MESH_CLIP MESH_DECIMATE
138
+ MESH_ISSOLID MESH_MERGE MESH_NUMTRIANGLES MESH_OBJ
139
+ MESH_SMOOTH MESH_SURFACEAREA MESH_VALIDATE
140
+ MESH_VOLUME MESSAGE MIN MIN_CURVE_SURF MK_HTML_HELP
141
+ MODIFYCT MOMENT MORPH_CLOSE MORPH_DISTANCE
142
+ MORPH_GRADIENT MORPH_HITORMISS MORPH_OPEN
143
+ MORPH_THIN MORPH_TOPHAT MPEG_CLOSE MPEG_OPEN
144
+ MPEG_PUT MPEG_SAVE MSG_CAT_CLOSE MSG_CAT_COMPILE
145
+ MSG_CAT_OPEN MULTI N_ELEMENTS N_PARAMS N_TAGS
146
+ NEWTON NORM OBJ_CLASS OBJ_DESTROY OBJ_ISA OBJ_NEW
147
+ OBJ_VALID OBJARR ON_ERROR ON_IOERROR ONLINE_HELP
148
+ OPEN OPENR OPENW OPENU OPLOT OPLOTERR ORDEREDHASH P_CORRELATE
149
+ PARTICLE_TRACE PCOMP PLOT PLOT_3DBOX PLOT_FIELD
150
+ PLOTERR PLOTS PNT_LINE POINT_LUN POLAR_CONTOUR
151
+ POLAR_SURFACE POLY POLY_2D POLY_AREA POLY_FIT
152
+ POLYFILL POLYFILLV POLYSHADE POLYWARP POPD POWELL
153
+ PRIMES PRINT PRINTF PRINTD PRODUCT PROFILE PROFILER
154
+ PROFILES PROJECT_VOL PS_SHOW_FONTS PSAFM PSEUDO
155
+ PTR_FREE PTR_NEW PTR_VALID PTRARR PUSHD QROMB
156
+ QROMO QSIMP QUERY_CSV R_CORRELATE R_TEST RADON RANDOMN
157
+ RANDOMU RANKS RDPIX READ READF READ_ASCII
158
+ READ_BINARY READ_BMP READ_CSV READ_DICOM READ_IMAGE
159
+ READ_INTERFILE READ_JPEG READ_PICT READ_PNG
160
+ READ_PPM READ_SPR READ_SRF READ_SYLK READ_TIFF
161
+ READ_WAV READ_WAVE READ_X11_BITMAP READ_XWD READS
162
+ READU REBIN RECALL_COMMANDS RECON3 REDUCE_COLORS
163
+ REFORM REGRESS REPLICATE REPLICATE_INPLACE
164
+ RESOLVE_ALL RESOLVE_ROUTINE RESTORE RETALL
165
+ REVERSE REWIND RK4 ROBERTS ROT ROTATE ROUND
166
+ ROUTINE_INFO RS_TEST S_TEST SAVE SAVGOL SCALE3
167
+ SCALE3D SCOPE_LEVEL SCOPE_TRACEBACK SCOPE_VARFETCH
168
+ SCOPE_VARNAME SEARCH2D SEARCH3D SET_PLOT SET_SHADING
169
+ SET_SYMBOL SETENV SETLOG SETUP_KEYS SFIT
170
+ SHADE_SURF SHADE_SURF_IRR SHADE_VOLUME SHIFT SHOW3
171
+ SHOWFONT SIGNUM SIN SINDGEN SINH SIZE SKEWNESS SKIPF
172
+ SLICER3 SLIDE_IMAGE SMOOTH SOBEL SOCKET SORT SPAWN
173
+ SPH_4PNT SPH_SCAT SPHER_HARM SPL_INIT SPL_INTERP
174
+ SPLINE SPLINE_P SPRSAB SPRSAX SPRSIN SPRSTP SQRT
175
+ STANDARDIZE STDDEV STOP STRARR STRCMP STRCOMPRESS
176
+ STREAMLINE STREGEX STRETCH STRING STRJOIN STRLEN
177
+ STRLOWCASE STRMATCH STRMESSAGE STRMID STRPOS
178
+ STRPUT STRSPLIT STRTRIM STRUCT_ASSIGN STRUCT_HIDE
179
+ STRUPCASE SURFACE SURFR SVDC SVDFIT SVSOL
180
+ SWAP_ENDIAN SWITCH SYSTIME T_CVF T_PDF T3D
181
+ TAG_NAMES TAN TANH TAPRD TAPWRT TEK_COLOR
182
+ TEMPORARY TETRA_CLIP TETRA_SURFACE TETRA_VOLUME
183
+ THIN THREED TIME_TEST2 TIMEGEN TM_TEST TOTAL TRACE
184
+ TRANSPOSE TRI_SURF TRIANGULATE TRIGRID TRIQL
185
+ TRIRED TRISOL TRNLOG TS_COEF TS_DIFF TS_FCAST
186
+ TS_SMOOTH TV TVCRS TVLCT TVRD TVSCL TYPENAME UINDGEN UINT
187
+ UINTARR UL64INDGEN ULINDGEN ULON64ARR ULONARR
188
+ ULONG ULONG64 UNIQ USERSYM VALUE_LOCATE VARIANCE
189
+ VAX_FLOAT VECTOR_FIELD VEL VELOVECT VERT_T3D VOIGT
190
+ VORONOI VOXEL_PROJ WAIT WARP_TRI WATERSHED WDELETE
191
+ WEOF WF_DRAW WHERE WIDGET_BASE WIDGET_BUTTON
192
+ WIDGET_CONTROL WIDGET_DRAW WIDGET_DROPLIST
193
+ WIDGET_EVENT WIDGET_INFO WIDGET_LABEL WIDGET_LIST
194
+ WIDGET_SLIDER WIDGET_TABLE WIDGET_TEXT WINDOW
195
+ WRITE_BMP WRITE_CSV WRITE_IMAGE WRITE_JPEG WRITE_NRIF
196
+ WRITE_PICT WRITE_PNG WRITE_PPM WRITE_SPR WRITE_SRF
197
+ WRITE_SYLK WRITE_TIFF WRITE_WAV WRITE_WAVE WRITEU
198
+ WSET WSHOW WTN WV_APPLET WV_CW_WAVELET WV_CWT
199
+ WV_DENOISE WV_DWT WV_FN_COIFLET WV_FN_DAUBECHIES
200
+ WV_FN_GAUSSIAN WV_FN_HAAR WV_FN_MORLET WV_FN_PAUL
201
+ WV_FN_SYMLET WV_IMPORT_DATA WV_IMPORT_WAVELET
202
+ WV_PLOT3D_WPS WV_PLOT_MULTIRES WV_PWT
203
+ WV_TOOL_DENOISE XBM_EDIT XDISPLAYFILE XDXF XFONT
204
+ XINTERANIMATE XLOADCT XMANAGER XMNG_TMPL XMTOOL
205
+ XOBJVIEW XPALETTE XPCOLOR XPLOT3D XREGISTERED XROI
206
+ XSQ_TEST XSURFACE XVAREDIT XVOLUME XVOLUME_ROTATE
207
+ XVOLUME_WRITE_IMAGE XYOUTS ZOOM ZOOM_24
208
+ )
209
+ end
210
+
211
+ state :root do
212
+ rule /[\s\n]+/, Text::Whitespace
213
+ # Normal comments
214
+ rule /;.*$/, Comment::Single
215
+ rule /\,\s*\,/, Error
216
+ rule /\!#{name}/, Name::Variable::Global
217
+
218
+ rule /[(),:\&\$]/, Punctuation
219
+
220
+ ## Format statements are quite a strange beast.
221
+ ## Better process them in their own state.
222
+ #rule /\b(FORMAT)(\s*)(\()/mi do |m|
223
+ # token Keyword, m[1]
224
+ # token Text::Whitespace, m[2]
225
+ # token Punctuation, m[3]
226
+ # push :format_spec
227
+ #end
228
+
229
+ rule %r(
230
+ [+-]? # sign
231
+ (
232
+ (\d+[.]\d*|[.]\d+)(#{exponent})?
233
+ | \d+#{exponent} # exponent is mandatory
234
+ )
235
+ (_#{kind_param})? # kind parameter
236
+ )xi, Num::Float
237
+
238
+ rule /\d+(B|S|U|US|LL|L|ULL|UL)?/i, Num::Integer
239
+ rule /"[0-7]+(B|O|U|ULL|UL|LL|L)?/i, Num::Oct
240
+ rule /'[0-9A-F]+'X(B|S|US|ULL|UL|U|LL|L)?/i, Num::Hex
241
+ rule /(#{kind_param}_)?'/, Str::Single, :string_single
242
+ rule /(#{kind_param}_)?"/, Str::Double, :string_double
243
+
244
+ rule %r{\#\#|\#|\&\&|\|\||/=|<=|>=|->|\@|\?|[-+*/<=~^{}]}, Operator
245
+ # Structures and the like
246
+ rule /(#{name})(\.)([^\s,]*)/i do |m|
247
+ groups Name, Operator, Name
248
+ #delegate IDLang, m[3]
249
+ end
250
+
251
+ rule /(function|pro)((?:\s|\$\s)+)/i do
252
+ groups Keyword, Text::Whitespace
253
+ push :funcname
254
+ end
255
+
256
+ rule /#{name}/m do |m|
257
+ match = m[0].upcase
258
+ if self.class.keywords.include? match
259
+ token Keyword
260
+ elsif self.class.conditionals.include? match
261
+ token Keyword
262
+ elsif self.class.decorators.include? match
263
+ token Name::Decorator
264
+ elsif self.class.standalone_statements.include? match
265
+ token Keyword::Reserved
266
+ elsif self.class.operators.include? match
267
+ token Operator::Word
268
+ elsif self.class.routines.include? match
269
+ token Name::Builtin
270
+ else
271
+ token Name
272
+ end
273
+ end
274
+
275
+ end
276
+
277
+ state :funcname do
278
+ rule /#{name}/, Name::Function
279
+
280
+ rule /\s+/, Text::Whitespace
281
+ rule /(:+|\$)/, Operator
282
+ rule /;.*/, Comment::Single
283
+
284
+ # Be done with this state if we hit EOL or comma
285
+ rule /$/, Text::Whitespace, :pop!
286
+ rule /,/, Operator, :pop!
287
+ end
288
+
289
+ state :string_single do
290
+ rule /[^']+/, Str::Single
291
+ rule /''/, Str::Escape
292
+ rule /'/, Str::Single, :pop!
293
+ end
294
+
295
+ state :string_double do
296
+ rule /[^"]+/, Str::Double
297
+ rule /"/, Str::Double, :pop!
298
+ end
299
+
300
+ state :format_spec do
301
+ rule /'/, Str::Single, :string_single
302
+ rule /"/, Str::Double, :string_double
303
+ rule /\(/, Punctuation, :format_spec
304
+ rule /\)/, Punctuation, :pop!
305
+ rule /,/, Punctuation
306
+ rule /[\s\n]+/, Text::Whitespace
307
+ # Edit descriptors could be seen as a kind of "format literal".
308
+ rule /[^\s'"(),]+/, Literal
309
+ end
310
+ end
311
+ end
312
+ end