rougegal 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (311) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +26 -0
  3. data/LICENSE +186 -0
  4. data/bin/rougify +17 -0
  5. data/lib/rouge/cli.rb +394 -0
  6. data/lib/rouge/demos/abap +6 -0
  7. data/lib/rouge/demos/actionscript +4 -0
  8. data/lib/rouge/demos/apache +21 -0
  9. data/lib/rouge/demos/apiblueprint +33 -0
  10. data/lib/rouge/demos/applescript +2 -0
  11. data/lib/rouge/demos/awk +4 -0
  12. data/lib/rouge/demos/biml +38 -0
  13. data/lib/rouge/demos/bsl +7 -0
  14. data/lib/rouge/demos/c +8 -0
  15. data/lib/rouge/demos/ceylon +7 -0
  16. data/lib/rouge/demos/cfscript +18 -0
  17. data/lib/rouge/demos/clojure +5 -0
  18. data/lib/rouge/demos/cmake +7 -0
  19. data/lib/rouge/demos/coffeescript +5 -0
  20. data/lib/rouge/demos/common_lisp +1 -0
  21. data/lib/rouge/demos/conf +4 -0
  22. data/lib/rouge/demos/console +6 -0
  23. data/lib/rouge/demos/coq +13 -0
  24. data/lib/rouge/demos/cpp +8 -0
  25. data/lib/rouge/demos/csharp +5 -0
  26. data/lib/rouge/demos/css +4 -0
  27. data/lib/rouge/demos/d +16 -0
  28. data/lib/rouge/demos/dart +6 -0
  29. data/lib/rouge/demos/diff +7 -0
  30. data/lib/rouge/demos/digdag +19 -0
  31. data/lib/rouge/demos/docker +9 -0
  32. data/lib/rouge/demos/dot +5 -0
  33. data/lib/rouge/demos/eiffel +30 -0
  34. data/lib/rouge/demos/elixir +1 -0
  35. data/lib/rouge/demos/erb +1 -0
  36. data/lib/rouge/demos/erlang +7 -0
  37. data/lib/rouge/demos/factor +5 -0
  38. data/lib/rouge/demos/fortran +22 -0
  39. data/lib/rouge/demos/fsharp +12 -0
  40. data/lib/rouge/demos/gal +22 -0
  41. data/lib/rouge/demos/gherkin +17 -0
  42. data/lib/rouge/demos/glsl +14 -0
  43. data/lib/rouge/demos/go +7 -0
  44. data/lib/rouge/demos/gradle +10 -0
  45. data/lib/rouge/demos/graphql +17 -0
  46. data/lib/rouge/demos/groovy +9 -0
  47. data/lib/rouge/demos/haml +5 -0
  48. data/lib/rouge/demos/handlebars +7 -0
  49. data/lib/rouge/demos/haskell +6 -0
  50. data/lib/rouge/demos/html +8 -0
  51. data/lib/rouge/demos/http +14 -0
  52. data/lib/rouge/demos/hylang +10 -0
  53. data/lib/rouge/demos/idlang +8 -0
  54. data/lib/rouge/demos/igorpro +9 -0
  55. data/lib/rouge/demos/ini +4 -0
  56. data/lib/rouge/demos/io +11 -0
  57. data/lib/rouge/demos/irb +4 -0
  58. data/lib/rouge/demos/irb_output +2 -0
  59. data/lib/rouge/demos/java +5 -0
  60. data/lib/rouge/demos/javascript +1 -0
  61. data/lib/rouge/demos/jinja +9 -0
  62. data/lib/rouge/demos/json +1 -0
  63. data/lib/rouge/demos/json-doc +1 -0
  64. data/lib/rouge/demos/jsonnet +28 -0
  65. data/lib/rouge/demos/jsx +17 -0
  66. data/lib/rouge/demos/julia +11 -0
  67. data/lib/rouge/demos/kotlin +3 -0
  68. data/lib/rouge/demos/lasso +12 -0
  69. data/lib/rouge/demos/liquid +11 -0
  70. data/lib/rouge/demos/literate_coffeescript +3 -0
  71. data/lib/rouge/demos/literate_haskell +7 -0
  72. data/lib/rouge/demos/llvm +20 -0
  73. data/lib/rouge/demos/lua +12 -0
  74. data/lib/rouge/demos/make +6 -0
  75. data/lib/rouge/demos/markdown +4 -0
  76. data/lib/rouge/demos/matlab +6 -0
  77. data/lib/rouge/demos/moonscript +16 -0
  78. data/lib/rouge/demos/mosel +10 -0
  79. data/lib/rouge/demos/mxml +22 -0
  80. data/lib/rouge/demos/nasm +26 -0
  81. data/lib/rouge/demos/nginx +5 -0
  82. data/lib/rouge/demos/nim +27 -0
  83. data/lib/rouge/demos/objective_c +18 -0
  84. data/lib/rouge/demos/ocaml +12 -0
  85. data/lib/rouge/demos/pascal +14 -0
  86. data/lib/rouge/demos/perl +5 -0
  87. data/lib/rouge/demos/php +3 -0
  88. data/lib/rouge/demos/plaintext +1 -0
  89. data/lib/rouge/demos/plist +142 -0
  90. data/lib/rouge/demos/pony +17 -0
  91. data/lib/rouge/demos/powershell +49 -0
  92. data/lib/rouge/demos/praat +26 -0
  93. data/lib/rouge/demos/prolog +9 -0
  94. data/lib/rouge/demos/prometheus +9 -0
  95. data/lib/rouge/demos/properties +7 -0
  96. data/lib/rouge/demos/protobuf +5 -0
  97. data/lib/rouge/demos/puppet +6 -0
  98. data/lib/rouge/demos/python +6 -0
  99. data/lib/rouge/demos/q +2 -0
  100. data/lib/rouge/demos/qml +9 -0
  101. data/lib/rouge/demos/r +8 -0
  102. data/lib/rouge/demos/racket +24 -0
  103. data/lib/rouge/demos/ruby +9 -0
  104. data/lib/rouge/demos/rust +12 -0
  105. data/lib/rouge/demos/sass +3 -0
  106. data/lib/rouge/demos/scala +3 -0
  107. data/lib/rouge/demos/scheme +4 -0
  108. data/lib/rouge/demos/scss +5 -0
  109. data/lib/rouge/demos/sed +4 -0
  110. data/lib/rouge/demos/shell +2 -0
  111. data/lib/rouge/demos/sieve +10 -0
  112. data/lib/rouge/demos/slim +17 -0
  113. data/lib/rouge/demos/smalltalk +6 -0
  114. data/lib/rouge/demos/smarty +12 -0
  115. data/lib/rouge/demos/sml +4 -0
  116. data/lib/rouge/demos/sql +1 -0
  117. data/lib/rouge/demos/swift +5 -0
  118. data/lib/rouge/demos/tap +5 -0
  119. data/lib/rouge/demos/tcl +1 -0
  120. data/lib/rouge/demos/tex +1 -0
  121. data/lib/rouge/demos/toml +9 -0
  122. data/lib/rouge/demos/tsx +17 -0
  123. data/lib/rouge/demos/tulip +13 -0
  124. data/lib/rouge/demos/turtle +26 -0
  125. data/lib/rouge/demos/twig +9 -0
  126. data/lib/rouge/demos/typescript +1 -0
  127. data/lib/rouge/demos/vala +8 -0
  128. data/lib/rouge/demos/vb +4 -0
  129. data/lib/rouge/demos/verilog +27 -0
  130. data/lib/rouge/demos/vhdl +23 -0
  131. data/lib/rouge/demos/viml +14 -0
  132. data/lib/rouge/demos/vue +11 -0
  133. data/lib/rouge/demos/wollok +11 -0
  134. data/lib/rouge/demos/xml +2 -0
  135. data/lib/rouge/demos/yaml +4 -0
  136. data/lib/rouge/formatter.rb +75 -0
  137. data/lib/rouge/formatters/html.rb +37 -0
  138. data/lib/rouge/formatters/html_inline.rb +30 -0
  139. data/lib/rouge/formatters/html_legacy.rb +44 -0
  140. data/lib/rouge/formatters/html_linewise.rb +27 -0
  141. data/lib/rouge/formatters/html_pygments.rb +16 -0
  142. data/lib/rouge/formatters/html_table.rb +61 -0
  143. data/lib/rouge/formatters/null.rb +19 -0
  144. data/lib/rouge/formatters/terminal256.rb +172 -0
  145. data/lib/rouge/guesser.rb +55 -0
  146. data/lib/rouge/guessers/filename.rb +25 -0
  147. data/lib/rouge/guessers/glob_mapping.rb +46 -0
  148. data/lib/rouge/guessers/mimetype.rb +14 -0
  149. data/lib/rouge/guessers/modeline.rb +42 -0
  150. data/lib/rouge/guessers/source.rb +39 -0
  151. data/lib/rouge/lexer.rb +452 -0
  152. data/lib/rouge/lexers/abap.rb +238 -0
  153. data/lib/rouge/lexers/actionscript.rb +195 -0
  154. data/lib/rouge/lexers/apache.rb +71 -0
  155. data/lib/rouge/lexers/apache/keywords.yml +764 -0
  156. data/lib/rouge/lexers/apiblueprint.rb +51 -0
  157. data/lib/rouge/lexers/apple_script.rb +367 -0
  158. data/lib/rouge/lexers/awk.rb +161 -0
  159. data/lib/rouge/lexers/biml.rb +41 -0
  160. data/lib/rouge/lexers/bsl.rb +81 -0
  161. data/lib/rouge/lexers/c.rb +217 -0
  162. data/lib/rouge/lexers/ceylon.rb +123 -0
  163. data/lib/rouge/lexers/cfscript.rb +153 -0
  164. data/lib/rouge/lexers/clojure.rb +112 -0
  165. data/lib/rouge/lexers/cmake.rb +206 -0
  166. data/lib/rouge/lexers/coffeescript.rb +174 -0
  167. data/lib/rouge/lexers/common_lisp.rb +345 -0
  168. data/lib/rouge/lexers/conf.rb +24 -0
  169. data/lib/rouge/lexers/console.rb +136 -0
  170. data/lib/rouge/lexers/coq.rb +191 -0
  171. data/lib/rouge/lexers/cpp.rb +78 -0
  172. data/lib/rouge/lexers/csharp.rb +114 -0
  173. data/lib/rouge/lexers/css.rb +273 -0
  174. data/lib/rouge/lexers/d.rb +176 -0
  175. data/lib/rouge/lexers/dart.rb +104 -0
  176. data/lib/rouge/lexers/diff.rb +31 -0
  177. data/lib/rouge/lexers/digdag.rb +72 -0
  178. data/lib/rouge/lexers/docker.rb +50 -0
  179. data/lib/rouge/lexers/dot.rb +68 -0
  180. data/lib/rouge/lexers/eiffel.rb +65 -0
  181. data/lib/rouge/lexers/elixir.rb +133 -0
  182. data/lib/rouge/lexers/erb.rb +56 -0
  183. data/lib/rouge/lexers/erlang.rb +118 -0
  184. data/lib/rouge/lexers/factor.rb +302 -0
  185. data/lib/rouge/lexers/fortran.rb +170 -0
  186. data/lib/rouge/lexers/fsharp.rb +118 -0
  187. data/lib/rouge/lexers/gal.rb +50 -0
  188. data/lib/rouge/lexers/gherkin.rb +137 -0
  189. data/lib/rouge/lexers/gherkin/keywords.rb +14 -0
  190. data/lib/rouge/lexers/glsl.rb +135 -0
  191. data/lib/rouge/lexers/go.rb +178 -0
  192. data/lib/rouge/lexers/gradle.rb +37 -0
  193. data/lib/rouge/lexers/graphql.rb +243 -0
  194. data/lib/rouge/lexers/groovy.rb +112 -0
  195. data/lib/rouge/lexers/haml.rb +233 -0
  196. data/lib/rouge/lexers/handlebars.rb +79 -0
  197. data/lib/rouge/lexers/haskell.rb +183 -0
  198. data/lib/rouge/lexers/html.rb +138 -0
  199. data/lib/rouge/lexers/http.rb +80 -0
  200. data/lib/rouge/lexers/hylang.rb +93 -0
  201. data/lib/rouge/lexers/idlang.rb +316 -0
  202. data/lib/rouge/lexers/igorpro.rb +407 -0
  203. data/lib/rouge/lexers/ini.rb +57 -0
  204. data/lib/rouge/lexers/io.rb +68 -0
  205. data/lib/rouge/lexers/irb.rb +66 -0
  206. data/lib/rouge/lexers/java.rb +87 -0
  207. data/lib/rouge/lexers/javascript.rb +269 -0
  208. data/lib/rouge/lexers/jinja.rb +137 -0
  209. data/lib/rouge/lexers/json.rb +29 -0
  210. data/lib/rouge/lexers/json_doc.rb +23 -0
  211. data/lib/rouge/lexers/jsonnet.rb +151 -0
  212. data/lib/rouge/lexers/jsx.rb +102 -0
  213. data/lib/rouge/lexers/julia.rb +172 -0
  214. data/lib/rouge/lexers/kotlin.rb +84 -0
  215. data/lib/rouge/lexers/lasso.rb +217 -0
  216. data/lib/rouge/lexers/lasso/keywords.yml +446 -0
  217. data/lib/rouge/lexers/liquid.rb +287 -0
  218. data/lib/rouge/lexers/literate_coffeescript.rb +33 -0
  219. data/lib/rouge/lexers/literate_haskell.rb +36 -0
  220. data/lib/rouge/lexers/llvm.rb +84 -0
  221. data/lib/rouge/lexers/lua.rb +125 -0
  222. data/lib/rouge/lexers/lua/builtins.rb +22 -0
  223. data/lib/rouge/lexers/make.rb +116 -0
  224. data/lib/rouge/lexers/markdown.rb +154 -0
  225. data/lib/rouge/lexers/matlab.rb +75 -0
  226. data/lib/rouge/lexers/matlab/builtins.rb +11 -0
  227. data/lib/rouge/lexers/moonscript.rb +114 -0
  228. data/lib/rouge/lexers/mosel.rb +231 -0
  229. data/lib/rouge/lexers/mxml.rb +68 -0
  230. data/lib/rouge/lexers/nasm.rb +203 -0
  231. data/lib/rouge/lexers/nginx.rb +71 -0
  232. data/lib/rouge/lexers/nim.rb +152 -0
  233. data/lib/rouge/lexers/objective_c.rb +208 -0
  234. data/lib/rouge/lexers/ocaml.rb +100 -0
  235. data/lib/rouge/lexers/pascal.rb +66 -0
  236. data/lib/rouge/lexers/perl.rb +197 -0
  237. data/lib/rouge/lexers/php.rb +193 -0
  238. data/lib/rouge/lexers/php/builtins.rb +194 -0
  239. data/lib/rouge/lexers/plain_text.rb +26 -0
  240. data/lib/rouge/lexers/plist.rb +49 -0
  241. data/lib/rouge/lexers/pony.rb +93 -0
  242. data/lib/rouge/lexers/powershell.rb +132 -0
  243. data/lib/rouge/lexers/praat.rb +350 -0
  244. data/lib/rouge/lexers/prolog.rb +64 -0
  245. data/lib/rouge/lexers/prometheus.rb +121 -0
  246. data/lib/rouge/lexers/properties.rb +55 -0
  247. data/lib/rouge/lexers/protobuf.rb +70 -0
  248. data/lib/rouge/lexers/puppet.rb +128 -0
  249. data/lib/rouge/lexers/python.rb +231 -0
  250. data/lib/rouge/lexers/q.rb +124 -0
  251. data/lib/rouge/lexers/qml.rb +73 -0
  252. data/lib/rouge/lexers/r.rb +89 -0
  253. data/lib/rouge/lexers/racket.rb +542 -0
  254. data/lib/rouge/lexers/ruby.rb +437 -0
  255. data/lib/rouge/lexers/rust.rb +192 -0
  256. data/lib/rouge/lexers/sass.rb +74 -0
  257. data/lib/rouge/lexers/sass/common.rb +180 -0
  258. data/lib/rouge/lexers/scala.rb +142 -0
  259. data/lib/rouge/lexers/scheme.rb +112 -0
  260. data/lib/rouge/lexers/scss.rb +34 -0
  261. data/lib/rouge/lexers/sed.rb +172 -0
  262. data/lib/rouge/lexers/shell.rb +180 -0
  263. data/lib/rouge/lexers/sieve.rb +96 -0
  264. data/lib/rouge/lexers/slim.rb +228 -0
  265. data/lib/rouge/lexers/smalltalk.rb +116 -0
  266. data/lib/rouge/lexers/smarty.rb +91 -0
  267. data/lib/rouge/lexers/sml.rb +348 -0
  268. data/lib/rouge/lexers/sql.rb +140 -0
  269. data/lib/rouge/lexers/swift.rb +161 -0
  270. data/lib/rouge/lexers/tap.rb +91 -0
  271. data/lib/rouge/lexers/tcl.rb +192 -0
  272. data/lib/rouge/lexers/tex.rb +69 -0
  273. data/lib/rouge/lexers/toml.rb +71 -0
  274. data/lib/rouge/lexers/tsx.rb +19 -0
  275. data/lib/rouge/lexers/tulip.rb +107 -0
  276. data/lib/rouge/lexers/turtle.rb +72 -0
  277. data/lib/rouge/lexers/twig.rb +39 -0
  278. data/lib/rouge/lexers/typescript.rb +22 -0
  279. data/lib/rouge/lexers/typescript/common.rb +33 -0
  280. data/lib/rouge/lexers/vala.rb +77 -0
  281. data/lib/rouge/lexers/vb.rb +164 -0
  282. data/lib/rouge/lexers/verilog.rb +164 -0
  283. data/lib/rouge/lexers/vhdl.rb +97 -0
  284. data/lib/rouge/lexers/viml.rb +101 -0
  285. data/lib/rouge/lexers/viml/keywords.rb +12 -0
  286. data/lib/rouge/lexers/vue.rb +124 -0
  287. data/lib/rouge/lexers/wollok.rb +107 -0
  288. data/lib/rouge/lexers/xml.rb +59 -0
  289. data/lib/rouge/lexers/yaml.rb +373 -0
  290. data/lib/rouge/plugins/redcarpet.rb +30 -0
  291. data/lib/rouge/regex_lexer.rb +441 -0
  292. data/lib/rouge/template_lexer.rb +20 -0
  293. data/lib/rouge/text_analyzer.rb +48 -0
  294. data/lib/rouge/theme.rb +213 -0
  295. data/lib/rouge/themes/base16.rb +130 -0
  296. data/lib/rouge/themes/colorful.rb +67 -0
  297. data/lib/rouge/themes/github.rb +71 -0
  298. data/lib/rouge/themes/gruvbox.rb +167 -0
  299. data/lib/rouge/themes/igor_pro.rb +20 -0
  300. data/lib/rouge/themes/molokai.rb +82 -0
  301. data/lib/rouge/themes/monokai.rb +92 -0
  302. data/lib/rouge/themes/monokai_sublime.rb +90 -0
  303. data/lib/rouge/themes/pastie.rb +69 -0
  304. data/lib/rouge/themes/thankful_eyes.rb +74 -0
  305. data/lib/rouge/themes/tulip.rb +69 -0
  306. data/lib/rouge/token.rb +182 -0
  307. data/lib/rouge/util.rb +101 -0
  308. data/lib/rouge/version.rb +7 -0
  309. data/lib/rougegal.rb +80 -0
  310. data/rougegal.gemspec +18 -0
  311. metadata +356 -0
@@ -0,0 +1,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,124 @@
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 self.analyze_text(text)
19
+ return 0
20
+ end
21
+
22
+ def lookup_lang(lang)
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[2])
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,107 @@
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
+ def self.analyze_text(_text)
12
+ 0.3
13
+ end
14
+
15
+ keywords = %w(new super return if else var const override constructor)
16
+
17
+ entity_name = /[a-zA-Z][a-zA-Z0-9]*/
18
+ variable_naming = /_?#{entity_name}/
19
+
20
+ entities = []
21
+
22
+ state :whitespaces_and_comments do
23
+ rule /\s+/m, Text::Whitespace
24
+ rule /$+/m, Text::Whitespace
25
+ rule %r(//.*$), Comment::Single
26
+ rule %r(/\*(.|\s)*?\*/)m, Comment::Multiline
27
+ end
28
+
29
+ state :root do
30
+ mixin :whitespaces_and_comments
31
+ rule /(import)(.+$)/ do
32
+ groups Keyword::Reserved, Text
33
+ end
34
+ rule /(class|object|mixin)/, Keyword::Reserved, :foo
35
+ rule /test|program/, Keyword::Reserved #, :chunk_naming
36
+ rule /(package)(\s+)(#{entity_name})/ do
37
+ groups Keyword::Reserved, Text::Whitespace, Name::Class
38
+ end
39
+ rule /{|}/, Text
40
+ mixin :keywords
41
+ mixin :symbols
42
+ mixin :objects
43
+ end
44
+
45
+ state :foo do
46
+ mixin :whitespaces_and_comments
47
+ rule /inherits|mixed|with|and/, Keyword::Reserved
48
+ rule /#{entity_name}(?=\s*{)/ do |m|
49
+ token Name::Class
50
+ entities << m[0]
51
+ pop!
52
+ end
53
+ rule /#{entity_name}/ do |m|
54
+ token Name::Class
55
+ entities << m[0]
56
+ end
57
+ end
58
+
59
+ state :keywords do
60
+ def any(expressions)
61
+ /#{expressions.map { |keyword| "#{keyword}\\b" }.join('|')}/
62
+ end
63
+
64
+ rule /self\b/, Name::Builtin::Pseudo
65
+ rule any(keywords), Keyword::Reserved
66
+ rule /(method)(\s+)(#{variable_naming})/ do
67
+ groups Keyword::Reserved, Text::Whitespace, Text
68
+ end
69
+ end
70
+
71
+ state :objects do
72
+ rule variable_naming do |m|
73
+ variable = m[0]
74
+ if entities.include?(variable) || ('A'..'Z').cover?(variable[0])
75
+ token Name::Class
76
+ else
77
+ token Keyword::Variable
78
+ end
79
+ end
80
+ rule /\.#{entity_name}/, Text
81
+ mixin :literals
82
+ end
83
+
84
+ state :literals do
85
+ mixin :whitespaces_and_comments
86
+ rule /[0-9]+\.?[0-9]*/, Literal::Number
87
+ rule /"[^"]*"/m, Literal::String
88
+ rule /\[|\#{/, Punctuation, :lists
89
+ end
90
+
91
+ state :lists do
92
+ rule /,/, Punctuation
93
+ rule /]|}/, Punctuation, :pop!
94
+ mixin :objects
95
+ end
96
+
97
+ state :symbols do
98
+ rule /\+\+|--|\+=|-=|\*\*|!/, Operator
99
+ rule /\+|-|\*|\/|%/, Operator
100
+ rule /<=|=>|===|==|<|>/, Operator
101
+ rule /and\b|or\b|not\b/, Operator
102
+ rule /\(|\)|=/, Text
103
+ rule /,/, Punctuation
104
+ end
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,59 @@
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.analyze_text(text)
19
+ return 0.9 if text.doctype?
20
+ return 0.8 if text =~ /\A<\?xml\b/
21
+ start = text[0..1000]
22
+ return 0.6 if start =~ %r(<xml\b)
23
+ return 0.3 if start =~ %r(<.+?>.*?</.+?>)m
24
+ end
25
+
26
+ state :root do
27
+ rule /[^<&]+/, Text
28
+ rule /&\S*?;/, Name::Entity
29
+ rule /<!\[CDATA\[.*?\]\]\>/, Comment::Preproc
30
+ rule /<!--/, Comment, :comment
31
+ rule /<\?.*?\?>/, Comment::Preproc
32
+ rule /<![^>]*>/, Comment::Preproc
33
+
34
+ # open tags
35
+ rule %r(<\s*[\w:.-]+)m, Name::Tag, :tag
36
+
37
+ # self-closing tags
38
+ rule %r(<\s*/\s*[\w:.-]+\s*>)m, Name::Tag
39
+ end
40
+
41
+ state :comment do
42
+ rule /[^-]+/m, Comment
43
+ rule /-->/, Comment, :pop!
44
+ rule /-/, Comment
45
+ end
46
+
47
+ state :tag do
48
+ rule /\s+/m, Text
49
+ rule /[\w.:-]+\s*=/m, Name::Attribute, :attr
50
+ rule %r(/?\s*>), Name::Tag, :pop!
51
+ end
52
+
53
+ state :attr do
54
+ rule /\s+/m, Text
55
+ rule /".*?"|'.*?'|[^\s>]+/m, Str, :pop!
56
+ end
57
+ end
58
+ end
59
+ 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.analyze_text(text)
14
+ # look for the %YAML directive
15
+ return 1 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