pygments.rb 2.3.1 → 2.4.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 (324) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +1 -1
  3. data/.rubocop.yml +7 -0
  4. data/CHANGELOG.adoc +4 -0
  5. data/README.adoc +1 -1
  6. data/bench.rb +1 -1
  7. data/lib/pygments/popen.rb +3 -7
  8. data/lib/pygments/version.rb +1 -1
  9. data/pygments.rb.gemspec +2 -2
  10. data/test/test_pygments.rb +0 -19
  11. data/vendor/pygments-main/{Pygments-2.10.0.dist-info → Pygments-2.15.1.dist-info}/AUTHORS +21 -1
  12. data/vendor/pygments-main/{Pygments-2.10.0.dist-info → Pygments-2.15.1.dist-info}/LICENSE +1 -1
  13. data/vendor/pygments-main/{Pygments-2.10.0.dist-info → Pygments-2.15.1.dist-info}/METADATA +19 -11
  14. data/vendor/pygments-main/Pygments-2.15.1.dist-info/RECORD +614 -0
  15. data/vendor/pygments-main/{Pygments-2.10.0.dist-info → Pygments-2.15.1.dist-info}/WHEEL +1 -1
  16. data/vendor/pygments-main/{Pygments-2.10.0.dist-info → Pygments-2.15.1.dist-info}/entry_points.txt +0 -1
  17. data/vendor/pygments-main/bin/pygmentize +1 -1
  18. data/vendor/pygments-main/pygments/__init__.py +20 -22
  19. data/vendor/pygments-main/pygments/__main__.py +1 -1
  20. data/vendor/pygments-main/pygments/cmdline.py +74 -8
  21. data/vendor/pygments-main/pygments/console.py +1 -1
  22. data/vendor/pygments-main/pygments/filter.py +1 -1
  23. data/vendor/pygments-main/pygments/filters/__init__.py +6 -3
  24. data/vendor/pygments-main/pygments/formatter.py +41 -11
  25. data/vendor/pygments-main/pygments/formatters/__init__.py +21 -16
  26. data/vendor/pygments-main/pygments/formatters/_mapping.py +5 -65
  27. data/vendor/pygments-main/pygments/formatters/bbcode.py +1 -1
  28. data/vendor/pygments-main/pygments/formatters/groff.py +170 -0
  29. data/vendor/pygments-main/pygments/formatters/html.py +54 -32
  30. data/vendor/pygments-main/pygments/formatters/img.py +9 -5
  31. data/vendor/pygments-main/pygments/formatters/irc.py +6 -33
  32. data/vendor/pygments-main/pygments/formatters/latex.py +24 -14
  33. data/vendor/pygments-main/pygments/formatters/other.py +1 -1
  34. data/vendor/pygments-main/pygments/formatters/pangomarkup.py +1 -1
  35. data/vendor/pygments-main/pygments/formatters/rtf.py +1 -1
  36. data/vendor/pygments-main/pygments/formatters/svg.py +1 -1
  37. data/vendor/pygments-main/pygments/formatters/terminal.py +1 -3
  38. data/vendor/pygments-main/pygments/formatters/terminal256.py +2 -4
  39. data/vendor/pygments-main/pygments/lexer.py +101 -32
  40. data/vendor/pygments-main/pygments/lexers/__init__.py +50 -29
  41. data/vendor/pygments-main/pygments/lexers/_ada_builtins.py +103 -0
  42. data/vendor/pygments-main/pygments/lexers/_asy_builtins.py +1 -1
  43. data/vendor/pygments-main/pygments/lexers/_cl_builtins.py +1 -1
  44. data/vendor/pygments-main/pygments/lexers/_cocoa_builtins.py +2 -2
  45. data/vendor/pygments-main/pygments/lexers/_csound_builtins.py +21 -6
  46. data/vendor/pygments-main/pygments/lexers/_css_builtins.py +558 -0
  47. data/vendor/pygments-main/pygments/lexers/_julia_builtins.py +10 -0
  48. data/vendor/pygments-main/pygments/lexers/_lasso_builtins.py +1 -1
  49. data/vendor/pygments-main/pygments/lexers/_lilypond_builtins.py +4932 -0
  50. data/vendor/pygments-main/pygments/lexers/_lua_builtins.py +11 -18
  51. data/vendor/pygments-main/pygments/lexers/_mapping.py +71 -82
  52. data/vendor/pygments-main/pygments/lexers/_mql_builtins.py +1 -1
  53. data/vendor/pygments-main/pygments/lexers/_mysql_builtins.py +58 -4
  54. data/vendor/pygments-main/pygments/lexers/_openedge_builtins.py +1 -1
  55. data/vendor/pygments-main/pygments/lexers/_php_builtins.py +408 -1835
  56. data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +70 -8
  57. data/vendor/pygments-main/pygments/lexers/_qlik_builtins.py +666 -0
  58. data/vendor/pygments-main/pygments/lexers/_scheme_builtins.py +1609 -0
  59. data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +3 -3
  60. data/vendor/pygments-main/pygments/lexers/_sourcemod_builtins.py +9 -18
  61. data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +185 -94
  62. data/vendor/pygments-main/pygments/lexers/_stata_builtins.py +1 -1
  63. data/vendor/pygments-main/pygments/lexers/_tsql_builtins.py +1 -1
  64. data/vendor/pygments-main/pygments/lexers/_usd_builtins.py +1 -1
  65. data/vendor/pygments-main/pygments/lexers/_vbscript_builtins.py +1 -1
  66. data/vendor/pygments-main/pygments/lexers/_vim_builtins.py +1 -1
  67. data/vendor/pygments-main/pygments/lexers/actionscript.py +15 -14
  68. data/vendor/pygments-main/pygments/lexers/ada.py +144 -0
  69. data/vendor/pygments-main/pygments/lexers/agile.py +1 -1
  70. data/vendor/pygments-main/pygments/lexers/algebra.py +72 -9
  71. data/vendor/pygments-main/pygments/lexers/ambient.py +8 -7
  72. data/vendor/pygments-main/pygments/lexers/amdgpu.py +4 -3
  73. data/vendor/pygments-main/pygments/lexers/ampl.py +10 -8
  74. data/vendor/pygments-main/pygments/lexers/apdlexer.py +164 -20
  75. data/vendor/pygments-main/pygments/lexers/apl.py +6 -5
  76. data/vendor/pygments-main/pygments/lexers/archetype.py +23 -21
  77. data/vendor/pygments-main/pygments/lexers/arrow.py +10 -9
  78. data/vendor/pygments-main/pygments/lexers/arturo.py +250 -0
  79. data/vendor/pygments-main/pygments/lexers/asc.py +9 -5
  80. data/vendor/pygments-main/pygments/lexers/asm.py +68 -63
  81. data/vendor/pygments-main/pygments/lexers/automation.py +7 -5
  82. data/vendor/pygments-main/pygments/lexers/bare.py +20 -21
  83. data/vendor/pygments-main/pygments/lexers/basic.py +45 -41
  84. data/vendor/pygments-main/pygments/lexers/bdd.py +58 -0
  85. data/vendor/pygments-main/pygments/lexers/berry.py +99 -0
  86. data/vendor/pygments-main/pygments/lexers/bibtex.py +6 -6
  87. data/vendor/pygments-main/pygments/lexers/boa.py +4 -8
  88. data/vendor/pygments-main/pygments/lexers/business.py +18 -18
  89. data/vendor/pygments-main/pygments/lexers/c_cpp.py +80 -40
  90. data/vendor/pygments-main/pygments/lexers/c_like.py +21 -19
  91. data/vendor/pygments-main/pygments/lexers/capnproto.py +6 -8
  92. data/vendor/pygments-main/pygments/lexers/carbon.py +96 -0
  93. data/vendor/pygments-main/pygments/lexers/cddl.py +16 -33
  94. data/vendor/pygments-main/pygments/lexers/chapel.py +14 -9
  95. data/vendor/pygments-main/pygments/lexers/clean.py +3 -2
  96. data/vendor/pygments-main/pygments/lexers/comal.py +80 -0
  97. data/vendor/pygments-main/pygments/lexers/compiled.py +3 -2
  98. data/vendor/pygments-main/pygments/lexers/configs.py +235 -120
  99. data/vendor/pygments-main/pygments/lexers/console.py +5 -4
  100. data/vendor/pygments-main/pygments/lexers/cplint.py +44 -0
  101. data/vendor/pygments-main/pygments/lexers/crystal.py +22 -23
  102. data/vendor/pygments-main/pygments/lexers/csound.py +19 -17
  103. data/vendor/pygments-main/pygments/lexers/css.py +67 -159
  104. data/vendor/pygments-main/pygments/lexers/d.py +15 -12
  105. data/vendor/pygments-main/pygments/lexers/dalvik.py +14 -11
  106. data/vendor/pygments-main/pygments/lexers/data.py +119 -49
  107. data/vendor/pygments-main/pygments/lexers/dax.py +136 -0
  108. data/vendor/pygments-main/pygments/lexers/devicetree.py +9 -8
  109. data/vendor/pygments-main/pygments/lexers/diff.py +23 -19
  110. data/vendor/pygments-main/pygments/lexers/dotnet.py +216 -81
  111. data/vendor/pygments-main/pygments/lexers/dsls.py +86 -64
  112. data/vendor/pygments-main/pygments/lexers/dylan.py +16 -15
  113. data/vendor/pygments-main/pygments/lexers/ecl.py +46 -38
  114. data/vendor/pygments-main/pygments/lexers/eiffel.py +15 -10
  115. data/vendor/pygments-main/pygments/lexers/elm.py +12 -8
  116. data/vendor/pygments-main/pygments/lexers/elpi.py +165 -0
  117. data/vendor/pygments-main/pygments/lexers/email.py +21 -39
  118. data/vendor/pygments-main/pygments/lexers/erlang.py +21 -22
  119. data/vendor/pygments-main/pygments/lexers/esoteric.py +28 -30
  120. data/vendor/pygments-main/pygments/lexers/ezhil.py +10 -9
  121. data/vendor/pygments-main/pygments/lexers/factor.py +104 -83
  122. data/vendor/pygments-main/pygments/lexers/fantom.py +31 -29
  123. data/vendor/pygments-main/pygments/lexers/felix.py +18 -14
  124. data/vendor/pygments-main/pygments/lexers/fift.py +67 -0
  125. data/vendor/pygments-main/pygments/lexers/floscript.py +7 -7
  126. data/vendor/pygments-main/pygments/lexers/forth.py +8 -6
  127. data/vendor/pygments-main/pygments/lexers/fortran.py +16 -11
  128. data/vendor/pygments-main/pygments/lexers/foxpro.py +2 -2
  129. data/vendor/pygments-main/pygments/lexers/freefem.py +7 -10
  130. data/vendor/pygments-main/pygments/lexers/func.py +108 -0
  131. data/vendor/pygments-main/pygments/lexers/functional.py +1 -1
  132. data/vendor/pygments-main/pygments/lexers/futhark.py +12 -17
  133. data/vendor/pygments-main/pygments/lexers/gcodelexer.py +1 -2
  134. data/vendor/pygments-main/pygments/lexers/gdscript.py +76 -233
  135. data/vendor/pygments-main/pygments/lexers/go.py +12 -14
  136. data/vendor/pygments-main/pygments/lexers/grammar_notation.py +22 -26
  137. data/vendor/pygments-main/pygments/lexers/graph.py +36 -15
  138. data/vendor/pygments-main/pygments/lexers/graphics.py +37 -38
  139. data/vendor/pygments-main/pygments/lexers/graphviz.py +2 -1
  140. data/vendor/pygments-main/pygments/lexers/gsql.py +39 -27
  141. data/vendor/pygments-main/pygments/lexers/haskell.py +73 -71
  142. data/vendor/pygments-main/pygments/lexers/haxe.py +13 -11
  143. data/vendor/pygments-main/pygments/lexers/hdl.py +31 -34
  144. data/vendor/pygments-main/pygments/lexers/hexdump.py +21 -21
  145. data/vendor/pygments-main/pygments/lexers/html.py +11 -19
  146. data/vendor/pygments-main/pygments/lexers/idl.py +10 -5
  147. data/vendor/pygments-main/pygments/lexers/igor.py +3 -2
  148. data/vendor/pygments-main/pygments/lexers/inferno.py +9 -8
  149. data/vendor/pygments-main/pygments/lexers/installers.py +39 -33
  150. data/vendor/pygments-main/pygments/lexers/int_fiction.py +35 -20
  151. data/vendor/pygments-main/pygments/lexers/iolang.py +9 -9
  152. data/vendor/pygments-main/pygments/lexers/j.py +20 -13
  153. data/vendor/pygments-main/pygments/lexers/javascript.py +183 -149
  154. data/vendor/pygments-main/pygments/lexers/jmespath.py +68 -0
  155. data/vendor/pygments-main/pygments/lexers/jslt.py +4 -3
  156. data/vendor/pygments-main/pygments/lexers/jsonnet.py +168 -0
  157. data/vendor/pygments-main/pygments/lexers/julia.py +44 -32
  158. data/vendor/pygments-main/pygments/lexers/jvm.py +161 -140
  159. data/vendor/pygments-main/pygments/lexers/kuin.py +93 -59
  160. data/vendor/pygments-main/pygments/lexers/lilypond.py +226 -0
  161. data/vendor/pygments-main/pygments/lexers/lisp.py +244 -107
  162. data/vendor/pygments-main/pygments/lexers/macaulay2.py +1739 -0
  163. data/vendor/pygments-main/pygments/lexers/make.py +21 -16
  164. data/vendor/pygments-main/pygments/lexers/markup.py +752 -11
  165. data/vendor/pygments-main/pygments/lexers/math.py +1 -1
  166. data/vendor/pygments-main/pygments/lexers/matlab.py +18 -3
  167. data/vendor/pygments-main/pygments/lexers/maxima.py +85 -0
  168. data/vendor/pygments-main/pygments/lexers/meson.py +10 -25
  169. data/vendor/pygments-main/pygments/lexers/mime.py +2 -2
  170. data/vendor/pygments-main/pygments/lexers/minecraft.py +394 -0
  171. data/vendor/pygments-main/pygments/lexers/mips.py +128 -0
  172. data/vendor/pygments-main/pygments/lexers/ml.py +9 -6
  173. data/vendor/pygments-main/pygments/lexers/modeling.py +12 -8
  174. data/vendor/pygments-main/pygments/lexers/modula2.py +3 -2
  175. data/vendor/pygments-main/pygments/lexers/monte.py +3 -2
  176. data/vendor/pygments-main/pygments/lexers/mosel.py +1 -1
  177. data/vendor/pygments-main/pygments/lexers/ncl.py +1 -1
  178. data/vendor/pygments-main/pygments/lexers/nimrod.py +62 -20
  179. data/vendor/pygments-main/pygments/lexers/nit.py +3 -2
  180. data/vendor/pygments-main/pygments/lexers/nix.py +5 -5
  181. data/vendor/pygments-main/pygments/lexers/oberon.py +2 -2
  182. data/vendor/pygments-main/pygments/lexers/objective.py +6 -4
  183. data/vendor/pygments-main/pygments/lexers/ooc.py +3 -2
  184. data/vendor/pygments-main/pygments/lexers/other.py +1 -1
  185. data/vendor/pygments-main/pygments/lexers/parasail.py +3 -2
  186. data/vendor/pygments-main/pygments/lexers/parsers.py +23 -21
  187. data/vendor/pygments-main/pygments/lexers/pascal.py +196 -198
  188. data/vendor/pygments-main/pygments/lexers/pawn.py +1 -1
  189. data/vendor/pygments-main/pygments/lexers/perl.py +17 -15
  190. data/vendor/pygments-main/pygments/lexers/phix.py +364 -0
  191. data/vendor/pygments-main/pygments/lexers/php.py +35 -20
  192. data/vendor/pygments-main/pygments/lexers/pointless.py +3 -2
  193. data/vendor/pygments-main/pygments/lexers/pony.py +1 -1
  194. data/vendor/pygments-main/pygments/lexers/praat.py +41 -38
  195. data/vendor/pygments-main/pygments/lexers/procfile.py +2 -3
  196. data/vendor/pygments-main/pygments/lexers/prolog.py +7 -8
  197. data/vendor/pygments-main/pygments/lexers/promql.py +5 -12
  198. data/vendor/pygments-main/pygments/lexers/python.py +145 -119
  199. data/vendor/pygments-main/pygments/lexers/q.py +188 -0
  200. data/vendor/pygments-main/pygments/lexers/qlik.py +117 -0
  201. data/vendor/pygments-main/pygments/lexers/qvt.py +1 -1
  202. data/vendor/pygments-main/pygments/lexers/r.py +4 -4
  203. data/vendor/pygments-main/pygments/lexers/rdf.py +3 -3
  204. data/vendor/pygments-main/pygments/lexers/rebol.py +1 -12
  205. data/vendor/pygments-main/pygments/lexers/resource.py +1 -1
  206. data/vendor/pygments-main/pygments/lexers/ride.py +3 -2
  207. data/vendor/pygments-main/pygments/lexers/rita.py +43 -0
  208. data/vendor/pygments-main/pygments/lexers/rnc.py +3 -2
  209. data/vendor/pygments-main/pygments/lexers/roboconf.py +3 -3
  210. data/vendor/pygments-main/pygments/lexers/robotframework.py +6 -5
  211. data/vendor/pygments-main/pygments/lexers/ruby.py +24 -24
  212. data/vendor/pygments-main/pygments/lexers/rust.py +3 -2
  213. data/vendor/pygments-main/pygments/lexers/sas.py +2 -2
  214. data/vendor/pygments-main/pygments/lexers/savi.py +170 -0
  215. data/vendor/pygments-main/pygments/lexers/scdoc.py +4 -7
  216. data/vendor/pygments-main/pygments/lexers/scripting.py +24 -21
  217. data/vendor/pygments-main/pygments/lexers/sgf.py +6 -6
  218. data/vendor/pygments-main/pygments/lexers/shell.py +29 -21
  219. data/vendor/pygments-main/pygments/lexers/sieve.py +14 -4
  220. data/vendor/pygments-main/pygments/lexers/slash.py +1 -1
  221. data/vendor/pygments-main/pygments/lexers/smalltalk.py +5 -3
  222. data/vendor/pygments-main/pygments/lexers/smithy.py +5 -6
  223. data/vendor/pygments-main/pygments/lexers/smv.py +1 -1
  224. data/vendor/pygments-main/pygments/lexers/snobol.py +1 -1
  225. data/vendor/pygments-main/pygments/lexers/solidity.py +3 -7
  226. data/vendor/pygments-main/pygments/lexers/sophia.py +103 -0
  227. data/vendor/pygments-main/pygments/lexers/special.py +2 -5
  228. data/vendor/pygments-main/pygments/lexers/spice.py +71 -0
  229. data/vendor/pygments-main/pygments/lexers/sql.py +212 -17
  230. data/vendor/pygments-main/pygments/lexers/srcinfo.py +62 -0
  231. data/vendor/pygments-main/pygments/lexers/stata.py +4 -3
  232. data/vendor/pygments-main/pygments/lexers/supercollider.py +4 -3
  233. data/vendor/pygments-main/pygments/lexers/tal.py +74 -0
  234. data/vendor/pygments-main/pygments/lexers/tcl.py +21 -16
  235. data/vendor/pygments-main/pygments/lexers/teal.py +9 -8
  236. data/vendor/pygments-main/pygments/lexers/templates.py +62 -29
  237. data/vendor/pygments-main/pygments/lexers/teraterm.py +12 -20
  238. data/vendor/pygments-main/pygments/lexers/testing.py +6 -2
  239. data/vendor/pygments-main/pygments/lexers/text.py +3 -2
  240. data/vendor/pygments-main/pygments/lexers/textedit.py +41 -7
  241. data/vendor/pygments-main/pygments/lexers/textfmts.py +7 -5
  242. data/vendor/pygments-main/pygments/lexers/theorem.py +42 -36
  243. data/vendor/pygments-main/pygments/lexers/thingsdb.py +2 -4
  244. data/vendor/pygments-main/pygments/lexers/tlb.py +57 -0
  245. data/vendor/pygments-main/pygments/lexers/tnt.py +3 -4
  246. data/vendor/pygments-main/pygments/lexers/trafficscript.py +2 -4
  247. data/vendor/pygments-main/pygments/lexers/typoscript.py +2 -3
  248. data/vendor/pygments-main/pygments/lexers/ul4.py +267 -0
  249. data/vendor/pygments-main/pygments/lexers/unicon.py +1 -1
  250. data/vendor/pygments-main/pygments/lexers/urbi.py +4 -4
  251. data/vendor/pygments-main/pygments/lexers/usd.py +2 -1
  252. data/vendor/pygments-main/pygments/lexers/varnish.py +5 -5
  253. data/vendor/pygments-main/pygments/lexers/verification.py +4 -3
  254. data/vendor/pygments-main/pygments/lexers/web.py +1 -1
  255. data/vendor/pygments-main/pygments/lexers/webassembly.py +5 -5
  256. data/vendor/pygments-main/pygments/lexers/webidl.py +2 -1
  257. data/vendor/pygments-main/pygments/lexers/webmisc.py +90 -71
  258. data/vendor/pygments-main/pygments/lexers/wgsl.py +407 -0
  259. data/vendor/pygments-main/pygments/lexers/whiley.py +2 -1
  260. data/vendor/pygments-main/pygments/lexers/wowtoc.py +120 -0
  261. data/vendor/pygments-main/pygments/lexers/wren.py +99 -0
  262. data/vendor/pygments-main/pygments/lexers/x10.py +5 -6
  263. data/vendor/pygments-main/pygments/lexers/xorg.py +3 -2
  264. data/vendor/pygments-main/pygments/lexers/yang.py +6 -5
  265. data/vendor/pygments-main/pygments/lexers/zig.py +3 -2
  266. data/vendor/pygments-main/pygments/modeline.py +1 -1
  267. data/vendor/pygments-main/pygments/plugin.py +28 -9
  268. data/vendor/pygments-main/pygments/regexopt.py +1 -1
  269. data/vendor/pygments-main/pygments/scanner.py +2 -2
  270. data/vendor/pygments-main/pygments/sphinxext.py +63 -1
  271. data/vendor/pygments-main/pygments/style.py +7 -1
  272. data/vendor/pygments-main/pygments/styles/__init__.py +19 -5
  273. data/vendor/pygments-main/pygments/styles/abap.py +2 -2
  274. data/vendor/pygments-main/pygments/styles/algol.py +1 -2
  275. data/vendor/pygments-main/pygments/styles/algol_nu.py +1 -2
  276. data/vendor/pygments-main/pygments/styles/arduino.py +2 -3
  277. data/vendor/pygments-main/pygments/styles/autumn.py +1 -3
  278. data/vendor/pygments-main/pygments/styles/borland.py +1 -3
  279. data/vendor/pygments-main/pygments/styles/bw.py +1 -2
  280. data/vendor/pygments-main/pygments/styles/colorful.py +1 -3
  281. data/vendor/pygments-main/pygments/styles/default.py +13 -14
  282. data/vendor/pygments-main/pygments/styles/dracula.py +102 -0
  283. data/vendor/pygments-main/pygments/styles/emacs.py +1 -2
  284. data/vendor/pygments-main/pygments/styles/friendly.py +1 -2
  285. data/vendor/pygments-main/pygments/styles/friendly_grayscale.py +75 -0
  286. data/vendor/pygments-main/pygments/styles/fruity.py +1 -1
  287. data/vendor/pygments-main/pygments/styles/gh_dark.py +107 -0
  288. data/vendor/pygments-main/pygments/styles/gruvbox.py +4 -2
  289. data/vendor/pygments-main/pygments/styles/igor.py +1 -2
  290. data/vendor/pygments-main/pygments/styles/inkpot.py +3 -2
  291. data/vendor/pygments-main/pygments/styles/lilypond.py +56 -0
  292. data/vendor/pygments-main/pygments/styles/lovelace.py +1 -3
  293. data/vendor/pygments-main/pygments/styles/manni.py +1 -1
  294. data/vendor/pygments-main/pygments/styles/material.py +1 -2
  295. data/vendor/pygments-main/pygments/styles/monokai.py +3 -3
  296. data/vendor/pygments-main/pygments/styles/murphy.py +1 -3
  297. data/vendor/pygments-main/pygments/styles/native.py +11 -11
  298. data/vendor/pygments-main/pygments/styles/nord.py +150 -0
  299. data/vendor/pygments-main/pygments/styles/onedark.py +59 -0
  300. data/vendor/pygments-main/pygments/styles/paraiso_dark.py +1 -6
  301. data/vendor/pygments-main/pygments/styles/paraiso_light.py +1 -6
  302. data/vendor/pygments-main/pygments/styles/pastie.py +1 -3
  303. data/vendor/pygments-main/pygments/styles/perldoc.py +1 -2
  304. data/vendor/pygments-main/pygments/styles/rainbow_dash.py +3 -3
  305. data/vendor/pygments-main/pygments/styles/rrt.py +3 -2
  306. data/vendor/pygments-main/pygments/styles/sas.py +2 -4
  307. data/vendor/pygments-main/pygments/styles/solarized.py +1 -1
  308. data/vendor/pygments-main/pygments/styles/staroffice.py +26 -0
  309. data/vendor/pygments-main/pygments/styles/stata_dark.py +4 -6
  310. data/vendor/pygments-main/pygments/styles/stata_light.py +1 -2
  311. data/vendor/pygments-main/pygments/styles/tango.py +2 -3
  312. data/vendor/pygments-main/pygments/styles/trac.py +1 -3
  313. data/vendor/pygments-main/pygments/styles/vim.py +1 -2
  314. data/vendor/pygments-main/pygments/styles/vs.py +1 -2
  315. data/vendor/pygments-main/pygments/styles/xcode.py +1 -3
  316. data/vendor/pygments-main/pygments/styles/zenburn.py +4 -6
  317. data/vendor/pygments-main/pygments/token.py +2 -1
  318. data/vendor/pygments-main/pygments/unistring.py +4 -6
  319. data/vendor/pygments-main/pygments/util.py +27 -5
  320. metadata +59 -14
  321. data/vendor/pygments-main/Pygments-2.10.0.dist-info/RECORD +0 -524
  322. /data/vendor/pygments-main/{Pygments-2.10.0.dist-info → Pygments-2.15.1.dist-info}/INSTALLER +0 -0
  323. /data/vendor/pygments-main/{Pygments-2.10.0.dist-info → Pygments-2.15.1.dist-info}/REQUESTED +0 -0
  324. /data/vendor/pygments-main/{Pygments-2.10.0.dist-info → Pygments-2.15.1.dist-info}/top_level.txt +0 -0
@@ -1,23 +1,28 @@
1
- # -*- coding: utf-8 -*-
2
1
  """
3
2
  pygments.lexers.kuin
4
3
  ~~~~~~~~~~~~~~~~~~~~
5
4
 
6
5
  Lexers for the Kuin language.
6
+
7
+ :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
7
9
  """
8
10
 
9
- from pygments.lexer import RegexLexer, include, using, inherit, this, bygroups, words
10
- from pygments.token import Text, Comment, Operator, Keyword, Name, String, Number, Punctuation
11
+ from pygments.lexer import RegexLexer, include, using, this, bygroups, words
12
+ from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
13
+ Number, Punctuation, Whitespace
11
14
 
12
15
  __all__ = ['KuinLexer']
13
16
 
17
+
14
18
  class KuinLexer(RegexLexer):
15
19
  """
16
- For `Kuin <https://github.com/kuina/Kuin>`_ source code
20
+ For Kuin source code.
17
21
 
18
22
  .. versionadded:: 2.9
19
23
  """
20
24
  name = 'Kuin'
25
+ url = 'https://github.com/kuina/Kuin'
21
26
  aliases = ['kuin']
22
27
  filenames = ['*.kn']
23
28
 
@@ -30,17 +35,29 @@ class KuinLexer(RegexLexer):
30
35
  include('whitespace'),
31
36
 
32
37
  # Block-statement
33
- (r'(\+?[ \t]*\*?[ \t]*\bfunc)([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*)', bygroups(Keyword, using(this), Name.Function), 'func_'),
34
- (r'\b(class)([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*)', bygroups(Keyword, using(this), Name.Class), 'class_'),
35
- (r'\b(enum)([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*)', bygroups(Keyword, using(this), Name.Constant), 'enum_'),
36
- (r'\b(block)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?', bygroups(Keyword, using(this), Name.Other), 'block_'),
37
- (r'\b(ifdef)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?', bygroups(Keyword, using(this), Name.Other), 'ifdef_'),
38
- (r'\b(if)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?', bygroups(Keyword, using(this), Name.Other), 'if_'),
39
- (r'\b(switch)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?', bygroups(Keyword, using(this), Name.Other), 'switch_'),
40
- (r'\b(while)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?', bygroups(Keyword, using(this), Name.Other), 'while_'),
41
- (r'\b(for)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?', bygroups(Keyword, using(this), Name.Other), 'for_'),
42
- (r'\b(foreach)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?', bygroups(Keyword, using(this), Name.Other), 'foreach_'),
43
- (r'\b(try)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?', bygroups(Keyword, using(this), Name.Other), 'try_'),
38
+ (r'(\+?)([ \t]*)(\*?)([ \t]*)(\bfunc)([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*)',
39
+ bygroups(Keyword,Whitespace, Keyword, Whitespace, Keyword,
40
+ using(this), Name.Function), 'func_'),
41
+ (r'\b(class)([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*)',
42
+ bygroups(Keyword, using(this), Name.Class), 'class_'),
43
+ (r'\b(enum)([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*)',
44
+ bygroups(Keyword, using(this), Name.Constant), 'enum_'),
45
+ (r'\b(block)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?',
46
+ bygroups(Keyword, using(this), Name.Other), 'block_'),
47
+ (r'\b(ifdef)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?',
48
+ bygroups(Keyword, using(this), Name.Other), 'ifdef_'),
49
+ (r'\b(if)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?',
50
+ bygroups(Keyword, using(this), Name.Other), 'if_'),
51
+ (r'\b(switch)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?',
52
+ bygroups(Keyword, using(this), Name.Other), 'switch_'),
53
+ (r'\b(while)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?',
54
+ bygroups(Keyword, using(this), Name.Other), 'while_'),
55
+ (r'\b(for)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?',
56
+ bygroups(Keyword, using(this), Name.Other), 'for_'),
57
+ (r'\b(foreach)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?',
58
+ bygroups(Keyword, using(this), Name.Other), 'foreach_'),
59
+ (r'\b(try)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?',
60
+ bygroups(Keyword, using(this), Name.Other), 'try_'),
44
61
 
45
62
  # Line-statement
46
63
  (r'\b(do)\b', Keyword, 'do'),
@@ -51,13 +68,13 @@ class KuinLexer(RegexLexer):
51
68
  (r'\b(alias)\b', Keyword, 'alias'),
52
69
  (r'\b(assert)\b', Keyword, 'assert'),
53
70
  (r'\|', Text, 'continued_line'),
54
- (r'[ \t]*\n', Text),
71
+ (r'[ \t]*\n', Whitespace),
55
72
  ],
56
73
 
57
74
  # Whitespace / Comment
58
75
  'whitespace': [
59
- (r'^[ \t]*;.*', Comment.Single),
60
- (r'[ \t]+(?![; \t])', Text),
76
+ (r'^([ \t]*)(;.*)', bygroups(Comment.Single, Whitespace)),
77
+ (r'[ \t]+(?![; \t])', Whitespace),
61
78
  (r'\{', Comment.Multiline, 'multiline_comment'),
62
79
  ],
63
80
  'multiline_comment': [
@@ -70,60 +87,67 @@ class KuinLexer(RegexLexer):
70
87
  # Block-statement
71
88
  'func_': [
72
89
  include('expr'),
73
- (r'\n', Text, 'func'),
90
+ (r'\n', Whitespace, 'func'),
74
91
  ],
75
92
  'func': [
76
- (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(func)\b', bygroups(Keyword, using(this), Keyword), '#pop:2'),
93
+ (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(func)\b',
94
+ bygroups(Keyword, using(this), Keyword), '#pop:2'),
77
95
  include('statement'),
78
96
  ],
79
97
  'class_': [
80
98
  include('expr'),
81
- (r'\n', Text, 'class'),
99
+ (r'\n', Whitespace, 'class'),
82
100
  ],
83
101
  'class': [
84
- (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(class)\b', bygroups(Keyword, using(this), Keyword), '#pop:2'),
102
+ (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(class)\b',
103
+ bygroups(Keyword, using(this), Keyword), '#pop:2'),
85
104
  include('statement'),
86
105
  ],
87
106
  'enum_': [
88
107
  include('expr'),
89
- (r'\n', Text, 'enum'),
108
+ (r'\n', Whitespace, 'enum'),
90
109
  ],
91
110
  'enum': [
92
- (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(enum)\b', bygroups(Keyword, using(this), Keyword), '#pop:2'),
111
+ (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(enum)\b',
112
+ bygroups(Keyword, using(this), Keyword), '#pop:2'),
93
113
  include('expr'),
94
- (r'\n', Text),
114
+ (r'\n', Whitespace),
95
115
  ],
96
116
  'block_': [
97
117
  include('expr'),
98
- (r'\n', Text, 'block'),
118
+ (r'\n', Whitespace, 'block'),
99
119
  ],
100
120
  'block': [
101
- (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(block)\b', bygroups(Keyword, using(this), Keyword), '#pop:2'),
121
+ (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(block)\b',
122
+ bygroups(Keyword, using(this), Keyword), '#pop:2'),
102
123
  include('statement'),
103
124
  include('break'),
104
125
  include('skip'),
105
126
  ],
106
127
  'ifdef_': [
107
128
  include('expr'),
108
- (r'\n', Text, 'ifdef'),
129
+ (r'\n', Whitespace, 'ifdef'),
109
130
  ],
110
131
  'ifdef': [
111
- (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(ifdef)\b', bygroups(Keyword, using(this), Keyword), '#pop:2'),
112
- (words(('rls', 'dbg'), prefix=r'\b', suffix=r'\b'), Keyword.Constant, 'ifdef_sp'),
132
+ (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(ifdef)\b',
133
+ bygroups(Keyword, using(this), Keyword), '#pop:2'),
134
+ (words(('rls', 'dbg'), prefix=r'\b', suffix=r'\b'),
135
+ Keyword.Constant, 'ifdef_sp'),
113
136
  include('statement'),
114
137
  include('break'),
115
138
  include('skip'),
116
139
  ],
117
140
  'ifdef_sp': [
118
141
  include('expr'),
119
- (r'\n', Text, '#pop'),
142
+ (r'\n', Whitespace, '#pop'),
120
143
  ],
121
144
  'if_': [
122
145
  include('expr'),
123
- (r'\n', Text, 'if'),
146
+ (r'\n', Whitespace, 'if'),
124
147
  ],
125
148
  'if': [
126
- (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(if)\b', bygroups(Keyword, using(this), Keyword), '#pop:2'),
149
+ (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(if)\b',
150
+ bygroups(Keyword, using(this), Keyword), '#pop:2'),
127
151
  (words(('elif', 'else'), prefix=r'\b', suffix=r'\b'), Keyword, 'if_sp'),
128
152
  include('statement'),
129
153
  include('break'),
@@ -131,107 +155,116 @@ class KuinLexer(RegexLexer):
131
155
  ],
132
156
  'if_sp': [
133
157
  include('expr'),
134
- (r'\n', Text, '#pop'),
158
+ (r'\n', Whitespace, '#pop'),
135
159
  ],
136
160
  'switch_': [
137
161
  include('expr'),
138
- (r'\n', Text, 'switch'),
162
+ (r'\n', Whitespace, 'switch'),
139
163
  ],
140
164
  'switch': [
141
- (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(switch)\b', bygroups(Keyword, using(this), Keyword), '#pop:2'),
142
- (words(('case', 'default', 'to'), prefix=r'\b', suffix=r'\b'), Keyword, 'switch_sp'),
165
+ (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(switch)\b',
166
+ bygroups(Keyword, using(this), Keyword), '#pop:2'),
167
+ (words(('case', 'default', 'to'), prefix=r'\b', suffix=r'\b'),
168
+ Keyword, 'switch_sp'),
143
169
  include('statement'),
144
170
  include('break'),
145
171
  include('skip'),
146
172
  ],
147
173
  'switch_sp': [
148
174
  include('expr'),
149
- (r'\n', Text, '#pop'),
175
+ (r'\n', Whitespace, '#pop'),
150
176
  ],
151
177
  'while_': [
152
178
  include('expr'),
153
- (r'\n', Text, 'while'),
179
+ (r'\n', Whitespace, 'while'),
154
180
  ],
155
181
  'while': [
156
- (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(while)\b', bygroups(Keyword, using(this), Keyword), '#pop:2'),
182
+ (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(while)\b',
183
+ bygroups(Keyword, using(this), Keyword), '#pop:2'),
157
184
  include('statement'),
158
185
  include('break'),
159
186
  include('skip'),
160
187
  ],
161
188
  'for_': [
162
189
  include('expr'),
163
- (r'\n', Text, 'for'),
190
+ (r'\n', Whitespace, 'for'),
164
191
  ],
165
192
  'for': [
166
- (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(for)\b', bygroups(Keyword, using(this), Keyword), '#pop:2'),
193
+ (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(for)\b',
194
+ bygroups(Keyword, using(this), Keyword), '#pop:2'),
167
195
  include('statement'),
168
196
  include('break'),
169
197
  include('skip'),
170
198
  ],
171
199
  'foreach_': [
172
200
  include('expr'),
173
- (r'\n', Text, 'foreach'),
201
+ (r'\n', Whitespace, 'foreach'),
174
202
  ],
175
203
  'foreach': [
176
- (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(foreach)\b', bygroups(Keyword, using(this), Keyword), '#pop:2'),
204
+ (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(foreach)\b',
205
+ bygroups(Keyword, using(this), Keyword), '#pop:2'),
177
206
  include('statement'),
178
207
  include('break'),
179
208
  include('skip'),
180
209
  ],
181
210
  'try_': [
182
211
  include('expr'),
183
- (r'\n', Text, 'try'),
212
+ (r'\n', Whitespace, 'try'),
184
213
  ],
185
214
  'try': [
186
- (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(try)\b', bygroups(Keyword, using(this), Keyword), '#pop:2'),
187
- (words(('catch', 'finally', 'to'), prefix=r'\b', suffix=r'\b'), Keyword, 'try_sp'),
215
+ (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(try)\b',
216
+ bygroups(Keyword, using(this), Keyword), '#pop:2'),
217
+ (words(('catch', 'finally', 'to'), prefix=r'\b', suffix=r'\b'),
218
+ Keyword, 'try_sp'),
188
219
  include('statement'),
189
220
  include('break'),
190
221
  include('skip'),
191
222
  ],
192
223
  'try_sp': [
193
224
  include('expr'),
194
- (r'\n', Text, '#pop'),
225
+ (r'\n', Whitespace, '#pop'),
195
226
  ],
196
227
 
197
228
  # Line-statement
198
229
  'break': [
199
- (r'\b(break)\b([ \t]+)([a-zA-Z_][0-9a-zA-Z_]*)', bygroups(Keyword, using(this), Name.Other)),
230
+ (r'\b(break)\b([ \t]+)([a-zA-Z_][0-9a-zA-Z_]*)',
231
+ bygroups(Keyword, using(this), Name.Other)),
200
232
  ],
201
233
  'skip': [
202
- (r'\b(skip)\b([ \t]+)([a-zA-Z_][0-9a-zA-Z_]*)', bygroups(Keyword, using(this), Name.Other)),
234
+ (r'\b(skip)\b([ \t]+)([a-zA-Z_][0-9a-zA-Z_]*)',
235
+ bygroups(Keyword, using(this), Name.Other)),
203
236
  ],
204
237
  'alias': [
205
238
  include('expr'),
206
- (r'\n', Text, '#pop'),
239
+ (r'\n', Whitespace, '#pop'),
207
240
  ],
208
241
  'assert': [
209
242
  include('expr'),
210
- (r'\n', Text, '#pop'),
243
+ (r'\n', Whitespace, '#pop'),
211
244
  ],
212
245
  'const': [
213
246
  include('expr'),
214
- (r'\n', Text, '#pop'),
247
+ (r'\n', Whitespace, '#pop'),
215
248
  ],
216
249
  'do': [
217
250
  include('expr'),
218
- (r'\n', Text, '#pop'),
251
+ (r'\n', Whitespace, '#pop'),
219
252
  ],
220
253
  'ret': [
221
254
  include('expr'),
222
- (r'\n', Text, '#pop'),
255
+ (r'\n', Whitespace, '#pop'),
223
256
  ],
224
257
  'throw': [
225
258
  include('expr'),
226
- (r'\n', Text, '#pop'),
259
+ (r'\n', Whitespace, '#pop'),
227
260
  ],
228
261
  'var': [
229
262
  include('expr'),
230
- (r'\n', Text, '#pop'),
263
+ (r'\n', Whitespace, '#pop'),
231
264
  ],
232
265
  'continued_line': [
233
266
  include('expr'),
234
- (r'\n', Text, '#pop'),
267
+ (r'\n', Whitespace, '#pop'),
235
268
  ],
236
269
 
237
270
  'expr': [
@@ -283,7 +316,8 @@ class KuinLexer(RegexLexer):
283
316
 
284
317
  # Identifier
285
318
  (r"\b([a-zA-Z_][0-9a-zA-Z_]*)(?=@)\b", Name),
286
- (r"(@)?\b([a-zA-Z_][0-9a-zA-Z_]*)\b", bygroups(Name.Other, Name.Variable)),
319
+ (r"(@)?\b([a-zA-Z_][0-9a-zA-Z_]*)\b",
320
+ bygroups(Name.Other, Name.Variable)),
287
321
  ],
288
322
 
289
323
  # String
@@ -0,0 +1,226 @@
1
+ """
2
+ pygments.lexers.lilypond
3
+ ~~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexer for LilyPond.
6
+
7
+ :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ import re
12
+
13
+ from pygments.lexer import bygroups, default, inherit, words
14
+ from pygments.lexers.lisp import SchemeLexer
15
+ from pygments.lexers._lilypond_builtins import (
16
+ keywords, pitch_language_names, clefs, scales, repeat_types, units,
17
+ chord_modifiers, pitches, music_functions, dynamics, articulations,
18
+ music_commands, markup_commands, grobs, translators, contexts,
19
+ context_properties, grob_properties, scheme_functions, paper_variables,
20
+ header_variables
21
+ )
22
+ from pygments.token import Token
23
+
24
+ __all__ = ["LilyPondLexer"]
25
+
26
+ # In LilyPond, (unquoted) name tokens only contain letters, hyphens,
27
+ # and underscores, where hyphens and underscores must not start or end
28
+ # a name token.
29
+ #
30
+ # Note that many of the entities listed as LilyPond built-in keywords
31
+ # (in file `_lilypond_builtins.py`) are only valid if surrounded by
32
+ # double quotes, for example, 'hufnagel-fa1'. This means that
33
+ # `NAME_END_RE` doesn't apply to such entities in valid LilyPond code.
34
+ NAME_END_RE = r"(?=\d|[^\w\-]|[\-_][\W\d])"
35
+
36
+ def builtin_words(names, backslash, suffix=NAME_END_RE):
37
+ prefix = r"[\-_^]?"
38
+ if backslash == "mandatory":
39
+ prefix += r"\\"
40
+ elif backslash == "optional":
41
+ prefix += r"\\?"
42
+ else:
43
+ assert backslash == "disallowed"
44
+ return words(names, prefix, suffix)
45
+
46
+
47
+ class LilyPondLexer(SchemeLexer):
48
+ """
49
+ Lexer for input to LilyPond, a text-based music typesetter.
50
+
51
+ .. important::
52
+
53
+ This lexer is meant to be used in conjunction with the ``lilypond`` style.
54
+
55
+ .. versionadded:: 2.11
56
+ """
57
+ name = 'LilyPond'
58
+ url = 'https://lilypond.org'
59
+ aliases = ['lilypond']
60
+ filenames = ['*.ly']
61
+ mimetypes = []
62
+
63
+ flags = re.DOTALL | re.MULTILINE
64
+
65
+ # Because parsing LilyPond input is very tricky (and in fact
66
+ # impossible without executing LilyPond when there is Scheme
67
+ # code in the file), this lexer does not try to recognize
68
+ # lexical modes. Instead, it catches the most frequent pieces
69
+ # of syntax, and, above all, knows about many kinds of builtins.
70
+
71
+ # In order to parse embedded Scheme, this lexer subclasses the SchemeLexer.
72
+ # It redefines the 'root' state entirely, and adds a rule for #{ #}
73
+ # to the 'value' state. The latter is used to parse a Scheme expression
74
+ # after #.
75
+
76
+ def get_tokens_unprocessed(self, text):
77
+ """Highlight Scheme variables as LilyPond builtins when applicable."""
78
+ for index, token, value in super().get_tokens_unprocessed(text):
79
+ if token is Token.Name.Function or token is Token.Name.Variable:
80
+ if value in scheme_functions:
81
+ token = Token.Name.Builtin.SchemeFunction
82
+ elif token is Token.Name.Builtin:
83
+ token = Token.Name.Builtin.SchemeBuiltin
84
+ yield index, token, value
85
+
86
+ tokens = {
87
+ "root": [
88
+ # Whitespace.
89
+ (r"\s+", Token.Text.Whitespace),
90
+
91
+ # Multi-line comments. These are non-nestable.
92
+ (r"%\{.*?%\}", Token.Comment.Multiline),
93
+
94
+ # Simple comments.
95
+ (r"%.*?$", Token.Comment.Single),
96
+
97
+ # End of embedded LilyPond in Scheme.
98
+ (r"#\}", Token.Punctuation, "#pop"),
99
+
100
+ # Embedded Scheme, starting with # ("delayed"),
101
+ # or $ (immediate). #@ and and $@ are the lesser known
102
+ # "list splicing operators".
103
+ (r"[#$]@?", Token.Punctuation, "value"),
104
+
105
+ # Any kind of punctuation:
106
+ # - sequential music: { },
107
+ # - parallel music: << >>,
108
+ # - voice separator: << \\ >>,
109
+ # - chord: < >,
110
+ # - bar check: |,
111
+ # - dot in nested properties: \revert NoteHead.color,
112
+ # - equals sign in assignments and lists for various commands:
113
+ # \override Stem.color = red,
114
+ # - comma as alternative syntax for lists: \time 3,3,2 4/4,
115
+ # - colon in tremolos: c:32,
116
+ # - double hyphen and underscore in lyrics: li -- ly -- pond __
117
+ # (which must be preceded by ASCII whitespace)
118
+ (r"""(?x)
119
+ \\\\
120
+ | (?<= \s ) (?: -- | __ )
121
+ | [{}<>=.,:|]
122
+ """, Token.Punctuation),
123
+
124
+ # Pitches, with optional octavation marks, octave check,
125
+ # and forced or cautionary accidental.
126
+ (words(pitches, suffix=r"=?[',]*!?\??" + NAME_END_RE), Token.Pitch),
127
+
128
+ # Strings, optionally with direction specifier.
129
+ (r'[\-_^]?"', Token.String, "string"),
130
+
131
+ # Numbers.
132
+ (r"-?\d+\.\d+", Token.Number.Float), # 5. and .5 are not allowed
133
+ (r"-?\d+/\d+", Token.Number.Fraction),
134
+ # Integers, or durations with optional augmentation dots.
135
+ # We have no way to distinguish these, so we highlight
136
+ # them all as numbers.
137
+ #
138
+ # Normally, there is a space before the integer (being an
139
+ # argument to a music function), which we check here. The
140
+ # case without a space is handled below (as a fingering
141
+ # number).
142
+ (r"""(?x)
143
+ (?<= \s ) -\d+
144
+ | (?: (?: \d+ | \\breve | \\longa | \\maxima )
145
+ \.* )
146
+ """, Token.Number),
147
+ # Separates duration and duration multiplier highlighted as fraction.
148
+ (r"\*", Token.Number),
149
+
150
+ # Ties, slurs, manual beams.
151
+ (r"[~()[\]]", Token.Name.Builtin.Articulation),
152
+
153
+ # Predefined articulation shortcuts. A direction specifier is
154
+ # required here.
155
+ (r"[\-_^][>^_!.\-+]", Token.Name.Builtin.Articulation),
156
+
157
+ # Fingering numbers, string numbers.
158
+ (r"[\-_^]?\\?\d+", Token.Name.Builtin.Articulation),
159
+
160
+ # Builtins.
161
+ (builtin_words(keywords, "mandatory"), Token.Keyword),
162
+ (builtin_words(pitch_language_names, "disallowed"), Token.Name.PitchLanguage),
163
+ (builtin_words(clefs, "disallowed"), Token.Name.Builtin.Clef),
164
+ (builtin_words(scales, "mandatory"), Token.Name.Builtin.Scale),
165
+ (builtin_words(repeat_types, "disallowed"), Token.Name.Builtin.RepeatType),
166
+ (builtin_words(units, "mandatory"), Token.Number),
167
+ (builtin_words(chord_modifiers, "disallowed"), Token.ChordModifier),
168
+ (builtin_words(music_functions, "mandatory"), Token.Name.Builtin.MusicFunction),
169
+ (builtin_words(dynamics, "mandatory"), Token.Name.Builtin.Dynamic),
170
+ # Those like slurs that don't take a backslash are covered above.
171
+ (builtin_words(articulations, "mandatory"), Token.Name.Builtin.Articulation),
172
+ (builtin_words(music_commands, "mandatory"), Token.Name.Builtin.MusicCommand),
173
+ (builtin_words(markup_commands, "mandatory"), Token.Name.Builtin.MarkupCommand),
174
+ (builtin_words(grobs, "disallowed"), Token.Name.Builtin.Grob),
175
+ (builtin_words(translators, "disallowed"), Token.Name.Builtin.Translator),
176
+ # Optional backslash because of \layout { \context { \Score ... } }.
177
+ (builtin_words(contexts, "optional"), Token.Name.Builtin.Context),
178
+ (builtin_words(context_properties, "disallowed"), Token.Name.Builtin.ContextProperty),
179
+ (builtin_words(grob_properties, "disallowed"),
180
+ Token.Name.Builtin.GrobProperty,
181
+ "maybe-subproperties"),
182
+ # Optional backslashes here because output definitions are wrappers
183
+ # around modules. Concretely, you can do, e.g.,
184
+ # \paper { oddHeaderMarkup = \evenHeaderMarkup }
185
+ (builtin_words(paper_variables, "optional"), Token.Name.Builtin.PaperVariable),
186
+ (builtin_words(header_variables, "optional"), Token.Name.Builtin.HeaderVariable),
187
+
188
+ # Other backslashed-escaped names (like dereferencing a
189
+ # music variable), possibly with a direction specifier.
190
+ (r"[\-_^]?\\.+?" + NAME_END_RE, Token.Name.BackslashReference),
191
+
192
+ # Definition of a variable. Support assignments to alist keys
193
+ # (myAlist.my-key.my-nested-key = \markup \spam \eggs).
194
+ (r"""(?x)
195
+ (?: [^\W\d] | - )+
196
+ (?= (?: [^\W\d] | [\-.] )* \s* = )
197
+ """, Token.Name.Lvalue),
198
+
199
+ # Virtually everything can appear in markup mode, so we highlight
200
+ # as text. Try to get a complete word, or we might wrongly lex
201
+ # a suffix that happens to be a builtin as a builtin (e.g., "myStaff").
202
+ (r"([^\W\d]|-)+?" + NAME_END_RE, Token.Text),
203
+ (r".", Token.Text),
204
+ ],
205
+ "string": [
206
+ (r'"', Token.String, "#pop"),
207
+ (r'\\.', Token.String.Escape),
208
+ (r'[^\\"]+', Token.String),
209
+ ],
210
+ "value": [
211
+ # Scan a LilyPond value, then pop back since we had a
212
+ # complete expression.
213
+ (r"#\{", Token.Punctuation, ("#pop", "root")),
214
+ inherit,
215
+ ],
216
+ # Grob subproperties are undeclared and it would be tedious
217
+ # to maintain them by hand. Instead, this state allows recognizing
218
+ # everything that looks like a-known-property.foo.bar-baz as
219
+ # one single property name.
220
+ "maybe-subproperties": [
221
+ (r"\s+", Token.Text.Whitespace),
222
+ (r"(\.)((?:[^\W\d]|-)+?)" + NAME_END_RE,
223
+ bygroups(Token.Punctuation, Token.Name.Builtin.GrobProperty)),
224
+ default("#pop"),
225
+ ]
226
+ }