pygments.rb 2.4.1 → 3.0.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 (348) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +8 -8
  3. data/.github/workflows/release.yml +5 -5
  4. data/.gitignore +2 -0
  5. data/.rubocop.yml +1 -1
  6. data/CHANGELOG.adoc +9 -1
  7. data/README.adoc +2 -2
  8. data/lib/pygments/version.rb +1 -1
  9. data/pygments.rb.gemspec +2 -2
  10. data/vendor/pygments-main/bin/pygmentize +1 -1
  11. data/vendor/pygments-main/pygments/__init__.py +2 -2
  12. data/vendor/pygments-main/pygments/__main__.py +1 -1
  13. data/vendor/pygments-main/pygments/cmdline.py +12 -12
  14. data/vendor/pygments-main/pygments/console.py +5 -5
  15. data/vendor/pygments-main/pygments/filter.py +2 -3
  16. data/vendor/pygments-main/pygments/filters/__init__.py +4 -4
  17. data/vendor/pygments-main/pygments/formatter.py +6 -1
  18. data/vendor/pygments-main/pygments/formatters/__init__.py +7 -8
  19. data/vendor/pygments-main/pygments/formatters/_mapping.py +0 -0
  20. data/vendor/pygments-main/pygments/formatters/bbcode.py +2 -2
  21. data/vendor/pygments-main/pygments/formatters/groff.py +3 -3
  22. data/vendor/pygments-main/pygments/formatters/html.py +38 -40
  23. data/vendor/pygments-main/pygments/formatters/img.py +51 -11
  24. data/vendor/pygments-main/pygments/formatters/irc.py +1 -1
  25. data/vendor/pygments-main/pygments/formatters/latex.py +24 -27
  26. data/vendor/pygments-main/pygments/formatters/other.py +3 -4
  27. data/vendor/pygments-main/pygments/formatters/pangomarkup.py +2 -2
  28. data/vendor/pygments-main/pygments/formatters/rtf.py +228 -25
  29. data/vendor/pygments-main/pygments/formatters/svg.py +17 -20
  30. data/vendor/pygments-main/pygments/formatters/terminal.py +1 -1
  31. data/vendor/pygments-main/pygments/formatters/terminal256.py +1 -1
  32. data/vendor/pygments-main/pygments/lexer.py +51 -33
  33. data/vendor/pygments-main/pygments/lexers/__init__.py +12 -12
  34. data/vendor/pygments-main/pygments/lexers/_ada_builtins.py +1 -1
  35. data/vendor/pygments-main/pygments/lexers/_asy_builtins.py +1 -1
  36. data/vendor/pygments-main/pygments/lexers/_cl_builtins.py +1 -1
  37. data/vendor/pygments-main/pygments/lexers/_cocoa_builtins.py +2 -2
  38. data/vendor/pygments-main/pygments/lexers/_csound_builtins.py +1 -1
  39. data/vendor/pygments-main/pygments/lexers/_css_builtins.py +1 -1
  40. data/vendor/pygments-main/pygments/lexers/_julia_builtins.py +1 -1
  41. data/vendor/pygments-main/pygments/lexers/_lasso_builtins.py +1 -1
  42. data/vendor/pygments-main/pygments/lexers/_lilypond_builtins.py +1 -1
  43. data/vendor/pygments-main/pygments/lexers/_lua_builtins.py +5 -5
  44. data/vendor/pygments-main/pygments/lexers/_luau_builtins.py +62 -0
  45. data/vendor/pygments-main/pygments/lexers/_mapping.py +41 -11
  46. data/vendor/pygments-main/pygments/lexers/_mql_builtins.py +1 -1
  47. data/vendor/pygments-main/pygments/lexers/_mysql_builtins.py +3 -3
  48. data/vendor/pygments-main/pygments/lexers/_openedge_builtins.py +1 -1
  49. data/vendor/pygments-main/pygments/lexers/_php_builtins.py +3 -3
  50. data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +5 -5
  51. data/vendor/pygments-main/pygments/lexers/_qlik_builtins.py +1 -1
  52. data/vendor/pygments-main/pygments/lexers/_scheme_builtins.py +1 -1
  53. data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +4 -4
  54. data/vendor/pygments-main/pygments/lexers/_sourcemod_builtins.py +3 -3
  55. data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +1 -1
  56. data/vendor/pygments-main/pygments/lexers/_stata_builtins.py +1 -1
  57. data/vendor/pygments-main/pygments/lexers/_tsql_builtins.py +1 -1
  58. data/vendor/pygments-main/pygments/lexers/_usd_builtins.py +1 -1
  59. data/vendor/pygments-main/pygments/lexers/_vbscript_builtins.py +1 -1
  60. data/vendor/pygments-main/pygments/lexers/_vim_builtins.py +1 -1
  61. data/vendor/pygments-main/pygments/lexers/actionscript.py +6 -8
  62. data/vendor/pygments-main/pygments/lexers/ada.py +3 -3
  63. data/vendor/pygments-main/pygments/lexers/agile.py +3 -1
  64. data/vendor/pygments-main/pygments/lexers/algebra.py +9 -13
  65. data/vendor/pygments-main/pygments/lexers/ambient.py +2 -3
  66. data/vendor/pygments-main/pygments/lexers/amdgpu.py +3 -3
  67. data/vendor/pygments-main/pygments/lexers/ampl.py +2 -3
  68. data/vendor/pygments-main/pygments/lexers/apdlexer.py +4 -3
  69. data/vendor/pygments-main/pygments/lexers/apl.py +2 -3
  70. data/vendor/pygments-main/pygments/lexers/archetype.py +8 -12
  71. data/vendor/pygments-main/pygments/lexers/arrow.py +2 -3
  72. data/vendor/pygments-main/pygments/lexers/arturo.py +2 -3
  73. data/vendor/pygments-main/pygments/lexers/asc.py +4 -4
  74. data/vendor/pygments-main/pygments/lexers/asm.py +28 -15
  75. data/vendor/pygments-main/pygments/lexers/asn1.py +178 -0
  76. data/vendor/pygments-main/pygments/lexers/automation.py +6 -8
  77. data/vendor/pygments-main/pygments/lexers/bare.py +2 -3
  78. data/vendor/pygments-main/pygments/lexers/basic.py +48 -57
  79. data/vendor/pygments-main/pygments/lexers/bdd.py +3 -4
  80. data/vendor/pygments-main/pygments/lexers/berry.py +4 -4
  81. data/vendor/pygments-main/pygments/lexers/bibtex.py +5 -5
  82. data/vendor/pygments-main/pygments/lexers/blueprint.py +173 -0
  83. data/vendor/pygments-main/pygments/lexers/boa.py +4 -4
  84. data/vendor/pygments-main/pygments/lexers/bqn.py +109 -0
  85. data/vendor/pygments-main/pygments/lexers/business.py +21 -22
  86. data/vendor/pygments-main/pygments/lexers/c_cpp.py +9 -4
  87. data/vendor/pygments-main/pygments/lexers/c_like.py +99 -27
  88. data/vendor/pygments-main/pygments/lexers/capnproto.py +2 -3
  89. data/vendor/pygments-main/pygments/lexers/carbon.py +10 -11
  90. data/vendor/pygments-main/pygments/lexers/cddl.py +8 -9
  91. data/vendor/pygments-main/pygments/lexers/chapel.py +2 -3
  92. data/vendor/pygments-main/pygments/lexers/clean.py +2 -1
  93. data/vendor/pygments-main/pygments/lexers/comal.py +2 -1
  94. data/vendor/pygments-main/pygments/lexers/compiled.py +2 -1
  95. data/vendor/pygments-main/pygments/lexers/configs.py +342 -108
  96. data/vendor/pygments-main/pygments/lexers/console.py +5 -5
  97. data/vendor/pygments-main/pygments/lexers/cplint.py +2 -3
  98. data/vendor/pygments-main/pygments/lexers/crystal.py +4 -5
  99. data/vendor/pygments-main/pygments/lexers/csound.py +6 -8
  100. data/vendor/pygments-main/pygments/lexers/css.py +5 -5
  101. data/vendor/pygments-main/pygments/lexers/d.py +4 -3
  102. data/vendor/pygments-main/pygments/lexers/dalvik.py +2 -3
  103. data/vendor/pygments-main/pygments/lexers/data.py +8 -12
  104. data/vendor/pygments-main/pygments/lexers/dax.py +2 -3
  105. data/vendor/pygments-main/pygments/lexers/devicetree.py +2 -3
  106. data/vendor/pygments-main/pygments/lexers/diff.py +7 -6
  107. data/vendor/pygments-main/pygments/lexers/dns.py +109 -0
  108. data/vendor/pygments-main/pygments/lexers/dotnet.py +19 -14
  109. data/vendor/pygments-main/pygments/lexers/dsls.py +24 -35
  110. data/vendor/pygments-main/pygments/lexers/dylan.py +8 -16
  111. data/vendor/pygments-main/pygments/lexers/ecl.py +2 -3
  112. data/vendor/pygments-main/pygments/lexers/eiffel.py +3 -4
  113. data/vendor/pygments-main/pygments/lexers/elm.py +3 -4
  114. data/vendor/pygments-main/pygments/lexers/elpi.py +28 -21
  115. data/vendor/pygments-main/pygments/lexers/email.py +3 -3
  116. data/vendor/pygments-main/pygments/lexers/erlang.py +22 -24
  117. data/vendor/pygments-main/pygments/lexers/esoteric.py +11 -12
  118. data/vendor/pygments-main/pygments/lexers/ezhil.py +2 -3
  119. data/vendor/pygments-main/pygments/lexers/factor.py +2 -3
  120. data/vendor/pygments-main/pygments/lexers/fantom.py +3 -3
  121. data/vendor/pygments-main/pygments/lexers/felix.py +9 -10
  122. data/vendor/pygments-main/pygments/lexers/fift.py +2 -1
  123. data/vendor/pygments-main/pygments/lexers/floscript.py +2 -3
  124. data/vendor/pygments-main/pygments/lexers/forth.py +2 -3
  125. data/vendor/pygments-main/pygments/lexers/fortran.py +6 -7
  126. data/vendor/pygments-main/pygments/lexers/foxpro.py +3 -3
  127. data/vendor/pygments-main/pygments/lexers/freefem.py +2 -3
  128. data/vendor/pygments-main/pygments/lexers/func.py +3 -1
  129. data/vendor/pygments-main/pygments/lexers/functional.py +2 -1
  130. data/vendor/pygments-main/pygments/lexers/futhark.py +6 -7
  131. data/vendor/pygments-main/pygments/lexers/gcodelexer.py +3 -3
  132. data/vendor/pygments-main/pygments/lexers/gdscript.py +2 -1
  133. data/vendor/pygments-main/pygments/lexers/go.py +3 -4
  134. data/vendor/pygments-main/pygments/lexers/grammar_notation.py +6 -9
  135. data/vendor/pygments-main/pygments/lexers/graph.py +12 -9
  136. data/vendor/pygments-main/pygments/lexers/graphics.py +13 -17
  137. data/vendor/pygments-main/pygments/lexers/graphql.py +176 -0
  138. data/vendor/pygments-main/pygments/lexers/graphviz.py +2 -3
  139. data/vendor/pygments-main/pygments/lexers/gsql.py +2 -3
  140. data/vendor/pygments-main/pygments/lexers/haskell.py +27 -32
  141. data/vendor/pygments-main/pygments/lexers/haxe.py +3 -5
  142. data/vendor/pygments-main/pygments/lexers/hdl.py +8 -7
  143. data/vendor/pygments-main/pygments/lexers/hexdump.py +3 -3
  144. data/vendor/pygments-main/pygments/lexers/html.py +34 -13
  145. data/vendor/pygments-main/pygments/lexers/idl.py +2 -3
  146. data/vendor/pygments-main/pygments/lexers/igor.py +305 -290
  147. data/vendor/pygments-main/pygments/lexers/inferno.py +2 -3
  148. data/vendor/pygments-main/pygments/lexers/installers.py +7 -9
  149. data/vendor/pygments-main/pygments/lexers/int_fiction.py +150 -162
  150. data/vendor/pygments-main/pygments/lexers/iolang.py +2 -3
  151. data/vendor/pygments-main/pygments/lexers/j.py +2 -3
  152. data/vendor/pygments-main/pygments/lexers/javascript.py +18 -19
  153. data/vendor/pygments-main/pygments/lexers/jmespath.py +2 -1
  154. data/vendor/pygments-main/pygments/lexers/jslt.py +2 -3
  155. data/vendor/pygments-main/pygments/lexers/jsonnet.py +4 -3
  156. data/vendor/pygments-main/pygments/lexers/jsx.py +75 -0
  157. data/vendor/pygments-main/pygments/lexers/julia.py +4 -5
  158. data/vendor/pygments-main/pygments/lexers/jvm.py +98 -116
  159. data/vendor/pygments-main/pygments/lexers/kuin.py +2 -3
  160. data/vendor/pygments-main/pygments/lexers/kusto.py +93 -0
  161. data/vendor/pygments-main/pygments/lexers/ldap.py +155 -0
  162. data/vendor/pygments-main/pygments/lexers/lean.py +241 -0
  163. data/vendor/pygments-main/pygments/lexers/lilypond.py +2 -3
  164. data/vendor/pygments-main/pygments/lexers/lisp.py +373 -65
  165. data/vendor/pygments-main/pygments/lexers/macaulay2.py +53 -4
  166. data/vendor/pygments-main/pygments/lexers/make.py +7 -5
  167. data/vendor/pygments-main/pygments/lexers/markup.py +242 -91
  168. data/vendor/pygments-main/pygments/lexers/math.py +2 -1
  169. data/vendor/pygments-main/pygments/lexers/matlab.py +10 -12
  170. data/vendor/pygments-main/pygments/lexers/maxima.py +2 -3
  171. data/vendor/pygments-main/pygments/lexers/meson.py +2 -3
  172. data/vendor/pygments-main/pygments/lexers/mime.py +4 -4
  173. data/vendor/pygments-main/pygments/lexers/minecraft.py +24 -27
  174. data/vendor/pygments-main/pygments/lexers/mips.py +3 -1
  175. data/vendor/pygments-main/pygments/lexers/ml.py +59 -61
  176. data/vendor/pygments-main/pygments/lexers/modeling.py +19 -22
  177. data/vendor/pygments-main/pygments/lexers/modula2.py +2 -3
  178. data/vendor/pygments-main/pygments/lexers/mojo.py +704 -0
  179. data/vendor/pygments-main/pygments/lexers/monte.py +2 -3
  180. data/vendor/pygments-main/pygments/lexers/mosel.py +3 -3
  181. data/vendor/pygments-main/pygments/lexers/ncl.py +4 -3
  182. data/vendor/pygments-main/pygments/lexers/nimrod.py +7 -8
  183. data/vendor/pygments-main/pygments/lexers/nit.py +2 -3
  184. data/vendor/pygments-main/pygments/lexers/nix.py +40 -31
  185. data/vendor/pygments-main/pygments/lexers/oberon.py +3 -3
  186. data/vendor/pygments-main/pygments/lexers/objective.py +14 -6
  187. data/vendor/pygments-main/pygments/lexers/ooc.py +2 -3
  188. data/vendor/pygments-main/pygments/lexers/openscad.py +96 -0
  189. data/vendor/pygments-main/pygments/lexers/other.py +2 -1
  190. data/vendor/pygments-main/pygments/lexers/parasail.py +2 -3
  191. data/vendor/pygments-main/pygments/lexers/parsers.py +41 -44
  192. data/vendor/pygments-main/pygments/lexers/pascal.py +6 -3
  193. data/vendor/pygments-main/pygments/lexers/pawn.py +5 -5
  194. data/vendor/pygments-main/pygments/lexers/perl.py +3 -3
  195. data/vendor/pygments-main/pygments/lexers/phix.py +2 -3
  196. data/vendor/pygments-main/pygments/lexers/php.py +4 -5
  197. data/vendor/pygments-main/pygments/lexers/pointless.py +2 -3
  198. data/vendor/pygments-main/pygments/lexers/pony.py +3 -3
  199. data/vendor/pygments-main/pygments/lexers/praat.py +2 -3
  200. data/vendor/pygments-main/pygments/lexers/procfile.py +2 -3
  201. data/vendor/pygments-main/pygments/lexers/prolog.py +23 -9
  202. data/vendor/pygments-main/pygments/lexers/promql.py +2 -1
  203. data/vendor/pygments-main/pygments/lexers/prql.py +251 -0
  204. data/vendor/pygments-main/pygments/lexers/ptx.py +119 -0
  205. data/vendor/pygments-main/pygments/lexers/python.py +24 -24
  206. data/vendor/pygments-main/pygments/lexers/q.py +5 -6
  207. data/vendor/pygments-main/pygments/lexers/qlik.py +3 -3
  208. data/vendor/pygments-main/pygments/lexers/qvt.py +5 -3
  209. data/vendor/pygments-main/pygments/lexers/r.py +8 -6
  210. data/vendor/pygments-main/pygments/lexers/rdf.py +19 -13
  211. data/vendor/pygments-main/pygments/lexers/rebol.py +7 -7
  212. data/vendor/pygments-main/pygments/lexers/resource.py +5 -6
  213. data/vendor/pygments-main/pygments/lexers/ride.py +4 -5
  214. data/vendor/pygments-main/pygments/lexers/rita.py +2 -3
  215. data/vendor/pygments-main/pygments/lexers/rnc.py +2 -3
  216. data/vendor/pygments-main/pygments/lexers/roboconf.py +5 -5
  217. data/vendor/pygments-main/pygments/lexers/robotframework.py +2 -3
  218. data/vendor/pygments-main/pygments/lexers/ruby.py +8 -13
  219. data/vendor/pygments-main/pygments/lexers/rust.py +9 -10
  220. data/vendor/pygments-main/pygments/lexers/sas.py +3 -3
  221. data/vendor/pygments-main/pygments/lexers/savi.py +131 -130
  222. data/vendor/pygments-main/pygments/lexers/scdoc.py +13 -7
  223. data/vendor/pygments-main/pygments/lexers/scripting.py +354 -42
  224. data/vendor/pygments-main/pygments/lexers/sgf.py +2 -3
  225. data/vendor/pygments-main/pygments/lexers/shell.py +107 -129
  226. data/vendor/pygments-main/pygments/lexers/sieve.py +3 -3
  227. data/vendor/pygments-main/pygments/lexers/slash.py +4 -5
  228. data/vendor/pygments-main/pygments/lexers/smalltalk.py +3 -5
  229. data/vendor/pygments-main/pygments/lexers/smithy.py +2 -3
  230. data/vendor/pygments-main/pygments/lexers/smv.py +3 -3
  231. data/vendor/pygments-main/pygments/lexers/snobol.py +3 -3
  232. data/vendor/pygments-main/pygments/lexers/solidity.py +3 -3
  233. data/vendor/pygments-main/pygments/lexers/soong.py +78 -0
  234. data/vendor/pygments-main/pygments/lexers/sophia.py +3 -4
  235. data/vendor/pygments-main/pygments/lexers/special.py +8 -3
  236. data/vendor/pygments-main/pygments/lexers/spice.py +15 -16
  237. data/vendor/pygments-main/pygments/lexers/sql.py +24 -18
  238. data/vendor/pygments-main/pygments/lexers/srcinfo.py +3 -3
  239. data/vendor/pygments-main/pygments/lexers/stata.py +2 -3
  240. data/vendor/pygments-main/pygments/lexers/supercollider.py +2 -3
  241. data/vendor/pygments-main/pygments/lexers/tact.py +303 -0
  242. data/vendor/pygments-main/pygments/lexers/tal.py +13 -10
  243. data/vendor/pygments-main/pygments/lexers/tcl.py +2 -3
  244. data/vendor/pygments-main/pygments/lexers/teal.py +2 -3
  245. data/vendor/pygments-main/pygments/lexers/templates.py +131 -72
  246. data/vendor/pygments-main/pygments/lexers/teraterm.py +2 -3
  247. data/vendor/pygments-main/pygments/lexers/testing.py +4 -5
  248. data/vendor/pygments-main/pygments/lexers/text.py +2 -1
  249. data/vendor/pygments-main/pygments/lexers/textedit.py +9 -6
  250. data/vendor/pygments-main/pygments/lexers/textfmts.py +20 -15
  251. data/vendor/pygments-main/pygments/lexers/theorem.py +41 -115
  252. data/vendor/pygments-main/pygments/lexers/thingsdb.py +50 -26
  253. data/vendor/pygments-main/pygments/lexers/tlb.py +3 -1
  254. data/vendor/pygments-main/pygments/lexers/tls.py +54 -0
  255. data/vendor/pygments-main/pygments/lexers/tnt.py +2 -3
  256. data/vendor/pygments-main/pygments/lexers/trafficscript.py +3 -3
  257. data/vendor/pygments-main/pygments/lexers/typoscript.py +6 -7
  258. data/vendor/pygments-main/pygments/lexers/typst.py +104 -0
  259. data/vendor/pygments-main/pygments/lexers/ul4.py +47 -5
  260. data/vendor/pygments-main/pygments/lexers/unicon.py +9 -7
  261. data/vendor/pygments-main/pygments/lexers/urbi.py +3 -3
  262. data/vendor/pygments-main/pygments/lexers/usd.py +6 -11
  263. data/vendor/pygments-main/pygments/lexers/varnish.py +5 -5
  264. data/vendor/pygments-main/pygments/lexers/verification.py +4 -5
  265. data/vendor/pygments-main/pygments/lexers/verifpal.py +65 -0
  266. data/vendor/pygments-main/pygments/lexers/vip.py +150 -0
  267. data/vendor/pygments-main/pygments/lexers/vyper.py +140 -0
  268. data/vendor/pygments-main/pygments/lexers/web.py +2 -1
  269. data/vendor/pygments-main/pygments/lexers/webassembly.py +2 -3
  270. data/vendor/pygments-main/pygments/lexers/webidl.py +2 -3
  271. data/vendor/pygments-main/pygments/lexers/webmisc.py +11 -15
  272. data/vendor/pygments-main/pygments/lexers/wgsl.py +6 -7
  273. data/vendor/pygments-main/pygments/lexers/whiley.py +2 -3
  274. data/vendor/pygments-main/pygments/lexers/wowtoc.py +3 -3
  275. data/vendor/pygments-main/pygments/lexers/wren.py +3 -4
  276. data/vendor/pygments-main/pygments/lexers/x10.py +6 -7
  277. data/vendor/pygments-main/pygments/lexers/xorg.py +2 -1
  278. data/vendor/pygments-main/pygments/lexers/yang.py +2 -3
  279. data/vendor/pygments-main/pygments/lexers/yara.py +69 -0
  280. data/vendor/pygments-main/pygments/lexers/zig.py +2 -1
  281. data/vendor/pygments-main/pygments/modeline.py +4 -4
  282. data/vendor/pygments-main/pygments/plugin.py +3 -19
  283. data/vendor/pygments-main/pygments/regexopt.py +1 -1
  284. data/vendor/pygments-main/pygments/scanner.py +1 -1
  285. data/vendor/pygments-main/pygments/sphinxext.py +38 -8
  286. data/vendor/pygments-main/pygments/style.py +8 -2
  287. data/vendor/pygments-main/pygments/styles/__init__.py +17 -59
  288. data/vendor/pygments-main/pygments/styles/_mapping.py +54 -0
  289. data/vendor/pygments-main/pygments/styles/abap.py +5 -1
  290. data/vendor/pygments-main/pygments/styles/algol.py +5 -1
  291. data/vendor/pygments-main/pygments/styles/algol_nu.py +5 -1
  292. data/vendor/pygments-main/pygments/styles/arduino.py +76 -72
  293. data/vendor/pygments-main/pygments/styles/autumn.py +6 -1
  294. data/vendor/pygments-main/pygments/styles/borland.py +6 -1
  295. data/vendor/pygments-main/pygments/styles/bw.py +6 -1
  296. data/vendor/pygments-main/pygments/styles/coffee.py +80 -0
  297. data/vendor/pygments-main/pygments/styles/colorful.py +6 -1
  298. data/vendor/pygments-main/pygments/styles/default.py +6 -1
  299. data/vendor/pygments-main/pygments/styles/dracula.py +68 -80
  300. data/vendor/pygments-main/pygments/styles/emacs.py +6 -1
  301. data/vendor/pygments-main/pygments/styles/friendly.py +6 -1
  302. data/vendor/pygments-main/pygments/styles/friendly_grayscale.py +6 -1
  303. data/vendor/pygments-main/pygments/styles/fruity.py +7 -1
  304. data/vendor/pygments-main/pygments/styles/gh_dark.py +7 -1
  305. data/vendor/pygments-main/pygments/styles/gruvbox.py +10 -1
  306. data/vendor/pygments-main/pygments/styles/igor.py +6 -1
  307. data/vendor/pygments-main/pygments/styles/inkpot.py +7 -2
  308. data/vendor/pygments-main/pygments/styles/lightbulb.py +110 -0
  309. data/vendor/pygments-main/pygments/styles/lilypond.py +8 -2
  310. data/vendor/pygments-main/pygments/styles/lovelace.py +16 -10
  311. data/vendor/pygments-main/pygments/styles/manni.py +7 -2
  312. data/vendor/pygments-main/pygments/styles/material.py +21 -14
  313. data/vendor/pygments-main/pygments/styles/monokai.py +16 -10
  314. data/vendor/pygments-main/pygments/styles/murphy.py +7 -2
  315. data/vendor/pygments-main/pygments/styles/native.py +10 -5
  316. data/vendor/pygments-main/pygments/styles/nord.py +9 -3
  317. data/vendor/pygments-main/pygments/styles/onedark.py +6 -2
  318. data/vendor/pygments-main/pygments/styles/paraiso_dark.py +7 -2
  319. data/vendor/pygments-main/pygments/styles/paraiso_light.py +7 -2
  320. data/vendor/pygments-main/pygments/styles/pastie.py +7 -1
  321. data/vendor/pygments-main/pygments/styles/perldoc.py +7 -1
  322. data/vendor/pygments-main/pygments/styles/rainbow_dash.py +26 -19
  323. data/vendor/pygments-main/pygments/styles/rrt.py +8 -2
  324. data/vendor/pygments-main/pygments/styles/sas.py +6 -1
  325. data/vendor/pygments-main/pygments/styles/solarized.py +9 -1
  326. data/vendor/pygments-main/pygments/styles/staroffice.py +6 -1
  327. data/vendor/pygments-main/pygments/styles/stata_dark.py +6 -2
  328. data/vendor/pygments-main/pygments/styles/stata_light.py +6 -1
  329. data/vendor/pygments-main/pygments/styles/tango.py +7 -3
  330. data/vendor/pygments-main/pygments/styles/trac.py +7 -1
  331. data/vendor/pygments-main/pygments/styles/vim.py +7 -1
  332. data/vendor/pygments-main/pygments/styles/vs.py +7 -2
  333. data/vendor/pygments-main/pygments/styles/xcode.py +6 -1
  334. data/vendor/pygments-main/pygments/styles/zenburn.py +6 -1
  335. data/vendor/pygments-main/pygments/token.py +2 -1
  336. data/vendor/pygments-main/pygments/unistring.py +5 -5
  337. data/vendor/pygments-main/pygments/util.py +13 -19
  338. data/vendor/pygments-main/{Pygments-2.15.1.dist-info → pygments-2.18.0.dist-info}/METADATA +14 -13
  339. data/vendor/pygments-main/pygments-2.18.0.dist-info/RECORD +663 -0
  340. data/vendor/pygments-main/{Pygments-2.15.1.dist-info → pygments-2.18.0.dist-info}/WHEEL +1 -2
  341. data/vendor/pygments-main/{Pygments-2.15.1.dist-info → pygments-2.18.0.dist-info/licenses}/AUTHORS +13 -0
  342. metadata +39 -15
  343. data/vendor/pygments-main/Pygments-2.15.1.dist-info/RECORD +0 -614
  344. data/vendor/pygments-main/Pygments-2.15.1.dist-info/top_level.txt +0 -1
  345. /data/vendor/pygments-main/{Pygments-2.15.1.dist-info → pygments-2.18.0.dist-info}/INSTALLER +0 -0
  346. /data/vendor/pygments-main/{Pygments-2.15.1.dist-info → pygments-2.18.0.dist-info}/REQUESTED +0 -0
  347. /data/vendor/pygments-main/{Pygments-2.15.1.dist-info → pygments-2.18.0.dist-info}/entry_points.txt +0 -0
  348. /data/vendor/pygments-main/{Pygments-2.15.1.dist-info → pygments-2.18.0.dist-info/licenses}/LICENSE +0 -0
@@ -4,7 +4,7 @@
4
4
 
5
5
  Lexers for configuration file formats.
6
6
 
7
- :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
7
+ :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.
8
8
  :license: BSD, see LICENSE for details.
9
9
  """
10
10
 
@@ -17,8 +17,8 @@ from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
17
17
  from pygments.lexers.shell import BashLexer
18
18
  from pygments.lexers.data import JsonLexer
19
19
 
20
- __all__ = ['IniLexer', 'RegeditLexer', 'PropertiesLexer', 'KconfigLexer',
21
- 'Cfengine3Lexer', 'ApacheConfLexer', 'SquidConfLexer',
20
+ __all__ = ['IniLexer', 'SystemdLexer', 'DesktopLexer', 'RegeditLexer', 'PropertiesLexer',
21
+ 'KconfigLexer', 'Cfengine3Lexer', 'ApacheConfLexer', 'SquidConfLexer',
22
22
  'NginxConfLexer', 'LighttpdConfLexer', 'DockerLexer',
23
23
  'TerraformLexer', 'TermcapLexer', 'TerminfoLexer',
24
24
  'PkgConfigLexer', 'PacmanConfLexer', 'AugeasLexer', 'TOMLLexer',
@@ -34,12 +34,10 @@ class IniLexer(RegexLexer):
34
34
  aliases = ['ini', 'cfg', 'dosini']
35
35
  filenames = [
36
36
  '*.ini', '*.cfg', '*.inf', '.editorconfig',
37
- # systemd unit files
38
- # https://www.freedesktop.org/software/systemd/man/systemd.unit.html
39
- '*.service', '*.socket', '*.device', '*.mount', '*.automount',
40
- '*.swap', '*.target', '*.path', '*.timer', '*.slice', '*.scope',
41
37
  ]
42
38
  mimetypes = ['text/x-ini', 'text/inf']
39
+ url = 'https://en.wikipedia.org/wiki/INI_file'
40
+ version_added = ''
43
41
 
44
42
  tokens = {
45
43
  'root': [
@@ -67,14 +65,88 @@ class IniLexer(RegexLexer):
67
65
  npos = text.find('\n')
68
66
  if npos < 3:
69
67
  return False
70
- return text[0] == '[' and text[npos-1] == ']'
68
+ if text[0] == '[' and text[npos-1] == ']':
69
+ return 0.8
70
+ return False
71
+
72
+
73
+ class DesktopLexer(RegexLexer):
74
+ """
75
+ Lexer for .desktop files.
76
+ """
77
+
78
+ name = 'Desktop file'
79
+ url = "https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html"
80
+ aliases = ['desktop']
81
+ filenames = ['*.desktop']
82
+ mimetypes = ['application/x-desktop']
83
+ version_added = '2.16'
84
+
85
+ tokens = {
86
+ 'root': [
87
+ (r'^[ \t]*\n', Whitespace),
88
+ (r'^(#.*)(\n)', bygroups(Comment.Single, Whitespace)),
89
+ (r'(\[[^\]\n]+\])(\n)', bygroups(Keyword, Whitespace)),
90
+ (r'([-A-Za-z0-9]+)(\[[^\] \t=]+\])?([ \t]*)(=)([ \t]*)([^\n]*)([ \t\n]*\n)',
91
+ bygroups(Name.Attribute, Name.Namespace, Whitespace, Operator, Whitespace, String, Whitespace)),
92
+ ],
93
+ }
94
+
95
+ def analyse_text(text):
96
+ if text.startswith("[Desktop Entry]"):
97
+ return 1.0
98
+ if re.search(r"^\[Desktop Entry\][ \t]*$", text[:500], re.MULTILINE) is not None:
99
+ return 0.9
100
+ return 0.0
101
+
102
+
103
+ class SystemdLexer(RegexLexer):
104
+ """
105
+ Lexer for systemd unit files.
106
+ """
107
+
108
+ name = 'Systemd'
109
+ url = "https://www.freedesktop.org/software/systemd/man/systemd.syntax.html"
110
+ aliases = ['systemd']
111
+ filenames = [
112
+ '*.service', '*.socket', '*.device', '*.mount', '*.automount',
113
+ '*.swap', '*.target', '*.path', '*.timer', '*.slice', '*.scope',
114
+ ]
115
+ version_added = '2.16'
116
+
117
+ tokens = {
118
+ 'root': [
119
+ (r'^[ \t]*\n', Whitespace),
120
+ (r'^([;#].*)(\n)', bygroups(Comment.Single, Whitespace)),
121
+ (r'(\[[^\]\n]+\])(\n)', bygroups(Keyword, Whitespace)),
122
+ (r'([^=]+)([ \t]*)(=)([ \t]*)([^\n]*)(\\)(\n)',
123
+ bygroups(Name.Attribute, Whitespace, Operator, Whitespace, String,
124
+ Text, Whitespace),
125
+ "value"),
126
+ (r'([^=]+)([ \t]*)(=)([ \t]*)([^\n]*)(\n)',
127
+ bygroups(Name.Attribute, Whitespace, Operator, Whitespace, String, Whitespace)),
128
+ ],
129
+ 'value': [
130
+ # line continuation
131
+ (r'^([;#].*)(\n)', bygroups(Comment.Single, Whitespace)),
132
+ (r'([ \t]*)([^\n]*)(\\)(\n)',
133
+ bygroups(Whitespace, String, Text, Whitespace)),
134
+ (r'([ \t]*)([^\n]*)(\n)',
135
+ bygroups(Whitespace, String, Whitespace), "#pop"),
136
+ ],
137
+ }
138
+
139
+ def analyse_text(text):
140
+ if text.startswith("[Unit]"):
141
+ return 1.0
142
+ if re.search(r"^\[Unit\][ \t]*$", text[:500], re.MULTILINE) is not None:
143
+ return 0.9
144
+ return 0.0
71
145
 
72
146
 
73
147
  class RegeditLexer(RegexLexer):
74
148
  """
75
149
  Lexer for Windows Registry files produced by regedit.
76
-
77
- .. versionadded:: 1.6
78
150
  """
79
151
 
80
152
  name = 'reg'
@@ -82,6 +154,7 @@ class RegeditLexer(RegexLexer):
82
154
  aliases = ['registry']
83
155
  filenames = ['*.reg']
84
156
  mimetypes = ['text/x-windows-registry']
157
+ version_added = '1.6'
85
158
 
86
159
  tokens = {
87
160
  'root': [
@@ -118,14 +191,14 @@ class PropertiesLexer(RegexLexer):
118
191
  Lexer for configuration files in Java's properties format.
119
192
 
120
193
  Note: trailing whitespace counts as part of the value as per spec
121
-
122
- .. versionadded:: 1.4
123
194
  """
124
195
 
125
196
  name = 'Properties'
126
197
  aliases = ['properties', 'jproperties']
127
198
  filenames = ['*.properties']
128
199
  mimetypes = ['text/x-java-properties']
200
+ url = 'https://en.wikipedia.org/wiki/.properties'
201
+ version_added = '1.4'
129
202
 
130
203
  tokens = {
131
204
  'root': [
@@ -185,29 +258,30 @@ def _rx_indent(level):
185
258
  if level == 1:
186
259
  level_repeat = ''
187
260
  else:
188
- level_repeat = '{%s}' % level
189
- return r'(?:\t| %s\t| {%s})%s.*\n' % (space_repeat, tab_width, level_repeat)
261
+ level_repeat = f'{{{level}}}'
262
+ return rf'(?:\t| {space_repeat}\t| {{{tab_width}}}){level_repeat}.*\n'
190
263
 
191
264
 
192
265
  class KconfigLexer(RegexLexer):
193
266
  """
194
267
  For Linux-style Kconfig files.
195
-
196
- .. versionadded:: 1.6
197
268
  """
198
269
 
199
270
  name = 'Kconfig'
200
271
  aliases = ['kconfig', 'menuconfig', 'linux-config', 'kernel-config']
272
+ version_added = '1.6'
201
273
  # Adjust this if new kconfig file names appear in your environment
202
274
  filenames = ['Kconfig*', '*Config.in*', 'external.in*',
203
275
  'standard-modules.in']
204
276
  mimetypes = ['text/x-kconfig']
277
+ url = 'https://www.kernel.org/doc/html/latest/kbuild/kconfig-language.html'
278
+
205
279
  # No re.MULTILINE, indentation-aware help text needs line-by-line handling
206
280
  flags = 0
207
281
 
208
282
  def call_indent(level):
209
283
  # If indentation >= {level} is detected, enter state 'indent{level}'
210
- return (_rx_indent(level), String.Doc, 'indent%s' % level)
284
+ return (_rx_indent(level), String.Doc, f'indent{level}')
211
285
 
212
286
  def do_indent(level):
213
287
  # Print paragraphs of indentation level >= {level} as String.Doc,
@@ -269,8 +343,6 @@ class KconfigLexer(RegexLexer):
269
343
  class Cfengine3Lexer(RegexLexer):
270
344
  """
271
345
  Lexer for CFEngine3 policy files.
272
-
273
- .. versionadded:: 1.5
274
346
  """
275
347
 
276
348
  name = 'CFEngine3'
@@ -278,6 +350,7 @@ class Cfengine3Lexer(RegexLexer):
278
350
  aliases = ['cfengine3', 'cf3']
279
351
  filenames = ['*.cf']
280
352
  mimetypes = []
353
+ version_added = '1.5'
281
354
 
282
355
  tokens = {
283
356
  'root': [
@@ -332,14 +405,14 @@ class ApacheConfLexer(RegexLexer):
332
405
  """
333
406
  Lexer for configuration files following the Apache config file
334
407
  format.
335
-
336
- .. versionadded:: 0.6
337
408
  """
338
409
 
339
410
  name = 'ApacheConf'
340
411
  aliases = ['apacheconf', 'aconf', 'apache']
341
412
  filenames = ['.htaccess', 'apache.conf', 'apache2.conf']
342
413
  mimetypes = ['text/x-apacheconf']
414
+ url = 'https://httpd.apache.org/docs/current/configuring.html'
415
+ version_added = '0.6'
343
416
  flags = re.MULTILINE | re.IGNORECASE
344
417
 
345
418
  tokens = {
@@ -374,8 +447,6 @@ class ApacheConfLexer(RegexLexer):
374
447
  class SquidConfLexer(RegexLexer):
375
448
  """
376
449
  Lexer for squid configuration files.
377
-
378
- .. versionadded:: 0.9
379
450
  """
380
451
 
381
452
  name = 'SquidConf'
@@ -383,6 +454,7 @@ class SquidConfLexer(RegexLexer):
383
454
  aliases = ['squidconf', 'squid.conf', 'squid']
384
455
  filenames = ['squid.conf']
385
456
  mimetypes = ['text/x-squidconf']
457
+ version_added = '0.9'
386
458
  flags = re.IGNORECASE
387
459
 
388
460
  keywords = (
@@ -469,15 +541,14 @@ class SquidConfLexer(RegexLexer):
469
541
  "dst", "time", "dstdomain", "ident", "snmp_community",
470
542
  )
471
543
 
472
- ip_re = (
473
- r'(?:(?:(?:[3-9]\d?|2(?:5[0-5]|[0-4]?\d)?|1\d{0,2}|0x0*[0-9a-f]{1,2}|'
474
- r'0+[1-3]?[0-7]{0,2})(?:\.(?:[3-9]\d?|2(?:5[0-5]|[0-4]?\d)?|1\d{0,2}|'
475
- r'0x0*[0-9a-f]{1,2}|0+[1-3]?[0-7]{0,2})){3})|(?!.*::.*::)(?:(?!:)|'
476
- r':(?=:))(?:[0-9a-f]{0,4}(?:(?<=::)|(?<!::):)){6}(?:[0-9a-f]{0,4}'
477
- r'(?:(?<=::)|(?<!::):)[0-9a-f]{0,4}(?:(?<=::)|(?<!:)|(?<=:)(?<!::):)|'
478
- r'(?:25[0-4]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-4]|2[0-4]\d|1\d\d|'
479
- r'[1-9]?\d)){3}))'
480
- )
544
+ ipv4_group = r'(\d+|0x[0-9a-f]+)'
545
+ ipv4 = rf'({ipv4_group}(\.{ipv4_group}){{3}})'
546
+ ipv6_group = r'([0-9a-f]{0,4})'
547
+ ipv6 = rf'({ipv6_group}(:{ipv6_group}){{1,7}})'
548
+ bare_ip = rf'({ipv4}|{ipv6})'
549
+ # XXX: /integer is a subnet mark, but what is /IP ?
550
+ # There is no test where it is used.
551
+ ip = rf'{bare_ip}(/({bare_ip}|\d+))?'
481
552
 
482
553
  tokens = {
483
554
  'root': [
@@ -490,7 +561,7 @@ class SquidConfLexer(RegexLexer):
490
561
  (words(actions_stats, prefix=r'stats/', suffix=r'\b'), String),
491
562
  (words(actions_log, prefix=r'log/', suffix=r'='), String),
492
563
  (words(acls, prefix=r'\b', suffix=r'\b'), Keyword),
493
- (ip_re + r'(?:/(?:' + ip_re + r'|\b\d+\b))?', Number.Float),
564
+ (ip, Number.Float),
494
565
  (r'(?:\b\d+\b(?:-\b\d+|%)?)', Number),
495
566
  (r'\S+', Text),
496
567
  ],
@@ -505,14 +576,13 @@ class SquidConfLexer(RegexLexer):
505
576
  class NginxConfLexer(RegexLexer):
506
577
  """
507
578
  Lexer for Nginx configuration files.
508
-
509
- .. versionadded:: 0.11
510
579
  """
511
580
  name = 'Nginx configuration file'
512
581
  url = 'http://nginx.net/'
513
582
  aliases = ['nginx']
514
583
  filenames = ['nginx.conf']
515
584
  mimetypes = ['text/x-nginx-conf']
585
+ version_added = '0.11'
516
586
 
517
587
  tokens = {
518
588
  'root': [
@@ -552,14 +622,13 @@ class NginxConfLexer(RegexLexer):
552
622
  class LighttpdConfLexer(RegexLexer):
553
623
  """
554
624
  Lexer for Lighttpd configuration files.
555
-
556
- .. versionadded:: 0.11
557
625
  """
558
626
  name = 'Lighttpd configuration file'
559
627
  url = 'http://lighttpd.net/'
560
628
  aliases = ['lighttpd', 'lighty']
561
629
  filenames = ['lighttpd.conf']
562
630
  mimetypes = ['text/x-lighttpd-conf']
631
+ version_added = '0.11'
563
632
 
564
633
  tokens = {
565
634
  'root': [
@@ -581,14 +650,13 @@ class LighttpdConfLexer(RegexLexer):
581
650
  class DockerLexer(RegexLexer):
582
651
  """
583
652
  Lexer for Docker configuration files.
584
-
585
- .. versionadded:: 2.0
586
653
  """
587
654
  name = 'Docker'
588
655
  url = 'http://docker.io'
589
656
  aliases = ['docker', 'dockerfile']
590
657
  filenames = ['Dockerfile', '*.docker']
591
658
  mimetypes = ['text/x-dockerfile-config']
659
+ version_added = '2.0'
592
660
 
593
661
  _keywords = (r'(?:MAINTAINER|EXPOSE|WORKDIR|USER|STOPSIGNAL)')
594
662
  _bash_keywords = (r'(?:RUN|CMD|ENTRYPOINT|ENV|ARG|LABEL|ADD|COPY)')
@@ -600,15 +668,15 @@ class DockerLexer(RegexLexer):
600
668
  (r'#.*', Comment),
601
669
  (r'(FROM)([ \t]*)(\S*)([ \t]*)(?:(AS)([ \t]*)(\S*))?',
602
670
  bygroups(Keyword, Whitespace, String, Whitespace, Keyword, Whitespace, String)),
603
- (r'(ONBUILD)(\s+)(%s)' % (_lb,), bygroups(Keyword, Whitespace, using(BashLexer))),
604
- (r'(HEALTHCHECK)(\s+)((%s--\w+=\w+%s)*)' % (_lb, _lb),
671
+ (rf'(ONBUILD)(\s+)({_lb})', bygroups(Keyword, Whitespace, using(BashLexer))),
672
+ (rf'(HEALTHCHECK)(\s+)(({_lb}--\w+=\w+{_lb})*)',
605
673
  bygroups(Keyword, Whitespace, using(BashLexer))),
606
- (r'(VOLUME|ENTRYPOINT|CMD|SHELL)(\s+)(%s)(\[.*?\])' % (_lb,),
674
+ (rf'(VOLUME|ENTRYPOINT|CMD|SHELL)(\s+)({_lb})(\[.*?\])',
607
675
  bygroups(Keyword, Whitespace, using(BashLexer), using(JsonLexer))),
608
- (r'(LABEL|ENV|ARG)(\s+)((%s\w+=\w+%s)*)' % (_lb, _lb),
676
+ (rf'(LABEL|ENV|ARG)(\s+)(({_lb}\w+=\w+{_lb})*)',
609
677
  bygroups(Keyword, Whitespace, using(BashLexer))),
610
- (r'(%s|VOLUME)\b(\s+)(.*)' % (_keywords), bygroups(Keyword, Whitespace, String)),
611
- (r'(%s)(\s+)' % (_bash_keywords,), bygroups(Keyword, Whitespace)),
678
+ (rf'({_keywords}|VOLUME)\b(\s+)(.*)', bygroups(Keyword, Whitespace, String)),
679
+ (rf'({_bash_keywords})(\s+)', bygroups(Keyword, Whitespace)),
612
680
  (r'(.*\\\n)*.+', using(BashLexer)),
613
681
  ]
614
682
  }
@@ -617,8 +685,6 @@ class DockerLexer(RegexLexer):
617
685
  class TerraformLexer(ExtendedRegexLexer):
618
686
  """
619
687
  Lexer for terraformi ``.tf`` files.
620
-
621
- .. versionadded:: 2.1
622
688
  """
623
689
 
624
690
  name = 'Terraform'
@@ -626,6 +692,7 @@ class TerraformLexer(ExtendedRegexLexer):
626
692
  aliases = ['terraform', 'tf', 'hcl']
627
693
  filenames = ['*.tf', '*.hcl']
628
694
  mimetypes = ['application/x-tf', 'application/x-terraform']
695
+ version_added = '2.1'
629
696
 
630
697
  classes = ('backend', 'data', 'module', 'output', 'provider',
631
698
  'provisioner', 'resource', 'variable')
@@ -789,13 +856,13 @@ class TermcapLexer(RegexLexer):
789
856
  Lexer for termcap database source.
790
857
 
791
858
  This is very simple and minimal.
792
-
793
- .. versionadded:: 2.1
794
859
  """
795
860
  name = 'Termcap'
796
861
  aliases = ['termcap']
797
862
  filenames = ['termcap', 'termcap.src']
798
863
  mimetypes = []
864
+ url = 'https://en.wikipedia.org/wiki/Termcap'
865
+ version_added = '2.1'
799
866
 
800
867
  # NOTE:
801
868
  # * multiline with trailing backslash
@@ -836,13 +903,13 @@ class TerminfoLexer(RegexLexer):
836
903
  Lexer for terminfo database source.
837
904
 
838
905
  This is very simple and minimal.
839
-
840
- .. versionadded:: 2.1
841
906
  """
842
907
  name = 'Terminfo'
843
908
  aliases = ['terminfo']
844
909
  filenames = ['terminfo', 'terminfo.src']
845
910
  mimetypes = []
911
+ url = 'https://en.wikipedia.org/wiki/Terminfo'
912
+ version_added = '2.1'
846
913
 
847
914
  # NOTE:
848
915
  # * multiline with leading whitespace
@@ -882,8 +949,6 @@ class PkgConfigLexer(RegexLexer):
882
949
  """
883
950
  Lexer for pkg-config
884
951
  (see also `manual page <http://linux.die.net/man/1/pkg-config>`_).
885
-
886
- .. versionadded:: 2.1
887
952
  """
888
953
 
889
954
  name = 'PkgConfig'
@@ -891,6 +956,7 @@ class PkgConfigLexer(RegexLexer):
891
956
  aliases = ['pkgconfig']
892
957
  filenames = ['*.pc']
893
958
  mimetypes = []
959
+ version_added = '2.1'
894
960
 
895
961
  tokens = {
896
962
  'root': [
@@ -951,8 +1017,6 @@ class PacmanConfLexer(RegexLexer):
951
1017
  VerbosePkgLists
952
1018
 
953
1019
  These are flags to switch on.
954
-
955
- .. versionadded:: 2.1
956
1020
  """
957
1021
 
958
1022
  name = 'PacmanConf'
@@ -960,6 +1024,7 @@ class PacmanConfLexer(RegexLexer):
960
1024
  aliases = ['pacmanconf']
961
1025
  filenames = ['pacman.conf']
962
1026
  mimetypes = []
1027
+ version_added = '2.1'
963
1028
 
964
1029
  tokens = {
965
1030
  'root': [
@@ -997,13 +1062,12 @@ class PacmanConfLexer(RegexLexer):
997
1062
  class AugeasLexer(RegexLexer):
998
1063
  """
999
1064
  Lexer for Augeas.
1000
-
1001
- .. versionadded:: 2.4
1002
1065
  """
1003
1066
  name = 'Augeas'
1004
1067
  url = 'http://augeas.net'
1005
1068
  aliases = ['augeas']
1006
1069
  filenames = ['*.aug']
1070
+ version_added = '2.4'
1007
1071
 
1008
1072
  tokens = {
1009
1073
  'root': [
@@ -1041,79 +1105,250 @@ class AugeasLexer(RegexLexer):
1041
1105
 
1042
1106
  class TOMLLexer(RegexLexer):
1043
1107
  """
1044
- Lexer for TOML, a simple language
1045
- for config files.
1046
-
1047
- .. versionadded:: 2.4
1108
+ Lexer for TOML, a simple language for config files.
1048
1109
  """
1049
1110
 
1050
1111
  name = 'TOML'
1051
- url = 'https://github.com/toml-lang/toml'
1052
1112
  aliases = ['toml']
1053
1113
  filenames = ['*.toml', 'Pipfile', 'poetry.lock']
1114
+ mimetypes = ['application/toml']
1115
+ url = 'https://toml.io'
1116
+ version_added = '2.4'
1117
+
1118
+ # Based on the TOML spec: https://toml.io/en/v1.0.0
1119
+
1120
+ # The following is adapted from CPython's tomllib:
1121
+ _time = r"\d\d:\d\d:\d\d(\.\d+)?"
1122
+ _datetime = rf"""(?x)
1123
+ \d\d\d\d-\d\d-\d\d # date, e.g., 1988-10-27
1124
+ (
1125
+ [Tt ] {_time} # optional time
1126
+ (
1127
+ [Zz]|[+-]\d\d:\d\d # optional time offset
1128
+ )?
1129
+ )?
1130
+ """
1054
1131
 
1055
1132
  tokens = {
1056
1133
  'root': [
1057
- # Table
1058
- (r'^(\s*)(\[.*?\])$', bygroups(Whitespace, Keyword)),
1134
+ # Note that we make an effort in order to distinguish
1135
+ # moments at which we're parsing a key and moments at
1136
+ # which we're parsing a value. In the TOML code
1137
+ #
1138
+ # 1234 = 1234
1139
+ #
1140
+ # the first "1234" should be Name, the second Integer.
1141
+
1142
+ # Whitespace
1143
+ (r'\s+', Whitespace),
1059
1144
 
1060
- # Basics, comments, strings
1061
- (r'[ \t]+', Whitespace),
1062
- (r'\n', Whitespace),
1063
- (r'#.*?$', Comment.Single),
1064
- # Basic string
1065
- (r'"(\\\\|\\[^\\]|[^"\\])*"', String),
1066
- # Literal string
1067
- (r'\'\'\'(.*)\'\'\'', String),
1068
- (r'\'[^\']*\'', String),
1069
- (r'(true|false)$', Keyword.Constant),
1070
- (r'[a-zA-Z_][\w\-]*', Name),
1071
-
1072
- # Datetime
1073
- # TODO this needs to be expanded, as TOML is rather flexible:
1074
- # https://github.com/toml-lang/toml#offset-date-time
1075
- (r'\d{4}-\d{2}-\d{2}(?:T| )\d{2}:\d{2}:\d{2}(?:Z|[-+]\d{2}:\d{2})', Number.Integer),
1076
-
1077
- # Numbers
1078
- (r'(\d+\.\d*|\d*\.\d+)([eE][+-]?[0-9]+)?j?', Number.Float),
1079
- (r'\d+[eE][+-]?[0-9]+j?', Number.Float),
1080
- # Handle +-inf, +-infinity, +-nan
1081
- (r'[+-]?(?:(inf(?:inity)?)|nan)', Number.Float),
1082
- (r'[+-]?\d+', Number.Integer),
1083
-
1084
- # Punctuation
1085
- (r'[]{}:(),;[]', Punctuation),
1145
+ # Comment
1146
+ (r'#.*', Comment.Single),
1147
+
1148
+ # Assignment keys
1149
+ include('key'),
1150
+
1151
+ # After "=", find a value
1152
+ (r'(=)(\s*)', bygroups(Operator, Whitespace), 'value'),
1153
+
1154
+ # Table header
1155
+ (r'\[\[?', Keyword, 'table-key'),
1156
+ ],
1157
+ 'key': [
1158
+ # Start of bare key (only ASCII is allowed here).
1159
+ (r'[A-Za-z0-9_-]+', Name),
1160
+ # Quoted key
1161
+ (r'"', String.Double, 'basic-string'),
1162
+ (r"'", String.Single, 'literal-string'),
1163
+ # Dots act as separators in keys
1086
1164
  (r'\.', Punctuation),
1165
+ ],
1166
+ 'table-key': [
1167
+ # This is like 'key', but highlights the name components
1168
+ # and separating dots as Keyword because it looks better
1169
+ # when the whole table header is Keyword. We do highlight
1170
+ # strings as strings though.
1171
+ # Start of bare key (only ASCII is allowed here).
1172
+ (r'[A-Za-z0-9_-]+', Keyword),
1173
+ (r'"', String.Double, 'basic-string'),
1174
+ (r"'", String.Single, 'literal-string'),
1175
+ (r'\.', Keyword),
1176
+ (r'\]\]?', Keyword, '#pop'),
1177
+
1178
+ # Inline whitespace allowed
1179
+ (r'[ \t]+', Whitespace),
1180
+ ],
1181
+ 'value': [
1182
+ # Datetime, baretime
1183
+ (_datetime, Literal.Date, '#pop'),
1184
+ (_time, Literal.Date, '#pop'),
1087
1185
 
1088
- # Operators
1089
- (r'=', Operator)
1186
+ # Recognize as float if there is a fractional part
1187
+ # and/or an exponent.
1188
+ (r'[+-]?\d[0-9_]*[eE][+-]?\d[0-9_]*', Number.Float, '#pop'),
1189
+ (r'[+-]?\d[0-9_]*\.\d[0-9_]*([eE][+-]?\d[0-9_]*)?',
1190
+ Number.Float, '#pop'),
1090
1191
 
1091
- ]
1192
+ # Infinities and NaN
1193
+ (r'[+-]?(inf|nan)', Number.Float, '#pop'),
1194
+
1195
+ # Integers
1196
+ (r'-?0b[01_]+', Number.Bin, '#pop'),
1197
+ (r'-?0o[0-7_]+', Number.Oct, '#pop'),
1198
+ (r'-?0x[0-9a-fA-F_]+', Number.Hex, '#pop'),
1199
+ (r'[+-]?[0-9_]+', Number.Integer, '#pop'),
1200
+
1201
+ # Strings
1202
+ (r'"""', String.Double, ('#pop', 'multiline-basic-string')),
1203
+ (r'"', String.Double, ('#pop', 'basic-string')),
1204
+ (r"'''", String.Single, ('#pop', 'multiline-literal-string')),
1205
+ (r"'", String.Single, ('#pop', 'literal-string')),
1206
+
1207
+ # Booleans
1208
+ (r'true|false', Keyword.Constant, '#pop'),
1209
+
1210
+ # Start of array
1211
+ (r'\[', Punctuation, ('#pop', 'array')),
1212
+
1213
+ # Start of inline table
1214
+ (r'\{', Punctuation, ('#pop', 'inline-table')),
1215
+ ],
1216
+ 'array': [
1217
+ # Whitespace, including newlines, is ignored inside arrays,
1218
+ # and comments are allowed.
1219
+ (r'\s+', Whitespace),
1220
+ (r'#.*', Comment.Single),
1221
+
1222
+ # Delimiters
1223
+ (r',', Punctuation),
1224
+
1225
+ # End of array
1226
+ (r'\]', Punctuation, '#pop'),
1227
+
1228
+ # Parse a value and come back
1229
+ default('value'),
1230
+ ],
1231
+ 'inline-table': [
1232
+ # Note that unlike inline arrays, inline tables do not
1233
+ # allow newlines or comments.
1234
+ (r'[ \t]+', Whitespace),
1235
+
1236
+ # Keys
1237
+ include('key'),
1238
+
1239
+ # Values
1240
+ (r'(=)(\s*)', bygroups(Punctuation, Whitespace), 'value'),
1241
+
1242
+ # Delimiters
1243
+ (r',', Punctuation),
1244
+
1245
+ # End of inline table
1246
+ (r'\}', Punctuation, '#pop'),
1247
+ ],
1248
+ 'basic-string': [
1249
+ (r'"', String.Double, '#pop'),
1250
+ include('escapes'),
1251
+ (r'[^"\\]+', String.Double),
1252
+ ],
1253
+ 'literal-string': [
1254
+ (r".*?'", String.Single, '#pop'),
1255
+ ],
1256
+ 'multiline-basic-string': [
1257
+ (r'"""', String.Double, '#pop'),
1258
+ (r'(\\)(\n)', bygroups(String.Escape, Whitespace)),
1259
+ include('escapes'),
1260
+ (r'[^"\\]+', String.Double),
1261
+ (r'"', String.Double),
1262
+ ],
1263
+ 'multiline-literal-string': [
1264
+ (r"'''", String.Single, '#pop'),
1265
+ (r"[^']+", String.Single),
1266
+ (r"'", String.Single),
1267
+ ],
1268
+ 'escapes': [
1269
+ (r'\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8}', String.Escape),
1270
+ (r'\\.', String.Escape),
1271
+ ],
1092
1272
  }
1093
1273
 
1094
1274
  class NestedTextLexer(RegexLexer):
1095
1275
  """
1096
- Lexer for NextedText, a human-friendly data
1097
- format.
1276
+ Lexer for *NextedText*, a human-friendly data format.
1098
1277
 
1099
- .. versionadded:: 2.9
1278
+ .. versionchanged:: 2.16
1279
+ Added support for *NextedText* v3.0.
1100
1280
  """
1101
1281
 
1102
1282
  name = 'NestedText'
1103
1283
  url = 'https://nestedtext.org'
1104
1284
  aliases = ['nestedtext', 'nt']
1105
1285
  filenames = ['*.nt']
1106
-
1107
- _quoted_dict_item = r'^(\s*)({0})(.*?)({0}: ?)(.*?)(\s*)$'
1286
+ version_added = '2.9'
1108
1287
 
1109
1288
  tokens = {
1110
1289
  'root': [
1111
- (r'^(\s*)(#.*?)$', bygroups(Whitespace, Comment)),
1112
- (r'^(\s*)(>)( ?)(.*?)(\s*)$', bygroups(Whitespace, Punctuation, Whitespace, String, Whitespace)),
1113
- (r'^(\s*)(-)( ?)(.*?)(\s*)$', bygroups(Whitespace, Punctuation, Whitespace, String, Whitespace)),
1114
- (_quoted_dict_item.format("'"), bygroups(Whitespace, Punctuation, Name, Punctuation, String, Whitespace)),
1115
- (_quoted_dict_item.format('"'), bygroups(Whitespace, Punctuation, Name, Punctuation, String, Whitespace)),
1116
- (r'^(\s*)(.*?)(:)( ?)(.*?)(\s*)$', bygroups(Whitespace, Name, Punctuation, Whitespace, String, Whitespace)),
1290
+ # Comment: # ...
1291
+ (r'^([ ]*)(#.*)$', bygroups(Whitespace, Comment)),
1292
+
1293
+ # Inline dictionary: {...}
1294
+ (r'^([ ]*)(\{)', bygroups(Whitespace, Punctuation), 'inline_dict'),
1295
+
1296
+ # Inline list: [...]
1297
+ (r'^([ ]*)(\[)', bygroups(Whitespace, Punctuation), 'inline_list'),
1298
+
1299
+ # empty multiline string item: >
1300
+ (r'^([ ]*)(>)$', bygroups(Whitespace, Punctuation)),
1301
+
1302
+ # multiline string item: > ...
1303
+ (r'^([ ]*)(>)( )(.*?)([ \t]*)$', bygroups(Whitespace, Punctuation, Whitespace, Text, Whitespace)),
1304
+
1305
+ # empty list item: -
1306
+ (r'^([ ]*)(-)$', bygroups(Whitespace, Punctuation)),
1307
+
1308
+ # list item: - ...
1309
+ (r'^([ ]*)(-)( )(.*?)([ \t]*)$', bygroups(Whitespace, Punctuation, Whitespace, Text, Whitespace)),
1310
+
1311
+ # empty multiline key item: :
1312
+ (r'^([ ]*)(:)$', bygroups(Whitespace, Punctuation)),
1313
+
1314
+ # multiline key item: : ...
1315
+ (r'^([ ]*)(:)( )([^\n]*?)([ \t]*)$', bygroups(Whitespace, Punctuation, Whitespace, Name.Tag, Whitespace)),
1316
+
1317
+ # empty dict key item: ...:
1318
+ (r'^([ ]*)([^\{\[\s].*?)(:)$', bygroups(Whitespace, Name.Tag, Punctuation)),
1319
+
1320
+ # dict key item: ...: ...
1321
+ (r'^([ ]*)([^\{\[\s].*?)(:)( )(.*?)([ \t]*)$', bygroups(Whitespace, Name.Tag, Punctuation, Whitespace, Text, Whitespace)),
1322
+ ],
1323
+ 'inline_list': [
1324
+ include('whitespace'),
1325
+ (r'[^\{\}\[\],\s]+', Text),
1326
+ include('inline_value'),
1327
+ (r',', Punctuation),
1328
+ (r'\]', Punctuation, '#pop'),
1329
+ (r'\n', Error, '#pop'),
1330
+ ],
1331
+ 'inline_dict': [
1332
+ include('whitespace'),
1333
+ (r'[^\{\}\[\],:\s]+', Name.Tag),
1334
+ (r':', Punctuation, 'inline_dict_value'),
1335
+ (r'\}', Punctuation, '#pop'),
1336
+ (r'\n', Error, '#pop'),
1337
+ ],
1338
+ 'inline_dict_value': [
1339
+ include('whitespace'),
1340
+ (r'[^\{\}\[\],:\s]+', Text),
1341
+ include('inline_value'),
1342
+ (r',', Punctuation, '#pop'),
1343
+ (r'\}', Punctuation, '#pop:2'),
1344
+ ],
1345
+ 'inline_value': [
1346
+ include('whitespace'),
1347
+ (r'\{', Punctuation, 'inline_dict'),
1348
+ (r'\[', Punctuation, 'inline_list'),
1349
+ ],
1350
+ 'whitespace': [
1351
+ (r'[ \t]+', Whitespace),
1117
1352
  ],
1118
1353
  }
1119
1354
 
@@ -1121,14 +1356,13 @@ class NestedTextLexer(RegexLexer):
1121
1356
  class SingularityLexer(RegexLexer):
1122
1357
  """
1123
1358
  Lexer for Singularity definition files.
1124
-
1125
- .. versionadded:: 2.6
1126
1359
  """
1127
1360
 
1128
1361
  name = 'Singularity'
1129
1362
  url = 'https://www.sylabs.io/guides/3.0/user-guide/definition_files.html'
1130
1363
  aliases = ['singularity']
1131
1364
  filenames = ['*.def', 'Singularity']
1365
+ version_added = '2.6'
1132
1366
  flags = re.IGNORECASE | re.MULTILINE | re.DOTALL
1133
1367
 
1134
1368
  _headers = r'^(\s*)(bootstrap|from|osversion|mirrorurl|include|registry|namespace|includecmd)(:)'
@@ -1170,13 +1404,13 @@ class UnixConfigLexer(RegexLexer):
1170
1404
  * ``/etc/group``
1171
1405
  * ``/etc/passwd``
1172
1406
  * ``/etc/shadow``
1173
-
1174
- .. versionadded:: 2.12
1175
1407
  """
1176
1408
 
1177
1409
  name = 'Unix/Linux config files'
1178
1410
  aliases = ['unixconfig', 'linuxconfig']
1179
1411
  filenames = []
1412
+ url = 'https://en.wikipedia.org/wiki/Configuration_file#Unix_and_Unix-like_operating_systems'
1413
+ version_added = '2.12'
1180
1414
 
1181
1415
  tokens = {
1182
1416
  'root': [