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,173 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class Sed < RegexLexer
7
+ title "sed"
8
+ desc 'sed, the ultimate stream editor'
9
+
10
+ tag 'sed'
11
+ filenames '*.sed'
12
+ mimetypes 'text/x-sed'
13
+
14
+ def self.detect?(text)
15
+ return true if text.shebang? 'sed'
16
+ end
17
+
18
+ class Regex < RegexLexer
19
+ state :root do
20
+ rule /\\./, Str::Escape
21
+ rule /\[/, Punctuation, :brackets
22
+ rule /[$^.*]/, Operator
23
+ rule /[()]/, Punctuation
24
+ rule /./, Str::Regex
25
+ end
26
+
27
+ state :brackets do
28
+ rule /\^/ do
29
+ token Punctuation
30
+ goto :brackets_int
31
+ end
32
+
33
+ rule(//) { goto :brackets_int }
34
+ end
35
+
36
+ state :brackets_int do
37
+ # ranges
38
+ rule /.-./, Name::Variable
39
+ rule /\]/, Punctuation, :pop!
40
+ rule /./, Str::Regex
41
+ end
42
+ end
43
+
44
+ class Replacement < RegexLexer
45
+ state :root do
46
+ rule /\\./m, Str::Escape
47
+ rule /&/, Operator
48
+ rule /[^\\&]+/m, Text
49
+ end
50
+ end
51
+
52
+ def regex
53
+ @regex ||= Regex.new(options)
54
+ end
55
+
56
+ def replacement
57
+ @replacement ||= Replacement.new(options)
58
+ end
59
+
60
+ start { regex.reset!; replacement.reset! }
61
+
62
+ state :whitespace do
63
+ rule /\s+/m, Text
64
+ rule(/#.*?\n/) { token Comment; reset_stack }
65
+ rule(/\n/) { token Text; reset_stack }
66
+ rule(/;/) { token Punctuation; reset_stack }
67
+ end
68
+
69
+ state :root do
70
+ mixin :addr_range
71
+ end
72
+
73
+ edot = /\\.|./m
74
+
75
+ state :command do
76
+ mixin :whitespace
77
+
78
+ # subst and transliteration
79
+ rule /(s)(.)(#{edot}*?)(\2)(#{edot}*?)(\2)/m do |m|
80
+ token Keyword, m[1]
81
+ token Punctuation, m[2]
82
+ delegate regex, m[3]
83
+ token Punctuation, m[4]
84
+ delegate replacement, m[5]
85
+ token Punctuation, m[6]
86
+
87
+
88
+ goto :flags
89
+ end
90
+
91
+ rule /(y)(.)(#{edot}*?)(\2)(#{edot}*?)(\2)/m do |m|
92
+ token Keyword, m[1]
93
+ token Punctuation, m[2]
94
+ delegate replacement, m[3]
95
+ token Punctuation, m[4]
96
+ delegate replacement, m[5]
97
+ token Punctuation, m[6]
98
+
99
+ pop!
100
+ end
101
+
102
+ # commands that take a text segment as an argument
103
+ rule /([aic])(\s*)/ do
104
+ groups Keyword, Text; goto :text
105
+ end
106
+
107
+ rule /[pd]/, Keyword
108
+
109
+ # commands that take a number argument
110
+ rule /([qQl])(\s+)(\d+)/i do
111
+ groups Keyword, Text, Num
112
+ pop!
113
+ end
114
+
115
+ # no-argument commands
116
+ rule /[={}dDgGhHlnpPqx]/, Keyword, :pop!
117
+
118
+ # commands that take a filename argument
119
+ rule /([rRwW])(\s+)(\S+)/ do
120
+ groups Keyword, Text, Name
121
+ pop!
122
+ end
123
+
124
+ # commands that take a label argument
125
+ rule /([:btT])(\s+)(\S+)/ do
126
+ groups Keyword, Text, Name::Label
127
+ pop!
128
+ end
129
+ end
130
+
131
+ state :addr_range do
132
+ mixin :whitespace
133
+
134
+ ### address ranges ###
135
+ addr_tok = Keyword::Namespace
136
+ rule /\d+/, addr_tok
137
+ rule /[$,~+!]/, addr_tok
138
+
139
+ rule %r((/)((?:\\.|.)*?)(/)) do |m|
140
+ token addr_tok, m[1]; delegate regex, m[2]; token addr_tok, m[3]
141
+ end
142
+
143
+ # alternate regex rage delimiters
144
+ rule %r((\\)(.)(\\.|.)*?(\2)) do |m|
145
+ token addr_tok, m[1] + m[2]
146
+ delegate regex, m[3]
147
+ token addr_tok, m[4]
148
+ end
149
+
150
+ rule(//) { push :command }
151
+ end
152
+
153
+ state :text do
154
+ rule /[^\\\n]+/, Str
155
+ rule /\\\n/, Str::Escape
156
+ rule /\\/, Str
157
+ rule /\n/, Text, :pop!
158
+ end
159
+
160
+ state :flags do
161
+ rule /[gp]+/, Keyword, :pop!
162
+
163
+ # writing to a file with the subst command.
164
+ # who'da thunk...?
165
+ rule /([wW])(\s+)(\S+)/ do
166
+ token Keyword; token Text; token Name
167
+ end
168
+
169
+ rule(//) { pop! }
170
+ end
171
+ end
172
+ end
173
+ end
@@ -0,0 +1,190 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class Shell < RegexLexer
7
+ title "shell"
8
+ desc "Various shell languages, including sh and bash"
9
+
10
+ tag 'shell'
11
+ aliases 'bash', 'zsh', 'ksh', 'sh'
12
+ filenames '*.sh', '*.bash', '*.zsh', '*.ksh',
13
+ '.bashrc', '.zshrc', '.kshrc', '.profile', 'PKGBUILD'
14
+
15
+ mimetypes 'application/x-sh', 'application/x-shellscript'
16
+
17
+ def self.detect?(text)
18
+ return true if text.shebang?(/(ba|z|k)?sh/)
19
+ end
20
+
21
+ KEYWORDS = %w(
22
+ if fi else while do done for then return function
23
+ select continue until esac elif in
24
+ ).join('|')
25
+
26
+ BUILTINS = %w(
27
+ alias bg bind break builtin caller cd command compgen
28
+ complete declare dirs disown enable eval exec exit
29
+ export false fc fg getopts hash help history jobs let
30
+ local logout mapfile popd pushd pwd read readonly set
31
+ shift shopt source suspend test time times trap true type
32
+ typeset ulimit umask unalias unset wait
33
+
34
+ cat tac nl od base32 base64 fmt pr fold head tail split csplit
35
+ wc sum cksum b2sum md5sum sha1sum sha224sum sha256sum sha384sum
36
+ sha512sum sort shuf uniq comm ptx tsort cut paste join tr expand
37
+ unexpand ls dir vdir dircolors cp dd install mv rm shred link ln
38
+ mkdir mkfifo mknod readlink rmdir unlink chown chgrp chmod touch
39
+ df du stat sync truncate echo printf yes expr tee basename dirname
40
+ pathchk mktemp realpath pwd stty printenv tty id logname whoami
41
+ groups users who date arch nproc uname hostname hostid uptime chcon
42
+ runcon chroot env nice nohup stdbuf timeout kill sleep factor numfmt
43
+ seq tar grep sudo awk sed gzip gunzip
44
+ ).join('|')
45
+
46
+ state :basic do
47
+ rule /#.*$/, Comment
48
+
49
+ rule /\b(#{KEYWORDS})\s*\b/, Keyword
50
+ rule /\bcase\b/, Keyword, :case
51
+
52
+ rule /\b(#{BUILTINS})\s*\b(?!(\.|-))/, Name::Builtin
53
+ rule /[.](?=\s)/, Name::Builtin
54
+
55
+ rule /(\b\w+)(=)/ do |m|
56
+ groups Name::Variable, Operator
57
+ end
58
+
59
+ rule /[\[\]{}()!=>]/, Operator
60
+ rule /&&|\|\|/, Operator
61
+
62
+ # here-string
63
+ rule /<<</, Operator
64
+
65
+ rule /(<<-?)(\s*)(\'?)(\\?)(\w+)(\3)/ do |m|
66
+ groups Operator, Text, Str::Heredoc, Str::Heredoc, Name::Constant, Str::Heredoc
67
+ @heredocstr = Regexp.escape(m[5])
68
+ push :heredoc
69
+ end
70
+ end
71
+
72
+ state :heredoc do
73
+ rule /\n/, Str::Heredoc, :heredoc_nl
74
+ rule /[^$\n]+/, Str::Heredoc
75
+ mixin :interp
76
+ rule /[$]/, Str::Heredoc
77
+ end
78
+
79
+ state :heredoc_nl do
80
+ rule /\s*(\w+)\s*\n/ do |m|
81
+ if m[1] == @heredocstr
82
+ token Name::Constant
83
+ pop! 2
84
+ else
85
+ token Str::Heredoc
86
+ end
87
+ end
88
+
89
+ rule(//) { pop! }
90
+ end
91
+
92
+
93
+ state :double_quotes do
94
+ # NB: "abc$" is literally the string abc$.
95
+ # Here we prevent :interp from interpreting $" as a variable.
96
+ rule /(?:\$#?)?"/, Str::Double, :pop!
97
+ mixin :interp
98
+ rule /[^"`\\$]+/, Str::Double
99
+ end
100
+
101
+ state :ansi_string do
102
+ rule /\\./, Str::Escape
103
+ rule /[^\\']+/, Str::Single
104
+ mixin :single_quotes
105
+ end
106
+
107
+ state :single_quotes do
108
+ rule /'/, Str::Single, :pop!
109
+ rule /[^']+/, Str::Single
110
+ end
111
+
112
+ state :data do
113
+ rule /\s+/, Text
114
+ rule /\\./, Str::Escape
115
+ rule /\$?"/, Str::Double, :double_quotes
116
+ rule /\$'/, Str::Single, :ansi_string
117
+
118
+ # single quotes are much easier than double quotes - we can
119
+ # literally just scan until the next single quote.
120
+ # POSIX: Enclosing characters in single-quotes ( '' )
121
+ # shall preserve the literal value of each character within the
122
+ # single-quotes. A single-quote cannot occur within single-quotes.
123
+ rule /'/, Str::Single, :single_quotes
124
+
125
+ rule /\*/, Keyword
126
+
127
+ rule /;/, Punctuation
128
+
129
+ rule /--?[\w-]+/, Name::Tag
130
+ rule /[^=\*\s{}()$"'`;\\<]+/, Text
131
+ rule /\d+(?= |\Z)/, Num
132
+ rule /</, Text
133
+ mixin :interp
134
+ end
135
+
136
+ state :curly do
137
+ rule /}/, Keyword, :pop!
138
+ rule /:-/, Keyword
139
+ rule /[a-zA-Z0-9_]+/, Name::Variable
140
+ rule /[^}:"`'$]+/, Punctuation
141
+ mixin :root
142
+ end
143
+
144
+ state :paren do
145
+ rule /\)/, Keyword, :pop!
146
+ mixin :root
147
+ end
148
+
149
+ state :math do
150
+ rule /\)\)/, Keyword, :pop!
151
+ rule %r([-+*/%^|&!]|\*\*|\|\|), Operator
152
+ rule /\d+(#\w+)?/, Num
153
+ mixin :root
154
+ end
155
+
156
+ state :case do
157
+ rule /\besac\b/, Keyword, :pop!
158
+ rule /\|/, Punctuation
159
+ rule /\)/, Punctuation, :case_stanza
160
+ mixin :root
161
+ end
162
+
163
+ state :case_stanza do
164
+ rule /;;/, Punctuation, :pop!
165
+ mixin :root
166
+ end
167
+
168
+ state :backticks do
169
+ rule /`/, Str::Backtick, :pop!
170
+ mixin :root
171
+ end
172
+
173
+ state :interp do
174
+ rule /\\$/, Str::Escape # line continuation
175
+ rule /\\./, Str::Escape
176
+ rule /\$\(\(/, Keyword, :math
177
+ rule /\$\(/, Keyword, :paren
178
+ rule /\${#?/, Keyword, :curly
179
+ rule /`/, Str::Backtick, :backticks
180
+ rule /\$#?(\w+|.)/, Name::Variable
181
+ rule /\$[*@]/, Name::Variable
182
+ end
183
+
184
+ state :root do
185
+ mixin :basic
186
+ mixin :data
187
+ end
188
+ end
189
+ end
190
+ end
@@ -0,0 +1,97 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class Sieve < RegexLexer
7
+ title "Sieve"
8
+ desc "mail filtering language"
9
+
10
+ tag 'sieve'
11
+ filenames '*.sieve'
12
+
13
+ id = /:?[a-zA-Z_][a-zA-Z0-9_]*/
14
+
15
+ # control commands (rfc5228 § 3)
16
+ def self.controls
17
+ @controls ||= %w(if elsif else require stop)
18
+ end
19
+
20
+ def self.actions
21
+ @actions ||= Set.new(
22
+ # action commands (rfc5228 § 2.9)
23
+ %w(keep fileinto redirect discard) +
24
+ # Editheader Extension (rfc5293)
25
+ %w(addheader deleteheader) +
26
+ # Reject and Extended Reject Extensions (rfc5429)
27
+ %w(reject ereject) +
28
+ # Extension for Notifications (rfc5435)
29
+ %w(notify) +
30
+ # Imap4flags Extension (rfc5232)
31
+ %w(setflag addflag removeflag) +
32
+ # Vacation Extension (rfc5230)
33
+ %w(vacation) +
34
+ # MIME Part Tests, Iteration, Extraction, Replacement, and Enclosure (rfc5703)
35
+ %w(replace enclose extracttext)
36
+ )
37
+ end
38
+
39
+ def self.tests
40
+ @tests ||= Set.new(
41
+ # test commands (rfc5228 § 5)
42
+ %w(address allof anyof exists false header not size true) +
43
+ # Body Extension (rfc5173)
44
+ %w(body) +
45
+ # Imap4flags Extension (rfc5232)
46
+ %w(hasflag) +
47
+ # Spamtest and Virustest Extensions (rfc5235)
48
+ %w(spamtest virustest) +
49
+ # Date and Index Extensions (rfc5260)
50
+ %w(date currentdate) +
51
+ # Extension for Notifications (rfc5435)
52
+ %w(valid_notify_method notify_method_capability) +
53
+ # Extensions for Checking Mailbox Status and Accessing Mailbox
54
+ # Metadata (rfc5490)
55
+ %w(mailboxexists metadata metadataexists servermetadata servermetadataexists)
56
+ )
57
+ end
58
+
59
+ state :comments_and_whitespace do
60
+ rule /\s+/, Text
61
+ rule %r(#.*?\n), Comment::Single
62
+ rule %r(/(\\\n)?[*].*?[*](\\\n)?/)m, Comment::Multiline
63
+ end
64
+
65
+ state :string do
66
+ rule /\\./, Str::Escape
67
+ rule /"/, Str::Double, :pop!
68
+ # Variables Extension (rfc5229)
69
+ rule /\${(?:[0-9][.0-9]*|[a-zA-Z_][.a-zA-Z0-9_]*)}/, Str::Interpol
70
+ rule /./, Str::Double
71
+ end
72
+
73
+ state :root do
74
+ mixin :comments_and_whitespace
75
+
76
+ rule /[\[\](),;{}]/, Punctuation
77
+
78
+ rule id do |m|
79
+ if self.class.controls.include? m[0]
80
+ token Keyword
81
+ elsif self.class.tests.include? m[0]
82
+ token Name::Variable
83
+ elsif self.class.actions.include? m[0]
84
+ token Name::Function
85
+ elsif m[0] =~ /^:/ # tags like :contains, :matches etc.
86
+ token Operator
87
+ else
88
+ token Name::Other
89
+ end
90
+ end
91
+
92
+ rule /"/, Str::Double, :string
93
+ rule /[0-9]+[KMG]/, Num::Integer
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,229 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ # A lexer for the Slim tempalte language
7
+ # @see http://slim-lang.org
8
+ class Slim < RegexLexer
9
+ include Indentation
10
+
11
+ title "Slim"
12
+ desc 'The Slim template language'
13
+
14
+ tag 'slim'
15
+
16
+ filenames '*.slim'
17
+
18
+ # Ruby identifier characters
19
+ ruby_chars = /[\w\!\?\@\$]/
20
+
21
+ # Since you are allowed to wrap lines with a backslash, include \\\n in characters
22
+ dot = /(\\\n|.)/
23
+
24
+ def ruby
25
+ @ruby ||= Ruby.new(options)
26
+ end
27
+
28
+ def html
29
+ @html ||= HTML.new(options)
30
+ end
31
+
32
+ def filters
33
+ @filters ||= {
34
+ 'ruby' => ruby,
35
+ 'erb' => ERB.new(options),
36
+ 'javascript' => Javascript.new(options),
37
+ 'css' => CSS.new(options),
38
+ 'coffee' => Coffeescript.new(options),
39
+ 'markdown' => Markdown.new(options),
40
+ 'scss' => Scss.new(options),
41
+ 'sass' => Sass.new(options)
42
+ }
43
+ end
44
+
45
+ start { ruby.reset!; html.reset! }
46
+
47
+ state :root do
48
+ rule /\s*\n/, Text
49
+ rule(/\s*/) { |m| token Text; indentation(m[0]) }
50
+ end
51
+
52
+ state :content do
53
+ mixin :css
54
+
55
+ rule /\/#{dot}*/, Comment, :indented_block
56
+
57
+ rule /(doctype)(\s+)(.*)/ do
58
+ groups Name::Namespace, Text::Whitespace, Text
59
+ pop!
60
+ end
61
+
62
+ # filters, shamelessly ripped from HAML
63
+ rule /(\w*):\s*\n/ do |m|
64
+ token Name::Decorator
65
+ pop!
66
+ starts_block :filter_block
67
+
68
+ filter_name = m[1].strip
69
+
70
+ @filter_lexer = self.filters[filter_name]
71
+ @filter_lexer.reset! unless @filter_lexer.nil?
72
+
73
+ puts " slim: filter #{filter_name.inspect} #{@filter_lexer.inspect}" if @debug
74
+ end
75
+
76
+ # Text
77
+ rule %r([\|'](?=\s)) do
78
+ token Punctuation
79
+ pop!
80
+ starts_block :plain_block
81
+ goto :plain_block
82
+ end
83
+
84
+ rule /-|==|=/, Punctuation, :ruby_line
85
+
86
+ # Dynamic tags
87
+ rule /(\*)(#{ruby_chars}+\(.*?\))/ do |m|
88
+ token Punctuation, m[1]
89
+ delegate ruby, m[2]
90
+ push :tag
91
+ end
92
+
93
+ rule /(\*)(#{ruby_chars}+)/ do |m|
94
+ token Punctuation, m[1]
95
+ delegate ruby, m[2]
96
+ push :tag
97
+ end
98
+
99
+ #rule /<\w+(?=.*>)/, Keyword::Constant, :tag # Maybe do this, look ahead and stuff
100
+ rule %r((</?[\w\s\=\'\"]+?/?>)) do |m| # Dirty html
101
+ delegate html, m[1]
102
+ pop!
103
+ end
104
+
105
+ # Ordinary slim tags
106
+ rule /\w+/, Name::Tag, :tag
107
+
108
+ end
109
+
110
+ state :tag do
111
+ mixin :css
112
+ mixin :indented_block
113
+ mixin :interpolation
114
+
115
+ # Whitespace control
116
+ rule /[<>]/, Punctuation
117
+
118
+ # Trim whitespace
119
+ rule /\s+?/, Text::Whitespace
120
+
121
+ # Splats, these two might be mergable?
122
+ rule /(\*)(#{ruby_chars}+)/ do |m|
123
+ token Punctuation, m[1]
124
+ delegate ruby, m[2]
125
+ end
126
+
127
+ rule /(\*)(\{#{dot}+?\})/ do |m|
128
+ token Punctuation, m[1]
129
+ delegate ruby, m[2]
130
+ end
131
+
132
+ # Attributes
133
+ rule /([\w\-]+)(\s*)(\=)/ do |m|
134
+ token Name::Attribute, m[1]
135
+ token Text::Whitespace, m[2]
136
+ token Punctuation, m[3]
137
+ push :html_attr
138
+ end
139
+
140
+ # Ruby value
141
+ rule /(\=)(#{dot}+)/ do |m|
142
+ token Punctuation, m[1]
143
+ #token Keyword::Constant, m[2]
144
+ delegate ruby, m[2]
145
+ end
146
+
147
+ # HTML Entities
148
+ rule(/&\S*?;/, Name::Entity)
149
+
150
+ rule /#{dot}+?/, Text
151
+
152
+ rule /\s*\n/, Text::Whitespace, :pop!
153
+ end
154
+
155
+ state :css do
156
+ rule(/\.[\w-]*/) { token Name::Class; goto :tag }
157
+ rule(/#[a-zA-Z][\w:-]*/) { token Name::Function; goto :tag }
158
+ end
159
+
160
+ state :html_attr do
161
+ # Strings, double/single quoted
162
+ rule(/\s*(['"])#{dot}*?\1/, Literal::String, :pop!)
163
+
164
+ # Ruby stuff
165
+ rule(/(#{ruby_chars}+\(.*?\))/) { |m| delegate ruby, m[1]; pop! }
166
+ rule(/(#{ruby_chars}+)/) { |m| delegate ruby, m[1]; pop! }
167
+
168
+ rule /\s+/, Text::Whitespace
169
+ end
170
+
171
+ state :ruby_line do
172
+ # Need at top
173
+ mixin :indented_block
174
+
175
+ rule(/,\s*\n/) { delegate ruby }
176
+ rule /[ ]\|[ \t]*\n/, Str::Escape
177
+ rule(/.*?(?=(,$| \|)?[ \t]*$)/) { delegate ruby }
178
+ end
179
+
180
+ state :filter_block do
181
+ rule /([^#\n]|#[^{\n]|(\\\\)*\\#\{)+/ do
182
+ if @filter_lexer
183
+ delegate @filter_lexer
184
+ else
185
+ token Name::Decorator
186
+ end
187
+ end
188
+
189
+ mixin :interpolation
190
+ mixin :indented_block
191
+ end
192
+
193
+ state :plain_block do
194
+ mixin :interpolation
195
+
196
+ rule %r((</?[\w\s\=\'\"]+?/?>)) do |m| # Dirty html
197
+ delegate html, m[1]
198
+ end
199
+
200
+ # HTML Entities
201
+ rule(/&\S*?;/, Name::Entity)
202
+
203
+ #rule /([^#\n]|#[^{\n]|(\\\\)*\\#\{)+/ do
204
+ rule /#{dot}+?/, Text
205
+
206
+ mixin :indented_block
207
+ end
208
+
209
+ state :interpolation do
210
+ rule /#[{]/, Str::Interpol, :ruby_interp
211
+ end
212
+
213
+ state :ruby_interp do
214
+ rule /[}]/, Str::Interpol, :pop!
215
+ mixin :ruby_interp_inner
216
+ end
217
+
218
+ state :ruby_interp_inner do
219
+ rule(/[{]/) { delegate ruby; push :ruby_interp_inner }
220
+ rule(/[}]/) { delegate ruby; pop! }
221
+ rule(/[^{}]+/) { delegate ruby }
222
+ end
223
+
224
+ state :indented_block do
225
+ rule(/(?<!\\)\n/) { token Text; reset_stack }
226
+ end
227
+ end
228
+ end
229
+ end