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,129 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class Puppet < RegexLexer
7
+ title "Puppet"
8
+ desc 'The Puppet configuration management language (puppetlabs.org)'
9
+ tag 'puppet'
10
+ aliases 'pp'
11
+ filenames '*.pp'
12
+
13
+ def self.detect?(text)
14
+ return true if text.shebang? 'puppet-apply'
15
+ return true if text.shebang? 'puppet'
16
+ end
17
+
18
+ def self.keywords
19
+ @keywords ||= Set.new %w(
20
+ and case class default define else elsif if in import inherits
21
+ node unless
22
+ )
23
+ end
24
+
25
+ def self.constants
26
+ @constants ||= Set.new %w(
27
+ false true undef
28
+ )
29
+ end
30
+
31
+ def self.metaparameters
32
+ @metaparameters ||= Set.new %w(
33
+ before require notify subscribe
34
+ )
35
+ end
36
+
37
+ id = /[a-z]\w*/
38
+ cap_id = /[A-Z]\w*/
39
+ qualname = /(::)?(#{id}::)*\w+/
40
+
41
+ state :whitespace do
42
+ rule /\s+/m, Text
43
+ rule /#.*?\n/, Comment
44
+ end
45
+
46
+ state :root do
47
+ mixin :whitespace
48
+
49
+ rule /[$]#{qualname}/, Name::Variable
50
+ rule /(#{id})(?=\s*[=+]>)/m do |m|
51
+ if self.class.metaparameters.include? m[0]
52
+ token Keyword::Pseudo
53
+ else
54
+ token Name::Property
55
+ end
56
+ end
57
+
58
+ rule /(#{qualname})(?=\s*[(])/m, Name::Function
59
+ rule cap_id, Name::Class
60
+
61
+ rule /[+=|~-]>|<[|~-]/, Punctuation
62
+ rule /[:}();\[\]]/, Punctuation
63
+
64
+ # HACK for case statements and selectors
65
+ rule /{/, Punctuation, :regex_allowed
66
+ rule /,/, Punctuation, :regex_allowed
67
+
68
+ rule /(in|and|or)\b/, Operator::Word
69
+ rule /[=!<>]=/, Operator
70
+ rule /[=!]~/, Operator, :regex_allowed
71
+ rule %r([=<>!+*/-]), Operator
72
+
73
+ rule /(class|include)(\s*)(#{qualname})/ do
74
+ groups Keyword, Text, Name::Class
75
+ end
76
+
77
+ rule /node\b/, Keyword, :regex_allowed
78
+
79
+ rule /'(\\[\\']|[^'])*'/m, Str::Single
80
+ rule /"/, Str::Double, :dquotes
81
+
82
+ rule /\d+([.]\d+)?(e[+-]\d+)?/, Num
83
+
84
+ # a valid regex. TODO: regexes are only allowed
85
+ # in certain places in puppet.
86
+ rule qualname do |m|
87
+ if self.class.keywords.include? m[0]
88
+ token Keyword
89
+ elsif self.class.constants.include? m[0]
90
+ token Keyword::Constant
91
+ else
92
+ token Name
93
+ end
94
+ end
95
+ end
96
+
97
+ state :regex_allowed do
98
+ mixin :whitespace
99
+ rule %r(/), Str::Regex, :regex
100
+
101
+ rule(//) { pop! }
102
+ end
103
+
104
+ state :regex do
105
+ rule %r(/), Str::Regex, :pop!
106
+ rule /\\./, Str::Escape
107
+ rule /[(){}]/, Str::Interpol
108
+ rule /\[/, Str::Interpol, :regex_class
109
+ rule /./, Str::Regex
110
+ end
111
+
112
+ state :regex_class do
113
+ rule /\]/, Str::Interpol, :pop!
114
+ rule /(?<!\[)-(?=\])/, Str::Regex
115
+ rule /-/, Str::Interpol
116
+ rule /\\./, Str::Escape
117
+ rule /[^\\\]-]+/, Str::Regex
118
+ end
119
+
120
+ state :dquotes do
121
+ rule /"/, Str::Double, :pop!
122
+ rule /[^$\\"]+/m, Str::Double
123
+ rule /\\./m, Str::Escape
124
+ rule /[$]#{qualname}/, Name::Variable
125
+ rule /[$][{]#{qualname}[}]/, Name::Variable
126
+ end
127
+ end
128
+ end
129
+ end
@@ -0,0 +1,247 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class Python < RegexLexer
7
+ title "Python"
8
+ desc "The Python programming language (python.org)"
9
+ tag 'python'
10
+ aliases 'py'
11
+ filenames '*.py', '*.pyw', '*.sc', 'SConstruct', 'SConscript', '*.tac'
12
+ mimetypes 'text/x-python', 'application/x-python'
13
+
14
+ def self.detect?(text)
15
+ return true if text.shebang?(/pythonw?(3|2(\.\d)?)?/)
16
+ end
17
+
18
+ def self.keywords
19
+ @keywords ||= %w(
20
+ assert break continue del elif else except exec
21
+ finally for global if lambda pass print raise
22
+ return try while yield as with from import yield
23
+ async await nonlocal
24
+ )
25
+ end
26
+
27
+ def self.builtins
28
+ @builtins ||= %w(
29
+ __import__ abs all any apply ascii basestring bin bool buffer
30
+ bytearray bytes callable chr classmethod cmp coerce compile
31
+ complex delattr dict dir divmod enumerate eval execfile exit
32
+ file filter float format frozenset getattr globals hasattr hash hex id
33
+ input int intern isinstance issubclass iter len list locals
34
+ long map max memoryview min next object oct open ord pow property range
35
+ raw_input reduce reload repr reversed round set setattr slice
36
+ sorted staticmethod str sum super tuple type unichr unicode
37
+ vars xrange zip
38
+ )
39
+ end
40
+
41
+ def self.builtins_pseudo
42
+ @builtins_pseudo ||= %w(self None Ellipsis NotImplemented False True)
43
+ end
44
+
45
+ def self.exceptions
46
+ @exceptions ||= %w(
47
+ ArithmeticError AssertionError AttributeError
48
+ BaseException BlockingIOError BrokenPipeError BufferError
49
+ BytesWarning ChildProcessError ConnectionAbortedError
50
+ ConnectionError ConnectionRefusedError ConnectionResetError
51
+ DeprecationWarning EOFError EnvironmentError
52
+ Exception FileExistsError FileNotFoundError
53
+ FloatingPointError FutureWarning GeneratorExit IOError
54
+ ImportError ImportWarning IndentationError IndexError
55
+ InterruptedError IsADirectoryError KeyError KeyboardInterrupt
56
+ LookupError MemoryError ModuleNotFoundError NameError
57
+ NotADirectoryError NotImplemented NotImplementedError OSError
58
+ OverflowError OverflowWarning PendingDeprecationWarning
59
+ ProcessLookupError RecursionError ReferenceError ResourceWarning
60
+ RuntimeError RuntimeWarning StandardError StopAsyncIteration
61
+ StopIteration SyntaxError SyntaxWarning SystemError SystemExit
62
+ TabError TimeoutError TypeError UnboundLocalError UnicodeDecodeError
63
+ UnicodeEncodeError UnicodeError UnicodeTranslateError
64
+ UnicodeWarning UserWarning ValueError VMSError Warning
65
+ WindowsError ZeroDivisionError
66
+ )
67
+ end
68
+
69
+ identifier = /[a-z_][a-z0-9_]*/i
70
+ dotted_identifier = /[a-z_.][a-z0-9_.]*/i
71
+ state :root do
72
+ rule /\n+/m, Text
73
+ rule /^(:)(\s*)([ru]{,2}""".*?""")/mi do
74
+ groups Punctuation, Text, Str::Doc
75
+ end
76
+
77
+ rule /[^\S\n]+/, Text
78
+ rule %r(#(.*)?\n?), Comment::Single
79
+ rule /[\[\]{}:(),;]/, Punctuation
80
+ rule /\\\n/, Text
81
+ rule /\\/, Text
82
+
83
+ rule /(in|is|and|or|not)\b/, Operator::Word
84
+ rule /(<<|>>|\/\/|\*\*)=?/, Operator
85
+ rule /[-~+\/*%=<>&^|@]=?|!=/, Operator
86
+ rule /\.(?![0-9])/, Operator # so it doesn't match float literals
87
+
88
+ rule /(from)((?:\\\s|\s)+)(#{dotted_identifier})((?:\\\s|\s)+)(import)/ do
89
+ groups Keyword::Namespace,
90
+ Text,
91
+ Name::Namespace,
92
+ Text,
93
+ Keyword::Namespace
94
+ end
95
+
96
+ rule /(import)(\s+)(#{dotted_identifier})/ do
97
+ groups Keyword::Namespace, Text, Name::Namespace
98
+ end
99
+
100
+ rule /(def)((?:\s|\\\s)+)/ do
101
+ groups Keyword, Text
102
+ push :funcname
103
+ end
104
+
105
+ rule /(class)((?:\s|\\\s)+)/ do
106
+ groups Keyword, Text
107
+ push :classname
108
+ end
109
+
110
+ # TODO: not in python 3
111
+ rule /`.*?`/, Str::Backtick
112
+ rule /(?:r|ur|ru)"""/i, Str, :raw_tdqs
113
+ rule /(?:r|ur|ru)'''/i, Str, :raw_tsqs
114
+ rule /(?:r|ur|ru)"/i, Str, :raw_dqs
115
+ rule /(?:r|ur|ru)'/i, Str, :raw_sqs
116
+ rule /u?"""/i, Str, :tdqs
117
+ rule /u?'''/i, Str, :tsqs
118
+ rule /u?"/i, Str, :dqs
119
+ rule /u?'/i, Str, :sqs
120
+
121
+ rule /@#{dotted_identifier}/i, Name::Decorator
122
+
123
+ # using negative lookbehind so we don't match property names
124
+ rule /(?<!\.)#{identifier}/ do |m|
125
+ if self.class.keywords.include? m[0]
126
+ token Keyword
127
+ elsif self.class.exceptions.include? m[0]
128
+ token Name::Builtin
129
+ elsif self.class.builtins.include? m[0]
130
+ token Name::Builtin
131
+ elsif self.class.builtins_pseudo.include? m[0]
132
+ token Name::Builtin::Pseudo
133
+ else
134
+ token Name
135
+ end
136
+ end
137
+
138
+ rule identifier, Name
139
+
140
+ digits = /[0-9](_?[0-9])*/
141
+ decimal = /((#{digits})?\.#{digits}|#{digits}\.)/
142
+ exponent = /e[+-]?#{digits}/i
143
+ rule /#{decimal}(#{exponent})?j?/i, Num::Float
144
+ rule /#{digits}#{exponent}j?/i, Num::Float
145
+ rule /#{digits}j/i, Num::Float
146
+
147
+ rule /0b(_?[0-1])+/i, Num::Bin
148
+ rule /0o(_?[0-7])+/i, Num::Oct
149
+ rule /0x(_?[a-f0-9])+/i, Num::Hex
150
+ rule /\d+L/, Num::Integer::Long
151
+ rule /([1-9](_?[0-9])*|0(_?0)*)/, Num::Integer
152
+ end
153
+
154
+ state :funcname do
155
+ rule identifier, Name::Function, :pop!
156
+ end
157
+
158
+ state :classname do
159
+ rule identifier, Name::Class, :pop!
160
+ end
161
+
162
+ state :raise do
163
+ rule /from\b/, Keyword
164
+ rule /raise\b/, Keyword
165
+ rule /yield\b/, Keyword
166
+ rule /\n/, Text, :pop!
167
+ rule /;/, Punctuation, :pop!
168
+ mixin :root
169
+ end
170
+
171
+ state :yield do
172
+ mixin :raise
173
+ end
174
+
175
+ state :strings do
176
+ rule /%(\([a-z0-9_]+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?/i, Str::Interpol
177
+ end
178
+
179
+ state :strings_double do
180
+ rule /[^\\"%\n]+/, Str
181
+ mixin :strings
182
+ end
183
+
184
+ state :strings_single do
185
+ rule /[^\\'%\n]+/, Str
186
+ mixin :strings
187
+ end
188
+
189
+ state :nl do
190
+ rule /\n/, Str
191
+ end
192
+
193
+ state :escape do
194
+ rule %r(\\
195
+ ( [\\abfnrtv"']
196
+ | \n
197
+ | N{[a-zA-z][a-zA-Z ]+[a-zA-Z]}
198
+ | u[a-fA-F0-9]{4}
199
+ | U[a-fA-F0-9]{8}
200
+ | x[a-fA-F0-9]{2}
201
+ | [0-7]{1,3}
202
+ )
203
+ )x, Str::Escape
204
+ end
205
+
206
+ state :raw_escape do
207
+ rule /\\./, Str
208
+ end
209
+
210
+ state :dqs do
211
+ rule /"/, Str, :pop!
212
+ mixin :escape
213
+ mixin :strings_double
214
+ end
215
+
216
+ state :sqs do
217
+ rule /'/, Str, :pop!
218
+ mixin :escape
219
+ mixin :strings_single
220
+ end
221
+
222
+ state :tdqs do
223
+ rule /"""/, Str, :pop!
224
+ rule /"/, Str
225
+ mixin :escape
226
+ mixin :strings_double
227
+ mixin :nl
228
+ end
229
+
230
+ state :tsqs do
231
+ rule /'''/, Str, :pop!
232
+ rule /'/, Str
233
+ mixin :escape
234
+ mixin :strings_single
235
+ mixin :nl
236
+ end
237
+
238
+ %w(tdqs tsqs dqs sqs).each do |qtype|
239
+ state :"raw_#{qtype}" do
240
+ mixin :raw_escape
241
+ mixin :"#{qtype}"
242
+ end
243
+ end
244
+
245
+ end
246
+ end
247
+ end
@@ -0,0 +1,125 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Q < RegexLexer
6
+ title 'Q'
7
+ desc 'The Q programming language (kx.com)'
8
+ tag 'q'
9
+ aliases 'kdb+'
10
+ filenames '*.q'
11
+ mimetypes 'text/x-q', 'application/x-q'
12
+
13
+ identifier = /\.?[a-z][a-z0-9_.]*/i
14
+
15
+ def self.keywords
16
+ @keywords ||= %w[do if while select update delete exec from by]
17
+ end
18
+
19
+ def self.word_operators
20
+ @word_operators ||= %w[
21
+ and or except inter like each cross vs sv within where in asof bin binr cor cov cut ej fby
22
+ div ij insert lj ljf mavg mcount mdev mmax mmin mmu mod msum over prior peach pj scan scov setenv ss
23
+ sublist uj union upsert wavg wsum xasc xbar xcol xcols xdesc xexp xgroup xkey xlog xprev xrank
24
+ ]
25
+ end
26
+
27
+ def self.builtins
28
+ @builtins ||= %w[
29
+ first enlist value type get set count string key max min sum prd last flip distinct raze neg
30
+ desc differ dsave dev eval exit exp fills fkeys floor getenv group gtime hclose hcount hdel hopen hsym
31
+ iasc idesc inv keys load log lsq ltime ltrim maxs md5 med meta mins next parse plist prds prev rand rank ratios
32
+ read0 read1 reciprocal reverse rload rotate rsave rtrim save sdev show signum sin sqrt ssr sums svar system
33
+ tables tan til trim txf ungroup var view views wj wj1 ww
34
+ ]
35
+ end
36
+
37
+ state :root do
38
+ # q allows a file to start with a shebang
39
+ rule /#!(.*?)$/, Comment::Preproc, :top
40
+ rule //, Text, :top
41
+ end
42
+
43
+ state :top do
44
+ # indented lines at the top of the file are ignored by q
45
+ rule /^[ \t\r]+.*$/, Comment::Special
46
+ rule /\n+/, Text
47
+ rule //, Text, :base
48
+ end
49
+
50
+ state :base do
51
+ rule /\n+/m, Text
52
+ rule(/^.\)/, Keyword::Declaration)
53
+
54
+ # Identifiers, word operators, etc.
55
+ rule /#{identifier}/ do |m|
56
+ if self.class.keywords.include? m[0]
57
+ token Keyword
58
+ elsif self.class.word_operators.include? m[0]
59
+ token Operator::Word
60
+ elsif self.class.builtins.include? m[0]
61
+ token Name::Builtin
62
+ elsif /^\.[zQqho]\./ =~ m[0]
63
+ token Name::Constant
64
+ else
65
+ token Name
66
+ end
67
+ end
68
+
69
+ # White space and comments
70
+ rule(%r{[ \t\r]\/.*$}, Comment::Single)
71
+ rule(/[ \t\r]+/, Text::Whitespace)
72
+ rule(%r{^/$.*?^\\$}m, Comment::Multiline)
73
+ rule(%r{^\/[^\n]*$(\n[^\S\n]+.*$)*}, Comment::Multiline)
74
+ # til EOF comment
75
+ rule(/^\\$/, Comment, :bottom)
76
+ rule(/^\\\\\s+/, Keyword, :bottom)
77
+
78
+ # Literals
79
+ ## strings
80
+ rule(/"/, Str, :string)
81
+ ## timespan/stamp constants
82
+ rule(/(?:\d+D|\d{4}\.[01]\d\.[0123]\d[DT])(?:[012]\d:[0-5]\d(?::[0-5]\d(?:\.\d+)?)?|([012]\d)?)[zpn]?\b/,
83
+ Literal::Date)
84
+ ## time/minute/second constants
85
+ rule(/[012]\d:[0-5]\d(?::[0-5]\d(\.\d+)?)?[uvtpn]?\b/, Literal::Date)
86
+ ## date constants
87
+ rule(/\d{4}\.[01]\d\.[0-3]\d[dpnzm]?\b/, Literal::Date)
88
+ ## special values
89
+ rule(/0[nNwW][hijefcpmdznuvt]?/, Keyword::Constant)
90
+
91
+ # operators to match before numbers
92
+ rule(%r{'|\/:|\\:|':|\\|\/|0:|1:|2:}, Operator)
93
+
94
+ ## numbers
95
+ rule(/(\d+[.]\d*|[.]\d+)(e[+-]?\d+)?[ef]?/, Num::Float)
96
+ rule(/\d+e[+-]?\d+[ef]?/, Num::Float)
97
+ rule(/\d+[ef]/, Num::Float)
98
+ rule(/0x[0-9a-f]+/i, Num::Hex)
99
+ rule(/[01]+b/, Num::Bin)
100
+ rule(/[0-9]+[hij]?/, Num::Integer)
101
+ ## symbols and paths
102
+ rule(%r{(`:[:a-z0-9._\/]*|`(?:[a-z0-9.][:a-z0-9._]*)?)}i, Str::Symbol)
103
+ rule(/(?:<=|>=|<>|::)|[?:$%&|@._#*^\-+~,!><=]:?/, Operator)
104
+
105
+ rule /[{}\[\]();]/, Punctuation
106
+
107
+ # commands
108
+ rule(/\\.*\n/, Text)
109
+
110
+ end
111
+
112
+ state :string do
113
+ rule(/"/, Str, :pop!)
114
+ rule /\\([\\nr]|[01][0-7]{2})/, Str::Escape
115
+ rule /[^\\"\n]+/, Str
116
+ rule /\\/, Str # stray backslash
117
+ end
118
+
119
+ state :bottom do
120
+ rule /.*\z/m, Comment::Multiline
121
+ end
122
+ end
123
+ end
124
+ end
125
+
@@ -0,0 +1,74 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ load_lexer 'javascript.rb'
7
+
8
+ class Qml < Javascript
9
+ title "QML"
10
+ desc 'QML, a UI markup language'
11
+ tag 'qml'
12
+ aliases 'qml'
13
+ filenames '*.qml'
14
+
15
+ mimetypes 'application/x-qml', 'text/x-qml'
16
+
17
+ id_with_dots = /[$a-zA-Z_][a-zA-Z0-9_.]*/
18
+
19
+ prepend :root do
20
+ rule /(#{id_with_dots})(\s*)({)/ do
21
+ groups Keyword::Type, Text, Punctuation
22
+ push :type_block
23
+ end
24
+ rule /(#{id_with_dots})(\s+)(on)(\s+)(#{id_with_dots})(\s*)({)/ do
25
+ groups Keyword::Type, Text, Keyword, Text, Name::Label, Text, Punctuation
26
+ push :type_block
27
+ end
28
+
29
+ rule /[{]/, Punctuation, :push
30
+ end
31
+
32
+ state :type_block do
33
+ rule /(id)(\s*)(:)(\s*)(#{id_with_dots})/ do
34
+ groups Name::Label, Text, Punctuation, Text, Keyword::Declaration
35
+ end
36
+
37
+ rule /(#{id_with_dots})(\s*)(:)/ do
38
+ groups Name::Label, Text, Punctuation
39
+ push :expr_start
40
+ end
41
+
42
+ rule /(signal)(\s+)(#{id_with_dots})/ do
43
+ groups Keyword::Declaration, Text, Name::Label
44
+ push :signal
45
+ end
46
+
47
+ rule /(property)(\s+)(#{id_with_dots})(\s+)(#{id_with_dots})(\s*)(:?)/ do
48
+ groups Keyword::Declaration, Text, Keyword::Type, Text, Name::Label, Text, Punctuation
49
+ push :expr_start
50
+ end
51
+
52
+ rule /[}]/, Punctuation, :pop!
53
+ mixin :root
54
+ end
55
+
56
+ state :signal do
57
+ mixin :comments_and_whitespace
58
+ rule /\(/ do
59
+ token Punctuation
60
+ goto :signal_args
61
+ end
62
+ rule //, Text, :pop!
63
+ end
64
+
65
+ state :signal_args do
66
+ mixin :comments_and_whitespace
67
+ rule /(#{id_with_dots})(\s+)(#{id_with_dots})(\s*)(,?)/ do
68
+ groups Keyword::Type, Text, Name, Text, Punctuation
69
+ end
70
+ rule /\)/ , Punctuation, :pop!
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,90 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class R < RegexLexer
7
+ title "R"
8
+ desc 'The R statistics language (r-project.org)'
9
+ tag 'r'
10
+ aliases 'r', 'R', 's', 'S'
11
+ filenames '*.R', '*.r', '.Rhistory', '.Rprofile'
12
+ mimetypes 'text/x-r-source', 'text/x-r', 'text/x-R'
13
+
14
+ mimetypes 'text/x-r', 'application/x-r'
15
+
16
+ KEYWORDS = %w(if else for while repeat in next break function)
17
+
18
+ KEYWORD_CONSTANTS = %w(
19
+ NULL Inf TRUE FALSE NaN NA
20
+ NA_integer_ NA_real_ NA_complex_ NA_character_
21
+ )
22
+
23
+ BUILTIN_CONSTANTS = %w(LETTERS letters month.abb month.name pi T F)
24
+
25
+ # These are all the functions in `base` that are implemented as a
26
+ # `.Primitive`, minus those functions that are also keywords.
27
+ PRIMITIVE_FUNCTIONS = %w(
28
+ abs acos acosh all any anyNA Arg as.call as.character
29
+ as.complex as.double as.environment as.integer as.logical
30
+ as.null.default as.numeric as.raw asin asinh atan atanh attr
31
+ attributes baseenv browser c call ceiling class Conj cos cosh
32
+ cospi cummax cummin cumprod cumsum digamma dim dimnames
33
+ emptyenv exp expression floor forceAndCall gamma gc.time
34
+ globalenv Im interactive invisible is.array is.atomic is.call
35
+ is.character is.complex is.double is.environment is.expression
36
+ is.finite is.function is.infinite is.integer is.language
37
+ is.list is.logical is.matrix is.na is.name is.nan is.null
38
+ is.numeric is.object is.pairlist is.raw is.recursive is.single
39
+ is.symbol lazyLoadDBfetch length lgamma list log max min
40
+ missing Mod names nargs nzchar oldClass on.exit pos.to.env
41
+ proc.time prod quote range Re rep retracemem return round
42
+ seq_along seq_len seq.int sign signif sin sinh sinpi sqrt
43
+ standardGeneric substitute sum switch tan tanh tanpi tracemem
44
+ trigamma trunc unclass untracemem UseMethod xtfrm
45
+ )
46
+
47
+ def self.detect?(text)
48
+ return true if text.shebang? 'Rscript'
49
+ end
50
+
51
+ state :root do
52
+ rule /#'.*?$/, Comment::Doc
53
+ rule /#.*?$/, Comment::Single
54
+ rule /\s+/m, Text::Whitespace
55
+
56
+ rule /`[^`]+?`/, Name
57
+ rule /'(\\.|.)*?'/m, Str::Single
58
+ rule /"(\\.|.)*?"/m, Str::Double
59
+
60
+ rule /%[^%]*?%/, Operator
61
+
62
+ rule /0[xX][a-fA-F0-9]+([pP][0-9]+)?[Li]?/, Num::Hex
63
+ rule /[+-]?(\d+([.]\d+)?|[.]\d+)([eE][+-]?\d+)?[Li]?/,
64
+ Num
65
+
66
+ # Only recognize built-in functions when they are actually used as a
67
+ # function call, i.e. followed by an opening parenthesis.
68
+ # `Name::Builtin` would be more logical, but is usually not
69
+ # highlighted specifically; thus use `Name::Function`.
70
+ rule /\b(?<!.)(#{PRIMITIVE_FUNCTIONS.join('|')})(?=\()/, Name::Function
71
+
72
+ rule /[a-zA-Z.]([a-zA-Z_][\w.]*)?/ do |m|
73
+ if KEYWORDS.include? m[0]
74
+ token Keyword
75
+ elsif KEYWORD_CONSTANTS.include? m[0]
76
+ token Keyword::Constant
77
+ elsif BUILTIN_CONSTANTS.include? m[0]
78
+ token Name::Builtin
79
+ else
80
+ token Name
81
+ end
82
+ end
83
+
84
+ rule /[\[\]{}();,]/, Punctuation
85
+
86
+ rule %r([-<>?*+^/!=~$@:%&|]), Operator
87
+ end
88
+ end
89
+ end
90
+ end