pygments.rb 2.4.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (349) 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 +12 -0
  7. data/README.adoc +2 -2
  8. data/lib/pygments/popen.rb +2 -2
  9. data/lib/pygments/version.rb +1 -1
  10. data/pygments.rb.gemspec +3 -3
  11. data/vendor/pygments-main/bin/pygmentize +1 -1
  12. data/vendor/pygments-main/pygments/__init__.py +2 -2
  13. data/vendor/pygments-main/pygments/__main__.py +1 -1
  14. data/vendor/pygments-main/pygments/cmdline.py +12 -12
  15. data/vendor/pygments-main/pygments/console.py +5 -5
  16. data/vendor/pygments-main/pygments/filter.py +2 -3
  17. data/vendor/pygments-main/pygments/filters/__init__.py +4 -4
  18. data/vendor/pygments-main/pygments/formatter.py +6 -1
  19. data/vendor/pygments-main/pygments/formatters/__init__.py +7 -8
  20. data/vendor/pygments-main/pygments/formatters/_mapping.py +0 -0
  21. data/vendor/pygments-main/pygments/formatters/bbcode.py +2 -2
  22. data/vendor/pygments-main/pygments/formatters/groff.py +3 -3
  23. data/vendor/pygments-main/pygments/formatters/html.py +38 -40
  24. data/vendor/pygments-main/pygments/formatters/img.py +51 -11
  25. data/vendor/pygments-main/pygments/formatters/irc.py +1 -1
  26. data/vendor/pygments-main/pygments/formatters/latex.py +24 -27
  27. data/vendor/pygments-main/pygments/formatters/other.py +3 -4
  28. data/vendor/pygments-main/pygments/formatters/pangomarkup.py +2 -2
  29. data/vendor/pygments-main/pygments/formatters/rtf.py +228 -25
  30. data/vendor/pygments-main/pygments/formatters/svg.py +17 -20
  31. data/vendor/pygments-main/pygments/formatters/terminal.py +1 -1
  32. data/vendor/pygments-main/pygments/formatters/terminal256.py +1 -1
  33. data/vendor/pygments-main/pygments/lexer.py +51 -33
  34. data/vendor/pygments-main/pygments/lexers/__init__.py +12 -12
  35. data/vendor/pygments-main/pygments/lexers/_ada_builtins.py +1 -1
  36. data/vendor/pygments-main/pygments/lexers/_asy_builtins.py +1 -1
  37. data/vendor/pygments-main/pygments/lexers/_cl_builtins.py +1 -1
  38. data/vendor/pygments-main/pygments/lexers/_cocoa_builtins.py +2 -2
  39. data/vendor/pygments-main/pygments/lexers/_csound_builtins.py +1 -1
  40. data/vendor/pygments-main/pygments/lexers/_css_builtins.py +1 -1
  41. data/vendor/pygments-main/pygments/lexers/_julia_builtins.py +1 -1
  42. data/vendor/pygments-main/pygments/lexers/_lasso_builtins.py +1 -1
  43. data/vendor/pygments-main/pygments/lexers/_lilypond_builtins.py +1 -1
  44. data/vendor/pygments-main/pygments/lexers/_lua_builtins.py +5 -5
  45. data/vendor/pygments-main/pygments/lexers/_luau_builtins.py +62 -0
  46. data/vendor/pygments-main/pygments/lexers/_mapping.py +41 -11
  47. data/vendor/pygments-main/pygments/lexers/_mql_builtins.py +1 -1
  48. data/vendor/pygments-main/pygments/lexers/_mysql_builtins.py +3 -3
  49. data/vendor/pygments-main/pygments/lexers/_openedge_builtins.py +1 -1
  50. data/vendor/pygments-main/pygments/lexers/_php_builtins.py +3 -3
  51. data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +5 -5
  52. data/vendor/pygments-main/pygments/lexers/_qlik_builtins.py +1 -1
  53. data/vendor/pygments-main/pygments/lexers/_scheme_builtins.py +1 -1
  54. data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +4 -4
  55. data/vendor/pygments-main/pygments/lexers/_sourcemod_builtins.py +3 -3
  56. data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +1 -1
  57. data/vendor/pygments-main/pygments/lexers/_stata_builtins.py +1 -1
  58. data/vendor/pygments-main/pygments/lexers/_tsql_builtins.py +1 -1
  59. data/vendor/pygments-main/pygments/lexers/_usd_builtins.py +1 -1
  60. data/vendor/pygments-main/pygments/lexers/_vbscript_builtins.py +1 -1
  61. data/vendor/pygments-main/pygments/lexers/_vim_builtins.py +1 -1
  62. data/vendor/pygments-main/pygments/lexers/actionscript.py +6 -8
  63. data/vendor/pygments-main/pygments/lexers/ada.py +3 -3
  64. data/vendor/pygments-main/pygments/lexers/agile.py +3 -1
  65. data/vendor/pygments-main/pygments/lexers/algebra.py +9 -13
  66. data/vendor/pygments-main/pygments/lexers/ambient.py +2 -3
  67. data/vendor/pygments-main/pygments/lexers/amdgpu.py +3 -3
  68. data/vendor/pygments-main/pygments/lexers/ampl.py +2 -3
  69. data/vendor/pygments-main/pygments/lexers/apdlexer.py +4 -3
  70. data/vendor/pygments-main/pygments/lexers/apl.py +2 -3
  71. data/vendor/pygments-main/pygments/lexers/archetype.py +8 -12
  72. data/vendor/pygments-main/pygments/lexers/arrow.py +2 -3
  73. data/vendor/pygments-main/pygments/lexers/arturo.py +2 -3
  74. data/vendor/pygments-main/pygments/lexers/asc.py +4 -4
  75. data/vendor/pygments-main/pygments/lexers/asm.py +28 -15
  76. data/vendor/pygments-main/pygments/lexers/asn1.py +178 -0
  77. data/vendor/pygments-main/pygments/lexers/automation.py +6 -8
  78. data/vendor/pygments-main/pygments/lexers/bare.py +2 -3
  79. data/vendor/pygments-main/pygments/lexers/basic.py +48 -57
  80. data/vendor/pygments-main/pygments/lexers/bdd.py +3 -4
  81. data/vendor/pygments-main/pygments/lexers/berry.py +4 -4
  82. data/vendor/pygments-main/pygments/lexers/bibtex.py +5 -5
  83. data/vendor/pygments-main/pygments/lexers/blueprint.py +173 -0
  84. data/vendor/pygments-main/pygments/lexers/boa.py +4 -4
  85. data/vendor/pygments-main/pygments/lexers/bqn.py +109 -0
  86. data/vendor/pygments-main/pygments/lexers/business.py +21 -22
  87. data/vendor/pygments-main/pygments/lexers/c_cpp.py +9 -4
  88. data/vendor/pygments-main/pygments/lexers/c_like.py +99 -27
  89. data/vendor/pygments-main/pygments/lexers/capnproto.py +2 -3
  90. data/vendor/pygments-main/pygments/lexers/carbon.py +10 -11
  91. data/vendor/pygments-main/pygments/lexers/cddl.py +8 -9
  92. data/vendor/pygments-main/pygments/lexers/chapel.py +2 -3
  93. data/vendor/pygments-main/pygments/lexers/clean.py +2 -1
  94. data/vendor/pygments-main/pygments/lexers/comal.py +2 -1
  95. data/vendor/pygments-main/pygments/lexers/compiled.py +2 -1
  96. data/vendor/pygments-main/pygments/lexers/configs.py +342 -108
  97. data/vendor/pygments-main/pygments/lexers/console.py +5 -5
  98. data/vendor/pygments-main/pygments/lexers/cplint.py +2 -3
  99. data/vendor/pygments-main/pygments/lexers/crystal.py +4 -5
  100. data/vendor/pygments-main/pygments/lexers/csound.py +6 -8
  101. data/vendor/pygments-main/pygments/lexers/css.py +5 -5
  102. data/vendor/pygments-main/pygments/lexers/d.py +4 -3
  103. data/vendor/pygments-main/pygments/lexers/dalvik.py +2 -3
  104. data/vendor/pygments-main/pygments/lexers/data.py +8 -12
  105. data/vendor/pygments-main/pygments/lexers/dax.py +2 -3
  106. data/vendor/pygments-main/pygments/lexers/devicetree.py +2 -3
  107. data/vendor/pygments-main/pygments/lexers/diff.py +7 -6
  108. data/vendor/pygments-main/pygments/lexers/dns.py +109 -0
  109. data/vendor/pygments-main/pygments/lexers/dotnet.py +19 -14
  110. data/vendor/pygments-main/pygments/lexers/dsls.py +24 -35
  111. data/vendor/pygments-main/pygments/lexers/dylan.py +8 -16
  112. data/vendor/pygments-main/pygments/lexers/ecl.py +2 -3
  113. data/vendor/pygments-main/pygments/lexers/eiffel.py +3 -4
  114. data/vendor/pygments-main/pygments/lexers/elm.py +3 -4
  115. data/vendor/pygments-main/pygments/lexers/elpi.py +28 -21
  116. data/vendor/pygments-main/pygments/lexers/email.py +3 -3
  117. data/vendor/pygments-main/pygments/lexers/erlang.py +22 -24
  118. data/vendor/pygments-main/pygments/lexers/esoteric.py +11 -12
  119. data/vendor/pygments-main/pygments/lexers/ezhil.py +2 -3
  120. data/vendor/pygments-main/pygments/lexers/factor.py +2 -3
  121. data/vendor/pygments-main/pygments/lexers/fantom.py +3 -3
  122. data/vendor/pygments-main/pygments/lexers/felix.py +9 -10
  123. data/vendor/pygments-main/pygments/lexers/fift.py +2 -1
  124. data/vendor/pygments-main/pygments/lexers/floscript.py +2 -3
  125. data/vendor/pygments-main/pygments/lexers/forth.py +2 -3
  126. data/vendor/pygments-main/pygments/lexers/fortran.py +6 -7
  127. data/vendor/pygments-main/pygments/lexers/foxpro.py +3 -3
  128. data/vendor/pygments-main/pygments/lexers/freefem.py +2 -3
  129. data/vendor/pygments-main/pygments/lexers/func.py +3 -1
  130. data/vendor/pygments-main/pygments/lexers/functional.py +2 -1
  131. data/vendor/pygments-main/pygments/lexers/futhark.py +6 -7
  132. data/vendor/pygments-main/pygments/lexers/gcodelexer.py +3 -3
  133. data/vendor/pygments-main/pygments/lexers/gdscript.py +2 -1
  134. data/vendor/pygments-main/pygments/lexers/go.py +3 -4
  135. data/vendor/pygments-main/pygments/lexers/grammar_notation.py +6 -9
  136. data/vendor/pygments-main/pygments/lexers/graph.py +12 -9
  137. data/vendor/pygments-main/pygments/lexers/graphics.py +13 -17
  138. data/vendor/pygments-main/pygments/lexers/graphql.py +176 -0
  139. data/vendor/pygments-main/pygments/lexers/graphviz.py +2 -3
  140. data/vendor/pygments-main/pygments/lexers/gsql.py +2 -3
  141. data/vendor/pygments-main/pygments/lexers/haskell.py +27 -32
  142. data/vendor/pygments-main/pygments/lexers/haxe.py +3 -5
  143. data/vendor/pygments-main/pygments/lexers/hdl.py +8 -7
  144. data/vendor/pygments-main/pygments/lexers/hexdump.py +3 -3
  145. data/vendor/pygments-main/pygments/lexers/html.py +34 -13
  146. data/vendor/pygments-main/pygments/lexers/idl.py +2 -3
  147. data/vendor/pygments-main/pygments/lexers/igor.py +305 -290
  148. data/vendor/pygments-main/pygments/lexers/inferno.py +2 -3
  149. data/vendor/pygments-main/pygments/lexers/installers.py +7 -9
  150. data/vendor/pygments-main/pygments/lexers/int_fiction.py +150 -162
  151. data/vendor/pygments-main/pygments/lexers/iolang.py +2 -3
  152. data/vendor/pygments-main/pygments/lexers/j.py +2 -3
  153. data/vendor/pygments-main/pygments/lexers/javascript.py +18 -19
  154. data/vendor/pygments-main/pygments/lexers/jmespath.py +2 -1
  155. data/vendor/pygments-main/pygments/lexers/jslt.py +2 -3
  156. data/vendor/pygments-main/pygments/lexers/jsonnet.py +4 -3
  157. data/vendor/pygments-main/pygments/lexers/jsx.py +75 -0
  158. data/vendor/pygments-main/pygments/lexers/julia.py +4 -5
  159. data/vendor/pygments-main/pygments/lexers/jvm.py +98 -116
  160. data/vendor/pygments-main/pygments/lexers/kuin.py +2 -3
  161. data/vendor/pygments-main/pygments/lexers/kusto.py +93 -0
  162. data/vendor/pygments-main/pygments/lexers/ldap.py +155 -0
  163. data/vendor/pygments-main/pygments/lexers/lean.py +241 -0
  164. data/vendor/pygments-main/pygments/lexers/lilypond.py +2 -3
  165. data/vendor/pygments-main/pygments/lexers/lisp.py +373 -65
  166. data/vendor/pygments-main/pygments/lexers/macaulay2.py +53 -4
  167. data/vendor/pygments-main/pygments/lexers/make.py +7 -5
  168. data/vendor/pygments-main/pygments/lexers/markup.py +242 -91
  169. data/vendor/pygments-main/pygments/lexers/math.py +2 -1
  170. data/vendor/pygments-main/pygments/lexers/matlab.py +10 -12
  171. data/vendor/pygments-main/pygments/lexers/maxima.py +2 -3
  172. data/vendor/pygments-main/pygments/lexers/meson.py +2 -3
  173. data/vendor/pygments-main/pygments/lexers/mime.py +4 -4
  174. data/vendor/pygments-main/pygments/lexers/minecraft.py +24 -27
  175. data/vendor/pygments-main/pygments/lexers/mips.py +3 -1
  176. data/vendor/pygments-main/pygments/lexers/ml.py +59 -61
  177. data/vendor/pygments-main/pygments/lexers/modeling.py +19 -22
  178. data/vendor/pygments-main/pygments/lexers/modula2.py +2 -3
  179. data/vendor/pygments-main/pygments/lexers/mojo.py +704 -0
  180. data/vendor/pygments-main/pygments/lexers/monte.py +2 -3
  181. data/vendor/pygments-main/pygments/lexers/mosel.py +3 -3
  182. data/vendor/pygments-main/pygments/lexers/ncl.py +4 -3
  183. data/vendor/pygments-main/pygments/lexers/nimrod.py +7 -8
  184. data/vendor/pygments-main/pygments/lexers/nit.py +2 -3
  185. data/vendor/pygments-main/pygments/lexers/nix.py +40 -31
  186. data/vendor/pygments-main/pygments/lexers/oberon.py +3 -3
  187. data/vendor/pygments-main/pygments/lexers/objective.py +14 -6
  188. data/vendor/pygments-main/pygments/lexers/ooc.py +2 -3
  189. data/vendor/pygments-main/pygments/lexers/openscad.py +96 -0
  190. data/vendor/pygments-main/pygments/lexers/other.py +2 -1
  191. data/vendor/pygments-main/pygments/lexers/parasail.py +2 -3
  192. data/vendor/pygments-main/pygments/lexers/parsers.py +41 -44
  193. data/vendor/pygments-main/pygments/lexers/pascal.py +6 -3
  194. data/vendor/pygments-main/pygments/lexers/pawn.py +5 -5
  195. data/vendor/pygments-main/pygments/lexers/perl.py +3 -3
  196. data/vendor/pygments-main/pygments/lexers/phix.py +2 -3
  197. data/vendor/pygments-main/pygments/lexers/php.py +4 -5
  198. data/vendor/pygments-main/pygments/lexers/pointless.py +2 -3
  199. data/vendor/pygments-main/pygments/lexers/pony.py +3 -3
  200. data/vendor/pygments-main/pygments/lexers/praat.py +2 -3
  201. data/vendor/pygments-main/pygments/lexers/procfile.py +2 -3
  202. data/vendor/pygments-main/pygments/lexers/prolog.py +23 -9
  203. data/vendor/pygments-main/pygments/lexers/promql.py +2 -1
  204. data/vendor/pygments-main/pygments/lexers/prql.py +251 -0
  205. data/vendor/pygments-main/pygments/lexers/ptx.py +119 -0
  206. data/vendor/pygments-main/pygments/lexers/python.py +24 -24
  207. data/vendor/pygments-main/pygments/lexers/q.py +5 -6
  208. data/vendor/pygments-main/pygments/lexers/qlik.py +3 -3
  209. data/vendor/pygments-main/pygments/lexers/qvt.py +5 -3
  210. data/vendor/pygments-main/pygments/lexers/r.py +8 -6
  211. data/vendor/pygments-main/pygments/lexers/rdf.py +19 -13
  212. data/vendor/pygments-main/pygments/lexers/rebol.py +7 -7
  213. data/vendor/pygments-main/pygments/lexers/resource.py +5 -6
  214. data/vendor/pygments-main/pygments/lexers/ride.py +4 -5
  215. data/vendor/pygments-main/pygments/lexers/rita.py +2 -3
  216. data/vendor/pygments-main/pygments/lexers/rnc.py +2 -3
  217. data/vendor/pygments-main/pygments/lexers/roboconf.py +5 -5
  218. data/vendor/pygments-main/pygments/lexers/robotframework.py +2 -3
  219. data/vendor/pygments-main/pygments/lexers/ruby.py +8 -13
  220. data/vendor/pygments-main/pygments/lexers/rust.py +9 -10
  221. data/vendor/pygments-main/pygments/lexers/sas.py +3 -3
  222. data/vendor/pygments-main/pygments/lexers/savi.py +131 -130
  223. data/vendor/pygments-main/pygments/lexers/scdoc.py +13 -7
  224. data/vendor/pygments-main/pygments/lexers/scripting.py +354 -42
  225. data/vendor/pygments-main/pygments/lexers/sgf.py +2 -3
  226. data/vendor/pygments-main/pygments/lexers/shell.py +107 -129
  227. data/vendor/pygments-main/pygments/lexers/sieve.py +3 -3
  228. data/vendor/pygments-main/pygments/lexers/slash.py +4 -5
  229. data/vendor/pygments-main/pygments/lexers/smalltalk.py +3 -5
  230. data/vendor/pygments-main/pygments/lexers/smithy.py +2 -3
  231. data/vendor/pygments-main/pygments/lexers/smv.py +3 -3
  232. data/vendor/pygments-main/pygments/lexers/snobol.py +3 -3
  233. data/vendor/pygments-main/pygments/lexers/solidity.py +3 -3
  234. data/vendor/pygments-main/pygments/lexers/soong.py +78 -0
  235. data/vendor/pygments-main/pygments/lexers/sophia.py +3 -4
  236. data/vendor/pygments-main/pygments/lexers/special.py +8 -3
  237. data/vendor/pygments-main/pygments/lexers/spice.py +15 -16
  238. data/vendor/pygments-main/pygments/lexers/sql.py +24 -18
  239. data/vendor/pygments-main/pygments/lexers/srcinfo.py +3 -3
  240. data/vendor/pygments-main/pygments/lexers/stata.py +2 -3
  241. data/vendor/pygments-main/pygments/lexers/supercollider.py +2 -3
  242. data/vendor/pygments-main/pygments/lexers/tact.py +303 -0
  243. data/vendor/pygments-main/pygments/lexers/tal.py +13 -10
  244. data/vendor/pygments-main/pygments/lexers/tcl.py +2 -3
  245. data/vendor/pygments-main/pygments/lexers/teal.py +2 -3
  246. data/vendor/pygments-main/pygments/lexers/templates.py +131 -72
  247. data/vendor/pygments-main/pygments/lexers/teraterm.py +2 -3
  248. data/vendor/pygments-main/pygments/lexers/testing.py +4 -5
  249. data/vendor/pygments-main/pygments/lexers/text.py +2 -1
  250. data/vendor/pygments-main/pygments/lexers/textedit.py +9 -6
  251. data/vendor/pygments-main/pygments/lexers/textfmts.py +20 -15
  252. data/vendor/pygments-main/pygments/lexers/theorem.py +41 -115
  253. data/vendor/pygments-main/pygments/lexers/thingsdb.py +50 -26
  254. data/vendor/pygments-main/pygments/lexers/tlb.py +3 -1
  255. data/vendor/pygments-main/pygments/lexers/tls.py +54 -0
  256. data/vendor/pygments-main/pygments/lexers/tnt.py +2 -3
  257. data/vendor/pygments-main/pygments/lexers/trafficscript.py +3 -3
  258. data/vendor/pygments-main/pygments/lexers/typoscript.py +6 -7
  259. data/vendor/pygments-main/pygments/lexers/typst.py +104 -0
  260. data/vendor/pygments-main/pygments/lexers/ul4.py +47 -5
  261. data/vendor/pygments-main/pygments/lexers/unicon.py +9 -7
  262. data/vendor/pygments-main/pygments/lexers/urbi.py +3 -3
  263. data/vendor/pygments-main/pygments/lexers/usd.py +6 -11
  264. data/vendor/pygments-main/pygments/lexers/varnish.py +5 -5
  265. data/vendor/pygments-main/pygments/lexers/verification.py +4 -5
  266. data/vendor/pygments-main/pygments/lexers/verifpal.py +65 -0
  267. data/vendor/pygments-main/pygments/lexers/vip.py +150 -0
  268. data/vendor/pygments-main/pygments/lexers/vyper.py +140 -0
  269. data/vendor/pygments-main/pygments/lexers/web.py +2 -1
  270. data/vendor/pygments-main/pygments/lexers/webassembly.py +2 -3
  271. data/vendor/pygments-main/pygments/lexers/webidl.py +2 -3
  272. data/vendor/pygments-main/pygments/lexers/webmisc.py +11 -15
  273. data/vendor/pygments-main/pygments/lexers/wgsl.py +6 -7
  274. data/vendor/pygments-main/pygments/lexers/whiley.py +2 -3
  275. data/vendor/pygments-main/pygments/lexers/wowtoc.py +3 -3
  276. data/vendor/pygments-main/pygments/lexers/wren.py +3 -4
  277. data/vendor/pygments-main/pygments/lexers/x10.py +6 -7
  278. data/vendor/pygments-main/pygments/lexers/xorg.py +2 -1
  279. data/vendor/pygments-main/pygments/lexers/yang.py +2 -3
  280. data/vendor/pygments-main/pygments/lexers/yara.py +69 -0
  281. data/vendor/pygments-main/pygments/lexers/zig.py +2 -1
  282. data/vendor/pygments-main/pygments/modeline.py +4 -4
  283. data/vendor/pygments-main/pygments/plugin.py +3 -19
  284. data/vendor/pygments-main/pygments/regexopt.py +1 -1
  285. data/vendor/pygments-main/pygments/scanner.py +1 -1
  286. data/vendor/pygments-main/pygments/sphinxext.py +38 -8
  287. data/vendor/pygments-main/pygments/style.py +8 -2
  288. data/vendor/pygments-main/pygments/styles/__init__.py +17 -59
  289. data/vendor/pygments-main/pygments/styles/_mapping.py +54 -0
  290. data/vendor/pygments-main/pygments/styles/abap.py +5 -1
  291. data/vendor/pygments-main/pygments/styles/algol.py +5 -1
  292. data/vendor/pygments-main/pygments/styles/algol_nu.py +5 -1
  293. data/vendor/pygments-main/pygments/styles/arduino.py +76 -72
  294. data/vendor/pygments-main/pygments/styles/autumn.py +6 -1
  295. data/vendor/pygments-main/pygments/styles/borland.py +6 -1
  296. data/vendor/pygments-main/pygments/styles/bw.py +6 -1
  297. data/vendor/pygments-main/pygments/styles/coffee.py +80 -0
  298. data/vendor/pygments-main/pygments/styles/colorful.py +6 -1
  299. data/vendor/pygments-main/pygments/styles/default.py +6 -1
  300. data/vendor/pygments-main/pygments/styles/dracula.py +68 -80
  301. data/vendor/pygments-main/pygments/styles/emacs.py +6 -1
  302. data/vendor/pygments-main/pygments/styles/friendly.py +6 -1
  303. data/vendor/pygments-main/pygments/styles/friendly_grayscale.py +6 -1
  304. data/vendor/pygments-main/pygments/styles/fruity.py +7 -1
  305. data/vendor/pygments-main/pygments/styles/gh_dark.py +7 -1
  306. data/vendor/pygments-main/pygments/styles/gruvbox.py +10 -1
  307. data/vendor/pygments-main/pygments/styles/igor.py +6 -1
  308. data/vendor/pygments-main/pygments/styles/inkpot.py +7 -2
  309. data/vendor/pygments-main/pygments/styles/lightbulb.py +110 -0
  310. data/vendor/pygments-main/pygments/styles/lilypond.py +8 -2
  311. data/vendor/pygments-main/pygments/styles/lovelace.py +16 -10
  312. data/vendor/pygments-main/pygments/styles/manni.py +7 -2
  313. data/vendor/pygments-main/pygments/styles/material.py +21 -14
  314. data/vendor/pygments-main/pygments/styles/monokai.py +16 -10
  315. data/vendor/pygments-main/pygments/styles/murphy.py +7 -2
  316. data/vendor/pygments-main/pygments/styles/native.py +10 -5
  317. data/vendor/pygments-main/pygments/styles/nord.py +9 -3
  318. data/vendor/pygments-main/pygments/styles/onedark.py +6 -2
  319. data/vendor/pygments-main/pygments/styles/paraiso_dark.py +7 -2
  320. data/vendor/pygments-main/pygments/styles/paraiso_light.py +7 -2
  321. data/vendor/pygments-main/pygments/styles/pastie.py +7 -1
  322. data/vendor/pygments-main/pygments/styles/perldoc.py +7 -1
  323. data/vendor/pygments-main/pygments/styles/rainbow_dash.py +26 -19
  324. data/vendor/pygments-main/pygments/styles/rrt.py +8 -2
  325. data/vendor/pygments-main/pygments/styles/sas.py +6 -1
  326. data/vendor/pygments-main/pygments/styles/solarized.py +9 -1
  327. data/vendor/pygments-main/pygments/styles/staroffice.py +6 -1
  328. data/vendor/pygments-main/pygments/styles/stata_dark.py +6 -2
  329. data/vendor/pygments-main/pygments/styles/stata_light.py +6 -1
  330. data/vendor/pygments-main/pygments/styles/tango.py +7 -3
  331. data/vendor/pygments-main/pygments/styles/trac.py +7 -1
  332. data/vendor/pygments-main/pygments/styles/vim.py +7 -1
  333. data/vendor/pygments-main/pygments/styles/vs.py +7 -2
  334. data/vendor/pygments-main/pygments/styles/xcode.py +6 -1
  335. data/vendor/pygments-main/pygments/styles/zenburn.py +6 -1
  336. data/vendor/pygments-main/pygments/token.py +2 -1
  337. data/vendor/pygments-main/pygments/unistring.py +5 -5
  338. data/vendor/pygments-main/pygments/util.py +13 -19
  339. data/vendor/pygments-main/{Pygments-2.15.1.dist-info → pygments-2.18.0.dist-info}/METADATA +14 -13
  340. data/vendor/pygments-main/pygments-2.18.0.dist-info/RECORD +663 -0
  341. data/vendor/pygments-main/{Pygments-2.15.1.dist-info → pygments-2.18.0.dist-info}/WHEEL +1 -2
  342. data/vendor/pygments-main/{Pygments-2.15.1.dist-info → pygments-2.18.0.dist-info/licenses}/AUTHORS +13 -0
  343. metadata +41 -17
  344. data/vendor/pygments-main/Pygments-2.15.1.dist-info/RECORD +0 -614
  345. data/vendor/pygments-main/Pygments-2.15.1.dist-info/top_level.txt +0 -1
  346. /data/vendor/pygments-main/{Pygments-2.15.1.dist-info → pygments-2.18.0.dist-info}/INSTALLER +0 -0
  347. /data/vendor/pygments-main/{Pygments-2.15.1.dist-info → pygments-2.18.0.dist-info}/REQUESTED +0 -0
  348. /data/vendor/pygments-main/{Pygments-2.15.1.dist-info → pygments-2.18.0.dist-info}/entry_points.txt +0 -0
  349. /data/vendor/pygments-main/{Pygments-2.15.1.dist-info → pygments-2.18.0.dist-info/licenses}/LICENSE +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 06ee50536364c613df97577b86bb28e455c9e53357777f3a3b345740a68d2360
4
- data.tar.gz: def24e3a74fb3f257cdec0c29bc8a511f67db9e077a595ff6c00ff8ee9a79428
3
+ metadata.gz: bf3ae31d18e15cd98c6832a2f2cde3b5bbf96c6a5dd23a91c425e990389dadcf
4
+ data.tar.gz: 6940996fda2e470a0204b4c48086aa2829abb4e59118bc41473384d4c0924bb2
5
5
  SHA512:
6
- metadata.gz: 1e8bcb9c40aced27415227b43b978fd475c6b1c7d6825c294cb5b09bcf9991f2ec77eb5f8fb221fd9f7b5a78f26b07a319ef1af253aea6ad25669544d76ae5d3
7
- data.tar.gz: f1b7d381a6244ffca240919bb81a527b373b73689ea31d04fac7153d20dd68b9ce79d8acbb09f3ad9d1ccf816c1be83b85e6777e889192d94394c6464a193298
6
+ metadata.gz: 9d4e8bf20e67061d3c630ce1b659c22edaa9af08bca7245480a3592fac77ba617fa57b2f15e75222d1fd3d4ffa1315170d07279a6f0af3820dcae598a48e59d5
7
+ data.tar.gz: 634a4c6ed46960cb8e8a65283191b74ce8701b3e741692f9231e128f8ab7c632591d7e0d599d4ca6b2acc4f47f8d3339b93070cfc3c382335074627dcfc9e4af
@@ -6,34 +6,34 @@ on:
6
6
  pull_request:
7
7
  jobs:
8
8
  rubocop:
9
- runs-on: ubuntu-20.04
9
+ runs-on: ubuntu-22.04
10
10
  steps:
11
11
  - name: Checkout
12
- uses: actions/checkout@v3
12
+ uses: actions/checkout@v4
13
13
  - name: Set up Ruby
14
14
  uses: ruby/setup-ruby@v1
15
15
  with:
16
- ruby-version: '3.0'
16
+ ruby-version: '3.3'
17
17
  bundler-cache: true
18
18
  - name: Rubocop
19
19
  run: bundle exec rubocop
20
20
  build:
21
21
  strategy:
22
22
  matrix:
23
- ruby: [ 'jruby-9.2', '2.5', '3.1' ]
24
- python: [ '3.6', '3.11' ]
25
- platform: [ ubuntu-20.04, macos-latest, windows-2019 ]
23
+ ruby: [ 'jruby-9.3', 'jruby-9.4', '2.6', '3.3' ]
24
+ python: [ '3.8', '3.12' ]
25
+ platform: [ ubuntu-22.04, macos-12, windows-2019 ]
26
26
  runs-on: ${{ matrix.platform }}
27
27
  steps:
28
28
  - name: Checkout
29
- uses: actions/checkout@v3
29
+ uses: actions/checkout@v4
30
30
  - name: Setup Ruby
31
31
  uses: ruby/setup-ruby@v1
32
32
  with:
33
33
  ruby-version: ${{ matrix.ruby }}
34
34
  bundler-cache: true
35
35
  - name: Setup Python
36
- uses: actions/setup-python@v4
36
+ uses: actions/setup-python@v5
37
37
  with:
38
38
  python-version: ${{ matrix.python }}
39
39
  - name: Run Tests
@@ -4,18 +4,18 @@ on:
4
4
  tags: [ '*' ]
5
5
  jobs:
6
6
  build:
7
- runs-on: ubuntu-20.04
7
+ runs-on: ubuntu-22.04
8
8
  steps:
9
- - uses: actions/checkout@v3
9
+ - uses: actions/checkout@v4
10
10
  - name: Set up Ruby
11
11
  uses: ruby/setup-ruby@v1
12
12
  with:
13
- ruby-version: '3.1'
13
+ ruby-version: '3.3'
14
14
  bundler-cache: true
15
15
  - name: Setup Python
16
- uses: actions/setup-python@v4
16
+ uses: actions/setup-python@v5
17
17
  with:
18
- python-version: '3.11'
18
+ python-version: '3.12'
19
19
  - name: Build
20
20
  run: bundle exec rake build
21
21
  - name: Publish to RubyGems.org
data/.gitignore CHANGED
@@ -1,5 +1,7 @@
1
+ /.bundle/
1
2
  /.idea/
2
3
  /Gemfile.lock
3
4
  /pkg/
4
5
  /tmp
6
+ /vendor/
5
7
  *.pyc
data/.rubocop.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  AllCops:
2
2
  NewCops: enable
3
- TargetRubyVersion: 2.5
3
+ TargetRubyVersion: 2.6
4
4
  Gemspec/RequireMFA:
5
5
  Enabled: false
6
6
  Metrics/AbcSize:
data/CHANGELOG.adoc CHANGED
@@ -5,6 +5,18 @@
5
5
  This document provides a high-level view of the changes to the {project-name} by release.
6
6
  For a detailed view of what has changed, refer to the {uri-repo}/commits/master[commit history] on GitHub.
7
7
 
8
+ == 3.0.0 (2024-05-14) - @slonopotamus
9
+
10
+ * Drop support for Ruby 2.5.
11
+ The oldest supported is 3.6 now.
12
+ * Drop support for Python 3.6 and 3.7.
13
+ The oldest supported is 3.8 now.
14
+ * Update Pygments to 2.18.0
15
+
16
+ == 2.4.1 (2023-11-13) - @slonopotamus
17
+
18
+ * Fix handling of Python virtual environments on Windows ({uri-repo})/issues/256[#256])
19
+
8
20
  == 2.4.0
9
21
 
10
22
  * Update Pygments to 2.15.1
data/README.adoc CHANGED
@@ -22,8 +22,8 @@ If a Python process dies, a new one will be spawned on the next pygments.rb requ
22
22
 
23
23
  == System Requirements
24
24
 
25
- - Python >= 3.6
26
- - Ruby >= 2.5
25
+ - Python >= 3.8
26
+ - Ruby >= 2.6
27
27
 
28
28
  == Installation
29
29
 
@@ -196,9 +196,9 @@ module Pygments
196
196
  # Detect a suitable Python binary to use.
197
197
  def find_python_binary
198
198
  if Gem.win_platform?
199
+ return 'python3' if which('python3')
200
+ return 'python' if which('python')
199
201
  return %w[py -3] if which('py')
200
-
201
- return [%w[python3 python].find { |py| !which(py).nil? }]
202
202
  end
203
203
 
204
204
  # On non-Windows platforms, we simply rely on shebang
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Pygments
4
- VERSION = '2.4.0'
4
+ VERSION = '3.0.0'
5
5
  end
data/pygments.rb.gemspec CHANGED
@@ -22,11 +22,11 @@ Gem::Specification.new do |s|
22
22
  'source_code_uri' => s.homepage
23
23
  }
24
24
 
25
- s.required_ruby_version = '>= 2.5.0'
25
+ s.required_ruby_version = '>= 2.6.0'
26
26
 
27
- s.add_development_dependency 'rake', '~> 13.0.0'
27
+ s.add_development_dependency 'rake', '~> 13.2.0'
28
28
  s.add_development_dependency 'rubocop', '~> 1.28.2'
29
- s.add_development_dependency 'test-unit', '~> 3.5.0'
29
+ s.add_development_dependency 'test-unit', '~> 3.6.0'
30
30
 
31
31
  s.files = `git ls-files -z`.split("\0").reject { |f| File.symlink?(f) }
32
32
  end
@@ -1,4 +1,4 @@
1
- #!/usr/bin/python3.10
1
+ #!/usr/bin/python3.11
2
2
  # -*- coding: utf-8 -*-
3
3
  import re
4
4
  import sys
@@ -21,12 +21,12 @@
21
21
  .. _Pygments master branch:
22
22
  https://github.com/pygments/pygments/archive/master.zip#egg=Pygments-dev
23
23
 
24
- :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
24
+ :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.
25
25
  :license: BSD, see LICENSE for details.
26
26
  """
27
27
  from io import StringIO, BytesIO
28
28
 
29
- __version__ = '2.15.1'
29
+ __version__ = '2.18.0'
30
30
  __docformat__ = 'restructuredtext'
31
31
 
32
32
  __all__ = ['lex', 'format', 'highlight']
@@ -4,7 +4,7 @@
4
4
 
5
5
  Main entry point for ``python -m pygments``.
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
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  Command line interface.
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
 
@@ -68,19 +68,19 @@ def _print_help(what, name):
68
68
  try:
69
69
  if what == 'lexer':
70
70
  cls = get_lexer_by_name(name)
71
- print("Help on the %s lexer:" % cls.name)
71
+ print(f"Help on the {cls.name} lexer:")
72
72
  print(dedent(cls.__doc__))
73
73
  elif what == 'formatter':
74
74
  cls = find_formatter_class(name)
75
- print("Help on the %s formatter:" % cls.name)
75
+ print(f"Help on the {cls.name} formatter:")
76
76
  print(dedent(cls.__doc__))
77
77
  elif what == 'filter':
78
78
  cls = find_filter_class(name)
79
- print("Help on the %s filter:" % name)
79
+ print(f"Help on the {name} filter:")
80
80
  print(dedent(cls.__doc__))
81
81
  return 0
82
82
  except (AttributeError, ValueError):
83
- print("%s not found!" % what, file=sys.stderr)
83
+ print(f"{what} not found!", file=sys.stderr)
84
84
  return 1
85
85
 
86
86
 
@@ -97,7 +97,7 @@ def _print_list(what):
97
97
  info.append(tup)
98
98
  info.sort()
99
99
  for i in info:
100
- print(('* %s\n %s %s') % i)
100
+ print(('* {}\n {} {}').format(*i))
101
101
 
102
102
  elif what == 'formatter':
103
103
  print()
@@ -112,7 +112,7 @@ def _print_list(what):
112
112
  info.append(tup)
113
113
  info.sort()
114
114
  for i in info:
115
- print(('* %s\n %s %s') % i)
115
+ print(('* {}\n {} {}').format(*i))
116
116
 
117
117
  elif what == 'filter':
118
118
  print()
@@ -122,7 +122,7 @@ def _print_list(what):
122
122
  for name in get_all_filters():
123
123
  cls = find_filter_class(name)
124
124
  print("* " + name + ':')
125
- print(" %s" % docstring_headline(cls))
125
+ print(f" {docstring_headline(cls)}")
126
126
 
127
127
  elif what == 'style':
128
128
  print()
@@ -132,7 +132,7 @@ def _print_list(what):
132
132
  for name in get_all_styles():
133
133
  cls = get_style_by_name(name)
134
134
  print("* " + name + ':')
135
- print(" %s" % docstring_headline(cls))
135
+ print(f" {docstring_headline(cls)}")
136
136
 
137
137
 
138
138
  def _print_list_as_json(requested_items):
@@ -185,8 +185,8 @@ def main_inner(parser, argns):
185
185
  return 0
186
186
 
187
187
  if argns.V:
188
- print('Pygments version %s, (c) 2006-2023 by Georg Brandl, Matthäus '
189
- 'Chajdas and contributors.' % __version__)
188
+ print(f'Pygments version {__version__}, (c) 2006-2024 by Georg Brandl, Matthäus '
189
+ 'Chajdas and contributors.')
190
190
  return 0
191
191
 
192
192
  def is_only_option(opt):
@@ -659,7 +659,7 @@ def main(args=sys.argv):
659
659
  msg = info[-1].strip()
660
660
  if len(info) >= 3:
661
661
  # extract relevant file and position info
662
- msg += '\n (f%s)' % info[-2].split('\n')[0].strip()[1:]
662
+ msg += '\n (f{})'.format(info[-2].split('\n')[0].strip()[1:])
663
663
  print(file=sys.stderr)
664
664
  print('*** Error while highlighting:', file=sys.stderr)
665
665
  print(msg, file=sys.stderr)
@@ -4,7 +4,7 @@
4
4
 
5
5
  Format colored console output.
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
 
@@ -27,12 +27,12 @@ light_colors = ["brightblack", "brightred", "brightgreen", "brightyellow", "brig
27
27
  "brightmagenta", "brightcyan", "white"]
28
28
 
29
29
  x = 30
30
- for d, l in zip(dark_colors, light_colors):
31
- codes[d] = esc + "%im" % x
32
- codes[l] = esc + "%im" % (60 + x)
30
+ for dark, light in zip(dark_colors, light_colors):
31
+ codes[dark] = esc + "%im" % x
32
+ codes[light] = esc + "%im" % (60 + x)
33
33
  x += 1
34
34
 
35
- del d, l, x
35
+ del dark, light, x
36
36
 
37
37
  codes["white"] = codes["bold"]
38
38
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  Module that implements the default filter.
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
 
@@ -62,8 +62,7 @@ class FunctionFilter(Filter):
62
62
 
63
63
  def __init__(self, **options):
64
64
  if not hasattr(self, 'function'):
65
- raise TypeError('%r used without bound function' %
66
- self.__class__.__name__)
65
+ raise TypeError(f'{self.__class__.__name__!r} used without bound function')
67
66
  Filter.__init__(self, **options)
68
67
 
69
68
  def filter(self, lexer, stream):
@@ -5,7 +5,7 @@
5
5
  Module containing filter lookup functions and default
6
6
  filters.
7
7
 
8
- :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
8
+ :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.
9
9
  :license: BSD, see LICENSE for details.
10
10
  """
11
11
 
@@ -39,7 +39,7 @@ def get_filter_by_name(filtername, **options):
39
39
  if cls:
40
40
  return cls(**options)
41
41
  else:
42
- raise ClassNotFound('filter %r not found' % filtername)
42
+ raise ClassNotFound(f'filter {filtername!r} not found')
43
43
 
44
44
 
45
45
  def get_all_filters():
@@ -79,9 +79,9 @@ class CodeTagFilter(Filter):
79
79
  Filter.__init__(self, **options)
80
80
  tags = get_list_opt(options, 'codetags',
81
81
  ['XXX', 'TODO', 'FIXME', 'BUG', 'NOTE'])
82
- self.tag_re = re.compile(r'\b(%s)\b' % '|'.join([
82
+ self.tag_re = re.compile(r'\b({})\b'.format('|'.join([
83
83
  re.escape(tag) for tag in tags if tag
84
- ]))
84
+ ])))
85
85
 
86
86
  def filter(self, lexer, stream):
87
87
  regex = self.tag_re
@@ -4,7 +4,7 @@
4
4
 
5
5
  Base formatter class.
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
 
@@ -122,3 +122,8 @@ class Formatter:
122
122
  # wrap the outfile in a StreamWriter
123
123
  outfile = codecs.lookup(self.encoding)[3](outfile)
124
124
  return self.format_unencoded(tokensource, outfile)
125
+
126
+ # Allow writing Formatter[str] or Formatter[bytes]. That's equivalent to
127
+ # Formatter. This helps when using third-party type stubs from typeshed.
128
+ def __class_getitem__(cls, name):
129
+ return cls
@@ -4,7 +4,7 @@
4
4
 
5
5
  Pygments formatters.
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
 
@@ -77,7 +77,7 @@ def get_formatter_by_name(_alias, **options):
77
77
  """
78
78
  cls = find_formatter_class(_alias)
79
79
  if cls is None:
80
- raise ClassNotFound("no formatter found for name %r" % _alias)
80
+ raise ClassNotFound(f"no formatter found for name {_alias!r}")
81
81
  return cls(**options)
82
82
 
83
83
 
@@ -103,17 +103,16 @@ def load_formatter_from_file(filename, formattername="CustomFormatter", **option
103
103
  exec(f.read(), custom_namespace)
104
104
  # Retrieve the class `formattername` from that namespace
105
105
  if formattername not in custom_namespace:
106
- raise ClassNotFound('no valid %s class found in %s' %
107
- (formattername, filename))
106
+ raise ClassNotFound(f'no valid {formattername} class found in {filename}')
108
107
  formatter_class = custom_namespace[formattername]
109
108
  # And finally instantiate it with the options
110
109
  return formatter_class(**options)
111
110
  except OSError as err:
112
- raise ClassNotFound('cannot read %s: %s' % (filename, err))
111
+ raise ClassNotFound(f'cannot read {filename}: {err}')
113
112
  except ClassNotFound:
114
113
  raise
115
114
  except Exception as err:
116
- raise ClassNotFound('error when loading custom formatter: %s' % err)
115
+ raise ClassNotFound(f'error when loading custom formatter: {err}')
117
116
 
118
117
 
119
118
  def get_formatter_for_filename(fn, **options):
@@ -131,11 +130,11 @@ def get_formatter_for_filename(fn, **options):
131
130
  if name not in _formatter_cache:
132
131
  _load_formatters(modname)
133
132
  return _formatter_cache[name](**options)
134
- for cls in find_plugin_formatters():
133
+ for _name, cls in find_plugin_formatters():
135
134
  for filename in cls.filenames:
136
135
  if _fn_matches(fn, filename):
137
136
  return cls(**options)
138
- raise ClassNotFound("no formatter found for file name %r" % fn)
137
+ raise ClassNotFound(f"no formatter found for file name {fn!r}")
139
138
 
140
139
 
141
140
  class _automodule(types.ModuleType):
File without changes
@@ -4,7 +4,7 @@
4
4
 
5
5
  BBcode formatter.
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
 
@@ -60,7 +60,7 @@ class BBCodeFormatter(Formatter):
60
60
  for ttype, ndef in self.style:
61
61
  start = end = ''
62
62
  if ndef['color']:
63
- start += '[color=#%s]' % ndef['color']
63
+ start += '[color=#{}]'.format(ndef['color'])
64
64
  end = '[/color]' + end
65
65
  if ndef['bold']:
66
66
  start += '[b]'
@@ -4,7 +4,7 @@
4
4
 
5
5
  Formatter for groff output.
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
 
@@ -63,7 +63,7 @@ class GroffFormatter(Formatter):
63
63
  for ttype, ndef in self.style:
64
64
  start = end = ''
65
65
  if ndef['color']:
66
- start += '\\m[%s]' % ndef['color']
66
+ start += '\\m[{}]'.format(ndef['color'])
67
67
  end = '\\m[]' + end
68
68
  if ndef['bold']:
69
69
  start += bold
@@ -72,7 +72,7 @@ class GroffFormatter(Formatter):
72
72
  start += italic
73
73
  end = regular + end
74
74
  if ndef['bgcolor']:
75
- start += '\\M[%s]' % ndef['bgcolor']
75
+ start += '\\M[{}]'.format(ndef['bgcolor'])
76
76
  end = '\\M[]' + end
77
77
 
78
78
  self.styles[ttype] = start, end