rouge_ecl 0.0.1

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 (319) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +26 -0
  3. data/LICENSE +186 -0
  4. data/bin/rougify +17 -0
  5. data/lib/rouge.rb +82 -0
  6. data/lib/rouge/cli.rb +429 -0
  7. data/lib/rouge/demos/abap +6 -0
  8. data/lib/rouge/demos/actionscript +4 -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/csharp +5 -0
  27. data/lib/rouge/demos/css +4 -0
  28. data/lib/rouge/demos/d +16 -0
  29. data/lib/rouge/demos/dart +6 -0
  30. data/lib/rouge/demos/diff +7 -0
  31. data/lib/rouge/demos/digdag +19 -0
  32. data/lib/rouge/demos/docker +9 -0
  33. data/lib/rouge/demos/dot +5 -0
  34. data/lib/rouge/demos/ecl +1 -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/html +8 -0
  54. data/lib/rouge/demos/http +14 -0
  55. data/lib/rouge/demos/hylang +10 -0
  56. data/lib/rouge/demos/idlang +8 -0
  57. data/lib/rouge/demos/igorpro +9 -0
  58. data/lib/rouge/demos/ini +4 -0
  59. data/lib/rouge/demos/io +11 -0
  60. data/lib/rouge/demos/irb +4 -0
  61. data/lib/rouge/demos/irb_output +2 -0
  62. data/lib/rouge/demos/java +5 -0
  63. data/lib/rouge/demos/javascript +1 -0
  64. data/lib/rouge/demos/jinja +9 -0
  65. data/lib/rouge/demos/json +1 -0
  66. data/lib/rouge/demos/json-doc +1 -0
  67. data/lib/rouge/demos/jsonnet +28 -0
  68. data/lib/rouge/demos/jsx +17 -0
  69. data/lib/rouge/demos/julia +11 -0
  70. data/lib/rouge/demos/kotlin +3 -0
  71. data/lib/rouge/demos/lasso +12 -0
  72. data/lib/rouge/demos/liquid +11 -0
  73. data/lib/rouge/demos/literate_coffeescript +3 -0
  74. data/lib/rouge/demos/literate_haskell +7 -0
  75. data/lib/rouge/demos/llvm +20 -0
  76. data/lib/rouge/demos/lua +12 -0
  77. data/lib/rouge/demos/make +6 -0
  78. data/lib/rouge/demos/markdown +4 -0
  79. data/lib/rouge/demos/matlab +6 -0
  80. data/lib/rouge/demos/moonscript +16 -0
  81. data/lib/rouge/demos/mosel +10 -0
  82. data/lib/rouge/demos/mxml +22 -0
  83. data/lib/rouge/demos/nasm +26 -0
  84. data/lib/rouge/demos/nginx +5 -0
  85. data/lib/rouge/demos/nim +27 -0
  86. data/lib/rouge/demos/nix +19 -0
  87. data/lib/rouge/demos/objective_c +18 -0
  88. data/lib/rouge/demos/ocaml +12 -0
  89. data/lib/rouge/demos/pascal +14 -0
  90. data/lib/rouge/demos/perl +5 -0
  91. data/lib/rouge/demos/php +3 -0
  92. data/lib/rouge/demos/plaintext +1 -0
  93. data/lib/rouge/demos/plist +142 -0
  94. data/lib/rouge/demos/pony +17 -0
  95. data/lib/rouge/demos/powershell +49 -0
  96. data/lib/rouge/demos/praat +26 -0
  97. data/lib/rouge/demos/prolog +9 -0
  98. data/lib/rouge/demos/prometheus +9 -0
  99. data/lib/rouge/demos/properties +7 -0
  100. data/lib/rouge/demos/protobuf +5 -0
  101. data/lib/rouge/demos/puppet +6 -0
  102. data/lib/rouge/demos/python +6 -0
  103. data/lib/rouge/demos/q +2 -0
  104. data/lib/rouge/demos/qml +9 -0
  105. data/lib/rouge/demos/r +8 -0
  106. data/lib/rouge/demos/racket +24 -0
  107. data/lib/rouge/demos/ruby +9 -0
  108. data/lib/rouge/demos/rust +12 -0
  109. data/lib/rouge/demos/sass +3 -0
  110. data/lib/rouge/demos/scala +3 -0
  111. data/lib/rouge/demos/scheme +4 -0
  112. data/lib/rouge/demos/scss +5 -0
  113. data/lib/rouge/demos/sed +4 -0
  114. data/lib/rouge/demos/shell +2 -0
  115. data/lib/rouge/demos/sieve +10 -0
  116. data/lib/rouge/demos/slim +17 -0
  117. data/lib/rouge/demos/smalltalk +6 -0
  118. data/lib/rouge/demos/smarty +12 -0
  119. data/lib/rouge/demos/sml +4 -0
  120. data/lib/rouge/demos/sql +1 -0
  121. data/lib/rouge/demos/swift +5 -0
  122. data/lib/rouge/demos/tap +5 -0
  123. data/lib/rouge/demos/tcl +1 -0
  124. data/lib/rouge/demos/tex +1 -0
  125. data/lib/rouge/demos/toml +9 -0
  126. data/lib/rouge/demos/tsx +17 -0
  127. data/lib/rouge/demos/tulip +13 -0
  128. data/lib/rouge/demos/turtle +26 -0
  129. data/lib/rouge/demos/twig +9 -0
  130. data/lib/rouge/demos/typescript +1 -0
  131. data/lib/rouge/demos/vala +8 -0
  132. data/lib/rouge/demos/vb +4 -0
  133. data/lib/rouge/demos/verilog +27 -0
  134. data/lib/rouge/demos/vhdl +23 -0
  135. data/lib/rouge/demos/viml +14 -0
  136. data/lib/rouge/demos/vue +11 -0
  137. data/lib/rouge/demos/wollok +11 -0
  138. data/lib/rouge/demos/xml +2 -0
  139. data/lib/rouge/demos/yaml +4 -0
  140. data/lib/rouge/formatter.rb +75 -0
  141. data/lib/rouge/formatters/html.rb +37 -0
  142. data/lib/rouge/formatters/html_inline.rb +30 -0
  143. data/lib/rouge/formatters/html_legacy.rb +44 -0
  144. data/lib/rouge/formatters/html_linewise.rb +27 -0
  145. data/lib/rouge/formatters/html_pygments.rb +16 -0
  146. data/lib/rouge/formatters/html_table.rb +61 -0
  147. data/lib/rouge/formatters/null.rb +19 -0
  148. data/lib/rouge/formatters/terminal256.rb +180 -0
  149. data/lib/rouge/guesser.rb +55 -0
  150. data/lib/rouge/guessers/disambiguation.rb +101 -0
  151. data/lib/rouge/guessers/filename.rb +25 -0
  152. data/lib/rouge/guessers/glob_mapping.rb +43 -0
  153. data/lib/rouge/guessers/mimetype.rb +14 -0
  154. data/lib/rouge/guessers/modeline.rb +44 -0
  155. data/lib/rouge/guessers/source.rb +29 -0
  156. data/lib/rouge/guessers/util.rb +32 -0
  157. data/lib/rouge/lexer.rb +461 -0
  158. data/lib/rouge/lexers/abap.rb +238 -0
  159. data/lib/rouge/lexers/actionscript.rb +195 -0
  160. data/lib/rouge/lexers/apache.rb +71 -0
  161. data/lib/rouge/lexers/apache/keywords.yml +764 -0
  162. data/lib/rouge/lexers/apiblueprint.rb +47 -0
  163. data/lib/rouge/lexers/apple_script.rb +367 -0
  164. data/lib/rouge/lexers/awk.rb +161 -0
  165. data/lib/rouge/lexers/biml.rb +41 -0
  166. data/lib/rouge/lexers/bsl.rb +81 -0
  167. data/lib/rouge/lexers/c.rb +212 -0
  168. data/lib/rouge/lexers/ceylon.rb +123 -0
  169. data/lib/rouge/lexers/cfscript.rb +153 -0
  170. data/lib/rouge/lexers/clojure.rb +112 -0
  171. data/lib/rouge/lexers/cmake.rb +206 -0
  172. data/lib/rouge/lexers/coffeescript.rb +174 -0
  173. data/lib/rouge/lexers/common_lisp.rb +345 -0
  174. data/lib/rouge/lexers/conf.rb +24 -0
  175. data/lib/rouge/lexers/console.rb +136 -0
  176. data/lib/rouge/lexers/coq.rb +187 -0
  177. data/lib/rouge/lexers/cpp.rb +78 -0
  178. data/lib/rouge/lexers/csharp.rb +114 -0
  179. data/lib/rouge/lexers/css.rb +273 -0
  180. data/lib/rouge/lexers/d.rb +176 -0
  181. data/lib/rouge/lexers/dart.rb +104 -0
  182. data/lib/rouge/lexers/diff.rb +31 -0
  183. data/lib/rouge/lexers/digdag.rb +68 -0
  184. data/lib/rouge/lexers/docker.rb +50 -0
  185. data/lib/rouge/lexers/dot.rb +68 -0
  186. data/lib/rouge/lexers/ecl.rb +138 -0
  187. data/lib/rouge/lexers/eiffel.rb +65 -0
  188. data/lib/rouge/lexers/elixir.rb +133 -0
  189. data/lib/rouge/lexers/elm.rb +89 -0
  190. data/lib/rouge/lexers/erb.rb +52 -0
  191. data/lib/rouge/lexers/erlang.rb +114 -0
  192. data/lib/rouge/lexers/factor.rb +302 -0
  193. data/lib/rouge/lexers/fortran.rb +176 -0
  194. data/lib/rouge/lexers/fsharp.rb +118 -0
  195. data/lib/rouge/lexers/gherkin.rb +137 -0
  196. data/lib/rouge/lexers/gherkin/keywords.rb +14 -0
  197. data/lib/rouge/lexers/glsl.rb +135 -0
  198. data/lib/rouge/lexers/go.rb +174 -0
  199. data/lib/rouge/lexers/gradle.rb +37 -0
  200. data/lib/rouge/lexers/graphql.rb +243 -0
  201. data/lib/rouge/lexers/groovy.rb +112 -0
  202. data/lib/rouge/lexers/hack.rb +48 -0
  203. data/lib/rouge/lexers/haml.rb +229 -0
  204. data/lib/rouge/lexers/handlebars.rb +79 -0
  205. data/lib/rouge/lexers/haskell.rb +182 -0
  206. data/lib/rouge/lexers/html.rb +139 -0
  207. data/lib/rouge/lexers/http.rb +80 -0
  208. data/lib/rouge/lexers/hylang.rb +93 -0
  209. data/lib/rouge/lexers/idlang.rb +310 -0
  210. data/lib/rouge/lexers/igorpro.rb +408 -0
  211. data/lib/rouge/lexers/ini.rb +53 -0
  212. data/lib/rouge/lexers/io.rb +68 -0
  213. data/lib/rouge/lexers/irb.rb +66 -0
  214. data/lib/rouge/lexers/java.rb +87 -0
  215. data/lib/rouge/lexers/javascript.rb +281 -0
  216. data/lib/rouge/lexers/jinja.rb +137 -0
  217. data/lib/rouge/lexers/json.rb +29 -0
  218. data/lib/rouge/lexers/json_doc.rb +23 -0
  219. data/lib/rouge/lexers/jsonnet.rb +151 -0
  220. data/lib/rouge/lexers/jsx.rb +102 -0
  221. data/lib/rouge/lexers/julia.rb +172 -0
  222. data/lib/rouge/lexers/kotlin.rb +79 -0
  223. data/lib/rouge/lexers/lasso.rb +214 -0
  224. data/lib/rouge/lexers/lasso/keywords.yml +446 -0
  225. data/lib/rouge/lexers/liquid.rb +287 -0
  226. data/lib/rouge/lexers/literate_coffeescript.rb +33 -0
  227. data/lib/rouge/lexers/literate_haskell.rb +36 -0
  228. data/lib/rouge/lexers/llvm.rb +80 -0
  229. data/lib/rouge/lexers/lua.rb +125 -0
  230. data/lib/rouge/lexers/lua/builtins.rb +22 -0
  231. data/lib/rouge/lexers/make.rb +112 -0
  232. data/lib/rouge/lexers/markdown.rb +154 -0
  233. data/lib/rouge/lexers/matlab.rb +71 -0
  234. data/lib/rouge/lexers/matlab/builtins.rb +11 -0
  235. data/lib/rouge/lexers/moonscript.rb +114 -0
  236. data/lib/rouge/lexers/mosel.rb +231 -0
  237. data/lib/rouge/lexers/mxml.rb +68 -0
  238. data/lib/rouge/lexers/nasm.rb +198 -0
  239. data/lib/rouge/lexers/nginx.rb +71 -0
  240. data/lib/rouge/lexers/nim.rb +152 -0
  241. data/lib/rouge/lexers/nix.rb +205 -0
  242. data/lib/rouge/lexers/objective_c.rb +194 -0
  243. data/lib/rouge/lexers/ocaml.rb +100 -0
  244. data/lib/rouge/lexers/pascal.rb +66 -0
  245. data/lib/rouge/lexers/perl.rb +196 -0
  246. data/lib/rouge/lexers/php.rb +193 -0
  247. data/lib/rouge/lexers/php/builtins.rb +194 -0
  248. data/lib/rouge/lexers/plain_text.rb +26 -0
  249. data/lib/rouge/lexers/plist.rb +45 -0
  250. data/lib/rouge/lexers/pony.rb +93 -0
  251. data/lib/rouge/lexers/powershell.rb +678 -0
  252. data/lib/rouge/lexers/praat.rb +350 -0
  253. data/lib/rouge/lexers/prolog.rb +59 -0
  254. data/lib/rouge/lexers/prometheus.rb +121 -0
  255. data/lib/rouge/lexers/properties.rb +51 -0
  256. data/lib/rouge/lexers/protobuf.rb +70 -0
  257. data/lib/rouge/lexers/puppet.rb +128 -0
  258. data/lib/rouge/lexers/python.rb +232 -0
  259. data/lib/rouge/lexers/q.rb +123 -0
  260. data/lib/rouge/lexers/qml.rb +73 -0
  261. data/lib/rouge/lexers/r.rb +89 -0
  262. data/lib/rouge/lexers/racket.rb +543 -0
  263. data/lib/rouge/lexers/ruby.rb +437 -0
  264. data/lib/rouge/lexers/rust.rb +192 -0
  265. data/lib/rouge/lexers/sass.rb +74 -0
  266. data/lib/rouge/lexers/sass/common.rb +180 -0
  267. data/lib/rouge/lexers/scala.rb +142 -0
  268. data/lib/rouge/lexers/scheme.rb +112 -0
  269. data/lib/rouge/lexers/scss.rb +34 -0
  270. data/lib/rouge/lexers/sed.rb +172 -0
  271. data/lib/rouge/lexers/shell.rb +189 -0
  272. data/lib/rouge/lexers/sieve.rb +96 -0
  273. data/lib/rouge/lexers/slim.rb +228 -0
  274. data/lib/rouge/lexers/smalltalk.rb +116 -0
  275. data/lib/rouge/lexers/smarty.rb +80 -0
  276. data/lib/rouge/lexers/sml.rb +344 -0
  277. data/lib/rouge/lexers/sql.rb +140 -0
  278. data/lib/rouge/lexers/swift.rb +181 -0
  279. data/lib/rouge/lexers/tap.rb +87 -0
  280. data/lib/rouge/lexers/tcl.rb +192 -0
  281. data/lib/rouge/lexers/tex.rb +69 -0
  282. data/lib/rouge/lexers/toml.rb +67 -0
  283. data/lib/rouge/lexers/tsx.rb +19 -0
  284. data/lib/rouge/lexers/tulip.rb +106 -0
  285. data/lib/rouge/lexers/turtle.rb +63 -0
  286. data/lib/rouge/lexers/twig.rb +39 -0
  287. data/lib/rouge/lexers/typescript.rb +22 -0
  288. data/lib/rouge/lexers/typescript/common.rb +33 -0
  289. data/lib/rouge/lexers/vala.rb +77 -0
  290. data/lib/rouge/lexers/vb.rb +164 -0
  291. data/lib/rouge/lexers/verilog.rb +164 -0
  292. data/lib/rouge/lexers/vhdl.rb +97 -0
  293. data/lib/rouge/lexers/viml.rb +101 -0
  294. data/lib/rouge/lexers/viml/keywords.rb +12 -0
  295. data/lib/rouge/lexers/vue.rb +122 -0
  296. data/lib/rouge/lexers/wollok.rb +103 -0
  297. data/lib/rouge/lexers/xml.rb +57 -0
  298. data/lib/rouge/lexers/yaml.rb +373 -0
  299. data/lib/rouge/plugins/redcarpet.rb +30 -0
  300. data/lib/rouge/regex_lexer.rb +441 -0
  301. data/lib/rouge/template_lexer.rb +20 -0
  302. data/lib/rouge/text_analyzer.rb +49 -0
  303. data/lib/rouge/theme.rb +213 -0
  304. data/lib/rouge/themes/base16.rb +130 -0
  305. data/lib/rouge/themes/colorful.rb +67 -0
  306. data/lib/rouge/themes/github.rb +71 -0
  307. data/lib/rouge/themes/gruvbox.rb +167 -0
  308. data/lib/rouge/themes/igor_pro.rb +20 -0
  309. data/lib/rouge/themes/molokai.rb +82 -0
  310. data/lib/rouge/themes/monokai.rb +92 -0
  311. data/lib/rouge/themes/monokai_sublime.rb +90 -0
  312. data/lib/rouge/themes/pastie.rb +69 -0
  313. data/lib/rouge/themes/thankful_eyes.rb +74 -0
  314. data/lib/rouge/themes/tulip.rb +69 -0
  315. data/lib/rouge/token.rb +182 -0
  316. data/lib/rouge/util.rb +101 -0
  317. data/lib/rouge/version.rb +7 -0
  318. data/rouge.gemspec +23 -0
  319. metadata +365 -0
@@ -0,0 +1,34 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ load_lexer 'sass/common.rb'
6
+
7
+ class Scss < SassCommon
8
+ title "SCSS"
9
+ desc "SCSS stylesheets (sass-lang.com)"
10
+ tag 'scss'
11
+ filenames '*.scss'
12
+ mimetypes 'text/x-scss'
13
+
14
+ state :root do
15
+ rule /\s+/, Text
16
+ rule %r(//.*?$), Comment::Single
17
+ rule %r(/[*].*?[*]/)m, Comment::Multiline
18
+ rule /@import\b/, Keyword, :value
19
+
20
+ mixin :content_common
21
+
22
+ rule(/(?=[^;{}][;}])/) { push :attribute }
23
+ rule(/(?=[^;{}:\[]+:[^a-z])/) { push :attribute }
24
+
25
+ rule(//) { push :selector }
26
+ end
27
+
28
+ state :end_section do
29
+ rule /\n/, Text
30
+ rule(/[;{}]/) { token Punctuation; reset_stack }
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,172 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Sed < RegexLexer
6
+ title "sed"
7
+ desc 'sed, the ultimate stream editor'
8
+
9
+ tag 'sed'
10
+ filenames '*.sed'
11
+ mimetypes 'text/x-sed'
12
+
13
+ def self.detect?(text)
14
+ return true if text.shebang? 'sed'
15
+ end
16
+
17
+ class Regex < RegexLexer
18
+ state :root do
19
+ rule /\\./, Str::Escape
20
+ rule /\[/, Punctuation, :brackets
21
+ rule /[$^.*]/, Operator
22
+ rule /[()]/, Punctuation
23
+ rule /./, Str::Regex
24
+ end
25
+
26
+ state :brackets do
27
+ rule /\^/ do
28
+ token Punctuation
29
+ goto :brackets_int
30
+ end
31
+
32
+ rule(//) { goto :brackets_int }
33
+ end
34
+
35
+ state :brackets_int do
36
+ # ranges
37
+ rule /.-./, Name::Variable
38
+ rule /\]/, Punctuation, :pop!
39
+ rule /./, Str::Regex
40
+ end
41
+ end
42
+
43
+ class Replacement < RegexLexer
44
+ state :root do
45
+ rule /\\./m, Str::Escape
46
+ rule /&/, Operator
47
+ rule /[^\\&]+/m, Text
48
+ end
49
+ end
50
+
51
+ def regex
52
+ @regex ||= Regex.new(options)
53
+ end
54
+
55
+ def replacement
56
+ @replacement ||= Replacement.new(options)
57
+ end
58
+
59
+ start { regex.reset!; replacement.reset! }
60
+
61
+ state :whitespace do
62
+ rule /\s+/m, Text
63
+ rule(/#.*?\n/) { token Comment; reset_stack }
64
+ rule(/\n/) { token Text; reset_stack }
65
+ rule(/;/) { token Punctuation; reset_stack }
66
+ end
67
+
68
+ state :root do
69
+ mixin :addr_range
70
+ end
71
+
72
+ edot = /\\.|./m
73
+
74
+ state :command do
75
+ mixin :whitespace
76
+
77
+ # subst and transliteration
78
+ rule /(s)(.)(#{edot}*?)(\2)(#{edot}*?)(\2)/m do |m|
79
+ token Keyword, m[1]
80
+ token Punctuation, m[2]
81
+ delegate regex, m[3]
82
+ token Punctuation, m[4]
83
+ delegate replacement, m[5]
84
+ token Punctuation, m[6]
85
+
86
+
87
+ goto :flags
88
+ end
89
+
90
+ rule /(y)(.)(#{edot}*?)(\2)(#{edot}*?)(\2)/m do |m|
91
+ token Keyword, m[1]
92
+ token Punctuation, m[2]
93
+ delegate replacement, m[3]
94
+ token Punctuation, m[4]
95
+ delegate replacement, m[5]
96
+ token Punctuation, m[6]
97
+
98
+ pop!
99
+ end
100
+
101
+ # commands that take a text segment as an argument
102
+ rule /([aic])(\s*)/ do
103
+ groups Keyword, Text; goto :text
104
+ end
105
+
106
+ rule /[pd]/, Keyword
107
+
108
+ # commands that take a number argument
109
+ rule /([qQl])(\s+)(\d+)/i do
110
+ groups Keyword, Text, Num
111
+ pop!
112
+ end
113
+
114
+ # no-argument commands
115
+ rule /[={}dDgGhHlnpPqx]/, Keyword, :pop!
116
+
117
+ # commands that take a filename argument
118
+ rule /([rRwW])(\s+)(\S+)/ do
119
+ groups Keyword, Text, Name
120
+ pop!
121
+ end
122
+
123
+ # commands that take a label argument
124
+ rule /([:btT])(\s+)(\S+)/ do
125
+ groups Keyword, Text, Name::Label
126
+ pop!
127
+ end
128
+ end
129
+
130
+ state :addr_range do
131
+ mixin :whitespace
132
+
133
+ ### address ranges ###
134
+ addr_tok = Keyword::Namespace
135
+ rule /\d+/, addr_tok
136
+ rule /[$,~+!]/, addr_tok
137
+
138
+ rule %r((/)((?:\\.|.)*?)(/)) do |m|
139
+ token addr_tok, m[1]; delegate regex, m[2]; token addr_tok, m[3]
140
+ end
141
+
142
+ # alternate regex rage delimiters
143
+ rule %r((\\)(.)(\\.|.)*?(\2)) do |m|
144
+ token addr_tok, m[1] + m[2]
145
+ delegate regex, m[3]
146
+ token addr_tok, m[4]
147
+ end
148
+
149
+ rule(//) { push :command }
150
+ end
151
+
152
+ state :text do
153
+ rule /[^\\\n]+/, Str
154
+ rule /\\\n/, Str::Escape
155
+ rule /\\/, Str
156
+ rule /\n/, Text, :pop!
157
+ end
158
+
159
+ state :flags do
160
+ rule /[gp]+/, Keyword, :pop!
161
+
162
+ # writing to a file with the subst command.
163
+ # who'da thunk...?
164
+ rule /([wW])(\s+)(\S+)/ do
165
+ token Keyword; token Text; token Name
166
+ end
167
+
168
+ rule(//) { pop! }
169
+ end
170
+ end
171
+ end
172
+ end
@@ -0,0 +1,189 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Shell < RegexLexer
6
+ title "shell"
7
+ desc "Various shell languages, including sh and bash"
8
+
9
+ tag 'shell'
10
+ aliases 'bash', 'zsh', 'ksh', 'sh'
11
+ filenames '*.sh', '*.bash', '*.zsh', '*.ksh',
12
+ '.bashrc', '.zshrc', '.kshrc', '.profile', 'PKGBUILD'
13
+
14
+ mimetypes 'application/x-sh', 'application/x-shellscript'
15
+
16
+ def self.detect?(text)
17
+ return true if text.shebang?(/(ba|z|k)?sh/)
18
+ end
19
+
20
+ KEYWORDS = %w(
21
+ if fi else while do done for then return function
22
+ select continue until esac elif in
23
+ ).join('|')
24
+
25
+ BUILTINS = %w(
26
+ alias bg bind break builtin caller cd command compgen
27
+ complete declare dirs disown enable eval exec exit
28
+ export false fc fg getopts hash help history jobs let
29
+ local logout mapfile popd pushd pwd read readonly set
30
+ shift shopt source suspend test time times trap true type
31
+ typeset ulimit umask unalias unset wait
32
+
33
+ cat tac nl od base32 base64 fmt pr fold head tail split csplit
34
+ wc sum cksum b2sum md5sum sha1sum sha224sum sha256sum sha384sum
35
+ sha512sum sort shuf uniq comm ptx tsort cut paste join tr expand
36
+ unexpand ls dir vdir dircolors cp dd install mv rm shred link ln
37
+ mkdir mkfifo mknod readlink rmdir unlink chown chgrp chmod touch
38
+ df du stat sync truncate echo printf yes expr tee basename dirname
39
+ pathchk mktemp realpath pwd stty printenv tty id logname whoami
40
+ groups users who date arch nproc uname hostname hostid uptime chcon
41
+ runcon chroot env nice nohup stdbuf timeout kill sleep factor numfmt
42
+ seq tar grep sudo awk sed gzip gunzip
43
+ ).join('|')
44
+
45
+ state :basic do
46
+ rule /#.*$/, Comment
47
+
48
+ rule /\b(#{KEYWORDS})\s*\b/, Keyword
49
+ rule /\bcase\b/, Keyword, :case
50
+
51
+ rule /\b(#{BUILTINS})\s*\b(?!(\.|-))/, Name::Builtin
52
+ rule /[.](?=\s)/, Name::Builtin
53
+
54
+ rule /(\b\w+)(=)/ do |m|
55
+ groups Name::Variable, Operator
56
+ end
57
+
58
+ rule /[\[\]{}()!=>]/, Operator
59
+ rule /&&|\|\|/, Operator
60
+
61
+ # here-string
62
+ rule /<<</, Operator
63
+
64
+ rule /(<<-?)(\s*)(\'?)(\\?)(\w+)(\3)/ do |m|
65
+ groups Operator, Text, Str::Heredoc, Str::Heredoc, Name::Constant, Str::Heredoc
66
+ @heredocstr = Regexp.escape(m[5])
67
+ push :heredoc
68
+ end
69
+ end
70
+
71
+ state :heredoc do
72
+ rule /\n/, Str::Heredoc, :heredoc_nl
73
+ rule /[^$\n]+/, Str::Heredoc
74
+ mixin :interp
75
+ rule /[$]/, Str::Heredoc
76
+ end
77
+
78
+ state :heredoc_nl do
79
+ rule /\s*(\w+)\s*\n/ do |m|
80
+ if m[1] == @heredocstr
81
+ token Name::Constant
82
+ pop! 2
83
+ else
84
+ token Str::Heredoc
85
+ end
86
+ end
87
+
88
+ rule(//) { pop! }
89
+ end
90
+
91
+
92
+ state :double_quotes do
93
+ # NB: "abc$" is literally the string abc$.
94
+ # Here we prevent :interp from interpreting $" as a variable.
95
+ rule /(?:\$#?)?"/, Str::Double, :pop!
96
+ mixin :interp
97
+ rule /[^"`\\$]+/, Str::Double
98
+ end
99
+
100
+ state :ansi_string do
101
+ rule /\\./, Str::Escape
102
+ rule /[^\\']+/, Str::Single
103
+ mixin :single_quotes
104
+ end
105
+
106
+ state :single_quotes do
107
+ rule /'/, Str::Single, :pop!
108
+ rule /[^']+/, Str::Single
109
+ end
110
+
111
+ state :data do
112
+ rule /\s+/, Text
113
+ rule /\\./, Str::Escape
114
+ rule /\$?"/, Str::Double, :double_quotes
115
+ rule /\$'/, Str::Single, :ansi_string
116
+
117
+ # single quotes are much easier than double quotes - we can
118
+ # literally just scan until the next single quote.
119
+ # POSIX: Enclosing characters in single-quotes ( '' )
120
+ # shall preserve the literal value of each character within the
121
+ # single-quotes. A single-quote cannot occur within single-quotes.
122
+ rule /'/, Str::Single, :single_quotes
123
+
124
+ rule /\*/, Keyword
125
+
126
+ rule /;/, Punctuation
127
+
128
+ rule /--?[\w-]+/, Name::Tag
129
+ rule /[^=\*\s{}()$"'`;\\<]+/, Text
130
+ rule /\d+(?= |\Z)/, Num
131
+ rule /</, Text
132
+ mixin :interp
133
+ end
134
+
135
+ state :curly do
136
+ rule /}/, Keyword, :pop!
137
+ rule /:-/, Keyword
138
+ rule /[a-zA-Z0-9_]+/, Name::Variable
139
+ rule /[^}:"`'$]+/, Punctuation
140
+ mixin :root
141
+ end
142
+
143
+ state :paren do
144
+ rule /\)/, Keyword, :pop!
145
+ mixin :root
146
+ end
147
+
148
+ state :math do
149
+ rule /\)\)/, Keyword, :pop!
150
+ rule %r([-+*/%^|&!]|\*\*|\|\|), Operator
151
+ rule /\d+(#\w+)?/, Num
152
+ mixin :root
153
+ end
154
+
155
+ state :case do
156
+ rule /\besac\b/, Keyword, :pop!
157
+ rule /\|/, Punctuation
158
+ rule /\)/, Punctuation, :case_stanza
159
+ mixin :root
160
+ end
161
+
162
+ state :case_stanza do
163
+ rule /;;/, Punctuation, :pop!
164
+ mixin :root
165
+ end
166
+
167
+ state :backticks do
168
+ rule /`/, Str::Backtick, :pop!
169
+ mixin :root
170
+ end
171
+
172
+ state :interp do
173
+ rule /\\$/, Str::Escape # line continuation
174
+ rule /\\./, Str::Escape
175
+ rule /\$\(\(/, Keyword, :math
176
+ rule /\$\(/, Keyword, :paren
177
+ rule /\${#?/, Keyword, :curly
178
+ rule /`/, Str::Backtick, :backticks
179
+ rule /\$#?(\w+|.)/, Name::Variable
180
+ rule /\$[*@]/, Name::Variable
181
+ end
182
+
183
+ state :root do
184
+ mixin :basic
185
+ mixin :data
186
+ end
187
+ end
188
+ end
189
+ end
@@ -0,0 +1,96 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Sieve < RegexLexer
6
+ title "Sieve"
7
+ desc "mail filtering language"
8
+
9
+ tag 'sieve'
10
+ filenames '*.sieve'
11
+
12
+ id = /:?[a-zA-Z_][a-zA-Z0-9_]*/
13
+
14
+ # control commands (rfc5228 § 3)
15
+ def self.controls
16
+ @controls ||= %w(if elsif else require stop)
17
+ end
18
+
19
+ def self.actions
20
+ @actions ||= Set.new(
21
+ # action commands (rfc5228 § 2.9)
22
+ %w(keep fileinto redirect discard) +
23
+ # Editheader Extension (rfc5293)
24
+ %w(addheader deleteheader) +
25
+ # Reject and Extended Reject Extensions (rfc5429)
26
+ %w(reject ereject) +
27
+ # Extension for Notifications (rfc5435)
28
+ %w(notify) +
29
+ # Imap4flags Extension (rfc5232)
30
+ %w(setflag addflag removeflag) +
31
+ # Vacation Extension (rfc5230)
32
+ %w(vacation) +
33
+ # MIME Part Tests, Iteration, Extraction, Replacement, and Enclosure (rfc5703)
34
+ %w(replace enclose extracttext)
35
+ )
36
+ end
37
+
38
+ def self.tests
39
+ @tests ||= Set.new(
40
+ # test commands (rfc5228 § 5)
41
+ %w(address allof anyof exists false header not size true) +
42
+ # Body Extension (rfc5173)
43
+ %w(body) +
44
+ # Imap4flags Extension (rfc5232)
45
+ %w(hasflag) +
46
+ # Spamtest and Virustest Extensions (rfc5235)
47
+ %w(spamtest virustest) +
48
+ # Date and Index Extensions (rfc5260)
49
+ %w(date currentdate) +
50
+ # Extension for Notifications (rfc5435)
51
+ %w(valid_notify_method notify_method_capability) +
52
+ # Extensions for Checking Mailbox Status and Accessing Mailbox
53
+ # Metadata (rfc5490)
54
+ %w(mailboxexists metadata metadataexists servermetadata servermetadataexists)
55
+ )
56
+ end
57
+
58
+ state :comments_and_whitespace do
59
+ rule /\s+/, Text
60
+ rule %r(#.*?\n), Comment::Single
61
+ rule %r(/(\\\n)?[*].*?[*](\\\n)?/)m, Comment::Multiline
62
+ end
63
+
64
+ state :string do
65
+ rule /\\./, Str::Escape
66
+ rule /"/, Str::Double, :pop!
67
+ # Variables Extension (rfc5229)
68
+ rule /\${(?:[0-9][.0-9]*|[a-zA-Z_][.a-zA-Z0-9_]*)}/, Str::Interpol
69
+ rule /./, Str::Double
70
+ end
71
+
72
+ state :root do
73
+ mixin :comments_and_whitespace
74
+
75
+ rule /[\[\](),;{}]/, Punctuation
76
+
77
+ rule id do |m|
78
+ if self.class.controls.include? m[0]
79
+ token Keyword
80
+ elsif self.class.tests.include? m[0]
81
+ token Name::Variable
82
+ elsif self.class.actions.include? m[0]
83
+ token Name::Function
84
+ elsif m[0] =~ /^:/ # tags like :contains, :matches etc.
85
+ token Operator
86
+ else
87
+ token Name::Other
88
+ end
89
+ end
90
+
91
+ rule /"/, Str::Double, :string
92
+ rule /[0-9]+[KMG]/, Num::Integer
93
+ end
94
+ end
95
+ end
96
+ end