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 non-HTML markup languages.
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
 
@@ -19,25 +19,26 @@ from pygments.lexers.data import JsonLexer
19
19
  from pygments.lexer import RegexLexer, DelegatingLexer, include, bygroups, \
20
20
  using, this, do_insertions, default, words
21
21
  from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
22
- Number, Punctuation, Generic, Other, Whitespace
22
+ Number, Punctuation, Generic, Other, Whitespace, Literal
23
23
  from pygments.util import get_bool_opt, ClassNotFound
24
24
 
25
25
  __all__ = ['BBCodeLexer', 'MoinWikiLexer', 'RstLexer', 'TexLexer', 'GroffLexer',
26
26
  'MozPreprocHashLexer', 'MozPreprocPercentLexer',
27
27
  'MozPreprocXulLexer', 'MozPreprocJavascriptLexer',
28
- 'MozPreprocCssLexer', 'MarkdownLexer', 'TiddlyWiki5Lexer', 'WikitextLexer']
28
+ 'MozPreprocCssLexer', 'MarkdownLexer', 'OrgLexer', 'TiddlyWiki5Lexer',
29
+ 'WikitextLexer']
29
30
 
30
31
 
31
32
  class BBCodeLexer(RegexLexer):
32
33
  """
33
34
  A lexer that highlights BBCode(-like) syntax.
34
-
35
- .. versionadded:: 0.6
36
35
  """
37
36
 
38
37
  name = 'BBCode'
39
38
  aliases = ['bbcode']
40
39
  mimetypes = ['text/x-bbcode']
40
+ url = 'https://www.bbcode.org/'
41
+ version_added = '0.6'
41
42
 
42
43
  tokens = {
43
44
  'root': [
@@ -64,14 +65,15 @@ class BBCodeLexer(RegexLexer):
64
65
  class MoinWikiLexer(RegexLexer):
65
66
  """
66
67
  For MoinMoin (and Trac) Wiki markup.
67
-
68
- .. versionadded:: 0.7
69
68
  """
70
69
 
71
70
  name = 'MoinMoin/Trac Wiki markup'
72
71
  aliases = ['trac-wiki', 'moin']
73
72
  filenames = []
74
73
  mimetypes = ['text/x-trac-wiki']
74
+ url = 'https://moinmo.in'
75
+ version_added = '0.7'
76
+
75
77
  flags = re.MULTILINE | re.IGNORECASE
76
78
 
77
79
  tokens = {
@@ -110,8 +112,6 @@ class RstLexer(RegexLexer):
110
112
  """
111
113
  For reStructuredText markup.
112
114
 
113
- .. versionadded:: 0.7
114
-
115
115
  Additional options accepted:
116
116
 
117
117
  `handlecodeblocks`
@@ -127,6 +127,7 @@ class RstLexer(RegexLexer):
127
127
  aliases = ['restructuredtext', 'rst', 'rest']
128
128
  filenames = ['*.rst', '*.rest']
129
129
  mimetypes = ["text/x-rst", "text/prs.fallenstein.rst"]
130
+ version_added = '0.7'
130
131
  flags = re.MULTILINE
131
132
 
132
133
  def _handle_sourcecode(self, match):
@@ -172,9 +173,7 @@ class RstLexer(RegexLexer):
172
173
  # from docutils.parsers.rst.states
173
174
  closers = '\'")]}>\u2019\u201d\xbb!?'
174
175
  unicode_delimiters = '\u2010\u2011\u2012\u2013\u2014\u00a0'
175
- end_string_suffix = (r'((?=$)|(?=[-/:.,; \n\x00%s%s]))'
176
- % (re.escape(unicode_delimiters),
177
- re.escape(closers)))
176
+ end_string_suffix = (rf'((?=$)|(?=[-/:.,; \n\x00{re.escape(unicode_delimiters)}{re.escape(closers)}]))')
178
177
 
179
178
  tokens = {
180
179
  'root': [
@@ -222,7 +221,7 @@ class RstLexer(RegexLexer):
222
221
  bygroups(Punctuation, Text, Name.Tag, Text, Operator.Word,
223
222
  Punctuation, Text, using(this, state='inline'))),
224
223
  # Comments
225
- (r'^ *\.\..*(\n( +.*\n|\n)+)?', Comment.Preproc),
224
+ (r'^ *\.\..*(\n( +.*\n|\n)+)?', Comment),
226
225
  # Field list marker
227
226
  (r'^( *)(:(?:\\\\|\\:|[^:\n])+:(?=\s))([ \t]*)',
228
227
  bygroups(Text, Name.Class, Text)),
@@ -283,6 +282,8 @@ class TexLexer(RegexLexer):
283
282
  aliases = ['tex', 'latex']
284
283
  filenames = ['*.tex', '*.aux', '*.toc']
285
284
  mimetypes = ['text/x-tex', 'text/x-latex']
285
+ url = 'https://tug.org'
286
+ version_added = ''
286
287
 
287
288
  tokens = {
288
289
  'general': [
@@ -295,13 +296,13 @@ class TexLexer(RegexLexer):
295
296
  (r'\\\(', String, 'inlinemath'),
296
297
  (r'\$\$', String.Backtick, 'displaymath'),
297
298
  (r'\$', String, 'inlinemath'),
298
- (r'\\([a-zA-Z]+|.)', Keyword, 'command'),
299
+ (r'\\([a-zA-Z@_:]+|\S?)', Keyword, 'command'),
299
300
  (r'\\$', Keyword),
300
301
  include('general'),
301
302
  (r'[^\\$%&_^{}]+', Text),
302
303
  ],
303
304
  'math': [
304
- (r'\\([a-zA-Z]+|.)', Name.Variable),
305
+ (r'\\([a-zA-Z]+|\S?)', Name.Variable),
305
306
  include('general'),
306
307
  (r'[0-9]+', Number),
307
308
  (r'[-=!+*/()\[\]]', Operator),
@@ -336,14 +337,14 @@ class GroffLexer(RegexLexer):
336
337
  """
337
338
  Lexer for the (g)roff typesetting language, supporting groff
338
339
  extensions. Mainly useful for highlighting manpage sources.
339
-
340
- .. versionadded:: 0.6
341
340
  """
342
341
 
343
342
  name = 'Groff'
344
343
  aliases = ['groff', 'nroff', 'man']
345
344
  filenames = ['*.[1-9]', '*.man', '*.1p', '*.3pm']
346
345
  mimetypes = ['application/x-troff', 'text/troff']
346
+ url = 'https://www.gnu.org/software/groff'
347
+ version_added = '0.6'
347
348
 
348
349
  tokens = {
349
350
  'root': [
@@ -393,13 +394,13 @@ class MozPreprocHashLexer(RegexLexer):
393
394
  Lexer for Mozilla Preprocessor files (with '#' as the marker).
394
395
 
395
396
  Other data is left untouched.
396
-
397
- .. versionadded:: 2.0
398
397
  """
399
398
  name = 'mozhashpreproc'
400
399
  aliases = [name]
401
400
  filenames = []
402
401
  mimetypes = []
402
+ url = 'https://firefox-source-docs.mozilla.org/build/buildsystem/preprocessor.html'
403
+ version_added = '2.0'
403
404
 
404
405
  tokens = {
405
406
  'root': [
@@ -434,13 +435,13 @@ class MozPreprocPercentLexer(MozPreprocHashLexer):
434
435
  Lexer for Mozilla Preprocessor files (with '%' as the marker).
435
436
 
436
437
  Other data is left untouched.
437
-
438
- .. versionadded:: 2.0
439
438
  """
440
439
  name = 'mozpercentpreproc'
441
440
  aliases = [name]
442
441
  filenames = []
443
442
  mimetypes = []
443
+ url = 'https://firefox-source-docs.mozilla.org/build/buildsystem/preprocessor.html'
444
+ version_added = '2.0'
444
445
 
445
446
  tokens = {
446
447
  'root': [
@@ -454,13 +455,13 @@ class MozPreprocXulLexer(DelegatingLexer):
454
455
  """
455
456
  Subclass of the `MozPreprocHashLexer` that highlights unlexed data with the
456
457
  `XmlLexer`.
457
-
458
- .. versionadded:: 2.0
459
458
  """
460
459
  name = "XUL+mozpreproc"
461
460
  aliases = ['xul+mozpreproc']
462
461
  filenames = ['*.xul.in']
463
462
  mimetypes = []
463
+ url = 'https://firefox-source-docs.mozilla.org/build/buildsystem/preprocessor.html'
464
+ version_added = '2.0'
464
465
 
465
466
  def __init__(self, **options):
466
467
  super().__init__(XmlLexer, MozPreprocHashLexer, **options)
@@ -470,13 +471,13 @@ class MozPreprocJavascriptLexer(DelegatingLexer):
470
471
  """
471
472
  Subclass of the `MozPreprocHashLexer` that highlights unlexed data with the
472
473
  `JavascriptLexer`.
473
-
474
- .. versionadded:: 2.0
475
474
  """
476
475
  name = "Javascript+mozpreproc"
477
476
  aliases = ['javascript+mozpreproc']
478
477
  filenames = ['*.js.in']
479
478
  mimetypes = []
479
+ url = 'https://firefox-source-docs.mozilla.org/build/buildsystem/preprocessor.html'
480
+ version_added = '2.0'
480
481
 
481
482
  def __init__(self, **options):
482
483
  super().__init__(JavascriptLexer, MozPreprocHashLexer, **options)
@@ -486,13 +487,13 @@ class MozPreprocCssLexer(DelegatingLexer):
486
487
  """
487
488
  Subclass of the `MozPreprocHashLexer` that highlights unlexed data with the
488
489
  `CssLexer`.
489
-
490
- .. versionadded:: 2.0
491
490
  """
492
491
  name = "CSS+mozpreproc"
493
492
  aliases = ['css+mozpreproc']
494
493
  filenames = ['*.css.in']
495
494
  mimetypes = []
495
+ url = 'https://firefox-source-docs.mozilla.org/build/buildsystem/preprocessor.html'
496
+ version_added = '2.0'
496
497
 
497
498
  def __init__(self, **options):
498
499
  super().__init__(CssLexer, MozPreprocPercentLexer, **options)
@@ -501,43 +502,41 @@ class MozPreprocCssLexer(DelegatingLexer):
501
502
  class MarkdownLexer(RegexLexer):
502
503
  """
503
504
  For Markdown markup.
504
-
505
- .. versionadded:: 2.2
506
505
  """
507
506
  name = 'Markdown'
508
507
  url = 'https://daringfireball.net/projects/markdown/'
509
508
  aliases = ['markdown', 'md']
510
509
  filenames = ['*.md', '*.markdown']
511
510
  mimetypes = ["text/x-markdown"]
511
+ version_added = '2.2'
512
512
  flags = re.MULTILINE
513
513
 
514
514
  def _handle_codeblock(self, match):
515
- """
516
- match args: 1:backticks, 2:lang_name, 3:newline, 4:code, 5:backticks
517
- """
518
515
  from pygments.lexers import get_lexer_by_name
519
516
 
520
- # section header
521
- yield match.start(1), String.Backtick, match.group(1)
522
- yield match.start(2), String.Backtick, match.group(2)
523
- yield match.start(3), Text , match.group(3)
517
+ yield match.start('initial'), String.Backtick, match.group('initial')
518
+ yield match.start('lang'), String.Backtick, match.group('lang')
519
+ if match.group('afterlang') is not None:
520
+ yield match.start('whitespace'), Whitespace, match.group('whitespace')
521
+ yield match.start('extra'), Text, match.group('extra')
522
+ yield match.start('newline'), Whitespace, match.group('newline')
524
523
 
525
524
  # lookup lexer if wanted and existing
526
525
  lexer = None
527
526
  if self.handlecodeblocks:
528
527
  try:
529
- lexer = get_lexer_by_name( match.group(2).strip() )
528
+ lexer = get_lexer_by_name(match.group('lang').strip())
530
529
  except ClassNotFound:
531
530
  pass
532
- code = match.group(4)
533
-
531
+ code = match.group('code')
534
532
  # no lexer for this language. handle it like it was a code block
535
533
  if lexer is None:
536
- yield match.start(4), String, code
534
+ yield match.start('code'), String, code
537
535
  else:
536
+ # FIXME: aren't the offsets wrong?
538
537
  yield from do_insertions([], lexer.get_tokens_unprocessed(code))
539
538
 
540
- yield match.start(5), String.Backtick, match.group(5)
539
+ yield match.start('terminator'), String.Backtick, match.group('terminator')
541
540
 
542
541
  tokens = {
543
542
  'root': [
@@ -563,7 +562,19 @@ class MarkdownLexer(RegexLexer):
563
562
  # code block fenced by 3 backticks
564
563
  (r'^(\s*```\n[\w\W]*?^\s*```$\n)', String.Backtick),
565
564
  # code block with language
566
- (r'^(\s*```)(\w+)(\n)([\w\W]*?)(^\s*```$\n)', _handle_codeblock),
565
+ # Some tools include extra stuff after the language name, just
566
+ # highlight that as text. For example: https://docs.enola.dev/use/execmd
567
+ (r'''(?x)
568
+ ^(?P<initial>\s*```)
569
+ (?P<lang>[\w\-]+)
570
+ (?P<afterlang>
571
+ (?P<whitespace>[^\S\n]+)
572
+ (?P<extra>.*))?
573
+ (?P<newline>\n)
574
+ (?P<code>(.|\n)*?)
575
+ (?P<terminator>^\s*```$\n)
576
+ ''',
577
+ _handle_codeblock),
567
578
 
568
579
  include('inline'),
569
580
  ],
@@ -607,18 +618,125 @@ class MarkdownLexer(RegexLexer):
607
618
  self.handlecodeblocks = get_bool_opt(options, 'handlecodeblocks', True)
608
619
  RegexLexer.__init__(self, **options)
609
620
 
621
+ class OrgLexer(RegexLexer):
622
+ """
623
+ For Org Mode markup.
624
+ """
625
+ name = 'Org Mode'
626
+ url = 'https://orgmode.org'
627
+ aliases = ['org', 'orgmode', 'org-mode']
628
+ filenames = ['*.org']
629
+ mimetypes = ["text/org"]
630
+ version_added = '2.18'
631
+
632
+ def _inline(start, end):
633
+ return rf'(?<!\w){start}(.|\n(?!\n))+?{end}(?!\w)'
634
+
635
+ tokens = {
636
+ 'root': [
637
+ (r'^# .*', Comment.Single),
638
+
639
+ # Headings
640
+ (r'^(\* )(COMMENT)( .*)',
641
+ bygroups(Generic.Heading, Comment.Preproc, Generic.Heading)),
642
+ (r'^(\*\*+ )(COMMENT)( .*)',
643
+ bygroups(Generic.Subheading, Comment.Preproc, Generic.Subheading)),
644
+ (r'^(\* )(DONE)( .*)',
645
+ bygroups(Generic.Heading, Generic.Deleted, Generic.Heading)),
646
+ (r'^(\*\*+ )(DONE)( .*)',
647
+ bygroups(Generic.Subheading, Generic.Deleted, Generic.Subheading)),
648
+ (r'^(\* )(TODO)( .*)',
649
+ bygroups(Generic.Heading, Generic.Error, Generic.Heading)),
650
+ (r'^(\*\*+ )(TODO)( .*)',
651
+ bygroups(Generic.Subheading, Generic.Error, Generic.Subheading)),
652
+
653
+ (r'^(\* .+?)( :[a-zA-Z0-9_@:]+:)?$', bygroups(Generic.Heading, Generic.Emph)),
654
+ (r'^(\*\*+ .+?)( :[a-zA-Z0-9_@:]+:)?$', bygroups(Generic.Subheading, Generic.Emph)),
655
+
656
+ # Unordered lists items, including TODO items and description items
657
+ (r'^(?:( *)([+-] )|( +)(\* ))(\[[ X-]\])?(.+ ::)?',
658
+ bygroups(Whitespace, Keyword, Whitespace, Keyword, Generic.Prompt, Name.Label)),
659
+
660
+ # Ordered list items
661
+ (r'^( *)([0-9]+[.)])( \[@[0-9]+\])?', bygroups(Whitespace, Keyword, Generic.Emph)),
662
+
663
+ # Dynamic blocks
664
+ (r'(?i)^( *#\+begin: *)((?:.|\n)*?)(^ *#\+end: *$)',
665
+ bygroups(Operator.Word, using(this), Operator.Word)),
666
+
667
+ # Comment blocks
668
+ (r'(?i)^( *#\+begin_comment *\n)((?:.|\n)*?)(^ *#\+end_comment *$)',
669
+ bygroups(Operator.Word, Comment.Multiline, Operator.Word)),
670
+
671
+ # Source code blocks
672
+ # TODO: language-dependent syntax highlighting (see Markdown lexer)
673
+ (r'(?i)^( *#\+begin_src .*)((?:.|\n)*?)(^ *#\+end_src *$)',
674
+ bygroups(Operator.Word, Text, Operator.Word)),
675
+
676
+ # Other blocks
677
+ (r'(?i)^( *#\+begin_\w+)( *\n)((?:.|\n)*?)(^ *#\+end_\w+)( *$)',
678
+ bygroups(Operator.Word, Whitespace, Text, Operator.Word, Whitespace)),
679
+
680
+ # Keywords
681
+ (r'^(#\+\w+:)(.*)$', bygroups(Name.Namespace, Text)),
682
+
683
+ # Properties and drawers
684
+ (r'(?i)^( *:\w+: *\n)((?:.|\n)*?)(^ *:end: *$)',
685
+ bygroups(Name.Decorator, Comment.Special, Name.Decorator)),
686
+
687
+ # Line break operator
688
+ (r'\\\\$', Operator),
689
+
690
+ # Deadline, Scheduled, CLOSED
691
+ (r'(?i)^( *(?:DEADLINE|SCHEDULED): )(<.+?> *)$',
692
+ bygroups(Generic.Error, Literal.Date)),
693
+ (r'(?i)^( *CLOSED: )(\[.+?\] *)$',
694
+ bygroups(Generic.Deleted, Literal.Date)),
695
+
696
+ # Bold
697
+ (_inline(r'\*', r'\*+'), Generic.Strong),
698
+ # Italic
699
+ (_inline(r'/', r'/'), Generic.Emph),
700
+ # Verbatim
701
+ (_inline(r'=', r'='), String), # TODO token
702
+ # Code
703
+ (_inline(r'~', r'~'), String),
704
+ # Strikethrough
705
+ (_inline(r'\+', r'\+'), Generic.Deleted),
706
+ # Underline
707
+ (_inline(r'_', r'_+'), Generic.EmphStrong),
708
+
709
+ # Dates
710
+ (r'<.+?>', Literal.Date),
711
+ # Macros
712
+ (r'\{\{\{.+?\}\}\}', Comment.Preproc),
713
+ # Footnotes
714
+ (r'(?<!\[)\[fn:.+?\]', Name.Tag),
715
+ # Links
716
+ (r'(?s)(\[\[)(.*?)(\]\[)(.*?)(\]\])',
717
+ bygroups(Punctuation, Name.Attribute, Punctuation, Name.Tag, Punctuation)),
718
+ (r'(?s)(\[\[)(.+?)(\]\])', bygroups(Punctuation, Name.Attribute, Punctuation)),
719
+ (r'(<<)(.+?)(>>)', bygroups(Punctuation, Name.Attribute, Punctuation)),
720
+
721
+ # Tables
722
+ (r'^( *)(\|[ -].*?[ -]\|)$', bygroups(Whitespace, String)),
723
+
724
+ # Any other text
725
+ (r'[^#*+\-0-9:\\/=~_<{\[|\n]+', Text),
726
+ (r'[#*+\-0-9:\\/=~_<{\[|\n]', Text),
727
+ ],
728
+ }
610
729
 
611
730
  class TiddlyWiki5Lexer(RegexLexer):
612
731
  """
613
732
  For TiddlyWiki5 markup.
614
-
615
- .. versionadded:: 2.7
616
733
  """
617
734
  name = 'tiddler'
618
735
  url = 'https://tiddlywiki.com/#TiddlerFiles'
619
736
  aliases = ['tid']
620
737
  filenames = ['*.tid']
621
738
  mimetypes = ["text/vnd.tiddlywiki"]
739
+ version_added = '2.7'
622
740
  flags = re.MULTILINE
623
741
 
624
742
  def _handle_codeblock(self, match):
@@ -775,19 +893,18 @@ class WikitextLexer(RegexLexer):
775
893
  installations, so we only highlight common syntaxes (built-in or from
776
894
  popular extensions), and also assume templates produce no unbalanced
777
895
  syntaxes.
778
-
779
- .. versionadded:: 2.15
780
896
  """
781
897
  name = 'Wikitext'
782
898
  url = 'https://www.mediawiki.org/wiki/Wikitext'
783
899
  aliases = ['wikitext', 'mediawiki']
784
900
  filenames = []
785
901
  mimetypes = ['text/x-wiki']
902
+ version_added = '2.15'
786
903
  flags = re.MULTILINE
787
904
 
788
905
  def nowiki_tag_rules(tag_name):
789
906
  return [
790
- (r'(?i)(</)({})(\s*)(>)'.format(tag_name), bygroups(Punctuation,
907
+ (rf'(?i)(</)({tag_name})(\s*)(>)', bygroups(Punctuation,
791
908
  Name.Tag, Whitespace, Punctuation), '#pop'),
792
909
  include('entity'),
793
910
  include('text'),
@@ -795,15 +912,15 @@ class WikitextLexer(RegexLexer):
795
912
 
796
913
  def plaintext_tag_rules(tag_name):
797
914
  return [
798
- (r'(?si)(.*?)(</)({})(\s*)(>)'.format(tag_name), bygroups(Text,
915
+ (rf'(?si)(.*?)(</)({tag_name})(\s*)(>)', bygroups(Text,
799
916
  Punctuation, Name.Tag, Whitespace, Punctuation), '#pop'),
800
917
  ]
801
918
 
802
- def delegate_tag_rules(tag_name, lexer):
919
+ def delegate_tag_rules(tag_name, lexer, **lexer_kwargs):
803
920
  return [
804
- (r'(?i)(</)({})(\s*)(>)'.format(tag_name), bygroups(Punctuation,
921
+ (rf'(?i)(</)({tag_name})(\s*)(>)', bygroups(Punctuation,
805
922
  Name.Tag, Whitespace, Punctuation), '#pop'),
806
- (r'(?si).+?(?=</{}\s*>)'.format(tag_name), using(lexer)),
923
+ (rf'(?si).+?(?=</{tag_name}\s*>)', using(lexer, **lexer_kwargs)),
807
924
  ]
808
925
 
809
926
  def text_rules(token):
@@ -919,7 +1036,9 @@ class WikitextLexer(RegexLexer):
919
1036
  variant_langs = {
920
1037
  # ZhConverter.php
921
1038
  'zh', 'zh-hans', 'zh-hant', 'zh-cn', 'zh-hk', 'zh-mo', 'zh-my', 'zh-sg', 'zh-tw',
922
- # UnConverter.php
1039
+ # WuuConverter.php
1040
+ 'wuu', 'wuu-hans', 'wuu-hant',
1041
+ # UzConverter.php
923
1042
  'uz', 'uz-latn', 'uz-cyrl',
924
1043
  # TlyConverter.php
925
1044
  'tly', 'tly-cyrl',
@@ -933,8 +1052,6 @@ class WikitextLexer(RegexLexer):
933
1052
  'sh-latn', 'sh-cyrl',
934
1053
  # KuConverter.php
935
1054
  'ku', 'ku-arab', 'ku-latn',
936
- # KkConverter.php
937
- 'kk', 'kk-cyrl', 'kk-latn', 'kk-arab', 'kk-kz', 'kk-tr', 'kk-cn',
938
1055
  # IuConverter.php
939
1056
  'iu', 'ike-cans', 'ike-latn',
940
1057
  # GanConverter.php
@@ -1007,7 +1124,7 @@ class WikitextLexer(RegexLexer):
1007
1124
  (r'(?i)\b(?:{}){}{}*'.format('|'.join(protocols),
1008
1125
  link_address, link_char_class), Name.Label),
1009
1126
  # Magic links
1010
- (r'\b(?:RFC|PMID){}+[0-9]+\b'.format(nbsp_char),
1127
+ (rf'\b(?:RFC|PMID){nbsp_char}+[0-9]+\b',
1011
1128
  Name.Function.Magic),
1012
1129
  (r"""(?x)
1013
1130
  \bISBN {nbsp_char}
@@ -1022,7 +1139,7 @@ class WikitextLexer(RegexLexer):
1022
1139
  'redirect-inner': [
1023
1140
  (r'(\]\])(\s*?\n)', bygroups(Punctuation, Whitespace), '#pop'),
1024
1141
  (r'(\#)([^#]*?)', bygroups(Punctuation, Name.Label)),
1025
- (r'(?i)[{}]+'.format(title_char), Name.Tag),
1142
+ (rf'(?i)[{title_char}]+', Name.Tag),
1026
1143
  ],
1027
1144
  'list': [
1028
1145
  # Description lists
@@ -1039,7 +1156,7 @@ class WikitextLexer(RegexLexer):
1039
1156
  include('entity'),
1040
1157
  # Bold & italic
1041
1158
  (r"('')(''')(?!')", bygroups(Generic.Emph,
1042
- Generic.Strong), 'inline-italic-bold'),
1159
+ Generic.EmphStrong), 'inline-italic-bold'),
1043
1160
  (r"'''(?!')", Generic.Strong, 'inline-bold'),
1044
1161
  (r"''(?!')", Generic.Emph, 'inline-italic'),
1045
1162
  # Comments & parameters & templates
@@ -1049,11 +1166,11 @@ class WikitextLexer(RegexLexer):
1049
1166
  r"""(?xi)
1050
1167
  (\[\[)
1051
1168
  (File|Image) (:)
1052
- ([{}]*)
1169
+ ((?: [{}] | \{{{{2,3}}[^{{}}]*?\}}{{2,3}} | <!--[\s\S]*?--> )*)
1053
1170
  (?: (\#) ([{}]*?) )?
1054
1171
  """.format(title_char, f'{title_char}#'),
1055
1172
  bygroups(Punctuation, Name.Namespace, Punctuation,
1056
- Name.Tag, Punctuation, Name.Label),
1173
+ using(this, state=['wikilink-name']), Punctuation, Name.Label),
1057
1174
  'medialink-inner'
1058
1175
  ),
1059
1176
  # Wikilinks
@@ -1061,25 +1178,25 @@ class WikitextLexer(RegexLexer):
1061
1178
  r"""(?xi)
1062
1179
  (\[\[)(?!{}) # Should not contain URLs
1063
1180
  (?: ([{}]*) (:))?
1064
- ([{}]*?)
1181
+ ((?: [{}] | \{{{{2,3}}[^{{}}]*?\}}{{2,3}} | <!--[\s\S]*?--> )*?)
1065
1182
  (?: (\#) ([{}]*?) )?
1066
1183
  (\]\])
1067
1184
  """.format('|'.join(protocols), title_char.replace('/', ''),
1068
- title_char, f'{title_char}#'),
1185
+ title_char, f'{title_char}#'),
1069
1186
  bygroups(Punctuation, Name.Namespace, Punctuation,
1070
- Name.Tag, Punctuation, Name.Label, Punctuation)
1187
+ using(this, state=['wikilink-name']), Punctuation, Name.Label, Punctuation)
1071
1188
  ),
1072
1189
  (
1073
1190
  r"""(?xi)
1074
1191
  (\[\[)(?!{})
1075
1192
  (?: ([{}]*) (:))?
1076
- ([{}]*?)
1193
+ ((?: [{}] | \{{{{2,3}}[^{{}}]*?\}}{{2,3}} | <!--[\s\S]*?--> )*?)
1077
1194
  (?: (\#) ([{}]*?) )?
1078
1195
  (\|)
1079
1196
  """.format('|'.join(protocols), title_char.replace('/', ''),
1080
- title_char, f'{title_char}#'),
1197
+ title_char, f'{title_char}#'),
1081
1198
  bygroups(Punctuation, Name.Namespace, Punctuation,
1082
- Name.Tag, Punctuation, Name.Label, Punctuation),
1199
+ using(this, state=['wikilink-name']), Punctuation, Name.Label, Punctuation),
1083
1200
  'wikilink-inner'
1084
1201
  ),
1085
1202
  # External links
@@ -1177,16 +1294,43 @@ class WikitextLexer(RegexLexer):
1177
1294
  # LanguageConverter markups
1178
1295
  (
1179
1296
  r"""(?xi)
1180
- (-\{{) # Escape format()
1181
- (?: ([^|]) (\|))?
1182
- (?: (\s* (?:{variants}) \s*) (=>))?
1183
- (\s* (?:{variants}) \s*) (:)
1297
+ (-\{{) # Use {{ to escape format()
1298
+ ([^|]) (\|)
1299
+ (?:
1300
+ (?: ([^;]*?) (=>))?
1301
+ (\s* (?:{variants}) \s*) (:)
1302
+ )?
1184
1303
  """.format(variants='|'.join(variant_langs)),
1185
1304
  bygroups(Punctuation, Keyword, Punctuation,
1186
- Name.Label, Operator, Name.Label, Punctuation),
1305
+ using(this, state=['root', 'lc-raw']),
1306
+ Operator, Name.Label, Punctuation),
1187
1307
  'lc-inner'
1188
1308
  ),
1189
- (r'-\{', Punctuation, 'lc-raw'),
1309
+ # LanguageConverter markups: composite conversion grammar
1310
+ (
1311
+ r"""(?xi)
1312
+ (-\{)
1313
+ ([a-z\s;-]*?) (\|)
1314
+ """,
1315
+ bygroups(Punctuation,
1316
+ using(this, state=['root', 'lc-flag']),
1317
+ Punctuation),
1318
+ 'lc-raw'
1319
+ ),
1320
+ # LanguageConverter markups: fallbacks
1321
+ (
1322
+ r"""(?xi)
1323
+ (-\{{) (?!\{{) # Use {{ to escape format()
1324
+ (?: (\s* (?:{variants}) \s*) (:))?
1325
+ """.format(variants='|'.join(variant_langs)),
1326
+ bygroups(Punctuation, Name.Label, Punctuation),
1327
+ 'lc-inner'
1328
+ ),
1329
+ ],
1330
+ 'wikilink-name': [
1331
+ include('replaceable'),
1332
+ (r'[^{<]+', Name.Tag),
1333
+ (r'(?s).', Name.Tag),
1190
1334
  ],
1191
1335
  'wikilink-inner': [
1192
1336
  # Quit in case of another wikilink
@@ -1212,7 +1356,7 @@ class WikitextLexer(RegexLexer):
1212
1356
  include('quote-common'),
1213
1357
  (r"('')(''')(?!')", bygroups(Generic.Emph,
1214
1358
  Generic.Strong), ('#pop', 'inline-bold')),
1215
- (r"'''(?!')", Generic.Strong, ('#pop', 'inline-italic-bold')),
1359
+ (r"'''(?!')", Generic.EmphStrong, ('#pop', 'inline-italic-bold')),
1216
1360
  (r"''(?!')", Generic.Emph, '#pop'),
1217
1361
  include('inline'),
1218
1362
  include('text-italic'),
@@ -1222,35 +1366,41 @@ class WikitextLexer(RegexLexer):
1222
1366
  (r"(''')('')(?!')", bygroups(
1223
1367
  Generic.Strong, Generic.Emph), ('#pop', 'inline-italic')),
1224
1368
  (r"'''(?!')", Generic.Strong, '#pop'),
1225
- (r"''(?!')", Generic.Emph, ('#pop', 'inline-bold-italic')),
1369
+ (r"''(?!')", Generic.EmphStrong, ('#pop', 'inline-bold-italic')),
1226
1370
  include('inline'),
1227
1371
  include('text-bold'),
1228
1372
  ],
1229
1373
  'inline-bold-italic': [
1230
1374
  include('quote-common'),
1231
- (r"('')(''')(?!')", bygroups(Generic.Emph,
1375
+ (r"('')(''')(?!')", bygroups(Generic.EmphStrong,
1232
1376
  Generic.Strong), '#pop'),
1233
- (r"'''(?!')", Generic.Strong, ('#pop', 'inline-italic')),
1234
- (r"''(?!')", Generic.Emph, ('#pop', 'inline-bold')),
1377
+ (r"'''(?!')", Generic.EmphStrong, ('#pop', 'inline-italic')),
1378
+ (r"''(?!')", Generic.EmphStrong, ('#pop', 'inline-bold')),
1235
1379
  include('inline'),
1236
- include('text-italic'),
1380
+ include('text-bold-italic'),
1237
1381
  ],
1238
1382
  'inline-italic-bold': [
1239
1383
  include('quote-common'),
1240
1384
  (r"(''')('')(?!')", bygroups(
1241
- Generic.Strong, Generic.Emph), '#pop'),
1242
- (r"'''(?!')", Generic.Strong, ('#pop', 'inline-italic')),
1243
- (r"''(?!')", Generic.Emph, ('#pop', 'inline-bold')),
1244
- include('text-bold'),
1385
+ Generic.EmphStrong, Generic.Emph), '#pop'),
1386
+ (r"'''(?!')", Generic.EmphStrong, ('#pop', 'inline-italic')),
1387
+ (r"''(?!')", Generic.EmphStrong, ('#pop', 'inline-bold')),
1388
+ include('inline'),
1389
+ include('text-bold-italic'),
1390
+ ],
1391
+ 'lc-flag': [
1392
+ (r'\s+', Whitespace),
1393
+ (r';', Punctuation),
1394
+ *text_rules(Keyword),
1245
1395
  ],
1246
1396
  'lc-inner': [
1247
1397
  (
1248
1398
  r"""(?xi)
1249
1399
  (;)
1250
- (?: (\s* (?:{variants}) \s*) (=>))?
1400
+ (?: ([^;]*?) (=>))?
1251
1401
  (\s* (?:{variants}) \s*) (:)
1252
1402
  """.format(variants='|'.join(variant_langs)),
1253
- bygroups(Punctuation, Name.Label,
1403
+ bygroups(Punctuation, using(this, state=['root', 'lc-raw']),
1254
1404
  Operator, Name.Label, Punctuation)
1255
1405
  ),
1256
1406
  (r';?\s*?\}-', Punctuation, '#pop'),
@@ -1276,9 +1426,9 @@ class WikitextLexer(RegexLexer):
1276
1426
  'parameter-inner',
1277
1427
  ),
1278
1428
  # Magic variables
1279
- (r'(?i)(\{\{)(\s*)(%s)(\s*)(\}\})' % '|'.join(magic_vars_i),
1429
+ (r'(?i)(\{{\{{)(\s*)({})(\s*)(\}}\}})'.format('|'.join(magic_vars_i)),
1280
1430
  bygroups(Punctuation, Whitespace, Name.Function, Whitespace, Punctuation)),
1281
- (r'(\{\{)(\s*)(%s)(\s*)(\}\})' % '|'.join(magic_vars),
1431
+ (r'(\{{\{{)(\s*)({})(\s*)(\}}\}})'.format('|'.join(magic_vars)),
1282
1432
  bygroups(Punctuation, Whitespace, Name.Function, Whitespace, Punctuation)),
1283
1433
  # Parser functions & templates
1284
1434
  (r'\{\{', Punctuation, 'template-begin-space'),
@@ -1304,17 +1454,17 @@ class WikitextLexer(RegexLexer):
1304
1454
  (r'\s+', Whitespace),
1305
1455
  # Parser functions
1306
1456
  (
1307
- r'(?i)(\#[%s]*?|%s)(:)' % (title_char,
1457
+ r'(?i)(\#[{}]*?|{})(:)'.format(title_char,
1308
1458
  '|'.join(parser_functions_i)),
1309
1459
  bygroups(Name.Function, Punctuation), ('#pop', 'template-inner')
1310
1460
  ),
1311
1461
  (
1312
- r'(%s)(:)' % ('|'.join(parser_functions)),
1462
+ r'({})(:)'.format('|'.join(parser_functions)),
1313
1463
  bygroups(Name.Function, Punctuation), ('#pop', 'template-inner')
1314
1464
  ),
1315
1465
  # Templates
1316
1466
  (
1317
- r'(?i)([%s]*?)(:)' % title_char,
1467
+ rf'(?i)([{title_char}]*?)(:)',
1318
1468
  bygroups(Name.Namespace, Punctuation), ('#pop', 'template-name')
1319
1469
  ),
1320
1470
  default(('#pop', 'template-name'),),
@@ -1493,11 +1643,12 @@ class WikitextLexer(RegexLexer):
1493
1643
  'tag-gallery': plaintext_tag_rules('gallery'),
1494
1644
  'tag-graph': plaintext_tag_rules('graph'),
1495
1645
  'tag-rss': plaintext_tag_rules('rss'),
1496
- 'tag-math': delegate_tag_rules('math', TexLexer),
1497
- 'tag-chem': delegate_tag_rules('chem', TexLexer),
1498
- 'tag-ce': delegate_tag_rules('ce', TexLexer),
1646
+ 'tag-math': delegate_tag_rules('math', TexLexer, state='math'),
1647
+ 'tag-chem': delegate_tag_rules('chem', TexLexer, state='math'),
1648
+ 'tag-ce': delegate_tag_rules('ce', TexLexer, state='math'),
1499
1649
  'tag-templatedata': delegate_tag_rules('templatedata', JsonLexer),
1500
1650
  'text-italic': text_rules(Generic.Emph),
1501
1651
  'text-bold': text_rules(Generic.Strong),
1652
+ 'text-bold-italic': text_rules(Generic.EmphStrong),
1502
1653
  'text': text_rules(Text),
1503
1654
  }