pygments.rb 2.0.0.rc3 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +13 -1
  3. data/.gitignore +0 -1
  4. data/.rubocop.yml +16 -0
  5. data/CHANGELOG.adoc +19 -0
  6. data/README.adoc +1 -3
  7. data/Rakefile +0 -14
  8. data/bench.rb +11 -6
  9. data/lib/pygments/lexer.rb +84 -62
  10. data/lib/pygments/mentos.py +7 -49
  11. data/lib/pygments/popen.rb +133 -173
  12. data/lib/pygments/version.rb +1 -1
  13. data/lib/pygments.rb +15 -6
  14. data/pygments.rb.gemspec +16 -11
  15. data/test/test_pygments.rb +19 -40
  16. data/vendor/pygments-main/{Pygments-2.7.3.dist-info → Pygments-2.10.0.dist-info}/AUTHORS +13 -1
  17. data/vendor/pygments-main/{Pygments-2.7.3.dist-info → Pygments-2.10.0.dist-info}/INSTALLER +0 -0
  18. data/vendor/pygments-main/{Pygments-2.7.3.dist-info → Pygments-2.10.0.dist-info}/LICENSE +1 -1
  19. data/vendor/pygments-main/{Pygments-2.7.3.dist-info → Pygments-2.10.0.dist-info}/METADATA +8 -9
  20. data/vendor/pygments-main/Pygments-2.10.0.dist-info/RECORD +524 -0
  21. data/vendor/pygments-main/{Pygments-2.7.3.dist-info → Pygments-2.10.0.dist-info}/REQUESTED +0 -0
  22. data/vendor/pygments-main/{Pygments-2.7.3.dist-info → Pygments-2.10.0.dist-info}/WHEEL +0 -0
  23. data/vendor/pygments-main/{Pygments-2.7.3.dist-info → Pygments-2.10.0.dist-info}/entry_points.txt +0 -0
  24. data/vendor/pygments-main/{Pygments-2.7.3.dist-info → Pygments-2.10.0.dist-info}/top_level.txt +0 -0
  25. data/vendor/pygments-main/bin/pygmentize +1 -1
  26. data/vendor/pygments-main/pygments/__init__.py +2 -3
  27. data/vendor/pygments-main/pygments/__main__.py +1 -2
  28. data/vendor/pygments-main/pygments/cmdline.py +179 -159
  29. data/vendor/pygments-main/pygments/console.py +1 -2
  30. data/vendor/pygments-main/pygments/filter.py +1 -2
  31. data/vendor/pygments-main/pygments/filters/__init__.py +1 -2
  32. data/vendor/pygments-main/pygments/formatter.py +1 -2
  33. data/vendor/pygments-main/pygments/formatters/__init__.py +2 -3
  34. data/vendor/pygments-main/pygments/formatters/_mapping.py +2 -2
  35. data/vendor/pygments-main/pygments/formatters/bbcode.py +1 -2
  36. data/vendor/pygments-main/pygments/formatters/html.py +53 -25
  37. data/vendor/pygments-main/pygments/formatters/img.py +24 -10
  38. data/vendor/pygments-main/pygments/formatters/irc.py +1 -2
  39. data/vendor/pygments-main/pygments/formatters/latex.py +8 -9
  40. data/vendor/pygments-main/pygments/formatters/other.py +7 -10
  41. data/vendor/pygments-main/pygments/formatters/pangomarkup.py +83 -0
  42. data/vendor/pygments-main/pygments/formatters/rtf.py +1 -2
  43. data/vendor/pygments-main/pygments/formatters/svg.py +5 -4
  44. data/vendor/pygments-main/pygments/formatters/terminal.py +1 -2
  45. data/vendor/pygments-main/pygments/formatters/terminal256.py +24 -3
  46. data/vendor/pygments-main/pygments/lexer.py +7 -6
  47. data/vendor/pygments-main/pygments/lexers/__init__.py +2 -3
  48. data/vendor/pygments-main/pygments/lexers/_asy_builtins.py +1 -2
  49. data/vendor/pygments-main/pygments/lexers/_cl_builtins.py +1 -2
  50. data/vendor/pygments-main/pygments/lexers/_cocoa_builtins.py +16 -12
  51. data/vendor/pygments-main/pygments/lexers/_csound_builtins.py +56 -16
  52. data/vendor/pygments-main/pygments/lexers/_julia_builtins.py +401 -0
  53. data/vendor/pygments-main/pygments/lexers/_lasso_builtins.py +1 -2
  54. data/vendor/pygments-main/pygments/lexers/_lua_builtins.py +1 -2
  55. data/vendor/pygments-main/pygments/lexers/_mapping.py +73 -54
  56. data/vendor/pygments-main/pygments/lexers/_mql_builtins.py +1 -2
  57. data/vendor/pygments-main/pygments/lexers/_mysql_builtins.py +2 -3
  58. data/vendor/pygments-main/pygments/lexers/_openedge_builtins.py +439 -386
  59. data/vendor/pygments-main/pygments/lexers/_php_builtins.py +1 -2
  60. data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +1 -2
  61. data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +1 -2
  62. data/vendor/pygments-main/pygments/lexers/_sourcemod_builtins.py +1 -2
  63. data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +1 -2
  64. data/vendor/pygments-main/pygments/lexers/_stata_builtins.py +91 -55
  65. data/vendor/pygments-main/pygments/lexers/_tsql_builtins.py +1 -2
  66. data/vendor/pygments-main/pygments/lexers/_usd_builtins.py +1 -2
  67. data/vendor/pygments-main/pygments/lexers/_vbscript_builtins.py +1 -2
  68. data/vendor/pygments-main/pygments/lexers/_vim_builtins.py +1 -2
  69. data/vendor/pygments-main/pygments/lexers/actionscript.py +9 -10
  70. data/vendor/pygments-main/pygments/lexers/agile.py +1 -2
  71. data/vendor/pygments-main/pygments/lexers/algebra.py +1 -2
  72. data/vendor/pygments-main/pygments/lexers/ambient.py +3 -4
  73. data/vendor/pygments-main/pygments/lexers/amdgpu.py +53 -0
  74. data/vendor/pygments-main/pygments/lexers/ampl.py +1 -2
  75. data/vendor/pygments-main/pygments/lexers/apdlexer.py +448 -0
  76. data/vendor/pygments-main/pygments/lexers/apl.py +7 -5
  77. data/vendor/pygments-main/pygments/lexers/archetype.py +2 -3
  78. data/vendor/pygments-main/pygments/lexers/arrow.py +1 -2
  79. data/vendor/pygments-main/pygments/lexers/asc.py +51 -0
  80. data/vendor/pygments-main/pygments/lexers/asm.py +87 -60
  81. data/vendor/pygments-main/pygments/lexers/automation.py +8 -3
  82. data/vendor/pygments-main/pygments/lexers/bare.py +1 -2
  83. data/vendor/pygments-main/pygments/lexers/basic.py +3 -4
  84. data/vendor/pygments-main/pygments/lexers/bibtex.py +3 -4
  85. data/vendor/pygments-main/pygments/lexers/boa.py +4 -5
  86. data/vendor/pygments-main/pygments/lexers/business.py +3 -4
  87. data/vendor/pygments-main/pygments/lexers/c_cpp.py +61 -36
  88. data/vendor/pygments-main/pygments/lexers/c_like.py +103 -5
  89. data/vendor/pygments-main/pygments/lexers/capnproto.py +1 -2
  90. data/vendor/pygments-main/pygments/lexers/cddl.py +190 -0
  91. data/vendor/pygments-main/pygments/lexers/chapel.py +52 -29
  92. data/vendor/pygments-main/pygments/lexers/clean.py +7 -8
  93. data/vendor/pygments-main/pygments/lexers/compiled.py +1 -2
  94. data/vendor/pygments-main/pygments/lexers/configs.py +139 -48
  95. data/vendor/pygments-main/pygments/lexers/console.py +1 -2
  96. data/vendor/pygments-main/pygments/lexers/crystal.py +53 -79
  97. data/vendor/pygments-main/pygments/lexers/csound.py +3 -4
  98. data/vendor/pygments-main/pygments/lexers/css.py +11 -8
  99. data/vendor/pygments-main/pygments/lexers/d.py +3 -4
  100. data/vendor/pygments-main/pygments/lexers/dalvik.py +1 -2
  101. data/vendor/pygments-main/pygments/lexers/data.py +2 -3
  102. data/vendor/pygments-main/pygments/lexers/devicetree.py +2 -3
  103. data/vendor/pygments-main/pygments/lexers/diff.py +1 -2
  104. data/vendor/pygments-main/pygments/lexers/dotnet.py +7 -8
  105. data/vendor/pygments-main/pygments/lexers/dsls.py +3 -4
  106. data/vendor/pygments-main/pygments/lexers/dylan.py +1 -2
  107. data/vendor/pygments-main/pygments/lexers/ecl.py +4 -6
  108. data/vendor/pygments-main/pygments/lexers/eiffel.py +2 -3
  109. data/vendor/pygments-main/pygments/lexers/elm.py +1 -2
  110. data/vendor/pygments-main/pygments/lexers/email.py +1 -2
  111. data/vendor/pygments-main/pygments/lexers/erlang.py +2 -3
  112. data/vendor/pygments-main/pygments/lexers/esoteric.py +1 -2
  113. data/vendor/pygments-main/pygments/lexers/ezhil.py +1 -2
  114. data/vendor/pygments-main/pygments/lexers/factor.py +3 -4
  115. data/vendor/pygments-main/pygments/lexers/fantom.py +1 -2
  116. data/vendor/pygments-main/pygments/lexers/felix.py +1 -2
  117. data/vendor/pygments-main/pygments/lexers/floscript.py +2 -3
  118. data/vendor/pygments-main/pygments/lexers/forth.py +2 -3
  119. data/vendor/pygments-main/pygments/lexers/fortran.py +9 -7
  120. data/vendor/pygments-main/pygments/lexers/foxpro.py +1 -2
  121. data/vendor/pygments-main/pygments/lexers/freefem.py +1 -2
  122. data/vendor/pygments-main/pygments/lexers/functional.py +1 -2
  123. data/vendor/pygments-main/pygments/lexers/futhark.py +111 -0
  124. data/vendor/pygments-main/pygments/lexers/gcodelexer.py +36 -0
  125. data/vendor/pygments-main/pygments/lexers/gdscript.py +1 -2
  126. data/vendor/pygments-main/pygments/lexers/go.py +3 -4
  127. data/vendor/pygments-main/pygments/lexers/grammar_notation.py +1 -2
  128. data/vendor/pygments-main/pygments/lexers/graph.py +1 -2
  129. data/vendor/pygments-main/pygments/lexers/graphics.py +4 -5
  130. data/vendor/pygments-main/pygments/lexers/graphviz.py +58 -0
  131. data/vendor/pygments-main/pygments/lexers/gsql.py +92 -0
  132. data/vendor/pygments-main/pygments/lexers/haskell.py +5 -6
  133. data/vendor/pygments-main/pygments/lexers/haxe.py +4 -5
  134. data/vendor/pygments-main/pygments/lexers/hdl.py +2 -6
  135. data/vendor/pygments-main/pygments/lexers/hexdump.py +1 -2
  136. data/vendor/pygments-main/pygments/lexers/html.py +7 -8
  137. data/vendor/pygments-main/pygments/lexers/idl.py +1 -2
  138. data/vendor/pygments-main/pygments/lexers/igor.py +1 -2
  139. data/vendor/pygments-main/pygments/lexers/inferno.py +1 -2
  140. data/vendor/pygments-main/pygments/lexers/installers.py +3 -4
  141. data/vendor/pygments-main/pygments/lexers/int_fiction.py +1 -2
  142. data/vendor/pygments-main/pygments/lexers/iolang.py +2 -3
  143. data/vendor/pygments-main/pygments/lexers/j.py +2 -3
  144. data/vendor/pygments-main/pygments/lexers/javascript.py +170 -156
  145. data/vendor/pygments-main/pygments/lexers/jslt.py +94 -0
  146. data/vendor/pygments-main/pygments/lexers/julia.py +136 -185
  147. data/vendor/pygments-main/pygments/lexers/jvm.py +433 -307
  148. data/vendor/pygments-main/pygments/lexers/kuin.py +299 -0
  149. data/vendor/pygments-main/pygments/lexers/lisp.py +25 -23
  150. data/vendor/pygments-main/pygments/lexers/make.py +3 -4
  151. data/vendor/pygments-main/pygments/lexers/markup.py +13 -16
  152. data/vendor/pygments-main/pygments/lexers/math.py +1 -2
  153. data/vendor/pygments-main/pygments/lexers/matlab.py +2666 -93
  154. data/vendor/pygments-main/pygments/lexers/meson.py +155 -0
  155. data/vendor/pygments-main/pygments/lexers/mime.py +7 -23
  156. data/vendor/pygments-main/pygments/lexers/ml.py +8 -9
  157. data/vendor/pygments-main/pygments/lexers/modeling.py +1 -2
  158. data/vendor/pygments-main/pygments/lexers/modula2.py +3 -4
  159. data/vendor/pygments-main/pygments/lexers/monte.py +1 -2
  160. data/vendor/pygments-main/pygments/lexers/mosel.py +1 -2
  161. data/vendor/pygments-main/pygments/lexers/ncl.py +1 -2
  162. data/vendor/pygments-main/pygments/lexers/nimrod.py +2 -3
  163. data/vendor/pygments-main/pygments/lexers/nit.py +1 -2
  164. data/vendor/pygments-main/pygments/lexers/nix.py +1 -2
  165. data/vendor/pygments-main/pygments/lexers/oberon.py +1 -2
  166. data/vendor/pygments-main/pygments/lexers/objective.py +6 -7
  167. data/vendor/pygments-main/pygments/lexers/ooc.py +1 -2
  168. data/vendor/pygments-main/pygments/lexers/other.py +1 -2
  169. data/vendor/pygments-main/pygments/lexers/parasail.py +1 -2
  170. data/vendor/pygments-main/pygments/lexers/parsers.py +26 -27
  171. data/vendor/pygments-main/pygments/lexers/pascal.py +1 -2
  172. data/vendor/pygments-main/pygments/lexers/pawn.py +2 -5
  173. data/vendor/pygments-main/pygments/lexers/perl.py +1 -2
  174. data/vendor/pygments-main/pygments/lexers/php.py +3 -4
  175. data/vendor/pygments-main/pygments/lexers/pointless.py +1 -2
  176. data/vendor/pygments-main/pygments/lexers/pony.py +1 -2
  177. data/vendor/pygments-main/pygments/lexers/praat.py +1 -2
  178. data/vendor/pygments-main/pygments/lexers/procfile.py +43 -0
  179. data/vendor/pygments-main/pygments/lexers/prolog.py +3 -4
  180. data/vendor/pygments-main/pygments/lexers/promql.py +2 -3
  181. data/vendor/pygments-main/pygments/lexers/python.py +38 -17
  182. data/vendor/pygments-main/pygments/lexers/qvt.py +1 -2
  183. data/vendor/pygments-main/pygments/lexers/r.py +1 -2
  184. data/vendor/pygments-main/pygments/lexers/rdf.py +1 -2
  185. data/vendor/pygments-main/pygments/lexers/rebol.py +1 -2
  186. data/vendor/pygments-main/pygments/lexers/resource.py +2 -3
  187. data/vendor/pygments-main/pygments/lexers/ride.py +1 -2
  188. data/vendor/pygments-main/pygments/lexers/rnc.py +2 -3
  189. data/vendor/pygments-main/pygments/lexers/roboconf.py +1 -2
  190. data/vendor/pygments-main/pygments/lexers/robotframework.py +1 -2
  191. data/vendor/pygments-main/pygments/lexers/ruby.py +31 -25
  192. data/vendor/pygments-main/pygments/lexers/rust.py +10 -12
  193. data/vendor/pygments-main/pygments/lexers/sas.py +1 -2
  194. data/vendor/pygments-main/pygments/lexers/scdoc.py +1 -2
  195. data/vendor/pygments-main/pygments/lexers/scripting.py +12 -13
  196. data/vendor/pygments-main/pygments/lexers/sgf.py +1 -2
  197. data/vendor/pygments-main/pygments/lexers/shell.py +15 -17
  198. data/vendor/pygments-main/pygments/lexers/sieve.py +1 -2
  199. data/vendor/pygments-main/pygments/lexers/slash.py +1 -2
  200. data/vendor/pygments-main/pygments/lexers/smalltalk.py +1 -2
  201. data/vendor/pygments-main/pygments/lexers/smithy.py +79 -0
  202. data/vendor/pygments-main/pygments/lexers/smv.py +2 -3
  203. data/vendor/pygments-main/pygments/lexers/snobol.py +1 -2
  204. data/vendor/pygments-main/pygments/lexers/solidity.py +1 -2
  205. data/vendor/pygments-main/pygments/lexers/special.py +44 -30
  206. data/vendor/pygments-main/pygments/lexers/sql.py +8 -13
  207. data/vendor/pygments-main/pygments/lexers/stata.py +1 -2
  208. data/vendor/pygments-main/pygments/lexers/supercollider.py +4 -5
  209. data/vendor/pygments-main/pygments/lexers/tcl.py +4 -5
  210. data/vendor/pygments-main/pygments/lexers/teal.py +88 -0
  211. data/vendor/pygments-main/pygments/lexers/templates.py +34 -35
  212. data/vendor/pygments-main/pygments/lexers/teraterm.py +2 -3
  213. data/vendor/pygments-main/pygments/lexers/testing.py +2 -3
  214. data/vendor/pygments-main/pygments/lexers/text.py +1 -2
  215. data/vendor/pygments-main/pygments/lexers/textedit.py +3 -4
  216. data/vendor/pygments-main/pygments/lexers/textfmts.py +1 -2
  217. data/vendor/pygments-main/pygments/lexers/theorem.py +11 -7
  218. data/vendor/pygments-main/pygments/lexers/thingsdb.py +118 -0
  219. data/vendor/pygments-main/pygments/lexers/tnt.py +26 -17
  220. data/vendor/pygments-main/pygments/lexers/trafficscript.py +2 -3
  221. data/vendor/pygments-main/pygments/lexers/typoscript.py +1 -2
  222. data/vendor/pygments-main/pygments/lexers/unicon.py +1 -2
  223. data/vendor/pygments-main/pygments/lexers/urbi.py +3 -4
  224. data/vendor/pygments-main/pygments/lexers/usd.py +1 -2
  225. data/vendor/pygments-main/pygments/lexers/varnish.py +2 -3
  226. data/vendor/pygments-main/pygments/lexers/verification.py +1 -2
  227. data/vendor/pygments-main/pygments/lexers/web.py +1 -2
  228. data/vendor/pygments-main/pygments/lexers/webassembly.py +120 -0
  229. data/vendor/pygments-main/pygments/lexers/webidl.py +1 -2
  230. data/vendor/pygments-main/pygments/lexers/webmisc.py +5 -5
  231. data/vendor/pygments-main/pygments/lexers/whiley.py +1 -2
  232. data/vendor/pygments-main/pygments/lexers/x10.py +2 -3
  233. data/vendor/pygments-main/pygments/lexers/xorg.py +1 -2
  234. data/vendor/pygments-main/pygments/lexers/yang.py +1 -2
  235. data/vendor/pygments-main/pygments/lexers/zig.py +1 -2
  236. data/vendor/pygments-main/pygments/modeline.py +1 -2
  237. data/vendor/pygments-main/pygments/plugin.py +2 -3
  238. data/vendor/pygments-main/pygments/regexopt.py +2 -3
  239. data/vendor/pygments-main/pygments/scanner.py +1 -2
  240. data/vendor/pygments-main/pygments/sphinxext.py +1 -2
  241. data/vendor/pygments-main/pygments/style.py +4 -5
  242. data/vendor/pygments-main/pygments/styles/__init__.py +5 -2
  243. data/vendor/pygments-main/pygments/styles/abap.py +1 -2
  244. data/vendor/pygments-main/pygments/styles/algol.py +1 -2
  245. data/vendor/pygments-main/pygments/styles/algol_nu.py +1 -2
  246. data/vendor/pygments-main/pygments/styles/arduino.py +1 -2
  247. data/vendor/pygments-main/pygments/styles/autumn.py +1 -2
  248. data/vendor/pygments-main/pygments/styles/borland.py +1 -2
  249. data/vendor/pygments-main/pygments/styles/bw.py +1 -2
  250. data/vendor/pygments-main/pygments/styles/colorful.py +1 -2
  251. data/vendor/pygments-main/pygments/styles/default.py +1 -2
  252. data/vendor/pygments-main/pygments/styles/emacs.py +1 -2
  253. data/vendor/pygments-main/pygments/styles/friendly.py +2 -2
  254. data/vendor/pygments-main/pygments/styles/fruity.py +1 -2
  255. data/vendor/pygments-main/pygments/styles/gruvbox.py +107 -0
  256. data/vendor/pygments-main/pygments/styles/igor.py +1 -2
  257. data/vendor/pygments-main/pygments/styles/inkpot.py +1 -2
  258. data/vendor/pygments-main/pygments/styles/lovelace.py +1 -2
  259. data/vendor/pygments-main/pygments/styles/manni.py +1 -2
  260. data/vendor/pygments-main/pygments/styles/material.py +118 -0
  261. data/vendor/pygments-main/pygments/styles/monokai.py +1 -2
  262. data/vendor/pygments-main/pygments/styles/murphy.py +1 -2
  263. data/vendor/pygments-main/pygments/styles/native.py +2 -2
  264. data/vendor/pygments-main/pygments/styles/paraiso_dark.py +1 -2
  265. data/vendor/pygments-main/pygments/styles/paraiso_light.py +1 -2
  266. data/vendor/pygments-main/pygments/styles/pastie.py +1 -2
  267. data/vendor/pygments-main/pygments/styles/perldoc.py +1 -2
  268. data/vendor/pygments-main/pygments/styles/rainbow_dash.py +1 -2
  269. data/vendor/pygments-main/pygments/styles/rrt.py +1 -2
  270. data/vendor/pygments-main/pygments/styles/sas.py +1 -2
  271. data/vendor/pygments-main/pygments/styles/solarized.py +4 -2
  272. data/vendor/pygments-main/pygments/styles/stata_dark.py +1 -2
  273. data/vendor/pygments-main/pygments/styles/stata_light.py +1 -2
  274. data/vendor/pygments-main/pygments/styles/tango.py +1 -2
  275. data/vendor/pygments-main/pygments/styles/trac.py +1 -2
  276. data/vendor/pygments-main/pygments/styles/vim.py +1 -2
  277. data/vendor/pygments-main/pygments/styles/vs.py +1 -2
  278. data/vendor/pygments-main/pygments/styles/xcode.py +1 -2
  279. data/vendor/pygments-main/pygments/styles/zenburn.py +80 -0
  280. data/vendor/pygments-main/pygments/token.py +1 -2
  281. data/vendor/pygments-main/pygments/unistring.py +1 -2
  282. data/vendor/pygments-main/pygments/util.py +2 -5
  283. metadata +48 -23
  284. data/cache-lexers.rb +0 -9
  285. data/lexers +0 -0
  286. data/vendor/pygments-main/Pygments-2.7.3.dist-info/RECORD +0 -482
@@ -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-2020 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
 
@@ -22,7 +21,7 @@ __all__ = ['IniLexer', 'RegeditLexer', 'PropertiesLexer', 'KconfigLexer',
22
21
  'NginxConfLexer', 'LighttpdConfLexer', 'DockerLexer',
23
22
  'TerraformLexer', 'TermcapLexer', 'TerminfoLexer',
24
23
  'PkgConfigLexer', 'PacmanConfLexer', 'AugeasLexer', 'TOMLLexer',
25
- 'SingularityLexer']
24
+ 'NestedTextLexer', 'SingularityLexer']
26
25
 
27
26
 
28
27
  class IniLexer(RegexLexer):
@@ -32,7 +31,13 @@ class IniLexer(RegexLexer):
32
31
 
33
32
  name = 'INI'
34
33
  aliases = ['ini', 'cfg', 'dosini']
35
- filenames = ['*.ini', '*.cfg', '*.inf']
34
+ filenames = [
35
+ '*.ini', '*.cfg', '*.inf',
36
+ # systemd unit files
37
+ # https://www.freedesktop.org/software/systemd/man/systemd.unit.html
38
+ '*.service', '*.socket', '*.device', '*.mount', '*.automount',
39
+ '*.swap', '*.target', '*.path', '*.timer', '*.slice', '*.scope',
40
+ ]
36
41
  mimetypes = ['text/x-ini', 'text/inf']
37
42
 
38
43
  tokens = {
@@ -40,7 +45,7 @@ class IniLexer(RegexLexer):
40
45
  (r'\s+', Text),
41
46
  (r'[;#].*', Comment.Single),
42
47
  (r'\[.*?\]$', Keyword),
43
- (r'(.*?)([ \t]*)(=)([ \t]*)(.*(?:\n[ \t].+)*)',
48
+ (r'(.*?)([ \t]*)(=)([ \t]*)([^\t\n]*)',
44
49
  bygroups(Name.Attribute, Text, Operator, Text, String)),
45
50
  # standalone option, supported by some INI parsers
46
51
  (r'(.+?)$', Name.Attribute),
@@ -302,8 +307,10 @@ class ApacheConfLexer(RegexLexer):
302
307
  'root': [
303
308
  (r'\s+', Text),
304
309
  (r'#(.*\\\n)+.*$|(#.*?)$', Comment),
305
- (r'(<[^\s>]+)(?:(\s+)(.*))?(>)',
310
+ (r'(<[^\s>/][^\s>]*)(?:(\s+)(.*))?(>)',
306
311
  bygroups(Name.Tag, Text, String, Name.Tag)),
312
+ (r'(</[^\s>]+)(>)',
313
+ bygroups(Name.Tag, Name.Tag)),
307
314
  (r'[a-z]\w*', Name.Builtin, 'value'),
308
315
  (r'\.+', Text),
309
316
  ],
@@ -348,7 +355,7 @@ class SquidConfLexer(RegexLexer):
348
355
  "cache_effective_user", "cache_host", "cache_host_acl",
349
356
  "cache_host_domain", "cache_log", "cache_mem", "cache_mem_high",
350
357
  "cache_mem_low", "cache_mgr", "cachemgr_passwd", "cache_peer",
351
- "cache_peer_access", "cahce_replacement_policy", "cache_stoplist",
358
+ "cache_peer_access", "cache_replacement_policy", "cache_stoplist",
352
359
  "cache_stoplist_pattern", "cache_store_log", "cache_swap",
353
360
  "cache_swap_high", "cache_swap_log", "cache_swap_low", "client_db",
354
361
  "client_lifetime", "client_netmask", "connect_timeout", "coredump_dir",
@@ -508,8 +515,8 @@ class LighttpdConfLexer(RegexLexer):
508
515
  .. versionadded:: 0.11
509
516
  """
510
517
  name = 'Lighttpd configuration file'
511
- aliases = ['lighty', 'lighttpd']
512
- filenames = []
518
+ aliases = ['lighttpd', 'lighty']
519
+ filenames = ['lighttpd.conf']
513
520
  mimetypes = ['text/x-lighttpd-conf']
514
521
 
515
522
  tokens = {
@@ -576,56 +583,113 @@ class TerraformLexer(RegexLexer):
576
583
  filenames = ['*.tf']
577
584
  mimetypes = ['application/x-tf', 'application/x-terraform']
578
585
 
579
- embedded_keywords = ('ingress', 'egress', 'listener', 'default',
580
- 'connection', 'alias', 'terraform', 'tags', 'vars',
581
- 'config', 'lifecycle', 'timeouts')
586
+ classes = ('backend', 'data', 'module', 'output', 'provider',
587
+ 'provisioner', 'resource', 'variable')
588
+ classes_re = "({})".format(('|').join(classes))
589
+
590
+ types = ('string', 'number', 'bool', 'list', 'tuple', 'map', 'object', 'null')
591
+
592
+ numeric_functions = ('abs', 'ceil', 'floor', 'log', 'max',
593
+ 'mix', 'parseint', 'pow', 'signum')
594
+
595
+ string_functions = ('chomp', 'format', 'formatlist', 'indent',
596
+ 'join', 'lower', 'regex', 'regexall', 'replace',
597
+ 'split', 'strrev', 'substr', 'title', 'trim',
598
+ 'trimprefix', 'trimsuffix', 'trimspace', 'upper'
599
+ )
600
+
601
+ collection_functions = ('alltrue', 'anytrue', 'chunklist', 'coalesce',
602
+ 'coalescelist', 'compact', 'concat', 'contains',
603
+ 'distinct', 'element', 'flatten', 'index', 'keys',
604
+ 'length', 'list', 'lookup', 'map', 'matchkeys',
605
+ 'merge', 'range', 'reverse', 'setintersection',
606
+ 'setproduct', 'setsubtract', 'setunion', 'slice',
607
+ 'sort', 'sum', 'transpose', 'values', 'zipmap'
608
+ )
609
+
610
+ encoding_functions = ('base64decode', 'base64encode', 'base64gzip',
611
+ 'csvdecode', 'jsondecode', 'jsonencode', 'textdecodebase64',
612
+ 'textencodebase64', 'urlencode', 'yamldecode', 'yamlencode')
613
+
614
+
615
+ filesystem_functions = ('abspath', 'dirname', 'pathexpand', 'basename',
616
+ 'file', 'fileexists', 'fileset', 'filebase64', 'templatefile')
617
+
618
+ date_time_functions = ('formatdate', 'timeadd', 'timestamp')
619
+
620
+ hash_crypto_functions = ('base64sha256', 'base64sha512', 'bcrypt', 'filebase64sha256',
621
+ 'filebase64sha512', 'filemd5', 'filesha1', 'filesha256', 'filesha512',
622
+ 'md5', 'rsadecrypt', 'sha1', 'sha256', 'sha512', 'uuid', 'uuidv5')
623
+
624
+ ip_network_functions = ('cidrhost', 'cidrnetmask', 'cidrsubnet', 'cidrsubnets')
625
+
626
+ type_conversion_functions = ('can', 'defaults', 'tobool', 'tolist', 'tomap',
627
+ 'tonumber', 'toset', 'tostring', 'try')
628
+
629
+ builtins = numeric_functions + string_functions + collection_functions + encoding_functions +\
630
+ filesystem_functions + date_time_functions + hash_crypto_functions + ip_network_functions +\
631
+ type_conversion_functions
632
+ builtins_re = "({})".format(('|').join(builtins))
582
633
 
583
634
  tokens = {
584
635
  'root': [
585
- include('string'),
586
- include('punctuation'),
587
- include('curly'),
588
636
  include('basic'),
589
637
  include('whitespace'),
638
+
639
+ # Strings
640
+ (r'(".*")', bygroups(String.Double)),
641
+
642
+ # Constants
643
+ (words(('true', 'false'), prefix=r'\b', suffix=r'\b'), Name.Constant),
644
+
645
+ # Types
646
+ (words(types, prefix=r'\b', suffix=r'\b'), Keyword.Type),
647
+
648
+ include('identifier'),
649
+ include('punctuation'),
590
650
  (r'[0-9]+', Number),
591
651
  ],
592
652
  'basic': [
593
- (words(('true', 'false'), prefix=r'\b', suffix=r'\b'), Keyword.Type),
594
653
  (r'\s*/\*', Comment.Multiline, 'comment'),
595
654
  (r'\s*#.*\n', Comment.Single),
596
- (r'(.*?)(\s*)(=)', bygroups(Name.Attribute, Text, Operator)),
597
- (words(('variable', 'resource', 'provider', 'provisioner', 'module',
598
- 'backend', 'data', 'output'), prefix=r'\b', suffix=r'\b'),
599
- Keyword.Reserved, 'function'),
600
- (words(embedded_keywords, prefix=r'\b', suffix=r'\b'),
601
- Keyword.Declaration),
602
- (r'\$\{', String.Interpol, 'var_builtin'),
603
- ],
604
- 'function': [
605
- (r'(\s+)(".*")(\s+)', bygroups(Text, String, Text)),
606
- include('punctuation'),
607
- include('curly'),
655
+ include('whitespace'),
656
+
657
+ # e.g. terraform {
658
+ # e.g. egress {
659
+ (r'(\s*)([0-9a-zA-Z-_]+)(\s*)(=?)(\s*)(\{)',
660
+ bygroups(Text, Name.Builtin, Text, Operator, Text, Punctuation)),
661
+
662
+ # Assignment with attributes, e.g. something = ...
663
+ (r'(\s*)([0-9a-zA-Z-_]+)(\s*)(=)(\s*)',
664
+ bygroups(Text, Name.Attribute, Text, Operator, Text)),
665
+
666
+ # Assignment with environment variables and similar, e.g. "something" = ...
667
+ # or key value assignment, e.g. "SlotName" : ...
668
+ (r'(\s*)("\S+")(\s*)([=:])(\s*)',
669
+ bygroups(Text, Literal.String.Double, Text, Operator, Text)),
670
+
671
+ # Functions, e.g. jsonencode(element("value"))
672
+ (builtins_re + r'(\()', bygroups(Name.Function, Punctuation)),
673
+
674
+ # List of attributes, e.g. ignore_changes = [last_modified, filename]
675
+ (r'(\[)([a-z_,\s]+)(\])', bygroups(Punctuation, Name.Builtin, Punctuation)),
676
+
677
+ # e.g. resource "aws_security_group" "allow_tls" {
678
+ # e.g. backend "consul" {
679
+ (classes_re + r'(\s+)', bygroups(Keyword.Reserved, Text), 'blockname'),
608
680
  ],
609
- 'var_builtin': [
610
- (r'\$\{', String.Interpol, '#push'),
611
- (words(('concat', 'file', 'join', 'lookup', 'element'),
612
- prefix=r'\b', suffix=r'\b'), Name.Builtin),
613
- include('string'),
614
- include('punctuation'),
615
- (r'\s+', Text),
616
- (r'\}', String.Interpol, '#pop'),
681
+ 'blockname': [
682
+ # e.g. resource "aws_security_group" "allow_tls" {
683
+ # e.g. backend "consul" {
684
+ (r'(\s*)("[0-9a-zA-Z-_]+")?(\s*)("[0-9a-zA-Z-_]+")(\s+)(\{)',
685
+ bygroups(Text, Name.Class, Text, Name.Variable, Text, Punctuation)),
617
686
  ],
618
- 'string': [
619
- (r'(".*")', bygroups(String.Double)),
687
+ 'identifier': [
688
+ (r'\b(var\.[0-9a-zA-Z-_\.\[\]]+)\b', bygroups(Name.Variable)),
689
+ (r'\b([0-9a-zA-Z-_\[\]]+\.[0-9a-zA-Z-_\.\[\]]+)\b', bygroups(Name.Variable)),
620
690
  ],
621
691
  'punctuation': [
622
- (r'[\[\](),.]', Punctuation),
623
- ],
624
- # Keep this seperate from punctuation - we sometimes want to use different
625
- # Tokens for { }
626
- 'curly': [
627
- (r'\{', Text.Punctuation),
628
- (r'\}', Text.Punctuation),
692
+ (r'[\[\]()\{\},.?:!=]', Punctuation),
629
693
  ],
630
694
  'comment': [
631
695
  (r'[^*/]', Comment.Multiline),
@@ -904,19 +968,21 @@ class TOMLLexer(RegexLexer):
904
968
 
905
969
  tokens = {
906
970
  'root': [
971
+ # Table
972
+ (r'^(\s*)(\[.*?\])$', bygroups(Text, Keyword)),
907
973
 
908
974
  # Basics, comments, strings
909
- (r'\s+', Text),
975
+ (r'[ \t]+', Text),
976
+ (r'\n', Text),
910
977
  (r'#.*?$', Comment.Single),
911
978
  # Basic string
912
- (r'"(\\\\|\\"|[^"])*"', String),
979
+ (r'"(\\\\|\\[^\\]|[^"\\])*"', String),
913
980
  # Literal string
914
981
  (r'\'\'\'(.*)\'\'\'', String),
915
982
  (r'\'[^\']*\'', String),
916
983
  (r'(true|false)$', Keyword.Constant),
917
984
  (r'[a-zA-Z_][\w\-]*', Name),
918
985
 
919
- (r'\[.*?\]$', Keyword),
920
986
  # Datetime
921
987
  # TODO this needs to be expanded, as TOML is rather flexible:
922
988
  # https://github.com/toml-lang/toml#offset-date-time
@@ -939,6 +1005,31 @@ class TOMLLexer(RegexLexer):
939
1005
  ]
940
1006
  }
941
1007
 
1008
+ class NestedTextLexer(RegexLexer):
1009
+ """
1010
+ Lexer for `NextedText <https://nestedtext.org>`_, a human-friendly data
1011
+ format.
1012
+
1013
+ .. versionadded:: 2.9
1014
+ """
1015
+
1016
+ name = 'NestedText'
1017
+ aliases = ['nestedtext', 'nt']
1018
+ filenames = ['*.nt']
1019
+
1020
+ _quoted_dict_item = r'^(\s*)({0})(.*?)({0}: ?)(.*?)(\s*)$'
1021
+
1022
+ tokens = {
1023
+ 'root': [
1024
+ (r'^(\s*)(#.*?)$', bygroups(Text, Comment)),
1025
+ (r'^(\s*)(> ?)(.*?)(\s*)$', bygroups(Text, Punctuation, String, Whitespace)),
1026
+ (r'^(\s*)(- ?)(.*?)(\s*)$', bygroups(Text, Punctuation, String, Whitespace)),
1027
+ (_quoted_dict_item.format("'"), bygroups(Text, Punctuation, Name, Punctuation, String, Whitespace)),
1028
+ (_quoted_dict_item.format('"'), bygroups(Text, Punctuation, Name, Punctuation, String, Whitespace)),
1029
+ (r'^(\s*)(.*?)(: ?)(.*?)(\s*)$', bygroups(Text, Name, Punctuation, String, Whitespace)),
1030
+ ],
1031
+ }
1032
+
942
1033
 
943
1034
  class SingularityLexer(RegexLexer):
944
1035
  """
@@ -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-2020 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-2020 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,8 +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
- yield from self.get_tokens_unprocessed(context=ctx)
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)
62
64
  ctx.pos = match.end()
63
65
 
64
66
  if outermost:
@@ -86,27 +88,11 @@ class CrystalLexer(ExtendedRegexLexer):
86
88
  del heredocstack[:]
87
89
 
88
90
  def gen_crystalstrings_rules():
89
- def intp_regex_callback(self, match, ctx):
90
- yield match.start(1), String.Regex, match.group(1) # begin
91
- nctx = LexerContext(match.group(3), 0, ['interpolated-regex'])
92
- for i, t, v in self.get_tokens_unprocessed(context=nctx):
93
- yield match.start(3)+i, t, v
94
- yield match.start(4), String.Regex, match.group(4) # end[imsx]*
95
- ctx.pos = match.end()
96
-
97
- def intp_string_callback(self, match, ctx):
98
- yield match.start(1), String.Other, match.group(1)
99
- nctx = LexerContext(match.group(3), 0, ['interpolated-string'])
100
- for i, t, v in self.get_tokens_unprocessed(context=nctx):
101
- yield match.start(3)+i, t, v
102
- yield match.start(4), String.Other, match.group(4) # end
103
- ctx.pos = match.end()
104
-
105
91
  states = {}
106
92
  states['strings'] = [
107
- (r'\:@{0,2}[a-zA-Z_]\w*[!?]?', String.Symbol),
108
- (words(CRYSTAL_OPERATORS, prefix=r'\:@{0,2}'), String.Symbol),
109
- (r":'(\\\\|\\'|[^'])*'", String.Symbol),
93
+ (r'\:\w+[!?]?', String.Symbol),
94
+ (words(CRYSTAL_OPERATORS, prefix=r'\:'), String.Symbol),
95
+ (r":'(\\\\|\\[^\\]|[^'\\])*'", String.Symbol),
110
96
  # This allows arbitrary text after '\ for simplicity
111
97
  (r"'(\\\\|\\'|[^']|\\[^'\\]+)'", String.Char),
112
98
  (r':"', String.Symbol, 'simple-sym'),
@@ -127,35 +113,42 @@ class CrystalLexer(ExtendedRegexLexer):
127
113
  (end, ttype, '#pop'),
128
114
  ]
129
115
 
130
- # braced quoted strings
116
+ # https://crystal-lang.org/docs/syntax_and_semantics/literals/string.html#percent-string-literals
131
117
  for lbrace, rbrace, bracecc, name in \
132
118
  ('\\{', '\\}', '{}', 'cb'), \
133
119
  ('\\[', '\\]', '\\[\\]', 'sb'), \
134
120
  ('\\(', '\\)', '()', 'pa'), \
135
- ('<', '>', '<>', 'ab'):
121
+ ('<', '>', '<>', 'ab'), \
122
+ ('\\|', '\\|', '\\|', 'pi'):
136
123
  states[name+'-intp-string'] = [
137
124
  (r'\\' + lbrace, String.Other),
125
+ ] + (lbrace != rbrace) * [
138
126
  (lbrace, String.Other, '#push'),
127
+ ] + [
139
128
  (rbrace, String.Other, '#pop'),
140
129
  include('string-intp-escaped'),
141
130
  (r'[\\#' + bracecc + ']', String.Other),
142
131
  (r'[^\\#' + bracecc + ']+', String.Other),
143
132
  ]
144
- states['strings'].append((r'%' + lbrace, String.Other,
133
+ states['strings'].append((r'%Q?' + lbrace, String.Other,
145
134
  name+'-intp-string'))
146
135
  states[name+'-string'] = [
147
136
  (r'\\[\\' + bracecc + ']', String.Other),
137
+ ] + (lbrace != rbrace) * [
148
138
  (lbrace, String.Other, '#push'),
139
+ ] + [
149
140
  (rbrace, String.Other, '#pop'),
150
141
  (r'[\\#' + bracecc + ']', String.Other),
151
142
  (r'[^\\#' + bracecc + ']+', String.Other),
152
143
  ]
153
- # http://crystal-lang.org/docs/syntax_and_semantics/literals/array.html
154
- 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,
155
146
  name+'-string'))
156
147
  states[name+'-regex'] = [
157
148
  (r'\\[\\' + bracecc + ']', String.Regex),
149
+ ] + (lbrace != rbrace) * [
158
150
  (lbrace, String.Regex, '#push'),
151
+ ] + [
159
152
  (rbrace + '[imsx]*', String.Regex, '#pop'),
160
153
  include('string-intp'),
161
154
  (r'[\\#' + bracecc + ']', String.Regex),
@@ -164,27 +157,6 @@ class CrystalLexer(ExtendedRegexLexer):
164
157
  states['strings'].append((r'%r' + lbrace, String.Regex,
165
158
  name+'-regex'))
166
159
 
167
- # these must come after %<brace>!
168
- states['strings'] += [
169
- # %r regex
170
- (r'(%r([\W_]))((?:\\\2|(?!\2).)*)(\2[imsx]*)',
171
- intp_regex_callback),
172
- # regular fancy strings with qsw
173
- (r'(%[wi]([\W_]))((?:\\\2|(?!\2).)*)(\2)',
174
- intp_string_callback),
175
- # special forms of fancy strings after operators or
176
- # in method calls with braces
177
- (r'(?<=[-+/*%=<>&!^|~,(])(\s*)(%([\t ])(?:(?:\\\3|(?!\3).)*)\3)',
178
- bygroups(Text, String.Other, None)),
179
- # and because of fixed width lookbehinds the whole thing a
180
- # second time for line startings...
181
- (r'^(\s*)(%([\t ])(?:(?:\\\3|(?!\3).)*)\3)',
182
- bygroups(Text, String.Other, None)),
183
- # all regular fancy strings without qsw
184
- (r'(%([\[{(<]))((?:\\\2|(?!\2).)*)(\2)',
185
- intp_string_callback),
186
- ]
187
-
188
160
  return states
189
161
 
190
162
  tokens = {
@@ -192,10 +164,16 @@ class CrystalLexer(ExtendedRegexLexer):
192
164
  (r'#.*?$', Comment.Single),
193
165
  # keywords
194
166
  (words('''
195
- abstract asm as begin break case do else elsif end ensure extend ifdef if
196
- include instance_sizeof next of pointerof private protected rescue return
197
- 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
198
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),
199
177
  (words(['true', 'false', 'nil'], suffix=r'\b'), Keyword.Constant),
200
178
  # start of function, class and module names
201
179
  (r'(module|lib)(\s+)([a-zA-Z_]\w*(?:::[a-zA-Z_]\w*)*)',
@@ -203,29 +181,23 @@ class CrystalLexer(ExtendedRegexLexer):
203
181
  (r'(def|fun|macro)(\s+)((?:[a-zA-Z_]\w*::)*)',
204
182
  bygroups(Keyword, Text, Name.Namespace), 'funcname'),
205
183
  (r'def(?=[*%&^`~+-/\[<>=])', Keyword, 'funcname'),
206
- (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*::)*)',
207
185
  bygroups(Keyword, Text, Name.Namespace), 'classname'),
208
- (r'(self|out|uninitialized)\b|(is_a|responds_to)\?', Keyword.Pseudo),
209
- # macros
186
+ # https://crystal-lang.org/api/toplevel.html
210
187
  (words('''
211
- debugger record pp assert_responds_to spawn parallel
212
- getter setter property delegate def_hash def_equals def_equals_and_hash
213
- forward_missing_to
214
- '''.split(), suffix=r'\b'), Name.Builtin.Pseudo),
215
- (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),
216
192
  # builtins
217
- # http://crystal-lang.org/api/toplevel.html
218
193
  (words('''
219
- Object Value Struct Reference Proc Class Nil Symbol Enum Void
220
- Bool Number Int Int8 Int16 Int32 Int64 UInt8 UInt16 UInt32 UInt64
221
- Float Float32 Float64 Char String
222
- Pointer Slice Range Exception Regex
223
- Mutex StaticArray Array Hash Set Tuple Deque Box Process File
224
- Dir Time Channel Concurrent Scheduler
225
- abort at_exit caller delay exit fork future get_stack_top gets
226
- lazy loop main p print printf puts
227
- 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
228
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),
229
201
  # normal heredocs
230
202
  (r'(?<!\w)(<<-?)(["`\']?)([a-zA-Z_]\w*)(\2)(.*?\n)',
231
203
  heredoc_callback),
@@ -297,18 +269,18 @@ class CrystalLexer(ExtendedRegexLexer):
297
269
  (r'\$-[0adFiIlpvw]', Name.Variable.Global),
298
270
  (r'::', Operator),
299
271
  include('strings'),
300
- # chars
272
+ # https://crystal-lang.org/reference/syntax_and_semantics/literals/char.html
301
273
  (r'\?(\\[MC]-)*' # modifiers
302
- 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)'
303
275
  r'(?!\w)',
304
276
  String.Char),
305
- (r'[A-Z][A-Z_]+\b', Name.Constant),
277
+ (r'[A-Z][A-Z_]+\b(?!::|\.)', Name.Constant),
306
278
  # macro expansion
307
279
  (r'\{%', String.Interpol, 'in-macro-control'),
308
280
  (r'\{\{', String.Interpol, 'in-macro-expr'),
309
- # attributes
310
- (r'(@\[)(\s*)([A-Z]\w*)',
311
- 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'),
312
284
  # this is needed because Crystal attributes can look
313
285
  # like keywords (class) or like this: ` ?!?
314
286
  (words(CRYSTAL_OPERATORS, prefix=r'(\.|::)'),
@@ -345,7 +317,9 @@ class CrystalLexer(ExtendedRegexLexer):
345
317
  (r'#\{', String.Interpol, 'in-intp'),
346
318
  ],
347
319
  'string-escaped': [
348
- (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)
349
323
  ],
350
324
  'string-intp-escaped': [
351
325
  include('string-intp'),
@@ -375,7 +349,7 @@ class CrystalLexer(ExtendedRegexLexer):
375
349
  'in-macro-control': [
376
350
  (r'\{%', String.Interpol, '#push'),
377
351
  (r'%\}', String.Interpol, '#pop'),
378
- (r'for\b|in\b', Keyword),
352
+ (r'(for|verbatim)\b', Keyword),
379
353
  include('root'),
380
354
  ],
381
355
  'in-macro-expr': [
@@ -383,7 +357,7 @@ class CrystalLexer(ExtendedRegexLexer):
383
357
  (r'\}\}', String.Interpol, '#pop'),
384
358
  include('root'),
385
359
  ],
386
- 'in-attr': [
360
+ 'in-annot': [
387
361
  (r'\[', Operator, '#push'),
388
362
  (r'\]', Operator, '#pop'),
389
363
  include('root'),
@@ -1,11 +1,10 @@
1
- # -*- coding: utf-8 -*-
2
1
  """
3
2
  pygments.lexers.csound
4
3
  ~~~~~~~~~~~~~~~~~~~~~~
5
4
 
6
5
  Lexers for Csound languages.
7
6
 
8
- :copyright: Copyright 2006-2020 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
 
@@ -14,7 +13,7 @@ import re
14
13
  from pygments.lexer import RegexLexer, bygroups, default, include, using, words
15
14
  from pygments.token import Comment, Error, Keyword, Name, Number, Operator, Punctuation, \
16
15
  String, Text, Whitespace
17
- from pygments.lexers._csound_builtins import OPCODES, DEPRECATED_OPCODES
16
+ from pygments.lexers._csound_builtins import OPCODES, DEPRECATED_OPCODES, REMOVED_OPCODES
18
17
  from pygments.lexers.html import HtmlLexer
19
18
  from pygments.lexers.python import PythonLexer
20
19
  from pygments.lexers.scripting import LuaLexer
@@ -220,7 +219,7 @@ class CsoundOrchestraLexer(CsoundLexer):
220
219
  type_annotation_token = Keyword.Type
221
220
 
222
221
  name = match.group(1)
223
- if name in OPCODES or name in DEPRECATED_OPCODES:
222
+ if name in OPCODES or name in DEPRECATED_OPCODES or name in REMOVED_OPCODES:
224
223
  yield match.start(), Name.Builtin, name
225
224
  elif name in lexer.user_defined_opcodes:
226
225
  yield match.start(), Name.Function, name
@@ -1,11 +1,10 @@
1
- # -*- coding: utf-8 -*-
2
1
  """
3
2
  pygments.lexers.css
4
3
  ~~~~~~~~~~~~~~~~~~~
5
4
 
6
5
  Lexers for CSS and related stylesheet formats.
7
6
 
8
- :copyright: Copyright 2006-2020 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
 
@@ -289,8 +288,8 @@ class CssLexer(RegexLexer):
289
288
  (r'(@)([\w-]+)', bygroups(Punctuation, Keyword), 'atrule'),
290
289
  (r'[\w-]+', Name.Tag),
291
290
  (r'[~^*!%&$\[\]()<>|+=@:;,./?-]', Operator),
292
- (r'"(\\\\|\\"|[^"])*"', String.Double),
293
- (r"'(\\\\|\\'|[^'])*'", String.Single)
291
+ (r'"(\\\\|\\[^\\]|[^"\\])*"', String.Double),
292
+ (r"'(\\\\|\\[^\\]|[^'\\])*'", String.Single),
294
293
  ],
295
294
  'atrule': [
296
295
  (r'\{', Punctuation, 'atcontent'),
@@ -310,6 +309,8 @@ class CssLexer(RegexLexer):
310
309
  (words(_vendor_prefixes,), Keyword.Pseudo),
311
310
  (r'('+r'|'.join(_css_properties)+r')(\s*)(\:)',
312
311
  bygroups(Keyword, Text, Punctuation), 'value-start'),
312
+ (r'([-]+[a-zA-Z_][\w-]*)(\s*)(\:)', bygroups(Name.Variable, Text, Punctuation),
313
+ 'value-start'),
313
314
  (r'([a-zA-Z_][\w-]*)(\s*)(\:)', bygroups(Name, Text, Punctuation),
314
315
  'value-start'),
315
316
 
@@ -335,14 +336,15 @@ class CssLexer(RegexLexer):
335
336
 
336
337
  (r'[~^*!%&<>|+=@:./?-]+', Operator),
337
338
  (r'[\[\](),]+', Punctuation),
338
- (r'"(\\\\|\\"|[^"])*"', String.Double),
339
- (r"'(\\\\|\\'|[^'])*'", String.Single),
339
+ (r'"(\\\\|\\[^\\]|[^"\\])*"', String.Double),
340
+ (r"'(\\\\|\\[^\\]|[^'\\])*'", String.Single),
340
341
  (r'[a-zA-Z_][\w-]*', Name),
341
342
  (r';', Punctuation, '#pop'),
342
343
  (r'\}', Punctuation, '#pop:2'),
343
344
  ],
344
345
  'function-start': [
345
346
  (r'\s+', Text),
347
+ (r'[-]+([\w+]+[-]*)+', Name.Variable),
346
348
  include('urls'),
347
349
  (words(_vendor_prefixes,), Keyword.Pseudo),
348
350
  (words(_keyword_values, suffix=r'\b'), Keyword.Constant),
@@ -359,8 +361,8 @@ class CssLexer(RegexLexer):
359
361
  include('numeric-values'),
360
362
  (r'[*+/-]', Operator),
361
363
  (r',', Punctuation),
362
- (r'"(\\\\|\\"|[^"])*"', String.Double),
363
- (r"'(\\\\|\\'|[^'])*'", String.Single),
364
+ (r'"(\\\\|\\[^\\]|[^"\\])*"', String.Double),
365
+ (r"'(\\\\|\\[^\\]|[^'\\])*'", String.Single),
364
366
  (r'[a-zA-Z_-]\w*', Name),
365
367
  (r'\)', Punctuation, '#pop'),
366
368
  ],
@@ -686,6 +688,7 @@ class LessCssLexer(CssLexer):
686
688
  ],
687
689
  'content': [
688
690
  (r'\{', Punctuation, '#push'),
691
+ (r'//.*\n', Comment.Single),
689
692
  inherit,
690
693
  ],
691
694
  }