pygments.rb 2.4.1 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
  }