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,228 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ # A lexer for the Slim tempalte language
6
+ # @see http://slim-lang.org
7
+ class Slim < RegexLexer
8
+ include Indentation
9
+
10
+ title "Slim"
11
+ desc 'The Slim template language'
12
+
13
+ tag 'slim'
14
+
15
+ filenames '*.slim'
16
+
17
+ # Ruby identifier characters
18
+ ruby_chars = /[\w\!\?\@\$]/
19
+
20
+ # Since you are allowed to wrap lines with a backslash, include \\\n in characters
21
+ dot = /(\\\n|.)/
22
+
23
+ def ruby
24
+ @ruby ||= Ruby.new(options)
25
+ end
26
+
27
+ def html
28
+ @html ||= HTML.new(options)
29
+ end
30
+
31
+ def filters
32
+ @filters ||= {
33
+ 'ruby' => ruby,
34
+ 'erb' => ERB.new(options),
35
+ 'javascript' => Javascript.new(options),
36
+ 'css' => CSS.new(options),
37
+ 'coffee' => Coffeescript.new(options),
38
+ 'markdown' => Markdown.new(options),
39
+ 'scss' => Scss.new(options),
40
+ 'sass' => Sass.new(options)
41
+ }
42
+ end
43
+
44
+ start { ruby.reset!; html.reset! }
45
+
46
+ state :root do
47
+ rule /\s*\n/, Text
48
+ rule(/\s*/) { |m| token Text; indentation(m[0]) }
49
+ end
50
+
51
+ state :content do
52
+ mixin :css
53
+
54
+ rule /\/#{dot}*/, Comment, :indented_block
55
+
56
+ rule /(doctype)(\s+)(.*)/ do
57
+ groups Name::Namespace, Text::Whitespace, Text
58
+ pop!
59
+ end
60
+
61
+ # filters, shamelessly ripped from HAML
62
+ rule /(\w*):\s*\n/ do |m|
63
+ token Name::Decorator
64
+ pop!
65
+ starts_block :filter_block
66
+
67
+ filter_name = m[1].strip
68
+
69
+ @filter_lexer = self.filters[filter_name]
70
+ @filter_lexer.reset! unless @filter_lexer.nil?
71
+
72
+ puts " slim: filter #{filter_name.inspect} #{@filter_lexer.inspect}" if @debug
73
+ end
74
+
75
+ # Text
76
+ rule %r([\|'](?=\s)) do
77
+ token Punctuation
78
+ pop!
79
+ starts_block :plain_block
80
+ goto :plain_block
81
+ end
82
+
83
+ rule /-|==|=/, Punctuation, :ruby_line
84
+
85
+ # Dynamic tags
86
+ rule /(\*)(#{ruby_chars}+\(.*?\))/ do |m|
87
+ token Punctuation, m[1]
88
+ delegate ruby, m[2]
89
+ push :tag
90
+ end
91
+
92
+ rule /(\*)(#{ruby_chars}+)/ do |m|
93
+ token Punctuation, m[1]
94
+ delegate ruby, m[2]
95
+ push :tag
96
+ end
97
+
98
+ #rule /<\w+(?=.*>)/, Keyword::Constant, :tag # Maybe do this, look ahead and stuff
99
+ rule %r((</?[\w\s\=\'\"]+?/?>)) do |m| # Dirty html
100
+ delegate html, m[1]
101
+ pop!
102
+ end
103
+
104
+ # Ordinary slim tags
105
+ rule /\w+/, Name::Tag, :tag
106
+
107
+ end
108
+
109
+ state :tag do
110
+ mixin :css
111
+ mixin :indented_block
112
+ mixin :interpolation
113
+
114
+ # Whitespace control
115
+ rule /[<>]/, Punctuation
116
+
117
+ # Trim whitespace
118
+ rule /\s+?/, Text::Whitespace
119
+
120
+ # Splats, these two might be mergable?
121
+ rule /(\*)(#{ruby_chars}+)/ do |m|
122
+ token Punctuation, m[1]
123
+ delegate ruby, m[2]
124
+ end
125
+
126
+ rule /(\*)(\{#{dot}+?\})/ do |m|
127
+ token Punctuation, m[1]
128
+ delegate ruby, m[2]
129
+ end
130
+
131
+ # Attributes
132
+ rule /([\w\-]+)(\s*)(\=)/ do |m|
133
+ token Name::Attribute, m[1]
134
+ token Text::Whitespace, m[2]
135
+ token Punctuation, m[3]
136
+ push :html_attr
137
+ end
138
+
139
+ # Ruby value
140
+ rule /(\=)(#{dot}+)/ do |m|
141
+ token Punctuation, m[1]
142
+ #token Keyword::Constant, m[2]
143
+ delegate ruby, m[2]
144
+ end
145
+
146
+ # HTML Entities
147
+ rule(/&\S*?;/, Name::Entity)
148
+
149
+ rule /#{dot}+?/, Text
150
+
151
+ rule /\s*\n/, Text::Whitespace, :pop!
152
+ end
153
+
154
+ state :css do
155
+ rule(/\.[\w-]*/) { token Name::Class; goto :tag }
156
+ rule(/#[a-zA-Z][\w:-]*/) { token Name::Function; goto :tag }
157
+ end
158
+
159
+ state :html_attr do
160
+ # Strings, double/single quoted
161
+ rule(/\s*(['"])#{dot}*?\1/, Literal::String, :pop!)
162
+
163
+ # Ruby stuff
164
+ rule(/(#{ruby_chars}+\(.*?\))/) { |m| delegate ruby, m[1]; pop! }
165
+ rule(/(#{ruby_chars}+)/) { |m| delegate ruby, m[1]; pop! }
166
+
167
+ rule /\s+/, Text::Whitespace
168
+ end
169
+
170
+ state :ruby_line do
171
+ # Need at top
172
+ mixin :indented_block
173
+
174
+ rule(/,\s*\n/) { delegate ruby }
175
+ rule /[ ]\|[ \t]*\n/, Str::Escape
176
+ rule(/.*?(?=(,$| \|)?[ \t]*$)/) { delegate ruby }
177
+ end
178
+
179
+ state :filter_block do
180
+ rule /([^#\n]|#[^{\n]|(\\\\)*\\#\{)+/ do
181
+ if @filter_lexer
182
+ delegate @filter_lexer
183
+ else
184
+ token Name::Decorator
185
+ end
186
+ end
187
+
188
+ mixin :interpolation
189
+ mixin :indented_block
190
+ end
191
+
192
+ state :plain_block do
193
+ mixin :interpolation
194
+
195
+ rule %r((</?[\w\s\=\'\"]+?/?>)) do |m| # Dirty html
196
+ delegate html, m[1]
197
+ end
198
+
199
+ # HTML Entities
200
+ rule(/&\S*?;/, Name::Entity)
201
+
202
+ #rule /([^#\n]|#[^{\n]|(\\\\)*\\#\{)+/ do
203
+ rule /#{dot}+?/, Text
204
+
205
+ mixin :indented_block
206
+ end
207
+
208
+ state :interpolation do
209
+ rule /#[{]/, Str::Interpol, :ruby_interp
210
+ end
211
+
212
+ state :ruby_interp do
213
+ rule /[}]/, Str::Interpol, :pop!
214
+ mixin :ruby_interp_inner
215
+ end
216
+
217
+ state :ruby_interp_inner do
218
+ rule(/[{]/) { delegate ruby; push :ruby_interp_inner }
219
+ rule(/[}]/) { delegate ruby; pop! }
220
+ rule(/[^{}]+/) { delegate ruby }
221
+ end
222
+
223
+ state :indented_block do
224
+ rule(/(?<!\\)\n/) { token Text; reset_stack }
225
+ end
226
+ end
227
+ end
228
+ end
@@ -0,0 +1,116 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Smalltalk < RegexLexer
6
+ title "Smalltalk"
7
+ desc 'The Smalltalk programming language'
8
+
9
+ tag 'smalltalk'
10
+ aliases 'st', 'squeak'
11
+ filenames '*.st'
12
+ mimetypes 'text/x-smalltalk'
13
+
14
+ ops = %r([-+*/\\~<>=|&!?,@%])
15
+
16
+ state :root do
17
+ rule /(<)(\w+:)(.*?)(>)/ do
18
+ groups Punctuation, Keyword, Text, Punctuation
19
+ end
20
+
21
+ # mixin :squeak_fileout
22
+ mixin :whitespaces
23
+ mixin :method_definition
24
+ rule /([|])([\w\s]*)([|])/ do
25
+ groups Punctuation, Name::Variable, Punctuation
26
+ end
27
+ mixin :objects
28
+ rule /\^|:=|_/, Operator
29
+
30
+ rule /[)}\]]/, Punctuation, :after_object
31
+ rule /[({\[!]/, Punctuation
32
+ end
33
+
34
+ state :method_definition do
35
+ rule /([a-z]\w*:)(\s*)(\w+)/i do
36
+ groups Name::Function, Text, Name::Variable
37
+ end
38
+
39
+ rule /^(\s*)(\b[a-z]\w*\b)(\s*)$/i do
40
+ groups Text, Name::Function, Text
41
+ end
42
+
43
+ rule %r(^(\s*)(#{ops}+)(\s*)(\w+)(\s*)$) do
44
+ groups Text, Name::Function, Text, Name::Variable, Text
45
+ end
46
+ end
47
+
48
+ state :block_variables do
49
+ mixin :whitespaces
50
+ rule /(:)(\s*)(\w+)/ do
51
+ groups Operator, Text, Name::Variable
52
+ end
53
+
54
+ rule /[|]/, Punctuation, :pop!
55
+
56
+ rule(//) { pop! }
57
+ end
58
+
59
+ state :literals do
60
+ rule /'(''|.)*?'/m, Str, :after_object
61
+ rule /[$]./, Str::Char, :after_object
62
+ rule /#[(]/, Str::Symbol, :parenth
63
+ rule /(\d+r)?-?\d+(\.\d+)?(e-?\d+)?/,
64
+ Num, :after_object
65
+ rule /#("[^"]*"|#{ops}+|[\w:]+)/,
66
+ Str::Symbol, :after_object
67
+ end
68
+
69
+ state :parenth do
70
+ rule /[)]/ do
71
+ token Str::Symbol
72
+ goto :after_object
73
+ end
74
+
75
+ mixin :inner_parenth
76
+ end
77
+
78
+ state :inner_parenth do
79
+ rule /#[(]/, Str::Symbol, :inner_parenth
80
+ rule /[)]/, Str::Symbol, :pop!
81
+ mixin :whitespaces
82
+ mixin :literals
83
+ rule /(#{ops}|[\w:])+/, Str::Symbol
84
+ end
85
+
86
+ state :whitespaces do
87
+ rule /! !$/, Keyword # squeak chunk delimiter
88
+ rule /\s+/m, Text
89
+ rule /".*?"/m, Comment
90
+ end
91
+
92
+ state :objects do
93
+ rule /\[/, Punctuation, :block_variables
94
+ rule /(self|super|true|false|nil|thisContext)\b/,
95
+ Name::Builtin::Pseudo, :after_object
96
+ rule /[A-Z]\w*(?!:)\b/, Name::Class, :after_object
97
+ rule /[a-z]\w*(?!:)\b/, Name::Variable, :after_object
98
+ mixin :literals
99
+ end
100
+
101
+ state :after_object do
102
+ mixin :whitespaces
103
+ rule /(ifTrue|ifFalse|whileTrue|whileFalse|timesRepeat):/,
104
+ Name::Builtin, :pop!
105
+ rule /new(?!:)\b/, Name::Builtin
106
+ rule /:=|_/, Operator, :pop!
107
+ rule /[a-z]+\w*:/i, Name::Function, :pop!
108
+ rule /[a-z]+\w*/i, Name::Function
109
+ rule /#{ops}+/, Name::Function, :pop!
110
+ rule /[.]/, Punctuation, :pop!
111
+ rule /;/, Punctuation
112
+ rule(//) { pop! }
113
+ end
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,80 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Smarty < TemplateLexer
6
+ title "Smarty"
7
+ desc 'Smarty Template Engine'
8
+ tag 'smarty'
9
+ aliases 'smarty'
10
+ filenames '*.tpl', '*.smarty'
11
+ mimetypes 'application/x-smarty', 'text/x-smarty'
12
+
13
+ def self.builtins
14
+ @builtins ||= %w(
15
+ append assign block call capture config_load debug extends
16
+ for foreach foreachelse break continue function if elseif
17
+ else include include_php insert ldelim rdelim literal nocache
18
+ php section sectionelse setfilter strip while
19
+ counter cycle eval fetch html_checkboxes html_image html_options
20
+ html_radios html_select_date html_select_time html_table
21
+ mailto math textformat
22
+ capitalize cat count_characters count_paragraphs
23
+ count_sentences count_words date_format default escape
24
+ from_charset indent lower nl2br regex_replace replace spacify
25
+ string_format strip strip_tags to_charset truncate unescape
26
+ upper wordwrap
27
+ )
28
+ end
29
+
30
+
31
+ state :root do
32
+ rule(/\{\s+/) { delegate parent }
33
+
34
+ # block comments
35
+ rule /\{\*.*?\*\}/m, Comment
36
+
37
+ rule /\{\/?(?![\s*])/ do
38
+ token Keyword
39
+ push :smarty
40
+ end
41
+
42
+
43
+ rule(/.*?(?={[\/a-zA-Z0-9$#*"'])|.*/m) { delegate parent }
44
+ rule(/.+/m) { delegate parent }
45
+ end
46
+
47
+ state :comment do
48
+ rule(/{\*/) { token Comment; push }
49
+ rule(/\*}/) { token Comment; pop! }
50
+ rule(/[^{}]+/m) { token Comment }
51
+ end
52
+
53
+ state :smarty do
54
+ # allow nested tags
55
+ rule /\{\/?(?![\s*])/ do
56
+ token Keyword
57
+ push :smarty
58
+ end
59
+
60
+ rule /}/, Keyword, :pop!
61
+ rule /\s+/m, Text
62
+ rule %r([~!%^&*()+=|\[\]:;,.<>/@?-]), Operator
63
+ rule /#[a-zA-Z_]\w*#/, Name::Variable
64
+ rule /\$[a-zA-Z_]\w*(\.\w+)*/, Name::Variable
65
+ rule /(true|false|null)\b/, Keyword::Constant
66
+ rule /[0-9](\.[0-9]*)?(eE[+-][0-9])?[flFLdD]?|0[xX][0-9a-fA-F]+[Ll]?/, Num
67
+ rule /"(\\.|.)*?"/, Str::Double
68
+ rule /'(\\.|.)*?'/, Str::Single
69
+ rule /([a-zA-Z_]\w*)/ do |m|
70
+ if self.class.builtins.include? m[0]
71
+ token Name::Builtin
72
+ else
73
+ token Name::Attribute
74
+ end
75
+ end
76
+ end
77
+
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,344 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class SML < RegexLexer
6
+ title "SML"
7
+ desc 'Standard ML'
8
+ tag 'sml'
9
+ aliases 'ml'
10
+ filenames '*.sml', '*.sig', '*.fun'
11
+
12
+ mimetypes 'text/x-standardml', 'application/x-standardml'
13
+
14
+ def self.keywords
15
+ @keywords ||= Set.new %w(
16
+ abstype and andalso as case datatype do else end exception
17
+ fn fun handle if in infix infixr let local nonfix of op open
18
+ orelse raise rec then type val with withtype while
19
+ eqtype functor include sharing sig signature struct structure
20
+ where
21
+ )
22
+ end
23
+
24
+ def self.symbolic_reserved
25
+ @symbolic_reserved ||= Set.new %w(: | = => -> # :>)
26
+ end
27
+
28
+ id = /[\w']+/i
29
+ symbol = %r([!%&$#/:<=>?@\\~`^|*+-]+)
30
+
31
+ state :whitespace do
32
+ rule /\s+/m, Text
33
+ rule /[(][*]/, Comment, :comment
34
+ end
35
+
36
+ state :delimiters do
37
+ rule /[(\[{]/, Punctuation, :main
38
+ rule /[)\]}]/, Punctuation, :pop!
39
+
40
+ rule /\b(let|if|local)\b(?!')/ do
41
+ token Keyword::Reserved
42
+ push; push
43
+ end
44
+
45
+ rule /\b(struct|sig|while)\b(?!')/ do
46
+ token Keyword::Reserved
47
+ push
48
+ end
49
+
50
+ rule /\b(do|else|end|in|then)\b(?!')/, Keyword::Reserved, :pop!
51
+ end
52
+
53
+ def token_for_id_with_dot(id)
54
+ if self.class.keywords.include? id
55
+ Error
56
+ else
57
+ Name::Namespace
58
+ end
59
+ end
60
+
61
+ def token_for_final_id(id)
62
+ if self.class.keywords.include? id or self.class.symbolic_reserved.include? id
63
+ Error
64
+ else
65
+ Name
66
+ end
67
+ end
68
+
69
+ def token_for_id(id)
70
+ if self.class.keywords.include? id
71
+ Keyword::Reserved
72
+ elsif self.class.symbolic_reserved.include? id
73
+ Punctuation
74
+ else
75
+ Name
76
+ end
77
+ end
78
+
79
+ state :core do
80
+ rule /[()\[\]{},;_]|[.][.][.]/, Punctuation
81
+ rule /#"/, Str::Char, :char
82
+ rule /"/, Str::Double, :string
83
+ rule /~?0x[0-9a-fA-F]+/, Num::Hex
84
+ rule /0wx[0-9a-fA-F]+/, Num::Hex
85
+ rule /0w\d+/, Num::Integer
86
+ rule /~?\d+([.]\d+)?[eE]~?\d+/, Num::Float
87
+ rule /~?\d+[.]\d+/, Num::Float
88
+ rule /~?\d+/, Num::Integer
89
+
90
+ rule /#\s*[1-9][0-9]*/, Name::Label
91
+ rule /#\s*#{id}/, Name::Label
92
+ rule /#\s+#{symbol}/, Name::Label
93
+
94
+ rule /\b(datatype|abstype)\b(?!')/, Keyword::Reserved, :dname
95
+ rule(/(?=\bexception\b(?!'))/) { push :ename }
96
+ rule /\b(functor|include|open|signature|structure)\b(?!')/,
97
+ Keyword::Reserved, :sname
98
+ rule /\b(type|eqtype)\b(?!')/, Keyword::Reserved, :tname
99
+
100
+ rule /'#{id}/, Name::Decorator
101
+ rule /(#{id})([.])/ do |m|
102
+ groups(token_for_id_with_dot(m[1]), Punctuation)
103
+ push :dotted
104
+ end
105
+
106
+ rule id do |m|
107
+ token token_for_id(m[0])
108
+ end
109
+
110
+ rule symbol do |m|
111
+ token token_for_id(m[0])
112
+ end
113
+ end
114
+
115
+ state :dotted do
116
+ rule /(#{id})([.])/ do |m|
117
+ groups(token_for_id_with_dot(m[1]), Punctuation)
118
+ end
119
+
120
+ rule id do |m|
121
+ token token_for_id(m[0])
122
+ pop!
123
+ end
124
+
125
+ rule symbol do |m|
126
+ token token_for_id(m[0])
127
+ pop!
128
+ end
129
+ end
130
+
131
+ state :root do
132
+ rule /#!.*?\n/, Comment::Preproc
133
+ rule(//) { push :main }
134
+ end
135
+
136
+ state :main do
137
+ mixin :whitespace
138
+
139
+ rule /\b(val|and)\b(?!')/, Keyword::Reserved, :vname
140
+ rule /\b(fun)\b(?!')/ do
141
+ token Keyword::Reserved
142
+ goto :main_fun
143
+ push :fname
144
+ end
145
+
146
+ mixin :delimiters
147
+ mixin :core
148
+ end
149
+
150
+ state :main_fun do
151
+ mixin :whitespace
152
+ rule /\b(fun|and)\b(?!')/, Keyword::Reserved, :fname
153
+ rule /\bval\b(?!')/ do
154
+ token Keyword::Reserved
155
+ goto :main
156
+ push :vname
157
+ end
158
+
159
+ rule /[|]/, Punctuation, :fname
160
+ rule /\b(case|handle)\b(?!')/ do
161
+ token Keyword::Reserved
162
+ goto :main
163
+ end
164
+
165
+ mixin :delimiters
166
+ mixin :core
167
+ end
168
+
169
+ state :has_escapes do
170
+ rule /\\[\\"abtnvfr]/, Str::Escape
171
+ rule /\\\^[\x40-\x5e]/, Str::Escape
172
+ rule /\\[0-9]{3}/, Str::Escape
173
+ rule /\\u\h{4}/, Str::Escape
174
+ rule /\\\s+\\/, Str::Interpol
175
+ end
176
+
177
+ state :string do
178
+ rule /[^"\\]+/, Str::Double
179
+ rule /"/, Str::Double, :pop!
180
+ mixin :has_escapes
181
+ end
182
+
183
+ state :char do
184
+ rule /[^"\\]+/, Str::Char
185
+ rule /"/, Str::Char, :pop!
186
+ mixin :has_escapes
187
+ end
188
+
189
+ state :breakout do
190
+ rule /(?=\b(#{SML.keywords.to_a.join('|')})\b(?!'))/ do
191
+ pop!
192
+ end
193
+ end
194
+
195
+ state :sname do
196
+ mixin :whitespace
197
+ mixin :breakout
198
+ rule id, Name::Namespace
199
+ rule(//) { pop! }
200
+ end
201
+
202
+ state :has_annotations do
203
+ rule /'[\w']*/, Name::Decorator
204
+ rule /[(]/, Punctuation, :tyvarseq
205
+ end
206
+
207
+ state :fname do
208
+ mixin :whitespace
209
+ mixin :has_annotations
210
+
211
+ rule id, Name::Function, :pop!
212
+ rule symbol, Name::Function, :pop!
213
+ end
214
+
215
+ state :vname do
216
+ mixin :whitespace
217
+ mixin :has_annotations
218
+
219
+ rule /(#{id})(\s*)(=(?!#{symbol}))/m do
220
+ groups Name::Variable, Text, Punctuation
221
+ pop!
222
+ end
223
+
224
+ rule /(#{symbol})(\s*)(=(?!#{symbol}))/m do
225
+ groups Name::Variable, Text, Punctuation
226
+ end
227
+
228
+ rule id, Name::Variable, :pop!
229
+ rule symbol, Name::Variable, :pop!
230
+
231
+ rule(//) { pop! }
232
+ end
233
+
234
+ state :tname do
235
+ mixin :whitespace
236
+ mixin :breakout
237
+ mixin :has_annotations
238
+
239
+ rule /'[\w']*/, Name::Decorator
240
+ rule /[(]/, Punctuation, :tyvarseq
241
+
242
+ rule %r(=(?!#{symbol})) do
243
+ token Punctuation
244
+ goto :typbind
245
+ end
246
+
247
+ rule id, Keyword::Type
248
+ rule symbol, Keyword::Type
249
+ end
250
+
251
+ state :typbind do
252
+ mixin :whitespace
253
+
254
+ rule /\b(and)\b(?!')/ do
255
+ token Keyword::Reserved
256
+ goto :tname
257
+ end
258
+
259
+ mixin :breakout
260
+ mixin :core
261
+ end
262
+
263
+ state :dname do
264
+ mixin :whitespace
265
+ mixin :breakout
266
+ mixin :has_annotations
267
+
268
+ rule /(=)(\s*)(datatype)\b/ do
269
+ groups Punctuation, Text, Keyword::Reserved
270
+ pop!
271
+ end
272
+
273
+ rule %r(=(?!#{symbol})) do
274
+ token Punctuation
275
+ goto :datbind
276
+ push :datcon
277
+ end
278
+
279
+ rule id, Keyword::Type
280
+ rule symbol, Keyword::Type
281
+ end
282
+
283
+ state :datbind do
284
+ mixin :whitespace
285
+ rule /\b(and)\b(?!')/ do
286
+ token Keyword::Reserved; goto :dname
287
+ end
288
+ rule /\b(withtype)\b(?!')/ do
289
+ token Keyword::Reserved; goto :tname
290
+ end
291
+ rule /\bof\b(?!')/, Keyword::Reserved
292
+ rule /([|])(\s*)(#{id})/ do
293
+ groups(Punctuation, Text, Name::Class)
294
+ end
295
+
296
+ rule /([|])(\s+)(#{symbol})/ do
297
+ groups(Punctuation, Text, Name::Class)
298
+ end
299
+
300
+ mixin :breakout
301
+ mixin :core
302
+ end
303
+
304
+ state :ename do
305
+ mixin :whitespace
306
+ rule /(exception|and)(\s+)(#{id})/ do
307
+ groups Keyword::Reserved, Text, Name::Class
308
+ end
309
+
310
+ rule /(exception|and)(\s*)(#{symbol})/ do
311
+ groups Keyword::Reserved, Text, Name::Class
312
+ end
313
+
314
+ rule /\b(of)\b(?!')/, Keyword::Reserved
315
+ mixin :breakout
316
+ mixin :core
317
+ end
318
+
319
+ state :datcon do
320
+ mixin :whitespace
321
+ rule id, Name::Class, :pop!
322
+ rule symbol, Name::Class, :pop!
323
+ end
324
+
325
+ state :tyvarseq do
326
+ mixin :whitespace
327
+ rule /'[\w']*/, Name::Decorator
328
+ rule id, Name
329
+ rule /,/, Punctuation
330
+ rule /[)]/, Punctuation, :pop!
331
+ rule symbol, Name
332
+ end
333
+
334
+ state :comment do
335
+ rule /[^(*)]+/, Comment::Multiline
336
+ rule /[(][*]/ do
337
+ token Comment::Multiline; push
338
+ end
339
+ rule /[*][)]/, Comment::Multiline, :pop!
340
+ rule /[(*)]/, Comment::Multiline
341
+ end
342
+ end
343
+ end
344
+ end