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,287 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Liquid < RegexLexer
6
+ title "Liquid"
7
+ desc 'Liquid is a templating engine for Ruby (liquidmarkup.org)'
8
+ tag 'liquid'
9
+ filenames '*.liquid'
10
+
11
+ state :root do
12
+ rule /[^\{]+/, Text
13
+
14
+ rule /(\{%)(\s*)/ do
15
+ groups Punctuation, Text::Whitespace
16
+ push :tag_or_block
17
+ end
18
+
19
+ rule /(\{\{)(\s*)/ do
20
+ groups Punctuation, Text::Whitespace
21
+ push :output
22
+ end
23
+
24
+ rule /\{/, Text
25
+ end
26
+
27
+ state :tag_or_block do
28
+ # builtin logic blocks
29
+ rule /(if|unless|elsif|case)(?=\s+)/, Keyword::Reserved, :condition
30
+
31
+ rule /(when)(\s+)/ do
32
+ groups Keyword::Reserved, Text::Whitespace
33
+ push :when
34
+ end
35
+
36
+ rule /(else)(\s*)(%\})/ do
37
+ groups Keyword::Reserved, Text::Whitespace, Punctuation
38
+ pop!
39
+ end
40
+
41
+ # other builtin blocks
42
+ rule /(capture)(\s+)([^\s%]+)(\s*)(%\})/ do
43
+ groups Name::Tag, Text::Whitespace, Name::Attribute, Text::Whitespace, Punctuation
44
+ pop!
45
+ end
46
+
47
+ rule /(comment)(\s*)(%\})/ do
48
+ groups Name::Tag, Text::Whitespace, Punctuation
49
+ push :comment
50
+ end
51
+
52
+ rule /(raw)(\s*)(%\})/ do
53
+ groups Name::Tag, Text::Whitespace, Punctuation
54
+ push :raw
55
+ end
56
+
57
+ rule /assign/, Name::Tag, :assign
58
+ rule /include/, Name::Tag, :include
59
+
60
+ # end of block
61
+ rule /(end(case|unless|if))(\s*)(%\})/ do
62
+ groups Keyword::Reserved, nil, Text::Whitespace, Punctuation
63
+ pop!
64
+ end
65
+
66
+ rule /(end([^\s%]+))(\s*)(%\})/ do
67
+ groups Name::Tag, nil, Text::Whitespace, Punctuation
68
+ pop!
69
+ end
70
+
71
+ # builtin tags
72
+ rule /(cycle)(\s+)(([^\s:]*)(:))?(\s*)/ do |m|
73
+ token Name::Tag, m[1]
74
+ token Text::Whitespace, m[2]
75
+
76
+ if m[4] =~ /'[^']*'/
77
+ token Str::Single, m[4]
78
+ elsif m[4] =~ /"[^"]*"/
79
+ token Str::Double, m[4]
80
+ else
81
+ token Name::Attribute, m[4]
82
+ end
83
+
84
+ token Punctuation, m[5]
85
+ token Text::Whitespace, m[6]
86
+
87
+ push :variable_tag_markup
88
+ end
89
+
90
+ # other tags or blocks
91
+ rule /([^\s%]+)(\s*)/ do
92
+ groups Name::Tag, Text::Whitespace
93
+ push :tag_markup
94
+ end
95
+ end
96
+
97
+ state :output do
98
+ mixin :whitespace
99
+ mixin :generic
100
+
101
+ rule /\}\}/, Punctuation, :pop!
102
+ rule /\|/, Punctuation, :filters
103
+ end
104
+
105
+ state :filters do
106
+ mixin :whitespace
107
+
108
+ rule(/\}\}/) { token Punctuation; reset_stack }
109
+
110
+ rule /([^\s\|:]+)(:?)(\s*)/ do
111
+ groups Name::Function, Punctuation, Text::Whitespace
112
+ push :filter_markup
113
+ end
114
+ end
115
+
116
+ state :filter_markup do
117
+ rule /\|/, Punctuation, :pop!
118
+
119
+ mixin :end_of_tag
120
+ mixin :end_of_block
121
+ mixin :default_param_markup
122
+ end
123
+
124
+ state :condition do
125
+ mixin :end_of_block
126
+ mixin :whitespace
127
+
128
+ rule /([=!><]=?)/, Operator
129
+
130
+ rule /\b((!)|(not\b))/ do
131
+ groups nil, Operator, Operator::Word
132
+ end
133
+
134
+ rule /(contains)/, Operator::Word
135
+
136
+ mixin :generic
137
+ mixin :whitespace
138
+ end
139
+
140
+ state :when do
141
+ mixin :end_of_block
142
+ mixin :whitespace
143
+ mixin :generic
144
+ end
145
+
146
+ state :operator do
147
+ rule /(\s*)((=|!|>|<)=?)(\s*)/ do
148
+ groups Text::Whitespace, Operator, nil, Text::Whitespace
149
+ pop!
150
+ end
151
+
152
+ rule /(\s*)(\bcontains\b)(\s*)/ do
153
+ groups Text::Whitespace, Operator::Word, Text::Whitespace
154
+ pop!
155
+ end
156
+ end
157
+
158
+ state :end_of_tag do
159
+ rule(/\}\}/) { token Punctuation; reset_stack }
160
+ end
161
+
162
+ state :end_of_block do
163
+ rule(/%\}/) { token Punctuation; reset_stack }
164
+ end
165
+
166
+ # states for unknown markup
167
+ state :param_markup do
168
+ mixin :whitespace
169
+ mixin :string
170
+
171
+ rule /([^\s=:]+)(\s*)(=|:)/ do
172
+ groups Name::Attribute, Text::Whitespace, Operator
173
+ end
174
+
175
+ rule /(\{\{)(\s*)([^\s\}])(\s*)(\}\})/ do
176
+ groups Punctuation, Text::Whitespace, nil, Text::Whitespace, Punctuation
177
+ end
178
+
179
+ mixin :number
180
+ mixin :keyword
181
+
182
+ rule /,/, Punctuation
183
+ end
184
+
185
+ state :default_param_markup do
186
+ mixin :param_markup
187
+ rule /./, Text
188
+ end
189
+
190
+ state :variable_param_markup do
191
+ mixin :param_markup
192
+ mixin :variable
193
+ rule /./, Text
194
+ end
195
+
196
+ state :tag_markup do
197
+ mixin :end_of_block
198
+ mixin :default_param_markup
199
+ end
200
+
201
+ state :variable_tag_markup do
202
+ mixin :end_of_block
203
+ mixin :variable_param_markup
204
+ end
205
+
206
+ # states for different values types
207
+ state :keyword do
208
+ rule /\b(false|true)\b/, Keyword::Constant
209
+ end
210
+
211
+ state :variable do
212
+ rule /\.(?=\w)/, Punctuation
213
+ rule /[a-zA-Z_]\w*\??/, Name::Variable
214
+ end
215
+
216
+ state :string do
217
+ rule /'[^']*'/, Str::Single
218
+ rule /"[^"]*"/, Str::Double
219
+ end
220
+
221
+ state :number do
222
+ rule /\d+\.\d+/, Num::Float
223
+ rule /\d+/, Num::Integer
224
+ end
225
+
226
+ state :array_index do
227
+ rule /\[/, Punctuation
228
+ rule /\]/, Punctuation
229
+ end
230
+
231
+ state :generic do
232
+ mixin :array_index
233
+ mixin :keyword
234
+ mixin :string
235
+ mixin :variable
236
+ mixin :number
237
+ end
238
+
239
+ state :whitespace do
240
+ rule /[ \t]+/, Text::Whitespace
241
+ end
242
+
243
+ state :comment do
244
+ rule /(\{%)(\s*)(endcomment)(\s*)(%\})/ do
245
+ groups Punctuation, Text::Whitespace, Name::Tag, Text::Whitespace, Punctuation
246
+ reset_stack
247
+ end
248
+
249
+ rule /./, Comment
250
+ end
251
+
252
+ state :raw do
253
+ rule /[^\{]+/, Text
254
+
255
+ rule /(\{%)(\s*)(endraw)(\s*)(%\})/ do
256
+ groups Punctuation, Text::Whitespace, Name::Tag, Text::Whitespace, Punctuation
257
+ reset_stack
258
+ end
259
+
260
+ rule /\{/, Text
261
+ end
262
+
263
+ state :assign do
264
+ mixin :whitespace
265
+ mixin :end_of_block
266
+
267
+ rule /(\s*)(=)(\s*)/ do
268
+ groups Text::Whitespace, Operator, Text::Whitespace
269
+ end
270
+
271
+ rule /\|/, Punctuation, :filters
272
+
273
+ mixin :generic
274
+ end
275
+
276
+ state :include do
277
+ mixin :whitespace
278
+
279
+ rule /([^\.]+)(\.)(html|liquid)/ do
280
+ groups Name::Attribute, Punctuation, Name::Attribute
281
+ end
282
+
283
+ mixin :variable_tag_markup
284
+ end
285
+ end
286
+ end
287
+ end
@@ -0,0 +1,33 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class LiterateCoffeescript < RegexLexer
6
+ tag 'literate_coffeescript'
7
+ title "Literate CoffeeScript"
8
+ desc 'Literate coffeescript'
9
+ aliases 'litcoffee'
10
+ filenames '*.litcoffee'
11
+
12
+ def markdown
13
+ @markdown ||= Markdown.new(options)
14
+ end
15
+
16
+ def coffee
17
+ @coffee ||= Coffeescript.new(options)
18
+ end
19
+
20
+ start { markdown.reset!; coffee.reset! }
21
+
22
+ state :root do
23
+ rule /^( .*?\n)+/m do
24
+ delegate coffee
25
+ end
26
+
27
+ rule /^([ ]{0,3}(\S.*?|)\n)*/m do
28
+ delegate markdown
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,36 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class LiterateHaskell < RegexLexer
6
+ title "Literate Haskell"
7
+ desc 'Literate haskell'
8
+ tag 'literate_haskell'
9
+ aliases 'lithaskell', 'lhaskell', 'lhs'
10
+ filenames '*.lhs'
11
+ mimetypes 'text/x-literate-haskell'
12
+
13
+ def haskell
14
+ @haskell ||= Haskell.new(options)
15
+ end
16
+
17
+ start { haskell.reset! }
18
+
19
+ # TODO: support TeX versions as well.
20
+ state :root do
21
+ rule /\s*?\n(?=>)/, Text, :code
22
+ rule /.*?\n/, Text
23
+ rule /.+\z/, Text
24
+ end
25
+
26
+ state :code do
27
+ rule /(>)( .*?(\n|\z))/ do |m|
28
+ token Name::Label, m[1]
29
+ delegate haskell, m[2]
30
+ end
31
+
32
+ rule /\s*\n(?=\s*[^>])/, Text, :pop!
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,80 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class LLVM < RegexLexer
6
+ title "LLVM"
7
+ desc 'The LLVM Compiler Infrastructure (http://llvm.org/)'
8
+ tag 'llvm'
9
+
10
+ filenames '*.ll'
11
+ mimetypes 'text/x-llvm'
12
+
13
+ string = /"[^"]*?"/
14
+ identifier = /([-a-zA-Z$._][-a-zA-Z$._0-9]*|#{string})/
15
+
16
+ state :basic do
17
+ rule /;.*?$/, Comment::Single
18
+ rule /\s+/, Text
19
+
20
+ rule /#{identifier}\s*:/, Name::Label
21
+
22
+ rule /@(#{identifier}|\d+)/, Name::Variable::Global
23
+ rule /(%|!)#{identifier}/, Name::Variable
24
+ rule /(%|!)\d+/, Name::Variable
25
+
26
+ rule /c?#{string}/, Str
27
+
28
+ rule /0[xX][a-fA-F0-9]+/, Num
29
+ rule /-?\d+(?:[.]\d+)?(?:[eE][-+]?\d+(?:[.]\d+)?)?/, Num
30
+
31
+ rule /[=<>{}\[\]()*.,!]|x/, Punctuation
32
+ end
33
+
34
+ builtin_types = %w(
35
+ void float double half x86_fp80 x86mmx fp128 ppc_fp128 label metadata
36
+ )
37
+
38
+ state :types do
39
+ rule /i[1-9]\d*/, Keyword::Type
40
+ rule /#{builtin_types.join('|')}/, Keyword::Type
41
+ end
42
+
43
+ builtin_keywords = %w(
44
+ begin end true false declare define global constant personality private
45
+ landingpad linker_private internal available_externally linkonce_odr
46
+ linkonce weak weak_odr appending dllimport dllexport common default
47
+ hidden protected extern_weak external thread_local zeroinitializer
48
+ undef null to tail target triple datalayout volatile nuw nsw nnan ninf
49
+ nsz arcp fast exact inbounds align addrspace section alias module asm
50
+ sideeffect gc dbg ccc fastcc coldcc x86_stdcallcc x86_fastcallcc
51
+ arm_apcscc arm_aapcscc arm_aapcs_vfpcc ptx_device ptx_kernel cc
52
+ c signext zeroext inreg sret nounwind noreturn noalias nocapture byval
53
+ nest readnone readonly inlinehint noinline alwaysinline optsize ssp
54
+ sspreq noredzone noimplicitfloat naked type opaque eq ne slt sgt sle
55
+ sge ult ugt ule uge oeq one olt ogt ole oge ord uno unnamed_addr ueq
56
+ une uwtable x
57
+ )
58
+
59
+ builtin_instructions = %w(
60
+ add fadd sub fsub mul fmul udiv sdiv fdiv urem srem frem shl lshr ashr
61
+ and or xor icmp fcmp phi call catch trunc zext sext fptrunc fpext
62
+ uitofp sitofp fptoui fptosi inttoptr ptrtoint bitcast select va_arg ret
63
+ br switch invoke unwind unreachable malloc alloca free load store
64
+ getelementptr extractelement insertelement shufflevector getresult
65
+ extractvalue insertvalue cleanup resume
66
+ )
67
+
68
+ state :keywords do
69
+ rule /#{builtin_instructions.join('|')}/, Keyword
70
+ rule /#{builtin_keywords.join('|')}/, Keyword
71
+ end
72
+
73
+ state :root do
74
+ mixin :basic
75
+ mixin :keywords
76
+ mixin :types
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,125 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Lua < RegexLexer
6
+ title "Lua"
7
+ desc "Lua (http://www.lua.org)"
8
+ tag 'lua'
9
+ filenames '*.lua', '*.wlua'
10
+
11
+ mimetypes 'text/x-lua', 'application/x-lua'
12
+
13
+ option :function_highlighting, 'Whether to highlight builtin functions (default: true)'
14
+ option :disabled_modules, 'builtin modules to disable'
15
+
16
+ def initialize(opts={})
17
+ @function_highlighting = opts.delete(:function_highlighting) { true }
18
+ @disabled_modules = opts.delete(:disabled_modules) { [] }
19
+ super(opts)
20
+ end
21
+
22
+ def self.detect?(text)
23
+ return true if text.shebang? 'lua'
24
+ end
25
+
26
+ def self.builtins
27
+ load Pathname.new(__FILE__).dirname.join('lua/builtins.rb')
28
+ self.builtins
29
+ end
30
+
31
+ def builtins
32
+ return [] unless @function_highlighting
33
+
34
+ @builtins ||= Set.new.tap do |builtins|
35
+ self.class.builtins.each do |mod, fns|
36
+ next if @disabled_modules.include? mod
37
+ builtins.merge(fns)
38
+ end
39
+ end
40
+ end
41
+
42
+ state :root do
43
+ # lua allows a file to start with a shebang
44
+ rule %r(#!(.*?)$), Comment::Preproc
45
+ rule //, Text, :base
46
+ end
47
+
48
+ state :base do
49
+ rule %r(--\[(=*)\[.*?\]\1\])m, Comment::Multiline
50
+ rule %r(--.*$), Comment::Single
51
+
52
+ rule %r((?i)(\d*\.\d+|\d+\.\d*)(e[+-]?\d+)?'), Num::Float
53
+ rule %r((?i)\d+e[+-]?\d+), Num::Float
54
+ rule %r((?i)0x[0-9a-f]*), Num::Hex
55
+ rule %r(\d+), Num::Integer
56
+
57
+ rule %r(\n), Text
58
+ rule %r([^\S\n]), Text
59
+ # multiline strings
60
+ rule %r(\[(=*)\[.*?\]\1\])m, Str
61
+
62
+ rule %r((==|~=|<=|>=|\.\.\.|\.\.|[=+\-*/%^<>#])), Operator
63
+ rule %r([\[\]\{\}\(\)\.,:;]), Punctuation
64
+ rule %r((and|or|not)\b), Operator::Word
65
+
66
+ rule %r((break|do|else|elseif|end|for|if|in|repeat|return|then|until|while)\b), Keyword
67
+ rule %r((local)\b), Keyword::Declaration
68
+ rule %r((true|false|nil)\b), Keyword::Constant
69
+
70
+ rule %r((function)\b), Keyword, :function_name
71
+
72
+ rule %r([A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z_][A-Za-z0-9_]*)?) do |m|
73
+ name = m[0]
74
+ if self.builtins.include?(name)
75
+ token Name::Builtin
76
+ elsif name =~ /\./
77
+ a, b = name.split('.', 2)
78
+ token Name, a
79
+ token Punctuation, '.'
80
+ token Name, b
81
+ else
82
+ token Name
83
+ end
84
+ end
85
+
86
+ rule %r('), Str::Single, :escape_sqs
87
+ rule %r("), Str::Double, :escape_dqs
88
+ end
89
+
90
+ state :function_name do
91
+ rule /\s+/, Text
92
+ rule %r((?:([A-Za-z_][A-Za-z0-9_]*)(\.))?([A-Za-z_][A-Za-z0-9_]*)) do
93
+ groups Name::Class, Punctuation, Name::Function
94
+ pop!
95
+ end
96
+ # inline function
97
+ rule %r(\(), Punctuation, :pop!
98
+ end
99
+
100
+ state :escape_sqs do
101
+ mixin :string_escape
102
+ mixin :sqs
103
+ end
104
+
105
+ state :escape_dqs do
106
+ mixin :string_escape
107
+ mixin :dqs
108
+ end
109
+
110
+ state :string_escape do
111
+ rule %r(\\([abfnrtv\\"']|\d{1,3})), Str::Escape
112
+ end
113
+
114
+ state :sqs do
115
+ rule %r('), Str::Single, :pop!
116
+ rule %r([^']+), Str::Single
117
+ end
118
+
119
+ state :dqs do
120
+ rule %r("), Str::Double, :pop!
121
+ rule %r([^"]+), Str::Double
122
+ end
123
+ end
124
+ end
125
+ end