rougegal 2.1.2

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 (311) 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/cli.rb +394 -0
  6. data/lib/rouge/demos/abap +6 -0
  7. data/lib/rouge/demos/actionscript +4 -0
  8. data/lib/rouge/demos/apache +21 -0
  9. data/lib/rouge/demos/apiblueprint +33 -0
  10. data/lib/rouge/demos/applescript +2 -0
  11. data/lib/rouge/demos/awk +4 -0
  12. data/lib/rouge/demos/biml +38 -0
  13. data/lib/rouge/demos/bsl +7 -0
  14. data/lib/rouge/demos/c +8 -0
  15. data/lib/rouge/demos/ceylon +7 -0
  16. data/lib/rouge/demos/cfscript +18 -0
  17. data/lib/rouge/demos/clojure +5 -0
  18. data/lib/rouge/demos/cmake +7 -0
  19. data/lib/rouge/demos/coffeescript +5 -0
  20. data/lib/rouge/demos/common_lisp +1 -0
  21. data/lib/rouge/demos/conf +4 -0
  22. data/lib/rouge/demos/console +6 -0
  23. data/lib/rouge/demos/coq +13 -0
  24. data/lib/rouge/demos/cpp +8 -0
  25. data/lib/rouge/demos/csharp +5 -0
  26. data/lib/rouge/demos/css +4 -0
  27. data/lib/rouge/demos/d +16 -0
  28. data/lib/rouge/demos/dart +6 -0
  29. data/lib/rouge/demos/diff +7 -0
  30. data/lib/rouge/demos/digdag +19 -0
  31. data/lib/rouge/demos/docker +9 -0
  32. data/lib/rouge/demos/dot +5 -0
  33. data/lib/rouge/demos/eiffel +30 -0
  34. data/lib/rouge/demos/elixir +1 -0
  35. data/lib/rouge/demos/erb +1 -0
  36. data/lib/rouge/demos/erlang +7 -0
  37. data/lib/rouge/demos/factor +5 -0
  38. data/lib/rouge/demos/fortran +22 -0
  39. data/lib/rouge/demos/fsharp +12 -0
  40. data/lib/rouge/demos/gal +22 -0
  41. data/lib/rouge/demos/gherkin +17 -0
  42. data/lib/rouge/demos/glsl +14 -0
  43. data/lib/rouge/demos/go +7 -0
  44. data/lib/rouge/demos/gradle +10 -0
  45. data/lib/rouge/demos/graphql +17 -0
  46. data/lib/rouge/demos/groovy +9 -0
  47. data/lib/rouge/demos/haml +5 -0
  48. data/lib/rouge/demos/handlebars +7 -0
  49. data/lib/rouge/demos/haskell +6 -0
  50. data/lib/rouge/demos/html +8 -0
  51. data/lib/rouge/demos/http +14 -0
  52. data/lib/rouge/demos/hylang +10 -0
  53. data/lib/rouge/demos/idlang +8 -0
  54. data/lib/rouge/demos/igorpro +9 -0
  55. data/lib/rouge/demos/ini +4 -0
  56. data/lib/rouge/demos/io +11 -0
  57. data/lib/rouge/demos/irb +4 -0
  58. data/lib/rouge/demos/irb_output +2 -0
  59. data/lib/rouge/demos/java +5 -0
  60. data/lib/rouge/demos/javascript +1 -0
  61. data/lib/rouge/demos/jinja +9 -0
  62. data/lib/rouge/demos/json +1 -0
  63. data/lib/rouge/demos/json-doc +1 -0
  64. data/lib/rouge/demos/jsonnet +28 -0
  65. data/lib/rouge/demos/jsx +17 -0
  66. data/lib/rouge/demos/julia +11 -0
  67. data/lib/rouge/demos/kotlin +3 -0
  68. data/lib/rouge/demos/lasso +12 -0
  69. data/lib/rouge/demos/liquid +11 -0
  70. data/lib/rouge/demos/literate_coffeescript +3 -0
  71. data/lib/rouge/demos/literate_haskell +7 -0
  72. data/lib/rouge/demos/llvm +20 -0
  73. data/lib/rouge/demos/lua +12 -0
  74. data/lib/rouge/demos/make +6 -0
  75. data/lib/rouge/demos/markdown +4 -0
  76. data/lib/rouge/demos/matlab +6 -0
  77. data/lib/rouge/demos/moonscript +16 -0
  78. data/lib/rouge/demos/mosel +10 -0
  79. data/lib/rouge/demos/mxml +22 -0
  80. data/lib/rouge/demos/nasm +26 -0
  81. data/lib/rouge/demos/nginx +5 -0
  82. data/lib/rouge/demos/nim +27 -0
  83. data/lib/rouge/demos/objective_c +18 -0
  84. data/lib/rouge/demos/ocaml +12 -0
  85. data/lib/rouge/demos/pascal +14 -0
  86. data/lib/rouge/demos/perl +5 -0
  87. data/lib/rouge/demos/php +3 -0
  88. data/lib/rouge/demos/plaintext +1 -0
  89. data/lib/rouge/demos/plist +142 -0
  90. data/lib/rouge/demos/pony +17 -0
  91. data/lib/rouge/demos/powershell +49 -0
  92. data/lib/rouge/demos/praat +26 -0
  93. data/lib/rouge/demos/prolog +9 -0
  94. data/lib/rouge/demos/prometheus +9 -0
  95. data/lib/rouge/demos/properties +7 -0
  96. data/lib/rouge/demos/protobuf +5 -0
  97. data/lib/rouge/demos/puppet +6 -0
  98. data/lib/rouge/demos/python +6 -0
  99. data/lib/rouge/demos/q +2 -0
  100. data/lib/rouge/demos/qml +9 -0
  101. data/lib/rouge/demos/r +8 -0
  102. data/lib/rouge/demos/racket +24 -0
  103. data/lib/rouge/demos/ruby +9 -0
  104. data/lib/rouge/demos/rust +12 -0
  105. data/lib/rouge/demos/sass +3 -0
  106. data/lib/rouge/demos/scala +3 -0
  107. data/lib/rouge/demos/scheme +4 -0
  108. data/lib/rouge/demos/scss +5 -0
  109. data/lib/rouge/demos/sed +4 -0
  110. data/lib/rouge/demos/shell +2 -0
  111. data/lib/rouge/demos/sieve +10 -0
  112. data/lib/rouge/demos/slim +17 -0
  113. data/lib/rouge/demos/smalltalk +6 -0
  114. data/lib/rouge/demos/smarty +12 -0
  115. data/lib/rouge/demos/sml +4 -0
  116. data/lib/rouge/demos/sql +1 -0
  117. data/lib/rouge/demos/swift +5 -0
  118. data/lib/rouge/demos/tap +5 -0
  119. data/lib/rouge/demos/tcl +1 -0
  120. data/lib/rouge/demos/tex +1 -0
  121. data/lib/rouge/demos/toml +9 -0
  122. data/lib/rouge/demos/tsx +17 -0
  123. data/lib/rouge/demos/tulip +13 -0
  124. data/lib/rouge/demos/turtle +26 -0
  125. data/lib/rouge/demos/twig +9 -0
  126. data/lib/rouge/demos/typescript +1 -0
  127. data/lib/rouge/demos/vala +8 -0
  128. data/lib/rouge/demos/vb +4 -0
  129. data/lib/rouge/demos/verilog +27 -0
  130. data/lib/rouge/demos/vhdl +23 -0
  131. data/lib/rouge/demos/viml +14 -0
  132. data/lib/rouge/demos/vue +11 -0
  133. data/lib/rouge/demos/wollok +11 -0
  134. data/lib/rouge/demos/xml +2 -0
  135. data/lib/rouge/demos/yaml +4 -0
  136. data/lib/rouge/formatter.rb +75 -0
  137. data/lib/rouge/formatters/html.rb +37 -0
  138. data/lib/rouge/formatters/html_inline.rb +30 -0
  139. data/lib/rouge/formatters/html_legacy.rb +44 -0
  140. data/lib/rouge/formatters/html_linewise.rb +27 -0
  141. data/lib/rouge/formatters/html_pygments.rb +16 -0
  142. data/lib/rouge/formatters/html_table.rb +61 -0
  143. data/lib/rouge/formatters/null.rb +19 -0
  144. data/lib/rouge/formatters/terminal256.rb +172 -0
  145. data/lib/rouge/guesser.rb +55 -0
  146. data/lib/rouge/guessers/filename.rb +25 -0
  147. data/lib/rouge/guessers/glob_mapping.rb +46 -0
  148. data/lib/rouge/guessers/mimetype.rb +14 -0
  149. data/lib/rouge/guessers/modeline.rb +42 -0
  150. data/lib/rouge/guessers/source.rb +39 -0
  151. data/lib/rouge/lexer.rb +452 -0
  152. data/lib/rouge/lexers/abap.rb +238 -0
  153. data/lib/rouge/lexers/actionscript.rb +195 -0
  154. data/lib/rouge/lexers/apache.rb +71 -0
  155. data/lib/rouge/lexers/apache/keywords.yml +764 -0
  156. data/lib/rouge/lexers/apiblueprint.rb +51 -0
  157. data/lib/rouge/lexers/apple_script.rb +367 -0
  158. data/lib/rouge/lexers/awk.rb +161 -0
  159. data/lib/rouge/lexers/biml.rb +41 -0
  160. data/lib/rouge/lexers/bsl.rb +81 -0
  161. data/lib/rouge/lexers/c.rb +217 -0
  162. data/lib/rouge/lexers/ceylon.rb +123 -0
  163. data/lib/rouge/lexers/cfscript.rb +153 -0
  164. data/lib/rouge/lexers/clojure.rb +112 -0
  165. data/lib/rouge/lexers/cmake.rb +206 -0
  166. data/lib/rouge/lexers/coffeescript.rb +174 -0
  167. data/lib/rouge/lexers/common_lisp.rb +345 -0
  168. data/lib/rouge/lexers/conf.rb +24 -0
  169. data/lib/rouge/lexers/console.rb +136 -0
  170. data/lib/rouge/lexers/coq.rb +191 -0
  171. data/lib/rouge/lexers/cpp.rb +78 -0
  172. data/lib/rouge/lexers/csharp.rb +114 -0
  173. data/lib/rouge/lexers/css.rb +273 -0
  174. data/lib/rouge/lexers/d.rb +176 -0
  175. data/lib/rouge/lexers/dart.rb +104 -0
  176. data/lib/rouge/lexers/diff.rb +31 -0
  177. data/lib/rouge/lexers/digdag.rb +72 -0
  178. data/lib/rouge/lexers/docker.rb +50 -0
  179. data/lib/rouge/lexers/dot.rb +68 -0
  180. data/lib/rouge/lexers/eiffel.rb +65 -0
  181. data/lib/rouge/lexers/elixir.rb +133 -0
  182. data/lib/rouge/lexers/erb.rb +56 -0
  183. data/lib/rouge/lexers/erlang.rb +118 -0
  184. data/lib/rouge/lexers/factor.rb +302 -0
  185. data/lib/rouge/lexers/fortran.rb +170 -0
  186. data/lib/rouge/lexers/fsharp.rb +118 -0
  187. data/lib/rouge/lexers/gal.rb +50 -0
  188. data/lib/rouge/lexers/gherkin.rb +137 -0
  189. data/lib/rouge/lexers/gherkin/keywords.rb +14 -0
  190. data/lib/rouge/lexers/glsl.rb +135 -0
  191. data/lib/rouge/lexers/go.rb +178 -0
  192. data/lib/rouge/lexers/gradle.rb +37 -0
  193. data/lib/rouge/lexers/graphql.rb +243 -0
  194. data/lib/rouge/lexers/groovy.rb +112 -0
  195. data/lib/rouge/lexers/haml.rb +233 -0
  196. data/lib/rouge/lexers/handlebars.rb +79 -0
  197. data/lib/rouge/lexers/haskell.rb +183 -0
  198. data/lib/rouge/lexers/html.rb +138 -0
  199. data/lib/rouge/lexers/http.rb +80 -0
  200. data/lib/rouge/lexers/hylang.rb +93 -0
  201. data/lib/rouge/lexers/idlang.rb +316 -0
  202. data/lib/rouge/lexers/igorpro.rb +407 -0
  203. data/lib/rouge/lexers/ini.rb +57 -0
  204. data/lib/rouge/lexers/io.rb +68 -0
  205. data/lib/rouge/lexers/irb.rb +66 -0
  206. data/lib/rouge/lexers/java.rb +87 -0
  207. data/lib/rouge/lexers/javascript.rb +269 -0
  208. data/lib/rouge/lexers/jinja.rb +137 -0
  209. data/lib/rouge/lexers/json.rb +29 -0
  210. data/lib/rouge/lexers/json_doc.rb +23 -0
  211. data/lib/rouge/lexers/jsonnet.rb +151 -0
  212. data/lib/rouge/lexers/jsx.rb +102 -0
  213. data/lib/rouge/lexers/julia.rb +172 -0
  214. data/lib/rouge/lexers/kotlin.rb +84 -0
  215. data/lib/rouge/lexers/lasso.rb +217 -0
  216. data/lib/rouge/lexers/lasso/keywords.yml +446 -0
  217. data/lib/rouge/lexers/liquid.rb +287 -0
  218. data/lib/rouge/lexers/literate_coffeescript.rb +33 -0
  219. data/lib/rouge/lexers/literate_haskell.rb +36 -0
  220. data/lib/rouge/lexers/llvm.rb +84 -0
  221. data/lib/rouge/lexers/lua.rb +125 -0
  222. data/lib/rouge/lexers/lua/builtins.rb +22 -0
  223. data/lib/rouge/lexers/make.rb +116 -0
  224. data/lib/rouge/lexers/markdown.rb +154 -0
  225. data/lib/rouge/lexers/matlab.rb +75 -0
  226. data/lib/rouge/lexers/matlab/builtins.rb +11 -0
  227. data/lib/rouge/lexers/moonscript.rb +114 -0
  228. data/lib/rouge/lexers/mosel.rb +231 -0
  229. data/lib/rouge/lexers/mxml.rb +68 -0
  230. data/lib/rouge/lexers/nasm.rb +203 -0
  231. data/lib/rouge/lexers/nginx.rb +71 -0
  232. data/lib/rouge/lexers/nim.rb +152 -0
  233. data/lib/rouge/lexers/objective_c.rb +208 -0
  234. data/lib/rouge/lexers/ocaml.rb +100 -0
  235. data/lib/rouge/lexers/pascal.rb +66 -0
  236. data/lib/rouge/lexers/perl.rb +197 -0
  237. data/lib/rouge/lexers/php.rb +193 -0
  238. data/lib/rouge/lexers/php/builtins.rb +194 -0
  239. data/lib/rouge/lexers/plain_text.rb +26 -0
  240. data/lib/rouge/lexers/plist.rb +49 -0
  241. data/lib/rouge/lexers/pony.rb +93 -0
  242. data/lib/rouge/lexers/powershell.rb +132 -0
  243. data/lib/rouge/lexers/praat.rb +350 -0
  244. data/lib/rouge/lexers/prolog.rb +64 -0
  245. data/lib/rouge/lexers/prometheus.rb +121 -0
  246. data/lib/rouge/lexers/properties.rb +55 -0
  247. data/lib/rouge/lexers/protobuf.rb +70 -0
  248. data/lib/rouge/lexers/puppet.rb +128 -0
  249. data/lib/rouge/lexers/python.rb +231 -0
  250. data/lib/rouge/lexers/q.rb +124 -0
  251. data/lib/rouge/lexers/qml.rb +73 -0
  252. data/lib/rouge/lexers/r.rb +89 -0
  253. data/lib/rouge/lexers/racket.rb +542 -0
  254. data/lib/rouge/lexers/ruby.rb +437 -0
  255. data/lib/rouge/lexers/rust.rb +192 -0
  256. data/lib/rouge/lexers/sass.rb +74 -0
  257. data/lib/rouge/lexers/sass/common.rb +180 -0
  258. data/lib/rouge/lexers/scala.rb +142 -0
  259. data/lib/rouge/lexers/scheme.rb +112 -0
  260. data/lib/rouge/lexers/scss.rb +34 -0
  261. data/lib/rouge/lexers/sed.rb +172 -0
  262. data/lib/rouge/lexers/shell.rb +180 -0
  263. data/lib/rouge/lexers/sieve.rb +96 -0
  264. data/lib/rouge/lexers/slim.rb +228 -0
  265. data/lib/rouge/lexers/smalltalk.rb +116 -0
  266. data/lib/rouge/lexers/smarty.rb +91 -0
  267. data/lib/rouge/lexers/sml.rb +348 -0
  268. data/lib/rouge/lexers/sql.rb +140 -0
  269. data/lib/rouge/lexers/swift.rb +161 -0
  270. data/lib/rouge/lexers/tap.rb +91 -0
  271. data/lib/rouge/lexers/tcl.rb +192 -0
  272. data/lib/rouge/lexers/tex.rb +69 -0
  273. data/lib/rouge/lexers/toml.rb +71 -0
  274. data/lib/rouge/lexers/tsx.rb +19 -0
  275. data/lib/rouge/lexers/tulip.rb +107 -0
  276. data/lib/rouge/lexers/turtle.rb +72 -0
  277. data/lib/rouge/lexers/twig.rb +39 -0
  278. data/lib/rouge/lexers/typescript.rb +22 -0
  279. data/lib/rouge/lexers/typescript/common.rb +33 -0
  280. data/lib/rouge/lexers/vala.rb +77 -0
  281. data/lib/rouge/lexers/vb.rb +164 -0
  282. data/lib/rouge/lexers/verilog.rb +164 -0
  283. data/lib/rouge/lexers/vhdl.rb +97 -0
  284. data/lib/rouge/lexers/viml.rb +101 -0
  285. data/lib/rouge/lexers/viml/keywords.rb +12 -0
  286. data/lib/rouge/lexers/vue.rb +124 -0
  287. data/lib/rouge/lexers/wollok.rb +107 -0
  288. data/lib/rouge/lexers/xml.rb +59 -0
  289. data/lib/rouge/lexers/yaml.rb +373 -0
  290. data/lib/rouge/plugins/redcarpet.rb +30 -0
  291. data/lib/rouge/regex_lexer.rb +441 -0
  292. data/lib/rouge/template_lexer.rb +20 -0
  293. data/lib/rouge/text_analyzer.rb +48 -0
  294. data/lib/rouge/theme.rb +213 -0
  295. data/lib/rouge/themes/base16.rb +130 -0
  296. data/lib/rouge/themes/colorful.rb +67 -0
  297. data/lib/rouge/themes/github.rb +71 -0
  298. data/lib/rouge/themes/gruvbox.rb +167 -0
  299. data/lib/rouge/themes/igor_pro.rb +20 -0
  300. data/lib/rouge/themes/molokai.rb +82 -0
  301. data/lib/rouge/themes/monokai.rb +92 -0
  302. data/lib/rouge/themes/monokai_sublime.rb +90 -0
  303. data/lib/rouge/themes/pastie.rb +69 -0
  304. data/lib/rouge/themes/thankful_eyes.rb +74 -0
  305. data/lib/rouge/themes/tulip.rb +69 -0
  306. data/lib/rouge/token.rb +182 -0
  307. data/lib/rouge/util.rb +101 -0
  308. data/lib/rouge/version.rb +7 -0
  309. data/lib/rougegal.rb +80 -0
  310. data/rougegal.gemspec +18 -0
  311. metadata +356 -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(//.*?\n), 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.analyze_text(text)
14
+ return 1 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,180 @@
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.analyze_text(text)
17
+ text.shebang?(/(ba|z|k)?sh/) ? 1 : 0
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 echo enable eval exec exit
28
+ export false fc fg getopts hash help history jobs kill let
29
+ local logout popd printf pushd pwd read readonly set shift
30
+ shopt source suspend test time times trap true type typeset
31
+ ulimit umask unalias unset wait
32
+
33
+ ls tar cat grep sudo
34
+ ).join('|')
35
+
36
+ state :basic do
37
+ rule /#.*$/, Comment
38
+
39
+ rule /\b(#{KEYWORDS})\s*\b/, Keyword
40
+ rule /\bcase\b/, Keyword, :case
41
+
42
+ rule /\b(#{BUILTINS})\s*\b(?!(\.|-))/, Name::Builtin
43
+ rule /[.](?=\s)/, Name::Builtin
44
+
45
+ rule /(\b\w+)(=)/ do |m|
46
+ groups Name::Variable, Operator
47
+ end
48
+
49
+ rule /[\[\]{}()!=>]/, Operator
50
+ rule /&&|\|\|/, Operator
51
+
52
+ # here-string
53
+ rule /<<</, Operator
54
+
55
+ rule /(<<-?)(\s*)(\'?)(\\?)(\w+)(\3)/ do |m|
56
+ groups Operator, Text, Str::Heredoc, Str::Heredoc, Name::Constant, Str::Heredoc
57
+ @heredocstr = Regexp.escape(m[5])
58
+ push :heredoc
59
+ end
60
+ end
61
+
62
+ state :heredoc do
63
+ rule /\n/, Str::Heredoc, :heredoc_nl
64
+ rule /[^$\n]+/, Str::Heredoc
65
+ mixin :interp
66
+ rule /[$]/, Str::Heredoc
67
+ end
68
+
69
+ state :heredoc_nl do
70
+ rule /\s*(\w+)\s*\n/ do |m|
71
+ if m[1] == @heredocstr
72
+ token Name::Constant
73
+ pop! 2
74
+ else
75
+ token Str::Heredoc
76
+ end
77
+ end
78
+
79
+ rule(//) { pop! }
80
+ end
81
+
82
+
83
+ state :double_quotes do
84
+ # NB: "abc$" is literally the string abc$.
85
+ # Here we prevent :interp from interpreting $" as a variable.
86
+ rule /(?:\$#?)?"/, Str::Double, :pop!
87
+ mixin :interp
88
+ rule /[^"`\\$]+/, Str::Double
89
+ end
90
+
91
+ state :ansi_string do
92
+ rule /\\./, Str::Escape
93
+ rule /[^\\']+/, Str::Single
94
+ mixin :single_quotes
95
+ end
96
+
97
+ state :single_quotes do
98
+ rule /'/, Str::Single, :pop!
99
+ rule /[^']+/, Str::Single
100
+ end
101
+
102
+ state :data do
103
+ rule /\s+/, Text
104
+ rule /\\./, Str::Escape
105
+ rule /\$?"/, Str::Double, :double_quotes
106
+ rule /\$'/, Str::Single, :ansi_string
107
+
108
+ # single quotes are much easier than double quotes - we can
109
+ # literally just scan until the next single quote.
110
+ # POSIX: Enclosing characters in single-quotes ( '' )
111
+ # shall preserve the literal value of each character within the
112
+ # single-quotes. A single-quote cannot occur within single-quotes.
113
+ rule /'/, Str::Single, :single_quotes
114
+
115
+ rule /\*/, Keyword
116
+
117
+ rule /;/, Punctuation
118
+
119
+ rule /--?[\w-]+/, Name::Tag
120
+ rule /[^=\*\s{}()$"'`;\\<]+/, Text
121
+ rule /\d+(?= |\Z)/, Num
122
+ rule /</, Text
123
+ mixin :interp
124
+ end
125
+
126
+ state :curly do
127
+ rule /}/, Keyword, :pop!
128
+ rule /:-/, Keyword
129
+ rule /[a-zA-Z0-9_]+/, Name::Variable
130
+ rule /[^}:"`'$]+/, Punctuation
131
+ mixin :root
132
+ end
133
+
134
+ state :paren do
135
+ rule /\)/, Keyword, :pop!
136
+ mixin :root
137
+ end
138
+
139
+ state :math do
140
+ rule /\)\)/, Keyword, :pop!
141
+ rule %r([-+*/%^|&!]|\*\*|\|\|), Operator
142
+ rule /\d+(#\w+)?/, Num
143
+ mixin :root
144
+ end
145
+
146
+ state :case do
147
+ rule /\besac\b/, Keyword, :pop!
148
+ rule /\|/, Punctuation
149
+ rule /\)/, Punctuation, :case_stanza
150
+ mixin :root
151
+ end
152
+
153
+ state :case_stanza do
154
+ rule /;;/, Punctuation, :pop!
155
+ mixin :root
156
+ end
157
+
158
+ state :backticks do
159
+ rule /`/, Str::Backtick, :pop!
160
+ mixin :root
161
+ end
162
+
163
+ state :interp do
164
+ rule /\\$/, Str::Escape # line continuation
165
+ rule /\\./, Str::Escape
166
+ rule /\$\(\(/, Keyword, :math
167
+ rule /\$\(/, Keyword, :paren
168
+ rule /\${#?/, Keyword, :curly
169
+ rule /`/, Str::Backtick, :backticks
170
+ rule /\$#?(\w+|.)/, Name::Variable
171
+ rule /\$[*@]/, Name::Variable
172
+ end
173
+
174
+ state :root do
175
+ mixin :basic
176
+ mixin :data
177
+ end
178
+ end
179
+ end
180
+ 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