rouge-alda 3.3.0

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 (335) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +28 -0
  3. data/LICENSE +186 -0
  4. data/bin/rougify +18 -0
  5. data/lib/rouge/cli.rb +432 -0
  6. data/lib/rouge/demos/abap +6 -0
  7. data/lib/rouge/demos/actionscript +4 -0
  8. data/lib/rouge/demos/alda +10 -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/crystal +45 -0
  27. data/lib/rouge/demos/csharp +5 -0
  28. data/lib/rouge/demos/css +4 -0
  29. data/lib/rouge/demos/d +16 -0
  30. data/lib/rouge/demos/dart +6 -0
  31. data/lib/rouge/demos/diff +7 -0
  32. data/lib/rouge/demos/digdag +19 -0
  33. data/lib/rouge/demos/docker +9 -0
  34. data/lib/rouge/demos/dot +5 -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/hcl +7 -0
  54. data/lib/rouge/demos/html +8 -0
  55. data/lib/rouge/demos/http +14 -0
  56. data/lib/rouge/demos/hylang +10 -0
  57. data/lib/rouge/demos/idlang +8 -0
  58. data/lib/rouge/demos/igorpro +9 -0
  59. data/lib/rouge/demos/ini +4 -0
  60. data/lib/rouge/demos/io +11 -0
  61. data/lib/rouge/demos/irb +4 -0
  62. data/lib/rouge/demos/irb_output +2 -0
  63. data/lib/rouge/demos/java +5 -0
  64. data/lib/rouge/demos/javascript +1 -0
  65. data/lib/rouge/demos/jinja +9 -0
  66. data/lib/rouge/demos/json +1 -0
  67. data/lib/rouge/demos/json-doc +1 -0
  68. data/lib/rouge/demos/jsonnet +28 -0
  69. data/lib/rouge/demos/jsp +29 -0
  70. data/lib/rouge/demos/jsx +17 -0
  71. data/lib/rouge/demos/julia +11 -0
  72. data/lib/rouge/demos/kotlin +3 -0
  73. data/lib/rouge/demos/lasso +12 -0
  74. data/lib/rouge/demos/liquid +11 -0
  75. data/lib/rouge/demos/literate_coffeescript +3 -0
  76. data/lib/rouge/demos/literate_haskell +7 -0
  77. data/lib/rouge/demos/llvm +20 -0
  78. data/lib/rouge/demos/lua +12 -0
  79. data/lib/rouge/demos/m68k +16 -0
  80. data/lib/rouge/demos/make +6 -0
  81. data/lib/rouge/demos/markdown +4 -0
  82. data/lib/rouge/demos/mathematica +8 -0
  83. data/lib/rouge/demos/matlab +6 -0
  84. data/lib/rouge/demos/moonscript +16 -0
  85. data/lib/rouge/demos/mosel +10 -0
  86. data/lib/rouge/demos/mxml +22 -0
  87. data/lib/rouge/demos/nasm +26 -0
  88. data/lib/rouge/demos/nginx +5 -0
  89. data/lib/rouge/demos/nim +27 -0
  90. data/lib/rouge/demos/nix +19 -0
  91. data/lib/rouge/demos/objective_c +18 -0
  92. data/lib/rouge/demos/ocaml +12 -0
  93. data/lib/rouge/demos/pascal +14 -0
  94. data/lib/rouge/demos/perl +5 -0
  95. data/lib/rouge/demos/php +3 -0
  96. data/lib/rouge/demos/plaintext +1 -0
  97. data/lib/rouge/demos/plist +142 -0
  98. data/lib/rouge/demos/pony +17 -0
  99. data/lib/rouge/demos/powershell +49 -0
  100. data/lib/rouge/demos/praat +26 -0
  101. data/lib/rouge/demos/prolog +9 -0
  102. data/lib/rouge/demos/prometheus +9 -0
  103. data/lib/rouge/demos/properties +7 -0
  104. data/lib/rouge/demos/protobuf +5 -0
  105. data/lib/rouge/demos/puppet +6 -0
  106. data/lib/rouge/demos/python +6 -0
  107. data/lib/rouge/demos/q +2 -0
  108. data/lib/rouge/demos/qml +9 -0
  109. data/lib/rouge/demos/r +8 -0
  110. data/lib/rouge/demos/racket +24 -0
  111. data/lib/rouge/demos/ruby +9 -0
  112. data/lib/rouge/demos/rust +12 -0
  113. data/lib/rouge/demos/sass +3 -0
  114. data/lib/rouge/demos/scala +3 -0
  115. data/lib/rouge/demos/scheme +4 -0
  116. data/lib/rouge/demos/scss +5 -0
  117. data/lib/rouge/demos/sed +4 -0
  118. data/lib/rouge/demos/shell +2 -0
  119. data/lib/rouge/demos/sieve +10 -0
  120. data/lib/rouge/demos/slim +17 -0
  121. data/lib/rouge/demos/smalltalk +6 -0
  122. data/lib/rouge/demos/smarty +12 -0
  123. data/lib/rouge/demos/sml +4 -0
  124. data/lib/rouge/demos/sqf +14 -0
  125. data/lib/rouge/demos/sql +1 -0
  126. data/lib/rouge/demos/swift +5 -0
  127. data/lib/rouge/demos/tap +5 -0
  128. data/lib/rouge/demos/tcl +1 -0
  129. data/lib/rouge/demos/terraform +31 -0
  130. data/lib/rouge/demos/tex +1 -0
  131. data/lib/rouge/demos/toml +9 -0
  132. data/lib/rouge/demos/tsx +17 -0
  133. data/lib/rouge/demos/tulip +13 -0
  134. data/lib/rouge/demos/turtle +26 -0
  135. data/lib/rouge/demos/twig +9 -0
  136. data/lib/rouge/demos/typescript +1 -0
  137. data/lib/rouge/demos/vala +8 -0
  138. data/lib/rouge/demos/vb +4 -0
  139. data/lib/rouge/demos/verilog +27 -0
  140. data/lib/rouge/demos/vhdl +23 -0
  141. data/lib/rouge/demos/viml +14 -0
  142. data/lib/rouge/demos/vue +11 -0
  143. data/lib/rouge/demos/wollok +11 -0
  144. data/lib/rouge/demos/xml +2 -0
  145. data/lib/rouge/demos/yaml +4 -0
  146. data/lib/rouge/formatter.rb +76 -0
  147. data/lib/rouge/formatters/html.rb +38 -0
  148. data/lib/rouge/formatters/html_inline.rb +31 -0
  149. data/lib/rouge/formatters/html_legacy.rb +45 -0
  150. data/lib/rouge/formatters/html_linewise.rb +28 -0
  151. data/lib/rouge/formatters/html_pygments.rb +18 -0
  152. data/lib/rouge/formatters/html_table.rb +62 -0
  153. data/lib/rouge/formatters/null.rb +20 -0
  154. data/lib/rouge/formatters/terminal256.rb +181 -0
  155. data/lib/rouge/guesser.rb +57 -0
  156. data/lib/rouge/guessers/disambiguation.rb +106 -0
  157. data/lib/rouge/guessers/filename.rb +27 -0
  158. data/lib/rouge/guessers/glob_mapping.rb +45 -0
  159. data/lib/rouge/guessers/mimetype.rb +16 -0
  160. data/lib/rouge/guessers/modeline.rb +46 -0
  161. data/lib/rouge/guessers/source.rb +31 -0
  162. data/lib/rouge/guessers/util.rb +34 -0
  163. data/lib/rouge/lexer.rb +462 -0
  164. data/lib/rouge/lexers/abap.rb +240 -0
  165. data/lib/rouge/lexers/actionscript.rb +196 -0
  166. data/lib/rouge/lexers/alda.rb +43 -0
  167. data/lib/rouge/lexers/apache/keywords.yml +764 -0
  168. data/lib/rouge/lexers/apache.rb +73 -0
  169. data/lib/rouge/lexers/apiblueprint.rb +49 -0
  170. data/lib/rouge/lexers/apple_script.rb +369 -0
  171. data/lib/rouge/lexers/awk.rb +162 -0
  172. data/lib/rouge/lexers/biml.rb +43 -0
  173. data/lib/rouge/lexers/bsl.rb +82 -0
  174. data/lib/rouge/lexers/c.rb +213 -0
  175. data/lib/rouge/lexers/ceylon.rb +124 -0
  176. data/lib/rouge/lexers/cfscript.rb +154 -0
  177. data/lib/rouge/lexers/clojure.rb +113 -0
  178. data/lib/rouge/lexers/cmake.rb +207 -0
  179. data/lib/rouge/lexers/coffeescript.rb +175 -0
  180. data/lib/rouge/lexers/common_lisp.rb +346 -0
  181. data/lib/rouge/lexers/conf.rb +25 -0
  182. data/lib/rouge/lexers/console.rb +137 -0
  183. data/lib/rouge/lexers/coq.rb +188 -0
  184. data/lib/rouge/lexers/cpp.rb +79 -0
  185. data/lib/rouge/lexers/crystal.rb +430 -0
  186. data/lib/rouge/lexers/csharp.rb +115 -0
  187. data/lib/rouge/lexers/css.rb +274 -0
  188. data/lib/rouge/lexers/d.rb +177 -0
  189. data/lib/rouge/lexers/dart.rb +105 -0
  190. data/lib/rouge/lexers/diff.rb +33 -0
  191. data/lib/rouge/lexers/digdag.rb +70 -0
  192. data/lib/rouge/lexers/docker.rb +51 -0
  193. data/lib/rouge/lexers/dot.rb +69 -0
  194. data/lib/rouge/lexers/eiffel.rb +66 -0
  195. data/lib/rouge/lexers/elixir.rb +134 -0
  196. data/lib/rouge/lexers/elm.rb +90 -0
  197. data/lib/rouge/lexers/erb.rb +53 -0
  198. data/lib/rouge/lexers/erlang.rb +115 -0
  199. data/lib/rouge/lexers/factor.rb +303 -0
  200. data/lib/rouge/lexers/fortran.rb +178 -0
  201. data/lib/rouge/lexers/fsharp.rb +119 -0
  202. data/lib/rouge/lexers/gherkin/keywords.rb +16 -0
  203. data/lib/rouge/lexers/gherkin.rb +138 -0
  204. data/lib/rouge/lexers/glsl.rb +136 -0
  205. data/lib/rouge/lexers/go.rb +175 -0
  206. data/lib/rouge/lexers/gradle.rb +38 -0
  207. data/lib/rouge/lexers/graphql.rb +254 -0
  208. data/lib/rouge/lexers/groovy.rb +113 -0
  209. data/lib/rouge/lexers/hack.rb +49 -0
  210. data/lib/rouge/lexers/haml.rb +230 -0
  211. data/lib/rouge/lexers/handlebars.rb +80 -0
  212. data/lib/rouge/lexers/haskell.rb +198 -0
  213. data/lib/rouge/lexers/hcl.rb +163 -0
  214. data/lib/rouge/lexers/html.rb +140 -0
  215. data/lib/rouge/lexers/http.rb +81 -0
  216. data/lib/rouge/lexers/hylang.rb +94 -0
  217. data/lib/rouge/lexers/idlang.rb +312 -0
  218. data/lib/rouge/lexers/igorpro.rb +664 -0
  219. data/lib/rouge/lexers/ini.rb +54 -0
  220. data/lib/rouge/lexers/io.rb +69 -0
  221. data/lib/rouge/lexers/irb.rb +67 -0
  222. data/lib/rouge/lexers/java.rb +88 -0
  223. data/lib/rouge/lexers/javascript.rb +283 -0
  224. data/lib/rouge/lexers/jinja.rb +138 -0
  225. data/lib/rouge/lexers/json.rb +30 -0
  226. data/lib/rouge/lexers/json_doc.rb +24 -0
  227. data/lib/rouge/lexers/jsonnet.rb +152 -0
  228. data/lib/rouge/lexers/jsp.rb +120 -0
  229. data/lib/rouge/lexers/jsx.rb +104 -0
  230. data/lib/rouge/lexers/julia.rb +167 -0
  231. data/lib/rouge/lexers/kotlin.rb +127 -0
  232. data/lib/rouge/lexers/lasso/keywords.yml +446 -0
  233. data/lib/rouge/lexers/lasso.rb +215 -0
  234. data/lib/rouge/lexers/liquid.rb +288 -0
  235. data/lib/rouge/lexers/literate_coffeescript.rb +34 -0
  236. data/lib/rouge/lexers/literate_haskell.rb +37 -0
  237. data/lib/rouge/lexers/llvm.rb +81 -0
  238. data/lib/rouge/lexers/lua/builtins.rb +24 -0
  239. data/lib/rouge/lexers/lua.rb +126 -0
  240. data/lib/rouge/lexers/m68k.rb +144 -0
  241. data/lib/rouge/lexers/make.rb +113 -0
  242. data/lib/rouge/lexers/markdown.rb +155 -0
  243. data/lib/rouge/lexers/mathematica/builtins.rb +13 -0
  244. data/lib/rouge/lexers/mathematica.rb +96 -0
  245. data/lib/rouge/lexers/matlab/builtins.rb +13 -0
  246. data/lib/rouge/lexers/matlab.rb +72 -0
  247. data/lib/rouge/lexers/moonscript.rb +115 -0
  248. data/lib/rouge/lexers/mosel.rb +232 -0
  249. data/lib/rouge/lexers/mxml.rb +69 -0
  250. data/lib/rouge/lexers/nasm.rb +199 -0
  251. data/lib/rouge/lexers/nginx.rb +72 -0
  252. data/lib/rouge/lexers/nim.rb +153 -0
  253. data/lib/rouge/lexers/nix.rb +211 -0
  254. data/lib/rouge/lexers/objective_c.rb +195 -0
  255. data/lib/rouge/lexers/ocaml.rb +101 -0
  256. data/lib/rouge/lexers/pascal.rb +67 -0
  257. data/lib/rouge/lexers/perl.rb +201 -0
  258. data/lib/rouge/lexers/php/builtins.rb +196 -0
  259. data/lib/rouge/lexers/php.rb +194 -0
  260. data/lib/rouge/lexers/plain_text.rb +27 -0
  261. data/lib/rouge/lexers/plist.rb +47 -0
  262. data/lib/rouge/lexers/pony.rb +94 -0
  263. data/lib/rouge/lexers/powershell.rb +679 -0
  264. data/lib/rouge/lexers/praat.rb +351 -0
  265. data/lib/rouge/lexers/prolog.rb +61 -0
  266. data/lib/rouge/lexers/prometheus.rb +123 -0
  267. data/lib/rouge/lexers/properties.rb +52 -0
  268. data/lib/rouge/lexers/protobuf.rb +71 -0
  269. data/lib/rouge/lexers/puppet.rb +129 -0
  270. data/lib/rouge/lexers/python.rb +247 -0
  271. data/lib/rouge/lexers/q.rb +125 -0
  272. data/lib/rouge/lexers/qml.rb +74 -0
  273. data/lib/rouge/lexers/r.rb +90 -0
  274. data/lib/rouge/lexers/racket.rb +545 -0
  275. data/lib/rouge/lexers/ruby.rb +439 -0
  276. data/lib/rouge/lexers/rust.rb +198 -0
  277. data/lib/rouge/lexers/sass/common.rb +181 -0
  278. data/lib/rouge/lexers/sass.rb +75 -0
  279. data/lib/rouge/lexers/scala.rb +143 -0
  280. data/lib/rouge/lexers/scheme.rb +113 -0
  281. data/lib/rouge/lexers/scss.rb +35 -0
  282. data/lib/rouge/lexers/sed.rb +173 -0
  283. data/lib/rouge/lexers/shell.rb +190 -0
  284. data/lib/rouge/lexers/sieve.rb +97 -0
  285. data/lib/rouge/lexers/slim.rb +229 -0
  286. data/lib/rouge/lexers/smalltalk.rb +117 -0
  287. data/lib/rouge/lexers/smarty.rb +81 -0
  288. data/lib/rouge/lexers/sml.rb +345 -0
  289. data/lib/rouge/lexers/sqf/commands.rb +15 -0
  290. data/lib/rouge/lexers/sqf.rb +109 -0
  291. data/lib/rouge/lexers/sql.rb +141 -0
  292. data/lib/rouge/lexers/swift.rb +182 -0
  293. data/lib/rouge/lexers/tap.rb +89 -0
  294. data/lib/rouge/lexers/tcl.rb +193 -0
  295. data/lib/rouge/lexers/terraform.rb +105 -0
  296. data/lib/rouge/lexers/tex.rb +70 -0
  297. data/lib/rouge/lexers/toml.rb +68 -0
  298. data/lib/rouge/lexers/tsx.rb +20 -0
  299. data/lib/rouge/lexers/tulip.rb +108 -0
  300. data/lib/rouge/lexers/turtle.rb +64 -0
  301. data/lib/rouge/lexers/twig.rb +40 -0
  302. data/lib/rouge/lexers/typescript/common.rb +34 -0
  303. data/lib/rouge/lexers/typescript.rb +23 -0
  304. data/lib/rouge/lexers/vala.rb +78 -0
  305. data/lib/rouge/lexers/vb.rb +165 -0
  306. data/lib/rouge/lexers/verilog.rb +165 -0
  307. data/lib/rouge/lexers/vhdl.rb +98 -0
  308. data/lib/rouge/lexers/viml/keywords.rb +14 -0
  309. data/lib/rouge/lexers/viml.rb +102 -0
  310. data/lib/rouge/lexers/vue.rb +124 -0
  311. data/lib/rouge/lexers/wollok.rb +104 -0
  312. data/lib/rouge/lexers/xml.rb +58 -0
  313. data/lib/rouge/lexers/yaml.rb +374 -0
  314. data/lib/rouge/plugins/redcarpet.rb +31 -0
  315. data/lib/rouge/regex_lexer.rb +442 -0
  316. data/lib/rouge/template_lexer.rb +21 -0
  317. data/lib/rouge/text_analyzer.rb +50 -0
  318. data/lib/rouge/theme.rb +214 -0
  319. data/lib/rouge/themes/base16.rb +131 -0
  320. data/lib/rouge/themes/colorful.rb +68 -0
  321. data/lib/rouge/themes/github.rb +72 -0
  322. data/lib/rouge/themes/gruvbox.rb +168 -0
  323. data/lib/rouge/themes/igor_pro.rb +21 -0
  324. data/lib/rouge/themes/molokai.rb +83 -0
  325. data/lib/rouge/themes/monokai.rb +93 -0
  326. data/lib/rouge/themes/monokai_sublime.rb +92 -0
  327. data/lib/rouge/themes/pastie.rb +70 -0
  328. data/lib/rouge/themes/thankful_eyes.rb +75 -0
  329. data/lib/rouge/themes/tulip.rb +70 -0
  330. data/lib/rouge/token.rb +183 -0
  331. data/lib/rouge/util.rb +102 -0
  332. data/lib/rouge/version.rb +8 -0
  333. data/lib/rouge.rb +84 -0
  334. data/rouge.gemspec +25 -0
  335. metadata +384 -0
@@ -0,0 +1,102 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class VimL < RegexLexer
7
+ title "VimL"
8
+ desc "VimL, the scripting language for the Vim editor (vim.org)"
9
+ tag 'viml'
10
+ aliases 'vim', 'vimscript', 'ex'
11
+ filenames '*.vim', '*.vba', '.vimrc', '.exrc', '.gvimrc',
12
+ '_vimrc', '_exrc', '_gvimrc' # _ names for windows
13
+
14
+ mimetypes 'text/x-vim'
15
+
16
+ def self.keywords
17
+ load Pathname.new(__FILE__).dirname.join('viml/keywords.rb')
18
+ self.keywords
19
+ end
20
+
21
+ state :root do
22
+ rule /^(\s*)(".*?)$/ do
23
+ groups Text, Comment
24
+ end
25
+
26
+ rule /^\s*\\/, Str::Escape
27
+
28
+ rule /[ \t]+/, Text
29
+
30
+ # TODO: regexes can have other delimiters
31
+ rule %r(/(\\\\|\\/|[^\n/])*/), Str::Regex
32
+ rule %r("(\\\\|\\"|[^\n"])*"), Str::Double
33
+ rule %r('(\\\\|\\'|[^\n'])*'), Str::Single
34
+
35
+ # if it's not a string, it's a comment.
36
+ rule /(?<=\s)"[^-:.%#=*].*?$/, Comment
37
+
38
+ rule /-?\d+/, Num
39
+ rule /#[0-9a-f]{6}/i, Num::Hex
40
+ rule /^:/, Punctuation
41
+ rule /[():<>+=!\[\]{}\|,~.-]/, Punctuation
42
+ rule /\b(let|if|else|endif|elseif|fun|function|endfunction)\b/,
43
+ Keyword
44
+
45
+ rule /\b(NONE|bold|italic|underline|dark|light)\b/, Name::Builtin
46
+
47
+ rule /[absg]:\w+\b/, Name::Variable
48
+ rule /\b\w+\b/ do |m|
49
+ name = m[0]
50
+ keywords = self.class.keywords
51
+
52
+ if mapping_contains?(keywords[:command], name)
53
+ token Keyword
54
+ elsif mapping_contains?(keywords[:option], name)
55
+ token Name::Builtin
56
+ elsif mapping_contains?(keywords[:auto], name)
57
+ token Name::Builtin
58
+ else
59
+ token Text
60
+ end
61
+ end
62
+
63
+ # no errors in VimL!
64
+ rule /./m, Text
65
+ end
66
+
67
+ def mapping_contains?(mapping, word)
68
+ shortest, longest = find_likely_mapping(mapping, word)
69
+
70
+ shortest and word.start_with?(shortest) and
71
+ longest and longest.start_with?(word)
72
+ end
73
+
74
+ # binary search through the mappings to find the one that's likely
75
+ # to actually work.
76
+ def find_likely_mapping(mapping, word)
77
+ min = 0
78
+ max = mapping.size
79
+
80
+ until max == min
81
+ mid = (max + min) / 2
82
+
83
+ cmp, _ = mapping[mid]
84
+
85
+ case word <=> cmp
86
+ when 1
87
+ # too low
88
+ min = mid + 1
89
+ when -1
90
+ # too high
91
+ max = mid
92
+ when 0
93
+ # just right, abort!
94
+ return mapping[mid]
95
+ end
96
+ end
97
+
98
+ mapping[max - 1]
99
+ end
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,124 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rouge
4
+ module Lexers
5
+ load_lexer 'html.rb'
6
+
7
+ class Vue < HTML
8
+ desc 'Vue.js single-file components'
9
+ tag 'vue'
10
+ aliases 'vuejs'
11
+ filenames '*.vue'
12
+
13
+ mimetypes 'text/x-vue', 'application/x-vue'
14
+
15
+ def initialize(*)
16
+ super
17
+ @js = Javascript.new(options)
18
+ end
19
+
20
+ def lookup_lang(lang)
21
+ lang.downcase!
22
+ lang = lang.gsub(/["']*/, '')
23
+ case lang
24
+ when 'html' then HTML
25
+ when 'css' then CSS
26
+ when 'javascript' then Javascript
27
+ when 'sass' then Sass
28
+ when 'scss' then Scss
29
+ when 'coffee' then Coffeescript
30
+ # TODO: add more when the lexers are done
31
+ else
32
+ PlainText
33
+ end
34
+ end
35
+
36
+ start { @js.reset! }
37
+
38
+ prepend :root do
39
+ rule /(<)(\s*)(template)/ do
40
+ groups Name::Tag, Text, Keyword
41
+ @lang = HTML
42
+ push :template
43
+ push :lang_tag
44
+ end
45
+
46
+ rule /(<)(\s*)(style)/ do
47
+ groups Name::Tag, Text, Keyword
48
+ @lang = CSS
49
+ push :style
50
+ push :lang_tag
51
+ end
52
+
53
+ rule /(<)(\s*)(script)/ do
54
+ groups Name::Tag, Text, Keyword
55
+ @lang = Javascript
56
+ push :script
57
+ push :lang_tag
58
+ end
59
+ end
60
+
61
+ state :style do
62
+ rule /(<\s*\/\s*)(style)(\s*>)/ do
63
+ groups Name::Tag, Keyword, Name::Tag
64
+ pop!
65
+ end
66
+
67
+ mixin :style_content
68
+ mixin :embed
69
+ end
70
+
71
+ state :script do
72
+ rule /(<\s*\/\s*)(script)(\s*>)/ do
73
+ groups Name::Tag, Keyword, Name::Tag
74
+ pop!
75
+ end
76
+
77
+ mixin :script_content
78
+ mixin :embed
79
+ end
80
+
81
+ state :lang_tag do
82
+ rule /(lang\s*=)(\s*)("(?:\\.|[^\\])*?"|'(\\.|[^\\])*?'|[^\s>]+)/ do |m|
83
+ groups Name::Attribute, Text, Str
84
+ @lang = lookup_lang(m[3])
85
+ end
86
+
87
+ mixin :tag
88
+ end
89
+
90
+ state :template do
91
+ rule %r((<\s*/\s*)(template)(\s*>)) do
92
+ groups Name::Tag, Keyword, Name::Tag
93
+ pop!
94
+ end
95
+
96
+ rule /{{/ do
97
+ token Str::Interpol
98
+ push :template_interpol
99
+ @js.reset!
100
+ end
101
+
102
+ mixin :embed
103
+ end
104
+
105
+ state :template_interpol do
106
+ rule /}}/, Str::Interpol, :pop!
107
+ rule /}/, Error
108
+ mixin :template_interpol_inner
109
+ end
110
+
111
+ state :template_interpol_inner do
112
+ rule(/{/) { delegate @js; push }
113
+ rule(/}/) { delegate @js; pop! }
114
+ rule(/[^{}]+/) { delegate @js }
115
+ end
116
+
117
+ state :embed do
118
+ rule(/[^{<]+/) { delegate @lang }
119
+ rule(/[<{][^<{]*/) { delegate @lang }
120
+ end
121
+ end
122
+ end
123
+ end
124
+
@@ -0,0 +1,104 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class Wollok < RegexLexer
7
+ title 'Wollok'
8
+ desc 'Wollok lang'
9
+ tag 'wollok'
10
+ filenames *%w(*.wlk *.wtest *.wpgm)
11
+
12
+ keywords = %w(new super return if else var const override constructor)
13
+
14
+ entity_name = /[a-zA-Z][a-zA-Z0-9]*/
15
+ variable_naming = /_?#{entity_name}/
16
+
17
+ entities = []
18
+
19
+ state :whitespaces_and_comments do
20
+ rule /\s+/m, Text::Whitespace
21
+ rule /$+/m, Text::Whitespace
22
+ rule %r(//.*$), Comment::Single
23
+ rule %r(/\*(.|\s)*?\*/)m, Comment::Multiline
24
+ end
25
+
26
+ state :root do
27
+ mixin :whitespaces_and_comments
28
+ rule /(import)(.+$)/ do
29
+ groups Keyword::Reserved, Text
30
+ end
31
+ rule /(class|object|mixin)/, Keyword::Reserved, :foo
32
+ rule /test|program/, Keyword::Reserved #, :chunk_naming
33
+ rule /(package)(\s+)(#{entity_name})/ do
34
+ groups Keyword::Reserved, Text::Whitespace, Name::Class
35
+ end
36
+ rule /{|}/, Text
37
+ mixin :keywords
38
+ mixin :symbols
39
+ mixin :objects
40
+ end
41
+
42
+ state :foo do
43
+ mixin :whitespaces_and_comments
44
+ rule /inherits|mixed|with|and/, Keyword::Reserved
45
+ rule /#{entity_name}(?=\s*{)/ do |m|
46
+ token Name::Class
47
+ entities << m[0]
48
+ pop!
49
+ end
50
+ rule /#{entity_name}/ do |m|
51
+ token Name::Class
52
+ entities << m[0]
53
+ end
54
+ end
55
+
56
+ state :keywords do
57
+ def any(expressions)
58
+ /#{expressions.map { |keyword| "#{keyword}\\b" }.join('|')}/
59
+ end
60
+
61
+ rule /self\b/, Name::Builtin::Pseudo
62
+ rule any(keywords), Keyword::Reserved
63
+ rule /(method)(\s+)(#{variable_naming})/ do
64
+ groups Keyword::Reserved, Text::Whitespace, Text
65
+ end
66
+ end
67
+
68
+ state :objects do
69
+ rule variable_naming do |m|
70
+ variable = m[0]
71
+ if entities.include?(variable) || ('A'..'Z').cover?(variable[0])
72
+ token Name::Class
73
+ else
74
+ token Keyword::Variable
75
+ end
76
+ end
77
+ rule /\.#{entity_name}/, Text
78
+ mixin :literals
79
+ end
80
+
81
+ state :literals do
82
+ mixin :whitespaces_and_comments
83
+ rule /[0-9]+\.?[0-9]*/, Literal::Number
84
+ rule /"[^"]*"/m, Literal::String
85
+ rule /\[|\#{/, Punctuation, :lists
86
+ end
87
+
88
+ state :lists do
89
+ rule /,/, Punctuation
90
+ rule /]|}/, Punctuation, :pop!
91
+ mixin :objects
92
+ end
93
+
94
+ state :symbols do
95
+ rule /\+\+|--|\+=|-=|\*\*|!/, Operator
96
+ rule /\+|-|\*|\/|%/, Operator
97
+ rule /<=|=>|===|==|<|>/, Operator
98
+ rule /and\b|or\b|not\b/, Operator
99
+ rule /\(|\)|=/, Text
100
+ rule /,/, Punctuation
101
+ end
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,58 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class XML < RegexLexer
7
+ title "XML"
8
+ desc %q(<desc for="this-lexer">XML</desc>)
9
+ tag 'xml'
10
+ filenames *%w(*.xml *.xsl *.rss *.xslt *.xsd *.wsdl *.svg)
11
+ mimetypes *%w(
12
+ text/xml
13
+ application/xml
14
+ image/svg+xml
15
+ application/rss+xml
16
+ application/atom+xml
17
+ )
18
+
19
+ def self.detect?(text)
20
+ return false if text.doctype?(/html/)
21
+ return true if text =~ /\A<\?xml\b/
22
+ return true if text.doctype?
23
+ end
24
+
25
+ state :root do
26
+ rule /[^<&]+/, Text
27
+ rule /&\S*?;/, Name::Entity
28
+ rule /<!\[CDATA\[.*?\]\]\>/, Comment::Preproc
29
+ rule /<!--/, Comment, :comment
30
+ rule /<\?.*?\?>/, Comment::Preproc
31
+ rule /<![^>]*>/, Comment::Preproc
32
+
33
+ # open tags
34
+ rule %r(<\s*[\w:.-]+)m, Name::Tag, :tag
35
+
36
+ # self-closing tags
37
+ rule %r(<\s*/\s*[\w:.-]+\s*>)m, Name::Tag
38
+ end
39
+
40
+ state :comment do
41
+ rule /[^-]+/m, Comment
42
+ rule /-->/, Comment, :pop!
43
+ rule /-/, Comment
44
+ end
45
+
46
+ state :tag do
47
+ rule /\s+/m, Text
48
+ rule /[\w.:-]+\s*=/m, Name::Attribute, :attr
49
+ rule %r(/?\s*>), Name::Tag, :pop!
50
+ end
51
+
52
+ state :attr do
53
+ rule /\s+/m, Text
54
+ rule /".*?"|'.*?'|[^\s>]+/m, Str, :pop!
55
+ end
56
+ end
57
+ end
58
+ end