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,12 @@
1
+ # encoding: utf-8
2
+ # DO NOT EDIT: automatically generated by `rake builtins:vim`.
3
+ # see tasks/vim.rake for more info.
4
+ module Rouge
5
+ module Lexers
6
+ class VimL
7
+ def self.keywords
8
+ @keywords ||= {:command=>[["a", "a"], ["abc", "abclear"], ["abo", "aboveleft"], ["al", "all"], ["ar", "args"], ["arga", "argadd"], ["argd", "argdelete"], ["argdo", "argdo"], ["arge", "argedit"], ["argg", "argglobal"], ["argl", "arglocal"], ["argu", "argument"], ["as", "ascii"], ["au", "au"], ["b", "buffer"], ["bN", "bNext"], ["ba", "ball"], ["bad", "badd"], ["bd", "bdelete"], ["bel", "belowright"], ["bf", "bfirst"], ["bl", "blast"], ["bm", "bmodified"], ["bn", "bnext"], ["bo", "botright"], ["bp", "bprevious"], ["br", "brewind"], ["brea", "break"], ["breaka", "breakadd"], ["breakd", "breakdel"], ["breakl", "breaklist"], ["bro", "browse"], ["bufdo", "bufdo"], ["buffers", "buffers"], ["bun", "bunload"], ["bw", "bwipeout"], ["c", "change"], ["cN", "cNext"], ["cNf", "cNfile"], ["cabc", "cabclear"], ["cad", "caddbuffer"], ["cadde", "caddexpr"], ["caddf", "caddfile"], ["cal", "call"], ["cat", "catch"], ["cb", "cbuffer"], ["cbo", "cbottom"], ["cc", "cc"], ["ccl", "cclose"], ["cd", "cd"], ["cdo", "cdo"], ["ce", "center"], ["cex", "cexpr"], ["cf", "cfile"], ["cfdo", "cfdo"], ["cfir", "cfirst"], ["cg", "cgetfile"], ["cgetb", "cgetbuffer"], ["cgete", "cgetexpr"], ["changes", "changes"], ["chd", "chdir"], ["che", "checkpath"], ["checkt", "checktime"], ["chi", "chistory"], ["cl", "clist"], ["cla", "clast"], ["cle", "clearjumps"], ["clo", "close"], ["cmapc", "cmapclear"], ["cn", "cnext"], ["cnew", "cnewer"], ["cnf", "cnfile"], ["co", "copy"], ["col", "colder"], ["colo", "colorscheme"], ["com", "com"], ["comc", "comclear"], ["comp", "compiler"], ["con", "continue"], ["conf", "confirm"], ["cope", "copen"], ["cp", "cprevious"], ["cpf", "cpfile"], ["cq", "cquit"], ["cr", "crewind"], ["cs", "cs"], ["cscope", "cscope"], ["cstag", "cstag"], ["cuna", "cunabbrev"], ["cw", "cwindow"], ["d", "delete"], ["debug", "debug"], ["debugg", "debuggreedy"], ["delc", "delcommand"], ["delel", "delel"], ["delep", "delep"], ["deletel", "deletel"], ["deletep", "deletep"], ["deletl", "deletl"], ["deletp", "deletp"], ["delf", "delfunction"], ["dell", "dell"], ["delm", "delmarks"], ["delp", "delp"], ["dep", "dep"], ["di", "display"], ["dif", "diffupdate"], ["diffg", "diffget"], ["diffo", "diffoff"], ["diffp", "diffpatch"], ["diffpu", "diffput"], ["diffs", "diffsplit"], ["difft", "diffthis"], ["dig", "digraphs"], ["dir", "dir"], ["dj", "djump"], ["dl", "dl"], ["dli", "dlist"], ["do", "do"], ["doau", "doau"], ["dp", "dp"], ["dr", "drop"], ["ds", "dsearch"], ["dsp", "dsplit"], ["e", "edit"], ["ea", "ea"], ["earlier", "earlier"], ["echoe", "echoerr"], ["echom", "echomsg"], ["echon", "echon"], ["el", "else"], ["elsei", "elseif"], ["em", "emenu"], ["en", "endif"], ["endf", "endfunction"], ["endfo", "endfor"], ["endt", "endtry"], ["endw", "endwhile"], ["ene", "enew"], ["ex", "ex"], ["exi", "exit"], ["exu", "exusage"], ["f", "file"], ["files", "files"], ["filet", "filet"], ["filetype", "filetype"], ["filt", "filter"], ["fin", "find"], ["fina", "finally"], ["fini", "finish"], ["fir", "first"], ["fix", "fixdel"], ["fo", "fold"], ["foldc", "foldclose"], ["foldd", "folddoopen"], ["folddoc", "folddoclosed"], ["foldo", "foldopen"], ["for", "for"], ["fu", "function"], ["g", "g"], ["go", "goto"], ["gr", "grep"], ["grepa", "grepadd"], ["gui", "gui"], ["gvim", "gvim"], ["h", "help"], ["ha", "hardcopy"], ["helpc", "helpclose"], ["helpf", "helpfind"], ["helpg", "helpgrep"], ["helpt", "helptags"], ["hi", "hi"], ["hid", "hide"], ["his", "history"], ["i", "i"], ["iabc", "iabclear"], ["if", "if"], ["ij", "ijump"], ["il", "ilist"], ["imapc", "imapclear"], ["in", "in"], ["intro", "intro"], ["is", "isearch"], ["isp", "isplit"], ["iuna", "iunabbrev"], ["j", "join"], ["ju", "jumps"], ["k", "k"], ["kee", "keepmarks"], ["keepa", "keepa"], ["keepalt", "keepalt"], ["keepj", "keepjumps"], ["keepp", "keeppatterns"], ["l", "list"], ["lN", "lNext"], ["lNf", "lNfile"], ["la", "last"], ["lad", "laddexpr"], ["laddb", "laddbuffer"], ["laddf", "laddfile"], ["lan", "language"], ["lat", "lat"], ["later", "later"], ["lb", "lbuffer"], ["lbo", "lbottom"], ["lc", "lcd"], ["lch", "lchdir"], ["lcl", "lclose"], ["lcs", "lcs"], ["lcscope", "lcscope"], ["ld", "ldo"], ["le", "left"], ["lefta", "leftabove"], ["lex", "lexpr"], ["lf", "lfile"], ["lfdo", "lfdo"], ["lfir", "lfirst"], ["lg", "lgetfile"], ["lgetb", "lgetbuffer"], ["lgete", "lgetexpr"], ["lgr", "lgrep"], ["lgrepa", "lgrepadd"], ["lh", "lhelpgrep"], ["lhi", "lhistory"], ["ll", "ll"], ["lla", "llast"], ["lli", "llist"], ["lmak", "lmake"], ["lmapc", "lmapclear"], ["lne", "lnext"], ["lnew", "lnewer"], ["lnf", "lnfile"], ["lo", "loadview"], ["loadk", "loadk"], ["loadkeymap", "loadkeymap"], ["loc", "lockmarks"], ["lockv", "lockvar"], ["lol", "lolder"], ["lop", "lopen"], ["lp", "lprevious"], ["lpf", "lpfile"], ["lr", "lrewind"], ["ls", "ls"], ["lt", "ltag"], ["lua", "lua"], ["luado", "luado"], ["luafile", "luafile"], ["lv", "lvimgrep"], ["lvimgrepa", "lvimgrepadd"], ["lw", "lwindow"], ["m", "move"], ["ma", "mark"], ["mak", "make"], ["marks", "marks"], ["mat", "match"], ["menut", "menutranslate"], ["mes", "mes"], ["messages", "messages"], ["mk", "mkexrc"], ["mks", "mksession"], ["mksp", "mkspell"], ["mkv", "mkvimrc"], ["mkvie", "mkview"], ["mod", "mode"], ["mz", "mzscheme"], ["mzf", "mzfile"], ["n", "next"], ["nb", "nbkey"], ["nbc", "nbclose"], ["nbs", "nbstart"], ["new", "new"], ["nmapc", "nmapclear"], ["noa", "noa"], ["noautocmd", "noautocmd"], ["noh", "nohlsearch"], ["nor", "nor"], ["nore", "nore"], ["nos", "noswapfile"], ["nu", "number"], ["o", "open"], ["ol", "oldfiles"], ["omapc", "omapclear"], ["on", "only"], ["opt", "options"], ["ownsyntax", "ownsyntax"], ["p", "print"], ["pa", "packadd"], ["packl", "packloadall"], ["pc", "pclose"], ["pe", "perl"], ["ped", "pedit"], ["perld", "perldo"], ["po", "pop"], ["popu", "popup"], ["pp", "ppop"], ["pre", "preserve"], ["prev", "previous"], ["pro", "pro"], ["prof", "profile"], ["profd", "profdel"], ["promptf", "promptfind"], ["promptr", "promptrepl"], ["ps", "psearch"], ["ptN", "ptNext"], ["pta", "ptag"], ["ptf", "ptfirst"], ["ptj", "ptjump"], ["ptl", "ptlast"], ["ptn", "ptnext"], ["ptp", "ptprevious"], ["ptr", "ptrewind"], ["pts", "ptselect"], ["pu", "put"], ["pw", "pwd"], ["py", "python"], ["py3", "py3"], ["py3", "py3"], ["py3do", "py3do"], ["pydo", "pydo"], ["pyf", "pyfile"], ["python3", "python3"], ["q", "quit"], ["qa", "qall"], ["quita", "quitall"], ["r", "read"], ["rec", "recover"], ["red", "redo"], ["redi", "redir"], ["redr", "redraw"], ["redraws", "redrawstatus"], ["reg", "registers"], ["res", "resize"], ["ret", "retab"], ["retu", "return"], ["rew", "rewind"], ["ri", "right"], ["rightb", "rightbelow"], ["ru", "runtime"], ["rub", "ruby"], ["rubyd", "rubydo"], ["rubyf", "rubyfile"], ["rundo", "rundo"], ["rv", "rviminfo"], ["sI", "sI"], ["sIc", "sIc"], ["sIe", "sIe"], ["sIg", "sIg"], ["sIl", "sIl"], ["sIn", "sIn"], ["sIp", "sIp"], ["sIr", "sIr"], ["sN", "sNext"], ["sa", "sargument"], ["sal", "sall"], ["san", "sandbox"], ["sav", "saveas"], ["sb", "sbuffer"], ["sbN", "sbNext"], ["sba", "sball"], ["sbf", "sbfirst"], ["sbl", "sblast"], ["sbm", "sbmodified"], ["sbn", "sbnext"], ["sbp", "sbprevious"], ["sbr", "sbrewind"], ["sc", "sc"], ["scI", "scI"], ["sce", "sce"], ["scg", "scg"], ["sci", "sci"], ["scl", "scl"], ["scp", "scp"], ["scr", "scriptnames"], ["scripte", "scriptencoding"], ["scs", "scs"], ["scscope", "scscope"], ["se", "set"], ["setf", "setfiletype"], ["setg", "setglobal"], ["setl", "setlocal"], ["sf", "sfind"], ["sfir", "sfirst"], ["sg", "sg"], ["sgI", "sgI"], ["sgc", "sgc"], ["sge", "sge"], ["sgi", "sgi"], ["sgl", "sgl"], ["sgn", "sgn"], ["sgp", "sgp"], ["sgr", "sgr"], ["sh", "shell"], ["si", "si"], ["sic", "sic"], ["sie", "sie"], ["sig", "sig"], ["sign", "sign"], ["sil", "silent"], ["sim", "simalt"], ["sin", "sin"], ["sip", "sip"], ["sir", "sir"], ["sl", "sleep"], ["sla", "slast"], ["sm", "smagic"], ["sm", "smap"], ["sme", "sme"], ["smenu", "smenu"], ["smile", "smile"], ["sn", "snext"], ["sno", "snomagic"], ["snoreme", "snoreme"], ["snoremenu", "snoremenu"], ["so", "source"], ["sor", "sort"], ["sp", "split"], ["spe", "spellgood"], ["spelld", "spelldump"], ["spelli", "spellinfo"], ["spellr", "spellrepall"], ["spellu", "spellundo"], ["spellw", "spellwrong"], ["spr", "sprevious"], ["sr", "sr"], ["srI", "srI"], ["src", "src"], ["sre", "srewind"], ["srg", "srg"], ["sri", "sri"], ["srl", "srl"], ["srn", "srn"], ["srp", "srp"], ["st", "stop"], ["sta", "stag"], ["star", "startinsert"], ["startg", "startgreplace"], ["startr", "startreplace"], ["stj", "stjump"], ["stopi", "stopinsert"], ["sts", "stselect"], ["sun", "sunhide"], ["sunme", "sunme"], ["sunmenu", "sunmenu"], ["sus", "suspend"], ["sv", "sview"], ["sw", "swapname"], ["sy", "sy"], ["syn", "syn"], ["sync", "sync"], ["syncbind", "syncbind"], ["syntime", "syntime"], ["t", "t"], ["tN", "tNext"], ["ta", "tag"], ["tab", "tab"], ["tabN", "tabNext"], ["tabc", "tabclose"], ["tabd", "tabdo"], ["tabe", "tabedit"], ["tabf", "tabfind"], ["tabfir", "tabfirst"], ["tabl", "tablast"], ["tabm", "tabmove"], ["tabn", "tabnext"], ["tabnew", "tabnew"], ["tabo", "tabonly"], ["tabp", "tabprevious"], ["tabr", "tabrewind"], ["tabs", "tabs"], ["tags", "tags"], ["tc", "tcl"], ["tcld", "tcldo"], ["tclf", "tclfile"], ["te", "tearoff"], ["tf", "tfirst"], ["th", "throw"], ["tj", "tjump"], ["tl", "tlast"], ["tm", "tmenu"], ["tn", "tnext"], ["to", "topleft"], ["tp", "tprevious"], ["tr", "trewind"], ["try", "try"], ["ts", "tselect"], ["tu", "tunmenu"], ["u", "undo"], ["una", "unabbreviate"], ["undoj", "undojoin"], ["undol", "undolist"], ["unh", "unhide"], ["unlo", "unlockvar"], ["uns", "unsilent"], ["up", "update"], ["v", "v"], ["ve", "version"], ["verb", "verbose"], ["vert", "vertical"], ["vi", "visual"], ["vie", "view"], ["vim", "vimgrep"], ["vimgrepa", "vimgrepadd"], ["viu", "viusage"], ["vmapc", "vmapclear"], ["vne", "vnew"], ["vs", "vsplit"], ["w", "write"], ["wN", "wNext"], ["wa", "wall"], ["wh", "while"], ["win", "winsize"], ["winc", "wincmd"], ["windo", "windo"], ["winp", "winpos"], ["wn", "wnext"], ["wp", "wprevious"], ["wq", "wq"], ["wqa", "wqall"], ["ws", "wsverb"], ["wundo", "wundo"], ["wv", "wviminfo"], ["x", "xit"], ["xa", "xall"], ["xmapc", "xmapclear"], ["xme", "xme"], ["xmenu", "xmenu"], ["xnoreme", "xnoreme"], ["xnoremenu", "xnoremenu"], ["xprop", "xprop"], ["xunme", "xunme"], ["xunmenu", "xunmenu"], ["xwininfo", "xwininfo"], ["y", "yank"]], :option=>[], :auto=>[["BufAdd", "BufAdd"], ["BufCreate", "BufCreate"], ["BufDelete", "BufDelete"], ["BufEnter", "BufEnter"], ["BufFilePost", "BufFilePost"], ["BufFilePre", "BufFilePre"], ["BufHidden", "BufHidden"], ["BufLeave", "BufLeave"], ["BufNew", "BufNew"], ["BufNewFile", "BufNewFile"], ["BufRead", "BufRead"], ["BufReadCmd", "BufReadCmd"], ["BufReadPost", "BufReadPost"], ["BufReadPre", "BufReadPre"], ["BufUnload", "BufUnload"], ["BufWinEnter", "BufWinEnter"], ["BufWinLeave", "BufWinLeave"], ["BufWipeout", "BufWipeout"], ["BufWrite", "BufWrite"], ["BufWriteCmd", "BufWriteCmd"], ["BufWritePost", "BufWritePost"], ["BufWritePre", "BufWritePre"], ["CmdUndefined", "CmdUndefined"], ["CmdwinEnter", "CmdwinEnter"], ["CmdwinLeave", "CmdwinLeave"], ["ColorScheme", "ColorScheme"], ["CompleteDone", "CompleteDone"], ["CursorHold", "CursorHold"], ["CursorHoldI", "CursorHoldI"], ["CursorMoved", "CursorMoved"], ["CursorMovedI", "CursorMovedI"], ["EncodingChanged", "EncodingChanged"], ["FileAppendCmd", "FileAppendCmd"], ["FileAppendPost", "FileAppendPost"], ["FileAppendPre", "FileAppendPre"], ["FileChangedRO", "FileChangedRO"], ["FileChangedShell", "FileChangedShell"], ["FileChangedShellPost", "FileChangedShellPost"], ["FileEncoding", "FileEncoding"], ["FileReadCmd", "FileReadCmd"], ["FileReadPost", "FileReadPost"], ["FileReadPre", "FileReadPre"], ["FileType", "FileType"], ["FileWriteCmd", "FileWriteCmd"], ["FileWritePost", "FileWritePost"], ["FileWritePre", "FileWritePre"], ["FilterReadPost", "FilterReadPost"], ["FilterReadPre", "FilterReadPre"], ["FilterWritePost", "FilterWritePost"], ["FilterWritePre", "FilterWritePre"], ["FocusGained", "FocusGained"], ["FocusLost", "FocusLost"], ["FuncUndefined", "FuncUndefined"], ["GUIEnter", "GUIEnter"], ["GUIFailed", "GUIFailed"], ["InsertChange", "InsertChange"], ["InsertCharPre", "InsertCharPre"], ["InsertEnter", "InsertEnter"], ["InsertLeave", "InsertLeave"], ["MenuPopup", "MenuPopup"], ["OptionSet", "OptionSet"], ["QuickFixCmdPost", "QuickFixCmdPost"], ["QuickFixCmdPre", "QuickFixCmdPre"], ["QuitPre", "QuitPre"], ["RemoteReply", "RemoteReply"], ["SessionLoadPost", "SessionLoadPost"], ["ShellCmdPost", "ShellCmdPost"], ["ShellFilterPost", "ShellFilterPost"], ["SourceCmd", "SourceCmd"], ["SourcePre", "SourcePre"], ["SpellFileMissing", "SpellFileMissing"], ["StdinReadPost", "StdinReadPost"], ["StdinReadPre", "StdinReadPre"], ["SwapExists", "SwapExists"], ["Syntax", "Syntax"], ["TabClosed", "TabClosed"], ["TabEnter", "TabEnter"], ["TabLeave", "TabLeave"], ["TabNew", "TabNew"], ["TermChanged", "TermChanged"], ["TermResponse", "TermResponse"], ["TextChanged", "TextChanged"], ["TextChangedI", "TextChangedI"], ["User", "User"], ["VimEnter", "VimEnter"], ["VimLeave", "VimLeave"], ["VimLeavePre", "VimLeavePre"], ["VimResized", "VimResized"], ["WinEnter", "WinEnter"], ["WinLeave", "WinLeave"], ["WinNew", "WinNew"]]}
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,122 @@
1
+ module Rouge
2
+ module Lexers
3
+ load_lexer 'html.rb'
4
+
5
+ class Vue < HTML
6
+ desc 'Vue.js single-file components'
7
+ tag 'vue'
8
+ aliases 'vuejs'
9
+ filenames '*.vue'
10
+
11
+ mimetypes 'text/x-vue', 'application/x-vue'
12
+
13
+ def initialize(*)
14
+ super
15
+ @js = Javascript.new(options)
16
+ end
17
+
18
+ def lookup_lang(lang)
19
+ lang.downcase!
20
+ lang = lang.gsub(/["']*/, '')
21
+ case lang
22
+ when 'html' then HTML
23
+ when 'css' then CSS
24
+ when 'javascript' then Javascript
25
+ when 'sass' then Sass
26
+ when 'scss' then Scss
27
+ when 'coffee' then Coffeescript
28
+ # TODO: add more when the lexers are done
29
+ else
30
+ PlainText
31
+ end
32
+ end
33
+
34
+ start { @js.reset! }
35
+
36
+ prepend :root do
37
+ rule /(<)(\s*)(template)/ do
38
+ groups Name::Tag, Text, Keyword
39
+ @lang = HTML
40
+ push :template
41
+ push :lang_tag
42
+ end
43
+
44
+ rule /(<)(\s*)(style)/ do
45
+ groups Name::Tag, Text, Keyword
46
+ @lang = CSS
47
+ push :style
48
+ push :lang_tag
49
+ end
50
+
51
+ rule /(<)(\s*)(script)/ do
52
+ groups Name::Tag, Text, Keyword
53
+ @lang = Javascript
54
+ push :script
55
+ push :lang_tag
56
+ end
57
+ end
58
+
59
+ state :style do
60
+ rule /(<\s*\/\s*)(style)(\s*>)/ do
61
+ groups Name::Tag, Keyword, Name::Tag
62
+ pop!
63
+ end
64
+
65
+ mixin :style_content
66
+ mixin :embed
67
+ end
68
+
69
+ state :script do
70
+ rule /(<\s*\/\s*)(script)(\s*>)/ do
71
+ groups Name::Tag, Keyword, Name::Tag
72
+ pop!
73
+ end
74
+
75
+ mixin :script_content
76
+ mixin :embed
77
+ end
78
+
79
+ state :lang_tag do
80
+ rule /(lang\s*=)(\s*)("(?:\\.|[^\\])*?"|'(\\.|[^\\])*?'|[^\s>]+)/ do |m|
81
+ groups Name::Attribute, Text, Str
82
+ @lang = lookup_lang(m[3])
83
+ end
84
+
85
+ mixin :tag
86
+ end
87
+
88
+ state :template do
89
+ rule %r((<\s*/\s*)(template)(\s*>)) do
90
+ groups Name::Tag, Keyword, Name::Tag
91
+ pop!
92
+ end
93
+
94
+ rule /{{/ do
95
+ token Str::Interpol
96
+ push :template_interpol
97
+ @js.reset!
98
+ end
99
+
100
+ mixin :embed
101
+ end
102
+
103
+ state :template_interpol do
104
+ rule /}}/, Str::Interpol, :pop!
105
+ rule /}/, Error
106
+ mixin :template_interpol_inner
107
+ end
108
+
109
+ state :template_interpol_inner do
110
+ rule(/{/) { delegate @js; push }
111
+ rule(/}/) { delegate @js; pop! }
112
+ rule(/[^{}]+/) { delegate @js }
113
+ end
114
+
115
+ state :embed do
116
+ rule(/[^{<]+/) { delegate @lang }
117
+ rule(/[<{][^<{]*/) { delegate @lang }
118
+ end
119
+ end
120
+ end
121
+ end
122
+
@@ -0,0 +1,103 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Wollok < RegexLexer
6
+ title 'Wollok'
7
+ desc 'Wollok lang'
8
+ tag 'wollok'
9
+ filenames *%w(*.wlk *.wtest *.wpgm)
10
+
11
+ keywords = %w(new super return if else var const override constructor)
12
+
13
+ entity_name = /[a-zA-Z][a-zA-Z0-9]*/
14
+ variable_naming = /_?#{entity_name}/
15
+
16
+ entities = []
17
+
18
+ state :whitespaces_and_comments do
19
+ rule /\s+/m, Text::Whitespace
20
+ rule /$+/m, Text::Whitespace
21
+ rule %r(//.*$), Comment::Single
22
+ rule %r(/\*(.|\s)*?\*/)m, Comment::Multiline
23
+ end
24
+
25
+ state :root do
26
+ mixin :whitespaces_and_comments
27
+ rule /(import)(.+$)/ do
28
+ groups Keyword::Reserved, Text
29
+ end
30
+ rule /(class|object|mixin)/, Keyword::Reserved, :foo
31
+ rule /test|program/, Keyword::Reserved #, :chunk_naming
32
+ rule /(package)(\s+)(#{entity_name})/ do
33
+ groups Keyword::Reserved, Text::Whitespace, Name::Class
34
+ end
35
+ rule /{|}/, Text
36
+ mixin :keywords
37
+ mixin :symbols
38
+ mixin :objects
39
+ end
40
+
41
+ state :foo do
42
+ mixin :whitespaces_and_comments
43
+ rule /inherits|mixed|with|and/, Keyword::Reserved
44
+ rule /#{entity_name}(?=\s*{)/ do |m|
45
+ token Name::Class
46
+ entities << m[0]
47
+ pop!
48
+ end
49
+ rule /#{entity_name}/ do |m|
50
+ token Name::Class
51
+ entities << m[0]
52
+ end
53
+ end
54
+
55
+ state :keywords do
56
+ def any(expressions)
57
+ /#{expressions.map { |keyword| "#{keyword}\\b" }.join('|')}/
58
+ end
59
+
60
+ rule /self\b/, Name::Builtin::Pseudo
61
+ rule any(keywords), Keyword::Reserved
62
+ rule /(method)(\s+)(#{variable_naming})/ do
63
+ groups Keyword::Reserved, Text::Whitespace, Text
64
+ end
65
+ end
66
+
67
+ state :objects do
68
+ rule variable_naming do |m|
69
+ variable = m[0]
70
+ if entities.include?(variable) || ('A'..'Z').cover?(variable[0])
71
+ token Name::Class
72
+ else
73
+ token Keyword::Variable
74
+ end
75
+ end
76
+ rule /\.#{entity_name}/, Text
77
+ mixin :literals
78
+ end
79
+
80
+ state :literals do
81
+ mixin :whitespaces_and_comments
82
+ rule /[0-9]+\.?[0-9]*/, Literal::Number
83
+ rule /"[^"]*"/m, Literal::String
84
+ rule /\[|\#{/, Punctuation, :lists
85
+ end
86
+
87
+ state :lists do
88
+ rule /,/, Punctuation
89
+ rule /]|}/, Punctuation, :pop!
90
+ mixin :objects
91
+ end
92
+
93
+ state :symbols do
94
+ rule /\+\+|--|\+=|-=|\*\*|!/, Operator
95
+ rule /\+|-|\*|\/|%/, Operator
96
+ rule /<=|=>|===|==|<|>/, Operator
97
+ rule /and\b|or\b|not\b/, Operator
98
+ rule /\(|\)|=/, Text
99
+ rule /,/, Punctuation
100
+ end
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,57 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class XML < RegexLexer
6
+ title "XML"
7
+ desc %q(<desc for="this-lexer">XML</desc>)
8
+ tag 'xml'
9
+ filenames *%w(*.xml *.xsl *.rss *.xslt *.xsd *.wsdl *.svg)
10
+ mimetypes *%w(
11
+ text/xml
12
+ application/xml
13
+ image/svg+xml
14
+ application/rss+xml
15
+ application/atom+xml
16
+ )
17
+
18
+ def self.detect?(text)
19
+ return false if text.doctype?(/html/)
20
+ return true if text =~ /\A<\?xml\b/
21
+ return true if text.doctype?
22
+ end
23
+
24
+ state :root do
25
+ rule /[^<&]+/, Text
26
+ rule /&\S*?;/, Name::Entity
27
+ rule /<!\[CDATA\[.*?\]\]\>/, Comment::Preproc
28
+ rule /<!--/, Comment, :comment
29
+ rule /<\?.*?\?>/, Comment::Preproc
30
+ rule /<![^>]*>/, Comment::Preproc
31
+
32
+ # open tags
33
+ rule %r(<\s*[\w:.-]+)m, Name::Tag, :tag
34
+
35
+ # self-closing tags
36
+ rule %r(<\s*/\s*[\w:.-]+\s*>)m, Name::Tag
37
+ end
38
+
39
+ state :comment do
40
+ rule /[^-]+/m, Comment
41
+ rule /-->/, Comment, :pop!
42
+ rule /-/, Comment
43
+ end
44
+
45
+ state :tag do
46
+ rule /\s+/m, Text
47
+ rule /[\w.:-]+\s*=/m, Name::Attribute, :attr
48
+ rule %r(/?\s*>), Name::Tag, :pop!
49
+ end
50
+
51
+ state :attr do
52
+ rule /\s+/m, Text
53
+ rule /".*?"|'.*?'|[^\s>]+/m, Str, :pop!
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,373 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class YAML < RegexLexer
6
+ title "YAML"
7
+ desc "Yaml Ain't Markup Language (yaml.org)"
8
+ mimetypes 'text/x-yaml'
9
+ tag 'yaml'
10
+ aliases 'yml'
11
+ filenames '*.yaml', '*.yml'
12
+
13
+ def self.detect?(text)
14
+ # look for the %YAML directive
15
+ return true if text =~ /\A\s*%YAML/m
16
+ end
17
+
18
+ SPECIAL_VALUES = Regexp.union(%w(true false null))
19
+
20
+ # NB: Tabs are forbidden in YAML, which is why you see things
21
+ # like /[ ]+/.
22
+
23
+ # reset the indentation levels
24
+ def reset_indent
25
+ puts " yaml: reset_indent" if @debug
26
+ @indent_stack = [0]
27
+ @next_indent = 0
28
+ @block_scalar_indent = nil
29
+ end
30
+
31
+ def indent
32
+ raise 'empty indent stack!' if @indent_stack.empty?
33
+ @indent_stack.last
34
+ end
35
+
36
+ def dedent?(level)
37
+ level < self.indent
38
+ end
39
+
40
+ def indent?(level)
41
+ level > self.indent
42
+ end
43
+
44
+ # Save a possible indentation level
45
+ def save_indent(match)
46
+ @next_indent = match.size
47
+ puts " yaml: indent: #{self.indent}/#@next_indent" if @debug
48
+ puts " yaml: popping indent stack - before: #@indent_stack" if @debug
49
+ if dedent?(@next_indent)
50
+ @indent_stack.pop while dedent?(@next_indent)
51
+ puts " yaml: popping indent stack - after: #@indent_stack" if @debug
52
+ puts " yaml: indent: #{self.indent}/#@next_indent" if @debug
53
+
54
+ # dedenting to a state not previously indented to is an error
55
+ [match[0...self.indent], match[self.indent..-1]]
56
+ else
57
+ [match, '']
58
+ end
59
+ end
60
+
61
+ def continue_indent(match)
62
+ puts " yaml: continue_indent" if @debug
63
+ @next_indent += match.size
64
+ end
65
+
66
+ def set_indent(match, opts={})
67
+ if indent < @next_indent
68
+ puts " yaml: indenting #{indent}/#{@next_indent}" if @debug
69
+ @indent_stack << @next_indent
70
+ end
71
+
72
+ @next_indent += match.size unless opts[:implicit]
73
+ end
74
+
75
+ plain_scalar_start = /[^ \t\n\r\f\v?:,\[\]{}#&*!\|>'"%@`]/
76
+
77
+ start { reset_indent }
78
+
79
+ state :basic do
80
+ rule /#.*$/, Comment::Single
81
+ end
82
+
83
+ state :root do
84
+ mixin :basic
85
+
86
+ rule /\n+/, Text
87
+
88
+ # trailing or pre-comment whitespace
89
+ rule /[ ]+(?=#|$)/, Text
90
+
91
+ rule /^%YAML\b/ do
92
+ token Name::Tag
93
+ reset_indent
94
+ push :yaml_directive
95
+ end
96
+
97
+ rule /^%TAG\b/ do
98
+ token Name::Tag
99
+ reset_indent
100
+ push :tag_directive
101
+ end
102
+
103
+ # doc-start and doc-end indicators
104
+ rule /^(?:---|\.\.\.)(?= |$)/ do
105
+ token Name::Namespace
106
+ reset_indent
107
+ push :block_line
108
+ end
109
+
110
+ # indentation spaces
111
+ rule /[ ]*(?!\s|$)/ do |m|
112
+ text, err = save_indent(m[0])
113
+ token Text, text
114
+ token Error, err
115
+ push :block_line; push :indentation
116
+ end
117
+ end
118
+
119
+ state :indentation do
120
+ rule(/\s*?\n/) { token Text; pop! 2 }
121
+ # whitespace preceding block collection indicators
122
+ rule /[ ]+(?=[-:?](?:[ ]|$))/ do |m|
123
+ token Text
124
+ continue_indent(m[0])
125
+ end
126
+
127
+ # block collection indicators
128
+ rule(/[?:-](?=[ ]|$)/) do |m|
129
+ set_indent m[0]
130
+ token Punctuation::Indicator
131
+ end
132
+
133
+ # the beginning of a block line
134
+ rule(/[ ]*/) { |m| token Text; continue_indent(m[0]); pop! }
135
+ end
136
+
137
+ # indented line in the block context
138
+ state :block_line do
139
+ # line end
140
+ rule /[ ]*(?=#|$)/, Text, :pop!
141
+ rule /[ ]+/, Text
142
+ # tags, anchors, and aliases
143
+ mixin :descriptors
144
+ # block collections and scalars
145
+ mixin :block_nodes
146
+ # flow collections and quoed scalars
147
+ mixin :flow_nodes
148
+
149
+ # a plain scalar
150
+ rule /(?=#{plain_scalar_start}|[?:-][^ \t\n\r\f\v])/ do
151
+ token Name::Variable
152
+ push :plain_scalar_in_block_context
153
+ end
154
+ end
155
+
156
+ state :descriptors do
157
+ # a full-form tag
158
+ rule /!<[0-9A-Za-z;\/?:@&=+$,_.!~*'()\[\]%-]+>/, Keyword::Type
159
+
160
+ # a tag in the form '!', '!suffix' or '!handle!suffix'
161
+ rule %r(
162
+ (?:![\w-]+)? # handle
163
+ !(?:[\w;/?:@&=+$,.!~*\'()\[\]%-]*) # suffix
164
+ )x, Keyword::Type
165
+
166
+ # an anchor
167
+ rule /&[\w-]+/, Name::Label
168
+
169
+ # an alias
170
+ rule /\*[\w-]+/, Name::Variable
171
+ end
172
+
173
+ state :block_nodes do
174
+ # implicit key
175
+ rule /((?:\w[\w -]*)?)(:)(?=\s|$)/ do |m|
176
+ groups Name::Attribute, Punctuation::Indicator
177
+ set_indent m[0], :implicit => true
178
+ end
179
+
180
+ # literal and folded scalars
181
+ rule /[\|>]/ do
182
+ token Punctuation::Indicator
183
+ push :block_scalar_content
184
+ push :block_scalar_header
185
+ end
186
+ end
187
+
188
+ state :flow_nodes do
189
+ rule /\[/, Punctuation::Indicator, :flow_sequence
190
+ rule /\{/, Punctuation::Indicator, :flow_mapping
191
+ rule /'/, Str::Single, :single_quoted_scalar
192
+ rule /"/, Str::Double, :double_quoted_scalar
193
+ end
194
+
195
+ state :flow_collection do
196
+ rule /\s+/m, Text
197
+ mixin :basic
198
+ rule /[?:,]/, Punctuation::Indicator
199
+ mixin :descriptors
200
+ mixin :flow_nodes
201
+
202
+ rule /(?=#{plain_scalar_start})/ do
203
+ push :plain_scalar_in_flow_context
204
+ end
205
+ end
206
+
207
+ state :flow_sequence do
208
+ rule /\]/, Punctuation::Indicator, :pop!
209
+ mixin :flow_collection
210
+ end
211
+
212
+ state :flow_mapping do
213
+ rule /\}/, Punctuation::Indicator, :pop!
214
+ mixin :flow_collection
215
+ end
216
+
217
+ state :block_scalar_content do
218
+ rule /\n+/, Text
219
+
220
+ # empty lines never dedent, but they might be part of the scalar.
221
+ rule /^[ ]+$/ do |m|
222
+ text = m[0]
223
+ indent_size = text.size
224
+
225
+ indent_mark = @block_scalar_indent || indent_size
226
+
227
+ token Text, text[0...indent_mark]
228
+ token Name::Constant, text[indent_mark..-1]
229
+ end
230
+
231
+ # TODO: ^ doesn't actually seem to affect the match at all.
232
+ # Find a way to work around this limitation.
233
+ rule /^[ ]*/ do |m|
234
+ token Text
235
+
236
+ indent_size = m[0].size
237
+
238
+ dedent_level = @block_scalar_indent || self.indent
239
+ @block_scalar_indent ||= indent_size
240
+
241
+ if indent_size < dedent_level
242
+ save_indent m[0]
243
+ pop!
244
+ push :indentation
245
+ end
246
+ end
247
+
248
+ rule /[^\n\r\f\v]+/, Name::Constant
249
+ end
250
+
251
+ state :block_scalar_header do
252
+ # optional indentation indicator and chomping flag, in either order
253
+ rule %r(
254
+ (
255
+ ([1-9])[+-]? | [+-]?([1-9])?
256
+ )(?=[ ]|$)
257
+ )x do |m|
258
+ @block_scalar_indent = nil
259
+ goto :ignored_line
260
+ next if m[0].empty?
261
+
262
+ increment = m[1] || m[2]
263
+ if increment
264
+ @block_scalar_indent = indent + increment.to_i
265
+ end
266
+
267
+ token Punctuation::Indicator
268
+ end
269
+ end
270
+
271
+ state :ignored_line do
272
+ mixin :basic
273
+ rule /[ ]+/, Text
274
+ rule /\n/, Text, :pop!
275
+ end
276
+
277
+ state :quoted_scalar_whitespaces do
278
+ # leading and trailing whitespace is ignored
279
+ rule /^[ ]+/, Text
280
+ rule /[ ]+$/, Text
281
+
282
+ rule /\n+/m, Text
283
+
284
+ rule /[ ]+/, Name::Variable
285
+ end
286
+
287
+ state :single_quoted_scalar do
288
+ mixin :quoted_scalar_whitespaces
289
+ rule /\\'/, Str::Escape
290
+ rule /'/, Str, :pop!
291
+ rule /[^\s']+/, Str
292
+ end
293
+
294
+ state :double_quoted_scalar do
295
+ rule /"/, Str, :pop!
296
+ mixin :quoted_scalar_whitespaces
297
+ # escapes
298
+ rule /\\[0abt\tn\nvfre "\\N_LP]/, Str::Escape
299
+ rule /\\(?:x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,
300
+ Str::Escape
301
+ rule /[^ \t\n\r\f\v"\\]+/, Str
302
+ end
303
+
304
+ state :plain_scalar_in_block_context_new_line do
305
+ rule /^[ ]+\n/, Text
306
+ rule /\n+/m, Text
307
+ rule /^(?=---|\.\.\.)/ do
308
+ pop! 3
309
+ end
310
+
311
+ # dedent detection
312
+ rule /^[ ]*/ do |m|
313
+ token Text
314
+ pop!
315
+
316
+ indent_size = m[0].size
317
+
318
+ # dedent = end of scalar
319
+ if indent_size <= self.indent
320
+ pop!
321
+ save_indent(m[0])
322
+ push :indentation
323
+ end
324
+ end
325
+ end
326
+
327
+ state :plain_scalar_in_block_context do
328
+ # the : indicator ends a scalar
329
+ rule /[ ]*(?=:[ \n]|:$)/, Text, :pop!
330
+ rule /[ ]*:/, Str
331
+ rule /[ ]+(?=#)/, Text, :pop!
332
+ rule /[ ]+$/, Text
333
+ # check for new documents or dedents at the new line
334
+ rule /\n+/ do
335
+ token Text
336
+ push :plain_scalar_in_block_context_new_line
337
+ end
338
+
339
+ rule /[ ]+/, Str
340
+ rule SPECIAL_VALUES, Name::Constant
341
+ # regular non-whitespace characters
342
+ rule /[^\s:]+/, Str
343
+ end
344
+
345
+ state :plain_scalar_in_flow_context do
346
+ rule /[ ]*(?=[,:?\[\]{}])/, Text, :pop!
347
+ rule /[ ]+(?=#)/, Text, :pop!
348
+ rule /^[ ]+/, Text
349
+ rule /[ ]+$/, Text
350
+ rule /\n+/, Text
351
+ rule /[ ]+/, Name::Variable
352
+ rule /[^\s,:?\[\]{}]+/, Name::Variable
353
+ end
354
+
355
+ state :yaml_directive do
356
+ rule /([ ]+)(\d+\.\d+)/ do
357
+ groups Text, Num
358
+ goto :ignored_line
359
+ end
360
+ end
361
+
362
+ state :tag_directive do
363
+ rule %r(
364
+ ([ ]+)(!|![\w-]*!) # prefix
365
+ ([ ]+)(!|!?[\w;/?:@&=+$,.!~*'()\[\]%-]+) # tag handle
366
+ )x do
367
+ groups Text, Keyword::Type, Text, Keyword::Type
368
+ goto :ignored_line
369
+ end
370
+ end
371
+ end
372
+ end
373
+ end