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,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,91 @@
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.analyze_text(text)
14
+ rv = 0.0
15
+ rv += 0.15 if text =~ /\{if\s+.*?\}.*?\{\/if\}/
16
+ rv += 0.15 if text =~ /\{include\s+file=.*?\}/
17
+ rv += 0.15 if text =~ /\{foreach\s+.*?\}.*?\{\/foreach\}/
18
+ rv += 0.01 if text =~ /\{\$.*?\}/
19
+ return rv
20
+ end
21
+
22
+
23
+
24
+ def self.builtins
25
+ @builtins ||= %w(
26
+ append assign block call capture config_load debug extends
27
+ for foreach foreachelse break continue function if elseif
28
+ else include include_php insert ldelim rdelim literal nocache
29
+ php section sectionelse setfilter strip while
30
+ counter cycle eval fetch html_checkboxes html_image html_options
31
+ html_radios html_select_date html_select_time html_table
32
+ mailto math textformat
33
+ capitalize cat count_characters count_paragraphs
34
+ count_sentences count_words date_format default escape
35
+ from_charset indent lower nl2br regex_replace replace spacify
36
+ string_format strip strip_tags to_charset truncate unescape
37
+ upper wordwrap
38
+ )
39
+ end
40
+
41
+
42
+ state :root do
43
+ rule(/\{\s+/) { delegate parent }
44
+
45
+ # block comments
46
+ rule /\{\*.*?\*\}/m, Comment
47
+
48
+ rule /\{\/?(?![\s*])/ do
49
+ token Keyword
50
+ push :smarty
51
+ end
52
+
53
+
54
+ rule(/.*?(?={[\/a-zA-Z0-9$#*"'])|.*/m) { delegate parent }
55
+ rule(/.+/m) { delegate parent }
56
+ end
57
+
58
+ state :comment do
59
+ rule(/{\*/) { token Comment; push }
60
+ rule(/\*}/) { token Comment; pop! }
61
+ rule(/[^{}]+/m) { token Comment }
62
+ end
63
+
64
+ state :smarty do
65
+ # allow nested tags
66
+ rule /\{\/?(?![\s*])/ do
67
+ token Keyword
68
+ push :smarty
69
+ end
70
+
71
+ rule /}/, Keyword, :pop!
72
+ rule /\s+/m, Text
73
+ rule %r([~!%^&*()+=|\[\]:;,.<>/@?-]), Operator
74
+ rule /#[a-zA-Z_]\w*#/, Name::Variable
75
+ rule /\$[a-zA-Z_]\w*(\.\w+)*/, Name::Variable
76
+ rule /(true|false|null)\b/, Keyword::Constant
77
+ rule /[0-9](\.[0-9]*)?(eE[+-][0-9])?[flFLdD]?|0[xX][0-9a-fA-F]+[Ll]?/, Num
78
+ rule /"(\\.|.)*?"/, Str::Double
79
+ rule /'(\\.|.)*?'/, Str::Single
80
+ rule /([a-zA-Z_]\w*)/ do |m|
81
+ if self.class.builtins.include? m[0]
82
+ token Name::Builtin
83
+ else
84
+ token Name::Attribute
85
+ end
86
+ end
87
+ end
88
+
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,348 @@
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
+ def self.analyze_text(text)
32
+ return 0
33
+ end
34
+
35
+ state :whitespace do
36
+ rule /\s+/m, Text
37
+ rule /[(][*]/, Comment, :comment
38
+ end
39
+
40
+ state :delimiters do
41
+ rule /[(\[{]/, Punctuation, :main
42
+ rule /[)\]}]/, Punctuation, :pop!
43
+
44
+ rule /\b(let|if|local)\b(?!')/ do
45
+ token Keyword::Reserved
46
+ push; push
47
+ end
48
+
49
+ rule /\b(struct|sig|while)\b(?!')/ do
50
+ token Keyword::Reserved
51
+ push
52
+ end
53
+
54
+ rule /\b(do|else|end|in|then)\b(?!')/, Keyword::Reserved, :pop!
55
+ end
56
+
57
+ def token_for_id_with_dot(id)
58
+ if self.class.keywords.include? id
59
+ Error
60
+ else
61
+ Name::Namespace
62
+ end
63
+ end
64
+
65
+ def token_for_final_id(id)
66
+ if self.class.keywords.include? id or self.class.symbolic_reserved.include? id
67
+ Error
68
+ else
69
+ Name
70
+ end
71
+ end
72
+
73
+ def token_for_id(id)
74
+ if self.class.keywords.include? id
75
+ Keyword::Reserved
76
+ elsif self.class.symbolic_reserved.include? id
77
+ Punctuation
78
+ else
79
+ Name
80
+ end
81
+ end
82
+
83
+ state :core do
84
+ rule /[()\[\]{},;_]|[.][.][.]/, Punctuation
85
+ rule /#"/, Str::Char, :char
86
+ rule /"/, Str::Double, :string
87
+ rule /~?0x[0-9a-fA-F]+/, Num::Hex
88
+ rule /0wx[0-9a-fA-F]+/, Num::Hex
89
+ rule /0w\d+/, Num::Integer
90
+ rule /~?\d+([.]\d+)?[eE]~?\d+/, Num::Float
91
+ rule /~?\d+[.]\d+/, Num::Float
92
+ rule /~?\d+/, Num::Integer
93
+
94
+ rule /#\s*[1-9][0-9]*/, Name::Label
95
+ rule /#\s*#{id}/, Name::Label
96
+ rule /#\s+#{symbol}/, Name::Label
97
+
98
+ rule /\b(datatype|abstype)\b(?!')/, Keyword::Reserved, :dname
99
+ rule(/(?=\bexception\b(?!'))/) { push :ename }
100
+ rule /\b(functor|include|open|signature|structure)\b(?!')/,
101
+ Keyword::Reserved, :sname
102
+ rule /\b(type|eqtype)\b(?!')/, Keyword::Reserved, :tname
103
+
104
+ rule /'#{id}/, Name::Decorator
105
+ rule /(#{id})([.])/ do |m|
106
+ groups(token_for_id_with_dot(m[1]), Punctuation)
107
+ push :dotted
108
+ end
109
+
110
+ rule id do |m|
111
+ token token_for_id(m[0])
112
+ end
113
+
114
+ rule symbol do |m|
115
+ token token_for_id(m[0])
116
+ end
117
+ end
118
+
119
+ state :dotted do
120
+ rule /(#{id})([.])/ do |m|
121
+ groups(token_for_id_with_dot(m[1]), Punctuation)
122
+ end
123
+
124
+ rule id do |m|
125
+ token token_for_id(m[0])
126
+ pop!
127
+ end
128
+
129
+ rule symbol do |m|
130
+ token token_for_id(m[0])
131
+ pop!
132
+ end
133
+ end
134
+
135
+ state :root do
136
+ rule /#!.*?\n/, Comment::Preproc
137
+ rule(//) { push :main }
138
+ end
139
+
140
+ state :main do
141
+ mixin :whitespace
142
+
143
+ rule /\b(val|and)\b(?!')/, Keyword::Reserved, :vname
144
+ rule /\b(fun)\b(?!')/ do
145
+ token Keyword::Reserved
146
+ goto :main_fun
147
+ push :fname
148
+ end
149
+
150
+ mixin :delimiters
151
+ mixin :core
152
+ end
153
+
154
+ state :main_fun do
155
+ mixin :whitespace
156
+ rule /\b(fun|and)\b(?!')/, Keyword::Reserved, :fname
157
+ rule /\bval\b(?!')/ do
158
+ token Keyword::Reserved
159
+ goto :main
160
+ push :vname
161
+ end
162
+
163
+ rule /[|]/, Punctuation, :fname
164
+ rule /\b(case|handle)\b(?!')/ do
165
+ token Keyword::Reserved
166
+ goto :main
167
+ end
168
+
169
+ mixin :delimiters
170
+ mixin :core
171
+ end
172
+
173
+ state :has_escapes do
174
+ rule /\\[\\"abtnvfr]/, Str::Escape
175
+ rule /\\\^[\x40-\x5e]/, Str::Escape
176
+ rule /\\[0-9]{3}/, Str::Escape
177
+ rule /\\u\h{4}/, Str::Escape
178
+ rule /\\\s+\\/, Str::Interpol
179
+ end
180
+
181
+ state :string do
182
+ rule /[^"\\]+/, Str::Double
183
+ rule /"/, Str::Double, :pop!
184
+ mixin :has_escapes
185
+ end
186
+
187
+ state :char do
188
+ rule /[^"\\]+/, Str::Char
189
+ rule /"/, Str::Char, :pop!
190
+ mixin :has_escapes
191
+ end
192
+
193
+ state :breakout do
194
+ rule /(?=\b(#{SML.keywords.to_a.join('|')})\b(?!'))/ do
195
+ pop!
196
+ end
197
+ end
198
+
199
+ state :sname do
200
+ mixin :whitespace
201
+ mixin :breakout
202
+ rule id, Name::Namespace
203
+ rule(//) { pop! }
204
+ end
205
+
206
+ state :has_annotations do
207
+ rule /'[\w']*/, Name::Decorator
208
+ rule /[(]/, Punctuation, :tyvarseq
209
+ end
210
+
211
+ state :fname do
212
+ mixin :whitespace
213
+ mixin :has_annotations
214
+
215
+ rule id, Name::Function, :pop!
216
+ rule symbol, Name::Function, :pop!
217
+ end
218
+
219
+ state :vname do
220
+ mixin :whitespace
221
+ mixin :has_annotations
222
+
223
+ rule /(#{id})(\s*)(=(?!#{symbol}))/m do
224
+ groups Name::Variable, Text, Punctuation
225
+ pop!
226
+ end
227
+
228
+ rule /(#{symbol})(\s*)(=(?!#{symbol}))/m do
229
+ groups Name::Variable, Text, Punctuation
230
+ end
231
+
232
+ rule id, Name::Variable, :pop!
233
+ rule symbol, Name::Variable, :pop!
234
+
235
+ rule(//) { pop! }
236
+ end
237
+
238
+ state :tname do
239
+ mixin :whitespace
240
+ mixin :breakout
241
+ mixin :has_annotations
242
+
243
+ rule /'[\w']*/, Name::Decorator
244
+ rule /[(]/, Punctuation, :tyvarseq
245
+
246
+ rule %r(=(?!#{symbol})) do
247
+ token Punctuation
248
+ goto :typbind
249
+ end
250
+
251
+ rule id, Keyword::Type
252
+ rule symbol, Keyword::Type
253
+ end
254
+
255
+ state :typbind do
256
+ mixin :whitespace
257
+
258
+ rule /\b(and)\b(?!')/ do
259
+ token Keyword::Reserved
260
+ goto :tname
261
+ end
262
+
263
+ mixin :breakout
264
+ mixin :core
265
+ end
266
+
267
+ state :dname do
268
+ mixin :whitespace
269
+ mixin :breakout
270
+ mixin :has_annotations
271
+
272
+ rule /(=)(\s*)(datatype)\b/ do
273
+ groups Punctuation, Text, Keyword::Reserved
274
+ pop!
275
+ end
276
+
277
+ rule %r(=(?!#{symbol})) do
278
+ token Punctuation
279
+ goto :datbind
280
+ push :datcon
281
+ end
282
+
283
+ rule id, Keyword::Type
284
+ rule symbol, Keyword::Type
285
+ end
286
+
287
+ state :datbind do
288
+ mixin :whitespace
289
+ rule /\b(and)\b(?!')/ do
290
+ token Keyword::Reserved; goto :dname
291
+ end
292
+ rule /\b(withtype)\b(?!')/ do
293
+ token Keyword::Reserved; goto :tname
294
+ end
295
+ rule /\bof\b(?!')/, Keyword::Reserved
296
+ rule /([|])(\s*)(#{id})/ do
297
+ groups(Punctuation, Text, Name::Class)
298
+ end
299
+
300
+ rule /([|])(\s+)(#{symbol})/ do
301
+ groups(Punctuation, Text, Name::Class)
302
+ end
303
+
304
+ mixin :breakout
305
+ mixin :core
306
+ end
307
+
308
+ state :ename do
309
+ mixin :whitespace
310
+ rule /(exception|and)(\s+)(#{id})/ do
311
+ groups Keyword::Reserved, Text, Name::Class
312
+ end
313
+
314
+ rule /(exception|and)(\s*)(#{symbol})/ do
315
+ groups Keyword::Reserved, Text, Name::Class
316
+ end
317
+
318
+ rule /\b(of)\b(?!')/, Keyword::Reserved
319
+ mixin :breakout
320
+ mixin :core
321
+ end
322
+
323
+ state :datcon do
324
+ mixin :whitespace
325
+ rule id, Name::Class, :pop!
326
+ rule symbol, Name::Class, :pop!
327
+ end
328
+
329
+ state :tyvarseq do
330
+ mixin :whitespace
331
+ rule /'[\w']*/, Name::Decorator
332
+ rule id, Name
333
+ rule /,/, Punctuation
334
+ rule /[)]/, Punctuation, :pop!
335
+ rule symbol, Name
336
+ end
337
+
338
+ state :comment do
339
+ rule /[^(*)]+/, Comment::Multiline
340
+ rule /[(][*]/ do
341
+ token Comment::Multiline; push
342
+ end
343
+ rule /[*][)]/, Comment::Multiline, :pop!
344
+ rule /[(*)]/, Comment::Multiline
345
+ end
346
+ end
347
+ end
348
+ end