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