pygments.rb 1.2.0 → 2.1.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 (388) hide show
  1. checksums.yaml +5 -5
  2. data/.github/dependabot.yml +13 -0
  3. data/.github/workflows/ci.yml +40 -0
  4. data/.github/workflows/release.yml +24 -0
  5. data/.gitignore +5 -5
  6. data/.rubocop.yml +18 -0
  7. data/CHANGELOG.adoc +132 -0
  8. data/Gemfile +3 -1
  9. data/LICENSE +1 -1
  10. data/README.adoc +160 -0
  11. data/Rakefile +12 -21
  12. data/bench.rb +14 -8
  13. data/{cache-lexers.rb → cache_lexers.rb} +3 -2
  14. data/lexers +0 -0
  15. data/lib/pygments.rb +10 -11
  16. data/lib/pygments/lexer.rb +6 -6
  17. data/lib/pygments/mentos.py +23 -110
  18. data/lib/pygments/popen.rb +196 -275
  19. data/lib/pygments/version.rb +2 -2
  20. data/pygments.rb.gemspec +12 -10
  21. data/test/test_pygments.rb +50 -110
  22. data/vendor/pygments-main/{AUTHORS → Pygments-2.8.0.dist-info/AUTHORS} +26 -3
  23. data/vendor/pygments-main/Pygments-2.8.0.dist-info/INSTALLER +1 -0
  24. data/vendor/pygments-main/{LICENSE → Pygments-2.8.0.dist-info/LICENSE} +1 -1
  25. data/vendor/pygments-main/Pygments-2.8.0.dist-info/METADATA +48 -0
  26. data/vendor/pygments-main/Pygments-2.8.0.dist-info/RECORD +494 -0
  27. data/vendor/pygments-main/Pygments-2.8.0.dist-info/REQUESTED +0 -0
  28. data/vendor/pygments-main/Pygments-2.8.0.dist-info/WHEEL +5 -0
  29. data/vendor/pygments-main/Pygments-2.8.0.dist-info/entry_points.txt +3 -0
  30. data/vendor/pygments-main/Pygments-2.8.0.dist-info/top_level.txt +1 -0
  31. data/vendor/pygments-main/bin/pygmentize +8 -0
  32. data/vendor/pygments-main/pygments/__init__.py +6 -12
  33. data/vendor/pygments-main/pygments/__main__.py +17 -0
  34. data/vendor/pygments-main/pygments/cmdline.py +213 -184
  35. data/vendor/pygments-main/pygments/console.py +6 -10
  36. data/vendor/pygments-main/pygments/filter.py +4 -7
  37. data/vendor/pygments-main/pygments/filters/__init__.py +609 -22
  38. data/vendor/pygments-main/pygments/formatter.py +4 -5
  39. data/vendor/pygments-main/pygments/formatters/__init__.py +10 -10
  40. data/vendor/pygments-main/pygments/formatters/_mapping.py +1 -4
  41. data/vendor/pygments-main/pygments/formatters/bbcode.py +1 -2
  42. data/vendor/pygments-main/pygments/formatters/html.py +242 -139
  43. data/vendor/pygments-main/pygments/formatters/img.py +91 -50
  44. data/vendor/pygments-main/pygments/formatters/irc.py +39 -40
  45. data/vendor/pygments-main/pygments/formatters/latex.py +62 -33
  46. data/vendor/pygments-main/pygments/formatters/other.py +18 -17
  47. data/vendor/pygments-main/pygments/formatters/rtf.py +29 -30
  48. data/vendor/pygments-main/pygments/formatters/svg.py +40 -5
  49. data/vendor/pygments-main/pygments/formatters/terminal.py +25 -32
  50. data/vendor/pygments-main/pygments/formatters/terminal256.py +45 -14
  51. data/vendor/pygments-main/pygments/lexer.py +47 -44
  52. data/vendor/pygments-main/pygments/lexers/__init__.py +29 -17
  53. data/vendor/pygments-main/pygments/lexers/_asy_builtins.py +5 -6
  54. data/vendor/pygments-main/pygments/lexers/_cl_builtins.py +15 -16
  55. data/vendor/pygments-main/pygments/lexers/_cocoa_builtins.py +21 -18
  56. data/vendor/pygments-main/pygments/lexers/_csound_builtins.py +1717 -1339
  57. data/vendor/pygments-main/pygments/lexers/_lasso_builtins.py +1 -2
  58. data/vendor/pygments-main/pygments/lexers/_lua_builtins.py +2 -5
  59. data/vendor/pygments-main/pygments/lexers/_mapping.py +79 -31
  60. data/vendor/pygments-main/pygments/lexers/_mql_builtins.py +2 -3
  61. data/vendor/pygments-main/pygments/lexers/_mysql_builtins.py +1281 -0
  62. data/vendor/pygments-main/pygments/lexers/_openedge_builtins.py +439 -386
  63. data/vendor/pygments-main/pygments/lexers/_php_builtins.py +17 -21
  64. data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +73 -17
  65. data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +2 -3
  66. data/vendor/pygments-main/pygments/lexers/_sourcemod_builtins.py +1 -4
  67. data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +151 -126
  68. data/vendor/pygments-main/pygments/lexers/_stata_builtins.py +96 -58
  69. data/vendor/pygments-main/pygments/lexers/_tsql_builtins.py +1 -2
  70. data/vendor/pygments-main/pygments/lexers/_usd_builtins.py +112 -0
  71. data/vendor/pygments-main/pygments/lexers/_vbscript_builtins.py +279 -0
  72. data/vendor/pygments-main/pygments/lexers/_vim_builtins.py +1 -2
  73. data/vendor/pygments-main/pygments/lexers/actionscript.py +14 -10
  74. data/vendor/pygments-main/pygments/lexers/agile.py +1 -2
  75. data/vendor/pygments-main/pygments/lexers/algebra.py +20 -2
  76. data/vendor/pygments-main/pygments/lexers/ambient.py +2 -3
  77. data/vendor/pygments-main/pygments/lexers/amdgpu.py +48 -0
  78. data/vendor/pygments-main/pygments/lexers/ampl.py +3 -4
  79. data/vendor/pygments-main/pygments/lexers/apl.py +15 -16
  80. data/vendor/pygments-main/pygments/lexers/archetype.py +4 -5
  81. data/vendor/pygments-main/pygments/lexers/arrow.py +116 -0
  82. data/vendor/pygments-main/pygments/lexers/asm.py +440 -77
  83. data/vendor/pygments-main/pygments/lexers/automation.py +7 -2
  84. data/vendor/pygments-main/pygments/lexers/bare.py +103 -0
  85. data/vendor/pygments-main/pygments/lexers/basic.py +168 -7
  86. data/vendor/pygments-main/pygments/lexers/bibtex.py +5 -6
  87. data/vendor/pygments-main/pygments/lexers/boa.py +101 -0
  88. data/vendor/pygments-main/pygments/lexers/business.py +19 -5
  89. data/vendor/pygments-main/pygments/lexers/c_cpp.py +138 -48
  90. data/vendor/pygments-main/pygments/lexers/c_like.py +67 -43
  91. data/vendor/pygments-main/pygments/lexers/capnproto.py +7 -8
  92. data/vendor/pygments-main/pygments/lexers/cddl.py +190 -0
  93. data/vendor/pygments-main/pygments/lexers/chapel.py +25 -16
  94. data/vendor/pygments-main/pygments/lexers/clean.py +135 -245
  95. data/vendor/pygments-main/pygments/lexers/compiled.py +1 -2
  96. data/vendor/pygments-main/pygments/lexers/configs.py +190 -38
  97. data/vendor/pygments-main/pygments/lexers/console.py +1 -2
  98. data/vendor/pygments-main/pygments/lexers/crystal.py +54 -81
  99. data/vendor/pygments-main/pygments/lexers/csound.py +288 -188
  100. data/vendor/pygments-main/pygments/lexers/css.py +28 -23
  101. data/vendor/pygments-main/pygments/lexers/d.py +12 -8
  102. data/vendor/pygments-main/pygments/lexers/dalvik.py +1 -2
  103. data/vendor/pygments-main/pygments/lexers/data.py +240 -98
  104. data/vendor/pygments-main/pygments/lexers/devicetree.py +108 -0
  105. data/vendor/pygments-main/pygments/lexers/diff.py +4 -5
  106. data/vendor/pygments-main/pygments/lexers/dotnet.py +46 -31
  107. data/vendor/pygments-main/pygments/lexers/dsls.py +146 -65
  108. data/vendor/pygments-main/pygments/lexers/dylan.py +16 -19
  109. data/vendor/pygments-main/pygments/lexers/ecl.py +17 -5
  110. data/vendor/pygments-main/pygments/lexers/eiffel.py +2 -3
  111. data/vendor/pygments-main/pygments/lexers/elm.py +5 -6
  112. data/vendor/pygments-main/pygments/lexers/email.py +150 -0
  113. data/vendor/pygments-main/pygments/lexers/erlang.py +29 -33
  114. data/vendor/pygments-main/pygments/lexers/esoteric.py +46 -20
  115. data/vendor/pygments-main/pygments/lexers/ezhil.py +21 -14
  116. data/vendor/pygments-main/pygments/lexers/factor.py +3 -4
  117. data/vendor/pygments-main/pygments/lexers/fantom.py +1 -2
  118. data/vendor/pygments-main/pygments/lexers/felix.py +1 -2
  119. data/vendor/pygments-main/pygments/lexers/floscript.py +82 -0
  120. data/vendor/pygments-main/pygments/lexers/forth.py +41 -41
  121. data/vendor/pygments-main/pygments/lexers/fortran.py +13 -10
  122. data/vendor/pygments-main/pygments/lexers/foxpro.py +2 -3
  123. data/vendor/pygments-main/pygments/lexers/freefem.py +897 -0
  124. data/vendor/pygments-main/pygments/lexers/functional.py +1 -2
  125. data/vendor/pygments-main/pygments/lexers/futhark.py +110 -0
  126. data/vendor/pygments-main/pygments/lexers/gdscript.py +345 -0
  127. data/vendor/pygments-main/pygments/lexers/go.py +2 -3
  128. data/vendor/pygments-main/pygments/lexers/grammar_notation.py +62 -6
  129. data/vendor/pygments-main/pygments/lexers/graph.py +14 -10
  130. data/vendor/pygments-main/pygments/lexers/graphics.py +274 -28
  131. data/vendor/pygments-main/pygments/lexers/graphviz.py +57 -0
  132. data/vendor/pygments-main/pygments/lexers/haskell.py +48 -22
  133. data/vendor/pygments-main/pygments/lexers/haxe.py +8 -9
  134. data/vendor/pygments-main/pygments/lexers/hdl.py +176 -90
  135. data/vendor/pygments-main/pygments/lexers/hexdump.py +1 -2
  136. data/vendor/pygments-main/pygments/lexers/html.py +37 -26
  137. data/vendor/pygments-main/pygments/lexers/idl.py +19 -9
  138. data/vendor/pygments-main/pygments/lexers/igor.py +244 -113
  139. data/vendor/pygments-main/pygments/lexers/inferno.py +2 -3
  140. data/vendor/pygments-main/pygments/lexers/installers.py +1 -2
  141. data/vendor/pygments-main/pygments/lexers/int_fiction.py +40 -16
  142. data/vendor/pygments-main/pygments/lexers/iolang.py +3 -4
  143. data/vendor/pygments-main/pygments/lexers/j.py +4 -5
  144. data/vendor/pygments-main/pygments/lexers/javascript.py +115 -104
  145. data/vendor/pygments-main/pygments/lexers/julia.py +44 -47
  146. data/vendor/pygments-main/pygments/lexers/jvm.py +368 -202
  147. data/vendor/pygments-main/pygments/lexers/lisp.py +887 -810
  148. data/vendor/pygments-main/pygments/lexers/make.py +12 -9
  149. data/vendor/pygments-main/pygments/lexers/markup.py +212 -45
  150. data/vendor/pygments-main/pygments/lexers/math.py +1 -2
  151. data/vendor/pygments-main/pygments/lexers/matlab.py +2705 -88
  152. data/vendor/pygments-main/pygments/lexers/mime.py +225 -0
  153. data/vendor/pygments-main/pygments/lexers/ml.py +203 -15
  154. data/vendor/pygments-main/pygments/lexers/modeling.py +26 -19
  155. data/vendor/pygments-main/pygments/lexers/modula2.py +27 -9
  156. data/vendor/pygments-main/pygments/lexers/monte.py +1 -2
  157. data/vendor/pygments-main/pygments/lexers/mosel.py +447 -0
  158. data/vendor/pygments-main/pygments/lexers/ncl.py +1 -2
  159. data/vendor/pygments-main/pygments/lexers/nimrod.py +4 -5
  160. data/vendor/pygments-main/pygments/lexers/nit.py +1 -2
  161. data/vendor/pygments-main/pygments/lexers/nix.py +1 -2
  162. data/vendor/pygments-main/pygments/lexers/oberon.py +17 -2
  163. data/vendor/pygments-main/pygments/lexers/objective.py +18 -19
  164. data/vendor/pygments-main/pygments/lexers/ooc.py +1 -2
  165. data/vendor/pygments-main/pygments/lexers/other.py +1 -2
  166. data/vendor/pygments-main/pygments/lexers/parasail.py +1 -2
  167. data/vendor/pygments-main/pygments/lexers/parsers.py +47 -83
  168. data/vendor/pygments-main/pygments/lexers/pascal.py +22 -23
  169. data/vendor/pygments-main/pygments/lexers/pawn.py +31 -28
  170. data/vendor/pygments-main/pygments/lexers/perl.py +260 -149
  171. data/vendor/pygments-main/pygments/lexers/php.py +66 -13
  172. data/vendor/pygments-main/pygments/lexers/pointless.py +70 -0
  173. data/vendor/pygments-main/pygments/lexers/pony.py +93 -0
  174. data/vendor/pygments-main/pygments/lexers/praat.py +38 -31
  175. data/vendor/pygments-main/pygments/lexers/prolog.py +38 -39
  176. data/vendor/pygments-main/pygments/lexers/promql.py +182 -0
  177. data/vendor/pygments-main/pygments/lexers/python.py +450 -231
  178. data/vendor/pygments-main/pygments/lexers/qvt.py +6 -7
  179. data/vendor/pygments-main/pygments/lexers/r.py +13 -276
  180. data/vendor/pygments-main/pygments/lexers/rdf.py +232 -40
  181. data/vendor/pygments-main/pygments/lexers/rebol.py +8 -9
  182. data/vendor/pygments-main/pygments/lexers/resource.py +2 -3
  183. data/vendor/pygments-main/pygments/lexers/ride.py +138 -0
  184. data/vendor/pygments-main/pygments/lexers/rnc.py +1 -2
  185. data/vendor/pygments-main/pygments/lexers/roboconf.py +1 -2
  186. data/vendor/pygments-main/pygments/lexers/robotframework.py +23 -32
  187. data/vendor/pygments-main/pygments/lexers/ruby.py +50 -46
  188. data/vendor/pygments-main/pygments/lexers/rust.py +76 -73
  189. data/vendor/pygments-main/pygments/lexers/sas.py +1 -2
  190. data/vendor/pygments-main/pygments/lexers/scdoc.py +82 -0
  191. data/vendor/pygments-main/pygments/lexers/scripting.py +79 -18
  192. data/vendor/pygments-main/pygments/lexers/sgf.py +60 -0
  193. data/vendor/pygments-main/pygments/lexers/shell.py +164 -49
  194. data/vendor/pygments-main/pygments/lexers/sieve.py +68 -0
  195. data/vendor/pygments-main/pygments/lexers/slash.py +184 -0
  196. data/vendor/pygments-main/pygments/lexers/smalltalk.py +2 -3
  197. data/vendor/pygments-main/pygments/lexers/smv.py +3 -4
  198. data/vendor/pygments-main/pygments/lexers/snobol.py +1 -2
  199. data/vendor/pygments-main/pygments/lexers/solidity.py +91 -0
  200. data/vendor/pygments-main/pygments/lexers/special.py +31 -28
  201. data/vendor/pygments-main/pygments/lexers/sql.py +330 -179
  202. data/vendor/pygments-main/pygments/lexers/stata.py +107 -45
  203. data/vendor/pygments-main/pygments/lexers/supercollider.py +8 -4
  204. data/vendor/pygments-main/pygments/lexers/tcl.py +1 -2
  205. data/vendor/pygments-main/pygments/lexers/templates.py +116 -136
  206. data/vendor/pygments-main/pygments/lexers/teraterm.py +334 -0
  207. data/vendor/pygments-main/pygments/lexers/testing.py +6 -7
  208. data/vendor/pygments-main/pygments/lexers/text.py +2 -2
  209. data/vendor/pygments-main/pygments/lexers/textedit.py +6 -7
  210. data/vendor/pygments-main/pygments/lexers/textfmts.py +146 -14
  211. data/vendor/pygments-main/pygments/lexers/theorem.py +74 -56
  212. data/vendor/pygments-main/pygments/lexers/tnt.py +262 -0
  213. data/vendor/pygments-main/pygments/lexers/trafficscript.py +1 -2
  214. data/vendor/pygments-main/pygments/lexers/typoscript.py +4 -12
  215. data/vendor/pygments-main/pygments/lexers/unicon.py +411 -0
  216. data/vendor/pygments-main/pygments/lexers/urbi.py +16 -4
  217. data/vendor/pygments-main/pygments/lexers/usd.py +89 -0
  218. data/vendor/pygments-main/pygments/lexers/varnish.py +4 -5
  219. data/vendor/pygments-main/pygments/lexers/verification.py +13 -11
  220. data/vendor/pygments-main/pygments/lexers/web.py +1 -2
  221. data/vendor/pygments-main/pygments/lexers/webidl.py +298 -0
  222. data/vendor/pygments-main/pygments/lexers/webmisc.py +35 -32
  223. data/vendor/pygments-main/pygments/lexers/whiley.py +5 -6
  224. data/vendor/pygments-main/pygments/lexers/x10.py +2 -3
  225. data/vendor/pygments-main/pygments/lexers/xorg.py +5 -5
  226. data/vendor/pygments-main/pygments/lexers/yang.py +103 -0
  227. data/vendor/pygments-main/pygments/lexers/zig.py +123 -0
  228. data/vendor/pygments-main/pygments/modeline.py +1 -2
  229. data/vendor/pygments-main/pygments/plugin.py +4 -3
  230. data/vendor/pygments-main/pygments/regexopt.py +1 -2
  231. data/vendor/pygments-main/pygments/scanner.py +2 -3
  232. data/vendor/pygments-main/pygments/sphinxext.py +2 -5
  233. data/vendor/pygments-main/pygments/style.py +61 -25
  234. data/vendor/pygments-main/pygments/styles/__init__.py +12 -5
  235. data/vendor/pygments-main/pygments/styles/abap.py +1 -2
  236. data/vendor/pygments-main/pygments/styles/algol.py +1 -2
  237. data/vendor/pygments-main/pygments/styles/algol_nu.py +1 -2
  238. data/vendor/pygments-main/pygments/styles/arduino.py +2 -3
  239. data/vendor/pygments-main/pygments/styles/autumn.py +1 -2
  240. data/vendor/pygments-main/pygments/styles/borland.py +1 -2
  241. data/vendor/pygments-main/pygments/styles/bw.py +1 -2
  242. data/vendor/pygments-main/pygments/styles/colorful.py +1 -2
  243. data/vendor/pygments-main/pygments/styles/default.py +1 -2
  244. data/vendor/pygments-main/pygments/styles/emacs.py +1 -2
  245. data/vendor/pygments-main/pygments/styles/friendly.py +1 -2
  246. data/vendor/pygments-main/pygments/styles/fruity.py +1 -2
  247. data/vendor/pygments-main/pygments/styles/igor.py +1 -2
  248. data/vendor/pygments-main/pygments/styles/inkpot.py +66 -0
  249. data/vendor/pygments-main/pygments/styles/lovelace.py +1 -2
  250. data/vendor/pygments-main/pygments/styles/manni.py +1 -2
  251. data/vendor/pygments-main/pygments/styles/material.py +118 -0
  252. data/vendor/pygments-main/pygments/styles/monokai.py +4 -4
  253. data/vendor/pygments-main/pygments/styles/murphy.py +1 -2
  254. data/vendor/pygments-main/pygments/styles/native.py +1 -2
  255. data/vendor/pygments-main/pygments/styles/paraiso_dark.py +1 -2
  256. data/vendor/pygments-main/pygments/styles/paraiso_light.py +1 -2
  257. data/vendor/pygments-main/pygments/styles/pastie.py +1 -2
  258. data/vendor/pygments-main/pygments/styles/perldoc.py +1 -2
  259. data/vendor/pygments-main/pygments/styles/rainbow_dash.py +1 -2
  260. data/vendor/pygments-main/pygments/styles/rrt.py +1 -2
  261. data/vendor/pygments-main/pygments/styles/sas.py +1 -2
  262. data/vendor/pygments-main/pygments/styles/solarized.py +136 -0
  263. data/vendor/pygments-main/pygments/styles/stata_dark.py +40 -0
  264. data/vendor/pygments-main/pygments/styles/{stata.py → stata_light.py} +14 -16
  265. data/vendor/pygments-main/pygments/styles/tango.py +1 -2
  266. data/vendor/pygments-main/pygments/styles/trac.py +1 -2
  267. data/vendor/pygments-main/pygments/styles/vim.py +1 -2
  268. data/vendor/pygments-main/pygments/styles/vs.py +1 -2
  269. data/vendor/pygments-main/pygments/styles/xcode.py +1 -2
  270. data/vendor/pygments-main/pygments/styles/zenburn.py +80 -0
  271. data/vendor/pygments-main/pygments/token.py +1 -2
  272. data/vendor/pygments-main/pygments/unistring.py +47 -109
  273. data/vendor/pygments-main/pygments/util.py +16 -96
  274. metadata +76 -137
  275. data/CHANGELOG.md +0 -105
  276. data/README.md +0 -121
  277. data/circle.yml +0 -20
  278. data/test/test_data.c +0 -2581
  279. data/test/test_data.py +0 -514
  280. data/test/test_data_generated +0 -2582
  281. data/vendor/custom_lexers/github.py +0 -565
  282. data/vendor/pygments-main/CHANGES +0 -1186
  283. data/vendor/pygments-main/MANIFEST.in +0 -6
  284. data/vendor/pygments-main/Makefile +0 -65
  285. data/vendor/pygments-main/README.rst +0 -39
  286. data/vendor/pygments-main/REVISION +0 -1
  287. data/vendor/pygments-main/TODO +0 -12
  288. data/vendor/pygments-main/doc/Makefile +0 -153
  289. data/vendor/pygments-main/doc/_static/favicon.ico +0 -0
  290. data/vendor/pygments-main/doc/_static/logo_new.png +0 -0
  291. data/vendor/pygments-main/doc/_static/logo_only.png +0 -0
  292. data/vendor/pygments-main/doc/_templates/docssidebar.html +0 -3
  293. data/vendor/pygments-main/doc/_templates/indexsidebar.html +0 -25
  294. data/vendor/pygments-main/doc/_themes/pygments14/layout.html +0 -98
  295. data/vendor/pygments-main/doc/_themes/pygments14/static/bodybg.png +0 -0
  296. data/vendor/pygments-main/doc/_themes/pygments14/static/docbg.png +0 -0
  297. data/vendor/pygments-main/doc/_themes/pygments14/static/listitem.png +0 -0
  298. data/vendor/pygments-main/doc/_themes/pygments14/static/logo.png +0 -0
  299. data/vendor/pygments-main/doc/_themes/pygments14/static/pocoo.png +0 -0
  300. data/vendor/pygments-main/doc/_themes/pygments14/static/pygments14.css_t +0 -401
  301. data/vendor/pygments-main/doc/_themes/pygments14/theme.conf +0 -15
  302. data/vendor/pygments-main/doc/conf.py +0 -241
  303. data/vendor/pygments-main/doc/docs/api.rst +0 -354
  304. data/vendor/pygments-main/doc/docs/authors.rst +0 -4
  305. data/vendor/pygments-main/doc/docs/changelog.rst +0 -1
  306. data/vendor/pygments-main/doc/docs/cmdline.rst +0 -166
  307. data/vendor/pygments-main/doc/docs/filterdevelopment.rst +0 -71
  308. data/vendor/pygments-main/doc/docs/filters.rst +0 -41
  309. data/vendor/pygments-main/doc/docs/formatterdevelopment.rst +0 -169
  310. data/vendor/pygments-main/doc/docs/formatters.rst +0 -48
  311. data/vendor/pygments-main/doc/docs/index.rst +0 -66
  312. data/vendor/pygments-main/doc/docs/integrate.rst +0 -40
  313. data/vendor/pygments-main/doc/docs/java.rst +0 -70
  314. data/vendor/pygments-main/doc/docs/lexerdevelopment.rst +0 -728
  315. data/vendor/pygments-main/doc/docs/lexers.rst +0 -69
  316. data/vendor/pygments-main/doc/docs/moinmoin.rst +0 -39
  317. data/vendor/pygments-main/doc/docs/plugins.rst +0 -93
  318. data/vendor/pygments-main/doc/docs/quickstart.rst +0 -205
  319. data/vendor/pygments-main/doc/docs/rstdirective.rst +0 -22
  320. data/vendor/pygments-main/doc/docs/styles.rst +0 -201
  321. data/vendor/pygments-main/doc/docs/tokens.rst +0 -372
  322. data/vendor/pygments-main/doc/docs/unicode.rst +0 -58
  323. data/vendor/pygments-main/doc/download.rst +0 -41
  324. data/vendor/pygments-main/doc/faq.rst +0 -139
  325. data/vendor/pygments-main/doc/index.rst +0 -54
  326. data/vendor/pygments-main/doc/languages.rst +0 -154
  327. data/vendor/pygments-main/doc/make.bat +0 -190
  328. data/vendor/pygments-main/doc/pygmentize.1 +0 -94
  329. data/vendor/pygments-main/external/autopygmentize +0 -101
  330. data/vendor/pygments-main/external/lasso-builtins-generator-9.lasso +0 -162
  331. data/vendor/pygments-main/external/markdown-processor.py +0 -67
  332. data/vendor/pygments-main/external/moin-parser.py +0 -112
  333. data/vendor/pygments-main/external/pygments.bashcomp +0 -38
  334. data/vendor/pygments-main/external/rst-directive.py +0 -82
  335. data/vendor/pygments-main/pygmentize +0 -8
  336. data/vendor/pygments-main/pygments/lexers/github.py +0 -565
  337. data/vendor/pygments-main/requirements.txt +0 -5
  338. data/vendor/pygments-main/scripts/check_sources.py +0 -211
  339. data/vendor/pygments-main/scripts/debug_lexer.py +0 -246
  340. data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +0 -33
  341. data/vendor/pygments-main/scripts/epydoc.css +0 -280
  342. data/vendor/pygments-main/scripts/get_vimkw.py +0 -74
  343. data/vendor/pygments-main/scripts/pylintrc +0 -301
  344. data/vendor/pygments-main/scripts/vim2pygments.py +0 -935
  345. data/vendor/pygments-main/setup.cfg +0 -10
  346. data/vendor/pygments-main/setup.py +0 -77
  347. data/vendor/pygments-main/tox.ini +0 -7
  348. data/vendor/simplejson/.gitignore +0 -10
  349. data/vendor/simplejson/.travis.yml +0 -5
  350. data/vendor/simplejson/CHANGES.txt +0 -291
  351. data/vendor/simplejson/LICENSE.txt +0 -19
  352. data/vendor/simplejson/MANIFEST.in +0 -5
  353. data/vendor/simplejson/README.rst +0 -19
  354. data/vendor/simplejson/conf.py +0 -179
  355. data/vendor/simplejson/index.rst +0 -628
  356. data/vendor/simplejson/scripts/make_docs.py +0 -18
  357. data/vendor/simplejson/setup.py +0 -104
  358. data/vendor/simplejson/simplejson/__init__.py +0 -510
  359. data/vendor/simplejson/simplejson/_speedups.c +0 -2745
  360. data/vendor/simplejson/simplejson/decoder.py +0 -425
  361. data/vendor/simplejson/simplejson/encoder.py +0 -567
  362. data/vendor/simplejson/simplejson/ordered_dict.py +0 -119
  363. data/vendor/simplejson/simplejson/scanner.py +0 -77
  364. data/vendor/simplejson/simplejson/tests/__init__.py +0 -67
  365. data/vendor/simplejson/simplejson/tests/test_bigint_as_string.py +0 -55
  366. data/vendor/simplejson/simplejson/tests/test_check_circular.py +0 -30
  367. data/vendor/simplejson/simplejson/tests/test_decimal.py +0 -66
  368. data/vendor/simplejson/simplejson/tests/test_decode.py +0 -83
  369. data/vendor/simplejson/simplejson/tests/test_default.py +0 -9
  370. data/vendor/simplejson/simplejson/tests/test_dump.py +0 -67
  371. data/vendor/simplejson/simplejson/tests/test_encode_basestring_ascii.py +0 -46
  372. data/vendor/simplejson/simplejson/tests/test_encode_for_html.py +0 -32
  373. data/vendor/simplejson/simplejson/tests/test_errors.py +0 -34
  374. data/vendor/simplejson/simplejson/tests/test_fail.py +0 -91
  375. data/vendor/simplejson/simplejson/tests/test_float.py +0 -19
  376. data/vendor/simplejson/simplejson/tests/test_indent.py +0 -86
  377. data/vendor/simplejson/simplejson/tests/test_item_sort_key.py +0 -20
  378. data/vendor/simplejson/simplejson/tests/test_namedtuple.py +0 -121
  379. data/vendor/simplejson/simplejson/tests/test_pass1.py +0 -76
  380. data/vendor/simplejson/simplejson/tests/test_pass2.py +0 -14
  381. data/vendor/simplejson/simplejson/tests/test_pass3.py +0 -20
  382. data/vendor/simplejson/simplejson/tests/test_recursion.py +0 -67
  383. data/vendor/simplejson/simplejson/tests/test_scanstring.py +0 -117
  384. data/vendor/simplejson/simplejson/tests/test_separators.py +0 -42
  385. data/vendor/simplejson/simplejson/tests/test_speedups.py +0 -20
  386. data/vendor/simplejson/simplejson/tests/test_tuple.py +0 -49
  387. data/vendor/simplejson/simplejson/tests/test_unicode.py +0 -109
  388. data/vendor/simplejson/simplejson/tool.py +0 -39
@@ -1,11 +1,10 @@
1
- # -*- coding: utf-8 -*-
2
1
  """
3
2
  pygments.lexers.compiled
4
3
  ~~~~~~~~~~~~~~~~~~~~~~~~
5
4
 
6
5
  Just export lexer classes previously contained in this module.
7
6
 
8
- :copyright: Copyright 2006-2017 by the Pygments team, see AUTHORS.
7
+ :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
9
8
  :license: BSD, see LICENSE for details.
10
9
  """
11
10
 
@@ -1,11 +1,10 @@
1
- # -*- coding: utf-8 -*-
2
1
  """
3
2
  pygments.lexers.configs
4
3
  ~~~~~~~~~~~~~~~~~~~~~~~
5
4
 
6
5
  Lexers for configuration file formats.
7
6
 
8
- :copyright: Copyright 2006-2017 by the Pygments team, see AUTHORS.
7
+ :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
9
8
  :license: BSD, see LICENSE for details.
10
9
  """
11
10
 
@@ -13,14 +12,16 @@ import re
13
12
 
14
13
  from pygments.lexer import RegexLexer, default, words, bygroups, include, using
15
14
  from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
16
- Number, Punctuation, Whitespace, Literal
15
+ Number, Punctuation, Whitespace, Literal, Generic
17
16
  from pygments.lexers.shell import BashLexer
17
+ from pygments.lexers.data import JsonLexer
18
18
 
19
19
  __all__ = ['IniLexer', 'RegeditLexer', 'PropertiesLexer', 'KconfigLexer',
20
20
  'Cfengine3Lexer', 'ApacheConfLexer', 'SquidConfLexer',
21
21
  'NginxConfLexer', 'LighttpdConfLexer', 'DockerLexer',
22
22
  'TerraformLexer', 'TermcapLexer', 'TerminfoLexer',
23
- 'PkgConfigLexer', 'PacmanConfLexer']
23
+ 'PkgConfigLexer', 'PacmanConfLexer', 'AugeasLexer', 'TOMLLexer',
24
+ 'SingularityLexer']
24
25
 
25
26
 
26
27
  class IniLexer(RegexLexer):
@@ -38,7 +39,7 @@ class IniLexer(RegexLexer):
38
39
  (r'\s+', Text),
39
40
  (r'[;#].*', Comment.Single),
40
41
  (r'\[.*?\]$', Keyword),
41
- (r'(.*?)([ \t]*)(=)([ \t]*)(.*(?:\n[ \t].+)*)',
42
+ (r'(.*?)([ \t]*)(=)([ \t]*)([^\t\n]*)',
42
43
  bygroups(Name.Attribute, Text, Operator, Text, String)),
43
44
  # standalone option, supported by some INI parsers
44
45
  (r'(.+?)$', Name.Attribute),
@@ -154,7 +155,7 @@ class KconfigLexer(RegexLexer):
154
155
  name = 'Kconfig'
155
156
  aliases = ['kconfig', 'menuconfig', 'linux-config', 'kernel-config']
156
157
  # Adjust this if new kconfig file names appear in your environment
157
- filenames = ['Kconfig', '*Config.in*', 'external.in*',
158
+ filenames = ['Kconfig*', '*Config.in*', 'external.in*',
158
159
  'standard-modules.in']
159
160
  mimetypes = ['text/x-kconfig']
160
161
  # No re.MULTILINE, indentation-aware help text needs line-by-line handling
@@ -299,11 +300,12 @@ class ApacheConfLexer(RegexLexer):
299
300
  tokens = {
300
301
  'root': [
301
302
  (r'\s+', Text),
302
- (r'(#.*?)$', Comment),
303
- (r'(<[^\s>]+)(?:(\s+)(.*?))?(>)',
303
+ (r'#(.*\\\n)+.*$|(#.*?)$', Comment),
304
+ (r'(<[^\s>/][^\s>]*)(?:(\s+)(.*))?(>)',
304
305
  bygroups(Name.Tag, Text, String, Name.Tag)),
305
- (r'([a-z]\w*)(\s+)',
306
- bygroups(Name.Builtin, Text), 'value'),
306
+ (r'(</[^\s>]+)(>)',
307
+ bygroups(Name.Tag, Name.Tag)),
308
+ (r'[a-z]\w*', Name.Builtin, 'value'),
307
309
  (r'\.+', Text),
308
310
  ],
309
311
  'value': [
@@ -313,12 +315,12 @@ class ApacheConfLexer(RegexLexer):
313
315
  (r'[^\S\n]+', Text),
314
316
  (r'\d+\.\d+\.\d+\.\d+(?:/\d+)?', Number),
315
317
  (r'\d+', Number),
316
- (r'/([a-z0-9][\w./-]+)', String.Other),
318
+ (r'/([*a-z0-9][*\w./-]+)', String.Other),
317
319
  (r'(on|off|none|any|all|double|email|dns|min|minimal|'
318
320
  r'os|productonly|full|emerg|alert|crit|error|warn|'
319
321
  r'notice|info|debug|registry|script|inetd|standalone|'
320
322
  r'user|group)\b', Keyword),
321
- (r'"([^"\\]*(?:\\.[^"\\]*)*)"', String.Double),
323
+ (r'"([^"\\]*(?:\\(.|\n)[^"\\]*)*)"', String.Double),
322
324
  (r'[^\s"\\]+', Text)
323
325
  ],
324
326
  }
@@ -539,20 +541,27 @@ class DockerLexer(RegexLexer):
539
541
  filenames = ['Dockerfile', '*.docker']
540
542
  mimetypes = ['text/x-dockerfile-config']
541
543
 
542
- _keywords = (r'(?:FROM|MAINTAINER|CMD|EXPOSE|ENV|ADD|ENTRYPOINT|'
543
- r'VOLUME|WORKDIR)')
544
-
544
+ _keywords = (r'(?:MAINTAINER|EXPOSE|WORKDIR|USER|STOPSIGNAL)')
545
+ _bash_keywords = (r'(?:RUN|CMD|ENTRYPOINT|ENV|ARG|LABEL|ADD|COPY)')
546
+ _lb = r'(?:\s*\\?\s*)' # dockerfile line break regex
545
547
  flags = re.IGNORECASE | re.MULTILINE
546
548
 
547
549
  tokens = {
548
550
  'root': [
549
- (r'^(ONBUILD)(\s+)(%s)\b' % (_keywords,),
550
- bygroups(Name.Keyword, Whitespace, Keyword)),
551
- (r'^(%s)\b(.*)' % (_keywords,), bygroups(Keyword, String)),
552
551
  (r'#.*', Comment),
553
- (r'RUN', Keyword), # Rest of line falls through
552
+ (r'(FROM)([ \t]*)(\S*)([ \t]*)(?:(AS)([ \t]*)(\S*))?',
553
+ bygroups(Keyword, Text, String, Text, Keyword, Text, String)),
554
+ (r'(ONBUILD)(%s)' % (_lb,), bygroups(Keyword, using(BashLexer))),
555
+ (r'(HEALTHCHECK)((%s--\w+=\w+%s)*)' % (_lb, _lb),
556
+ bygroups(Keyword, using(BashLexer))),
557
+ (r'(VOLUME|ENTRYPOINT|CMD|SHELL)(%s)(\[.*?\])' % (_lb,),
558
+ bygroups(Keyword, using(BashLexer), using(JsonLexer))),
559
+ (r'(LABEL|ENV|ARG)((%s\w+=\w+%s)*)' % (_lb, _lb),
560
+ bygroups(Keyword, using(BashLexer))),
561
+ (r'(%s|VOLUME)\b(.*)' % (_keywords), bygroups(Keyword, String)),
562
+ (r'(%s)' % (_bash_keywords,), Keyword),
554
563
  (r'(.*\\\n)*.+', using(BashLexer)),
555
- ],
564
+ ]
556
565
  }
557
566
 
558
567
 
@@ -568,30 +577,35 @@ class TerraformLexer(RegexLexer):
568
577
  filenames = ['*.tf']
569
578
  mimetypes = ['application/x-tf', 'application/x-terraform']
570
579
 
580
+ embedded_keywords = ('ingress', 'egress', 'listener', 'default',
581
+ 'connection', 'alias', 'terraform', 'tags', 'vars',
582
+ 'config', 'lifecycle', 'timeouts')
583
+
571
584
  tokens = {
572
585
  'root': [
573
- include('string'),
574
- include('punctuation'),
575
- include('curly'),
576
- include('basic'),
577
- include('whitespace'),
578
- (r'[0-9]+', Number),
586
+ include('string'),
587
+ include('punctuation'),
588
+ include('curly'),
589
+ include('basic'),
590
+ include('whitespace'),
591
+ (r'[0-9]+', Number),
579
592
  ],
580
593
  'basic': [
581
- (words(('true', 'false'), prefix=r'\b', suffix=r'\b'), Keyword.Type),
582
- (r'\s*/\*', Comment.Multiline, 'comment'),
583
- (r'\s*#.*\n', Comment.Single),
584
- (r'(.*?)(\s*)(=)', bygroups(Name.Attribute, Text, Operator)),
585
- (words(('variable', 'resource', 'provider', 'provisioner', 'module'),
586
- prefix=r'\b', suffix=r'\b'), Keyword.Reserved, 'function'),
587
- (words(('ingress', 'egress', 'listener', 'default', 'connection', 'alias'),
588
- prefix=r'\b', suffix=r'\b'), Keyword.Declaration),
589
- ('\$\{', String.Interpol, 'var_builtin'),
594
+ (words(('true', 'false'), prefix=r'\b', suffix=r'\b'), Keyword.Type),
595
+ (r'\s*/\*', Comment.Multiline, 'comment'),
596
+ (r'\s*#.*\n', Comment.Single),
597
+ (r'(.*?)(\s*)(=)', bygroups(Name.Attribute, Text, Operator)),
598
+ (words(('variable', 'resource', 'provider', 'provisioner', 'module',
599
+ 'backend', 'data', 'output'), prefix=r'\b', suffix=r'\b'),
600
+ Keyword.Reserved, 'function'),
601
+ (words(embedded_keywords, prefix=r'\b', suffix=r'\b'),
602
+ Keyword.Declaration),
603
+ (r'\$\{', String.Interpol, 'var_builtin'),
590
604
  ],
591
605
  'function': [
592
- (r'(\s+)(".*")(\s+)', bygroups(Text, String, Text)),
593
- include('punctuation'),
594
- include('curly'),
606
+ (r'(\s+)(".*")(\s+)', bygroups(Text, String, Text)),
607
+ include('punctuation'),
608
+ include('curly'),
595
609
  ],
596
610
  'var_builtin': [
597
611
  (r'\$\{', String.Interpol, '#push'),
@@ -831,3 +845,141 @@ class PacmanConfLexer(RegexLexer):
831
845
  (r'.', Text),
832
846
  ],
833
847
  }
848
+
849
+
850
+ class AugeasLexer(RegexLexer):
851
+ """
852
+ Lexer for `Augeas <http://augeas.net>`_.
853
+
854
+ .. versionadded:: 2.4
855
+ """
856
+ name = 'Augeas'
857
+ aliases = ['augeas']
858
+ filenames = ['*.aug']
859
+
860
+ tokens = {
861
+ 'root': [
862
+ (r'(module)(\s*)([^\s=]+)', bygroups(Keyword.Namespace, Text, Name.Namespace)),
863
+ (r'(let)(\s*)([^\s=]+)', bygroups(Keyword.Declaration, Text, Name.Variable)),
864
+ (r'(del|store|value|counter|seq|key|label|autoload|incl|excl|transform|test|get|put)(\s+)', bygroups(Name.Builtin, Text)),
865
+ (r'(\()([^:]+)(\:)(unit|string|regexp|lens|tree|filter)(\))', bygroups(Punctuation, Name.Variable, Punctuation, Keyword.Type, Punctuation)),
866
+ (r'\(\*', Comment.Multiline, 'comment'),
867
+ (r'[*+\-.;=?|]', Operator),
868
+ (r'[()\[\]{}]', Operator),
869
+ (r'"', String.Double, 'string'),
870
+ (r'\/', String.Regex, 'regex'),
871
+ (r'([A-Z]\w*)(\.)(\w+)', bygroups(Name.Namespace, Punctuation, Name.Variable)),
872
+ (r'.', Name.Variable),
873
+ (r'\s', Text),
874
+ ],
875
+ 'string': [
876
+ (r'\\.', String.Escape),
877
+ (r'[^"]', String.Double),
878
+ (r'"', String.Double, '#pop'),
879
+ ],
880
+ 'regex': [
881
+ (r'\\.', String.Escape),
882
+ (r'[^/]', String.Regex),
883
+ (r'\/', String.Regex, '#pop'),
884
+ ],
885
+ 'comment': [
886
+ (r'[^*)]', Comment.Multiline),
887
+ (r'\(\*', Comment.Multiline, '#push'),
888
+ (r'\*\)', Comment.Multiline, '#pop'),
889
+ (r'[)*]', Comment.Multiline)
890
+ ],
891
+ }
892
+
893
+
894
+ class TOMLLexer(RegexLexer):
895
+ """
896
+ Lexer for `TOML <https://github.com/toml-lang/toml>`_, a simple language
897
+ for config files.
898
+
899
+ .. versionadded:: 2.4
900
+ """
901
+
902
+ name = 'TOML'
903
+ aliases = ['toml']
904
+ filenames = ['*.toml', 'Pipfile', 'poetry.lock']
905
+
906
+ tokens = {
907
+ 'root': [
908
+
909
+ # Basics, comments, strings
910
+ (r'\s+', Text),
911
+ (r'#.*?$', Comment.Single),
912
+ # Basic string
913
+ (r'"(\\\\|\\[^\\]|[^"\\])*"', String),
914
+ # Literal string
915
+ (r'\'\'\'(.*)\'\'\'', String),
916
+ (r'\'[^\']*\'', String),
917
+ (r'(true|false)$', Keyword.Constant),
918
+ (r'[a-zA-Z_][\w\-]*', Name),
919
+
920
+ (r'\[.*?\]$', Keyword),
921
+ # Datetime
922
+ # TODO this needs to be expanded, as TOML is rather flexible:
923
+ # https://github.com/toml-lang/toml#offset-date-time
924
+ (r'\d{4}-\d{2}-\d{2}(?:T| )\d{2}:\d{2}:\d{2}(?:Z|[-+]\d{2}:\d{2})', Number.Integer),
925
+
926
+ # Numbers
927
+ (r'(\d+\.\d*|\d*\.\d+)([eE][+-]?[0-9]+)?j?', Number.Float),
928
+ (r'\d+[eE][+-]?[0-9]+j?', Number.Float),
929
+ # Handle +-inf, +-infinity, +-nan
930
+ (r'[+-]?(?:(inf(?:inity)?)|nan)', Number.Float),
931
+ (r'[+-]?\d+', Number.Integer),
932
+
933
+ # Punctuation
934
+ (r'[]{}:(),;[]', Punctuation),
935
+ (r'\.', Punctuation),
936
+
937
+ # Operators
938
+ (r'=', Operator)
939
+
940
+ ]
941
+ }
942
+
943
+
944
+ class SingularityLexer(RegexLexer):
945
+ """
946
+ Lexer for `Singularity definition files
947
+ <https://www.sylabs.io/guides/3.0/user-guide/definition_files.html>`_.
948
+
949
+ .. versionadded:: 2.6
950
+ """
951
+
952
+ name = 'Singularity'
953
+ aliases = ['singularity']
954
+ filenames = ['*.def', 'Singularity']
955
+ flags = re.IGNORECASE | re.MULTILINE | re.DOTALL
956
+
957
+ _headers = r'^(\s*)(bootstrap|from|osversion|mirrorurl|include|registry|namespace|includecmd)(:)'
958
+ _section = r'^%(?:pre|post|setup|environment|help|labels|test|runscript|files|startscript)\b'
959
+ _appsect = r'^%app(?:install|help|run|labels|env|test|files)\b'
960
+
961
+ tokens = {
962
+ 'root': [
963
+ (_section, Generic.Heading, 'script'),
964
+ (_appsect, Generic.Heading, 'script'),
965
+ (_headers, bygroups(Text, Keyword, Text)),
966
+ (r'\s*#.*?\n', Comment),
967
+ (r'\b(([0-9]+\.?[0-9]*)|(\.[0-9]+))\b', Number),
968
+ (r'(?!^\s*%).', Text),
969
+ ],
970
+ 'script': [
971
+ (r'(.+?(?=^\s*%))|(.*)', using(BashLexer), '#pop'),
972
+ ],
973
+ }
974
+
975
+ def analyse_text(text):
976
+ """This is a quite simple script file, but there are a few keywords
977
+ which seem unique to this language."""
978
+ result = 0
979
+ if re.search(r'\b(?:osversion|includecmd|mirrorurl)\b', text, re.IGNORECASE):
980
+ result += 0.5
981
+
982
+ if re.search(SingularityLexer._section[1:], text):
983
+ result += 0.49
984
+
985
+ return result
@@ -1,11 +1,10 @@
1
- # -*- coding: utf-8 -*-
2
1
  """
3
2
  pygments.lexers.console
4
3
  ~~~~~~~~~~~~~~~~~~~~~~~
5
4
 
6
5
  Lexers for misc console output.
7
6
 
8
- :copyright: Copyright 2006-2017 by the Pygments team, see AUTHORS.
7
+ :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
9
8
  :license: BSD, see LICENSE for details.
10
9
  """
11
10
 
@@ -1,11 +1,10 @@
1
- # -*- coding: utf-8 -*-
2
1
  """
3
2
  pygments.lexers.crystal
4
3
  ~~~~~~~~~~~~~~~~~~~~~~~
5
4
 
6
5
  Lexer for Crystal.
7
6
 
8
- :copyright: Copyright 2006-2017 by the Pygments team, see AUTHORS.
7
+ :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
9
8
  :license: BSD, see LICENSE for details.
10
9
  """
11
10
 
@@ -57,9 +56,11 @@ class CrystalLexer(ExtendedRegexLexer):
57
56
 
58
57
  ctx.pos = match.start(5)
59
58
  ctx.end = match.end(5)
60
- # this may find other heredocs
61
- for i, t, v in self.get_tokens_unprocessed(context=ctx):
62
- yield i, t, v
59
+ # this may find other heredocs, so limit the recursion depth
60
+ if len(heredocstack) < 100:
61
+ yield from self.get_tokens_unprocessed(context=ctx)
62
+ else:
63
+ yield ctx.pos, String.Heredoc, match.group(5)
63
64
  ctx.pos = match.end()
64
65
 
65
66
  if outermost:
@@ -87,27 +88,11 @@ class CrystalLexer(ExtendedRegexLexer):
87
88
  del heredocstack[:]
88
89
 
89
90
  def gen_crystalstrings_rules():
90
- def intp_regex_callback(self, match, ctx):
91
- yield match.start(1), String.Regex, match.group(1) # begin
92
- nctx = LexerContext(match.group(3), 0, ['interpolated-regex'])
93
- for i, t, v in self.get_tokens_unprocessed(context=nctx):
94
- yield match.start(3)+i, t, v
95
- yield match.start(4), String.Regex, match.group(4) # end[imsx]*
96
- ctx.pos = match.end()
97
-
98
- def intp_string_callback(self, match, ctx):
99
- yield match.start(1), String.Other, match.group(1)
100
- nctx = LexerContext(match.group(3), 0, ['interpolated-string'])
101
- for i, t, v in self.get_tokens_unprocessed(context=nctx):
102
- yield match.start(3)+i, t, v
103
- yield match.start(4), String.Other, match.group(4) # end
104
- ctx.pos = match.end()
105
-
106
91
  states = {}
107
92
  states['strings'] = [
108
- (r'\:@{0,2}[a-zA-Z_]\w*[!?]?', String.Symbol),
109
- (words(CRYSTAL_OPERATORS, prefix=r'\:@{0,2}'), String.Symbol),
110
- (r":'(\\\\|\\'|[^'])*'", String.Symbol),
93
+ (r'\:\w+[!?]?', String.Symbol),
94
+ (words(CRYSTAL_OPERATORS, prefix=r'\:'), String.Symbol),
95
+ (r":'(\\\\|\\[^\\]|[^'\\])*'", String.Symbol),
111
96
  # This allows arbitrary text after '\ for simplicity
112
97
  (r"'(\\\\|\\'|[^']|\\[^'\\]+)'", String.Char),
113
98
  (r':"', String.Symbol, 'simple-sym'),
@@ -128,35 +113,42 @@ class CrystalLexer(ExtendedRegexLexer):
128
113
  (end, ttype, '#pop'),
129
114
  ]
130
115
 
131
- # braced quoted strings
116
+ # https://crystal-lang.org/docs/syntax_and_semantics/literals/string.html#percent-string-literals
132
117
  for lbrace, rbrace, bracecc, name in \
133
118
  ('\\{', '\\}', '{}', 'cb'), \
134
119
  ('\\[', '\\]', '\\[\\]', 'sb'), \
135
120
  ('\\(', '\\)', '()', 'pa'), \
136
- ('<', '>', '<>', 'ab'):
121
+ ('<', '>', '<>', 'ab'), \
122
+ ('\\|', '\\|', '\\|', 'pi'):
137
123
  states[name+'-intp-string'] = [
138
- (r'\\[' + lbrace + ']', String.Other),
124
+ (r'\\' + lbrace, String.Other),
125
+ ] + (lbrace != rbrace) * [
139
126
  (lbrace, String.Other, '#push'),
127
+ ] + [
140
128
  (rbrace, String.Other, '#pop'),
141
129
  include('string-intp-escaped'),
142
130
  (r'[\\#' + bracecc + ']', String.Other),
143
131
  (r'[^\\#' + bracecc + ']+', String.Other),
144
132
  ]
145
- states['strings'].append((r'%' + lbrace, String.Other,
133
+ states['strings'].append((r'%Q?' + lbrace, String.Other,
146
134
  name+'-intp-string'))
147
135
  states[name+'-string'] = [
148
136
  (r'\\[\\' + bracecc + ']', String.Other),
137
+ ] + (lbrace != rbrace) * [
149
138
  (lbrace, String.Other, '#push'),
139
+ ] + [
150
140
  (rbrace, String.Other, '#pop'),
151
141
  (r'[\\#' + bracecc + ']', String.Other),
152
142
  (r'[^\\#' + bracecc + ']+', String.Other),
153
143
  ]
154
- # http://crystal-lang.org/docs/syntax_and_semantics/literals/array.html
155
- states['strings'].append((r'%[wi]' + lbrace, String.Other,
144
+ # https://crystal-lang.org/docs/syntax_and_semantics/literals/array.html#percent-array-literals
145
+ states['strings'].append((r'%[qwi]' + lbrace, String.Other,
156
146
  name+'-string'))
157
147
  states[name+'-regex'] = [
158
148
  (r'\\[\\' + bracecc + ']', String.Regex),
149
+ ] + (lbrace != rbrace) * [
159
150
  (lbrace, String.Regex, '#push'),
151
+ ] + [
160
152
  (rbrace + '[imsx]*', String.Regex, '#pop'),
161
153
  include('string-intp'),
162
154
  (r'[\\#' + bracecc + ']', String.Regex),
@@ -165,27 +157,6 @@ class CrystalLexer(ExtendedRegexLexer):
165
157
  states['strings'].append((r'%r' + lbrace, String.Regex,
166
158
  name+'-regex'))
167
159
 
168
- # these must come after %<brace>!
169
- states['strings'] += [
170
- # %r regex
171
- (r'(%r([\W_]))((?:\\\2|(?!\2).)*)(\2[imsx]*)',
172
- intp_regex_callback),
173
- # regular fancy strings with qsw
174
- (r'(%[wi]([\W_]))((?:\\\2|(?!\2).)*)(\2)',
175
- intp_string_callback),
176
- # special forms of fancy strings after operators or
177
- # in method calls with braces
178
- (r'(?<=[-+/*%=<>&!^|~,(])(\s*)(%([\t ])(?:(?:\\\3|(?!\3).)*)\3)',
179
- bygroups(Text, String.Other, None)),
180
- # and because of fixed width lookbehinds the whole thing a
181
- # second time for line startings...
182
- (r'^(\s*)(%([\t ])(?:(?:\\\3|(?!\3).)*)\3)',
183
- bygroups(Text, String.Other, None)),
184
- # all regular fancy strings without qsw
185
- (r'(%([\[{(<]))((?:\\\2|(?!\2).)*)(\2)',
186
- intp_string_callback),
187
- ]
188
-
189
160
  return states
190
161
 
191
162
  tokens = {
@@ -193,10 +164,16 @@ class CrystalLexer(ExtendedRegexLexer):
193
164
  (r'#.*?$', Comment.Single),
194
165
  # keywords
195
166
  (words('''
196
- abstract asm as begin break case do else elsif end ensure extend ifdef if
197
- include instance_sizeof next of pointerof private protected rescue return
198
- require sizeof super then typeof unless until when while with yield
167
+ abstract asm begin break case do else elsif end ensure extend if in
168
+ include next of private protected require rescue return select self super
169
+ then unless until when while with yield
199
170
  '''.split(), suffix=r'\b'), Keyword),
171
+ (words('''
172
+ previous_def forall out uninitialized __DIR__ __FILE__ __LINE__
173
+ __END_LINE__
174
+ '''.split(), prefix=r'(?<!\.)', suffix=r'\b'), Keyword.Pseudo),
175
+ # https://crystal-lang.org/docs/syntax_and_semantics/is_a.html
176
+ (r'\.(is_a\?|nil\?|responds_to\?|as\?|as\b)', Keyword.Pseudo),
200
177
  (words(['true', 'false', 'nil'], suffix=r'\b'), Keyword.Constant),
201
178
  # start of function, class and module names
202
179
  (r'(module|lib)(\s+)([a-zA-Z_]\w*(?:::[a-zA-Z_]\w*)*)',
@@ -204,29 +181,23 @@ class CrystalLexer(ExtendedRegexLexer):
204
181
  (r'(def|fun|macro)(\s+)((?:[a-zA-Z_]\w*::)*)',
205
182
  bygroups(Keyword, Text, Name.Namespace), 'funcname'),
206
183
  (r'def(?=[*%&^`~+-/\[<>=])', Keyword, 'funcname'),
207
- (r'(class|struct|union|type|alias|enum)(\s+)((?:[a-zA-Z_]\w*::)*)',
184
+ (r'(annotation|class|struct|union|type|alias|enum)(\s+)((?:[a-zA-Z_]\w*::)*)',
208
185
  bygroups(Keyword, Text, Name.Namespace), 'classname'),
209
- (r'(self|out|uninitialized)\b|(is_a|responds_to)\?', Keyword.Pseudo),
210
- # macros
186
+ # https://crystal-lang.org/api/toplevel.html
211
187
  (words('''
212
- debugger record pp assert_responds_to spawn parallel
213
- getter setter property delegate def_hash def_equals def_equals_and_hash
214
- forward_missing_to
215
- '''.split(), suffix=r'\b'), Name.Builtin.Pseudo),
216
- (r'getter[!?]|property[!?]|__(DIR|FILE|LINE)__\b', Name.Builtin.Pseudo),
188
+ instance_sizeof offsetof pointerof sizeof typeof
189
+ '''.split(), prefix=r'(?<!\.)', suffix=r'\b'), Keyword.Pseudo),
190
+ # macros
191
+ (r'(?<!\.)(debugger\b|p!|pp!|record\b|spawn\b)', Name.Builtin.Pseudo),
217
192
  # builtins
218
- # http://crystal-lang.org/api/toplevel.html
219
193
  (words('''
220
- Object Value Struct Reference Proc Class Nil Symbol Enum Void
221
- Bool Number Int Int8 Int16 Int32 Int64 UInt8 UInt16 UInt32 UInt64
222
- Float Float32 Float64 Char String
223
- Pointer Slice Range Exception Regex
224
- Mutex StaticArray Array Hash Set Tuple Deque Box Process File
225
- Dir Time Channel Concurrent Scheduler
226
- abort at_exit caller delay exit fork future get_stack_top gets
227
- lazy loop main p print printf puts
228
- raise rand read_line sleep sprintf system with_color
194
+ abort at_exit caller exit gets loop main p pp print printf puts
195
+ raise rand read_line sleep spawn sprintf system
229
196
  '''.split(), prefix=r'(?<!\.)', suffix=r'\b'), Name.Builtin),
197
+ # https://crystal-lang.org/api/Object.html#macro-summary
198
+ (r'(?<!\.)(((class_)?((getter|property)\b[!?]?|setter\b))|'
199
+ r'(def_(clone|equals|equals_and_hash|hash)|delegate|forward_missing_to)\b)',
200
+ Name.Builtin.Pseudo),
230
201
  # normal heredocs
231
202
  (r'(?<!\w)(<<-?)(["`\']?)([a-zA-Z_]\w*)(\2)(.*?\n)',
232
203
  heredoc_callback),
@@ -298,18 +269,18 @@ class CrystalLexer(ExtendedRegexLexer):
298
269
  (r'\$-[0adFiIlpvw]', Name.Variable.Global),
299
270
  (r'::', Operator),
300
271
  include('strings'),
301
- # chars
272
+ # https://crystal-lang.org/reference/syntax_and_semantics/literals/char.html
302
273
  (r'\?(\\[MC]-)*' # modifiers
303
- r'(\\([\\befnrtv#"\']|x[a-fA-F0-9]{1,2}|[0-7]{1,3})|\S)'
274
+ r'(\\([\\abefnrtv#"\']|[0-7]{1,3}|x[a-fA-F0-9]{2}|u[a-fA-F0-9]{4}|u\{[a-fA-F0-9 ]+\})|\S)'
304
275
  r'(?!\w)',
305
276
  String.Char),
306
- (r'[A-Z][A-Z_]+\b', Name.Constant),
277
+ (r'[A-Z][A-Z_]+\b(?!::|\.)', Name.Constant),
307
278
  # macro expansion
308
279
  (r'\{%', String.Interpol, 'in-macro-control'),
309
280
  (r'\{\{', String.Interpol, 'in-macro-expr'),
310
- # attributes
311
- (r'(@\[)(\s*)([A-Z]\w*)',
312
- bygroups(Operator, Text, Name.Decorator), 'in-attr'),
281
+ # annotations
282
+ (r'(@\[)(\s*)([A-Z]\w*(::[A-Z]\w*)*)',
283
+ bygroups(Operator, Text, Name.Decorator), 'in-annot'),
313
284
  # this is needed because Crystal attributes can look
314
285
  # like keywords (class) or like this: ` ?!?
315
286
  (words(CRYSTAL_OPERATORS, prefix=r'(\.|::)'),
@@ -346,7 +317,9 @@ class CrystalLexer(ExtendedRegexLexer):
346
317
  (r'#\{', String.Interpol, 'in-intp'),
347
318
  ],
348
319
  'string-escaped': [
349
- (r'\\([\\befnstv#"\']|x[a-fA-F0-9]{1,2}|[0-7]{1,3})', String.Escape)
320
+ # https://crystal-lang.org/reference/syntax_and_semantics/literals/string.html
321
+ (r'\\([\\abefnrtv#"\']|[0-7]{1,3}|x[a-fA-F0-9]{2}|u[a-fA-F0-9]{4}|u\{[a-fA-F0-9 ]+\})',
322
+ String.Escape)
350
323
  ],
351
324
  'string-intp-escaped': [
352
325
  include('string-intp'),
@@ -376,7 +349,7 @@ class CrystalLexer(ExtendedRegexLexer):
376
349
  'in-macro-control': [
377
350
  (r'\{%', String.Interpol, '#push'),
378
351
  (r'%\}', String.Interpol, '#pop'),
379
- (r'for\b|in\b', Keyword),
352
+ (r'(for|verbatim)\b', Keyword),
380
353
  include('root'),
381
354
  ],
382
355
  'in-macro-expr': [
@@ -384,7 +357,7 @@ class CrystalLexer(ExtendedRegexLexer):
384
357
  (r'\}\}', String.Interpol, '#pop'),
385
358
  include('root'),
386
359
  ],
387
- 'in-attr': [
360
+ 'in-annot': [
388
361
  (r'\[', Operator, '#push'),
389
362
  (r'\]', Operator, '#pop'),
390
363
  include('root'),