pygments.rb 1.2.0 → 2.1.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 (388) hide show
  1. checksums.yaml +5 -5
  2. data/.github/dependabot.yml +13 -0
  3. data/.github/workflows/ci.yml +40 -0
  4. data/.github/workflows/release.yml +24 -0
  5. data/.gitignore +5 -5
  6. data/.rubocop.yml +18 -0
  7. data/CHANGELOG.adoc +132 -0
  8. data/Gemfile +3 -1
  9. data/LICENSE +1 -1
  10. data/README.adoc +160 -0
  11. data/Rakefile +12 -21
  12. data/bench.rb +14 -8
  13. data/{cache-lexers.rb → cache_lexers.rb} +3 -2
  14. data/lexers +0 -0
  15. data/lib/pygments.rb +10 -11
  16. data/lib/pygments/lexer.rb +6 -6
  17. data/lib/pygments/mentos.py +23 -110
  18. data/lib/pygments/popen.rb +196 -275
  19. data/lib/pygments/version.rb +2 -2
  20. data/pygments.rb.gemspec +12 -10
  21. data/test/test_pygments.rb +50 -110
  22. data/vendor/pygments-main/{AUTHORS → Pygments-2.8.0.dist-info/AUTHORS} +26 -3
  23. data/vendor/pygments-main/Pygments-2.8.0.dist-info/INSTALLER +1 -0
  24. data/vendor/pygments-main/{LICENSE → Pygments-2.8.0.dist-info/LICENSE} +1 -1
  25. data/vendor/pygments-main/Pygments-2.8.0.dist-info/METADATA +48 -0
  26. data/vendor/pygments-main/Pygments-2.8.0.dist-info/RECORD +494 -0
  27. data/vendor/pygments-main/Pygments-2.8.0.dist-info/REQUESTED +0 -0
  28. data/vendor/pygments-main/Pygments-2.8.0.dist-info/WHEEL +5 -0
  29. data/vendor/pygments-main/Pygments-2.8.0.dist-info/entry_points.txt +3 -0
  30. data/vendor/pygments-main/Pygments-2.8.0.dist-info/top_level.txt +1 -0
  31. data/vendor/pygments-main/bin/pygmentize +8 -0
  32. data/vendor/pygments-main/pygments/__init__.py +6 -12
  33. data/vendor/pygments-main/pygments/__main__.py +17 -0
  34. data/vendor/pygments-main/pygments/cmdline.py +213 -184
  35. data/vendor/pygments-main/pygments/console.py +6 -10
  36. data/vendor/pygments-main/pygments/filter.py +4 -7
  37. data/vendor/pygments-main/pygments/filters/__init__.py +609 -22
  38. data/vendor/pygments-main/pygments/formatter.py +4 -5
  39. data/vendor/pygments-main/pygments/formatters/__init__.py +10 -10
  40. data/vendor/pygments-main/pygments/formatters/_mapping.py +1 -4
  41. data/vendor/pygments-main/pygments/formatters/bbcode.py +1 -2
  42. data/vendor/pygments-main/pygments/formatters/html.py +242 -139
  43. data/vendor/pygments-main/pygments/formatters/img.py +91 -50
  44. data/vendor/pygments-main/pygments/formatters/irc.py +39 -40
  45. data/vendor/pygments-main/pygments/formatters/latex.py +62 -33
  46. data/vendor/pygments-main/pygments/formatters/other.py +18 -17
  47. data/vendor/pygments-main/pygments/formatters/rtf.py +29 -30
  48. data/vendor/pygments-main/pygments/formatters/svg.py +40 -5
  49. data/vendor/pygments-main/pygments/formatters/terminal.py +25 -32
  50. data/vendor/pygments-main/pygments/formatters/terminal256.py +45 -14
  51. data/vendor/pygments-main/pygments/lexer.py +47 -44
  52. data/vendor/pygments-main/pygments/lexers/__init__.py +29 -17
  53. data/vendor/pygments-main/pygments/lexers/_asy_builtins.py +5 -6
  54. data/vendor/pygments-main/pygments/lexers/_cl_builtins.py +15 -16
  55. data/vendor/pygments-main/pygments/lexers/_cocoa_builtins.py +21 -18
  56. data/vendor/pygments-main/pygments/lexers/_csound_builtins.py +1717 -1339
  57. data/vendor/pygments-main/pygments/lexers/_lasso_builtins.py +1 -2
  58. data/vendor/pygments-main/pygments/lexers/_lua_builtins.py +2 -5
  59. data/vendor/pygments-main/pygments/lexers/_mapping.py +79 -31
  60. data/vendor/pygments-main/pygments/lexers/_mql_builtins.py +2 -3
  61. data/vendor/pygments-main/pygments/lexers/_mysql_builtins.py +1281 -0
  62. data/vendor/pygments-main/pygments/lexers/_openedge_builtins.py +439 -386
  63. data/vendor/pygments-main/pygments/lexers/_php_builtins.py +17 -21
  64. data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +73 -17
  65. data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +2 -3
  66. data/vendor/pygments-main/pygments/lexers/_sourcemod_builtins.py +1 -4
  67. data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +151 -126
  68. data/vendor/pygments-main/pygments/lexers/_stata_builtins.py +96 -58
  69. data/vendor/pygments-main/pygments/lexers/_tsql_builtins.py +1 -2
  70. data/vendor/pygments-main/pygments/lexers/_usd_builtins.py +112 -0
  71. data/vendor/pygments-main/pygments/lexers/_vbscript_builtins.py +279 -0
  72. data/vendor/pygments-main/pygments/lexers/_vim_builtins.py +1 -2
  73. data/vendor/pygments-main/pygments/lexers/actionscript.py +14 -10
  74. data/vendor/pygments-main/pygments/lexers/agile.py +1 -2
  75. data/vendor/pygments-main/pygments/lexers/algebra.py +20 -2
  76. data/vendor/pygments-main/pygments/lexers/ambient.py +2 -3
  77. data/vendor/pygments-main/pygments/lexers/amdgpu.py +48 -0
  78. data/vendor/pygments-main/pygments/lexers/ampl.py +3 -4
  79. data/vendor/pygments-main/pygments/lexers/apl.py +15 -16
  80. data/vendor/pygments-main/pygments/lexers/archetype.py +4 -5
  81. data/vendor/pygments-main/pygments/lexers/arrow.py +116 -0
  82. data/vendor/pygments-main/pygments/lexers/asm.py +440 -77
  83. data/vendor/pygments-main/pygments/lexers/automation.py +7 -2
  84. data/vendor/pygments-main/pygments/lexers/bare.py +103 -0
  85. data/vendor/pygments-main/pygments/lexers/basic.py +168 -7
  86. data/vendor/pygments-main/pygments/lexers/bibtex.py +5 -6
  87. data/vendor/pygments-main/pygments/lexers/boa.py +101 -0
  88. data/vendor/pygments-main/pygments/lexers/business.py +19 -5
  89. data/vendor/pygments-main/pygments/lexers/c_cpp.py +138 -48
  90. data/vendor/pygments-main/pygments/lexers/c_like.py +67 -43
  91. data/vendor/pygments-main/pygments/lexers/capnproto.py +7 -8
  92. data/vendor/pygments-main/pygments/lexers/cddl.py +190 -0
  93. data/vendor/pygments-main/pygments/lexers/chapel.py +25 -16
  94. data/vendor/pygments-main/pygments/lexers/clean.py +135 -245
  95. data/vendor/pygments-main/pygments/lexers/compiled.py +1 -2
  96. data/vendor/pygments-main/pygments/lexers/configs.py +190 -38
  97. data/vendor/pygments-main/pygments/lexers/console.py +1 -2
  98. data/vendor/pygments-main/pygments/lexers/crystal.py +54 -81
  99. data/vendor/pygments-main/pygments/lexers/csound.py +288 -188
  100. data/vendor/pygments-main/pygments/lexers/css.py +28 -23
  101. data/vendor/pygments-main/pygments/lexers/d.py +12 -8
  102. data/vendor/pygments-main/pygments/lexers/dalvik.py +1 -2
  103. data/vendor/pygments-main/pygments/lexers/data.py +240 -98
  104. data/vendor/pygments-main/pygments/lexers/devicetree.py +108 -0
  105. data/vendor/pygments-main/pygments/lexers/diff.py +4 -5
  106. data/vendor/pygments-main/pygments/lexers/dotnet.py +46 -31
  107. data/vendor/pygments-main/pygments/lexers/dsls.py +146 -65
  108. data/vendor/pygments-main/pygments/lexers/dylan.py +16 -19
  109. data/vendor/pygments-main/pygments/lexers/ecl.py +17 -5
  110. data/vendor/pygments-main/pygments/lexers/eiffel.py +2 -3
  111. data/vendor/pygments-main/pygments/lexers/elm.py +5 -6
  112. data/vendor/pygments-main/pygments/lexers/email.py +150 -0
  113. data/vendor/pygments-main/pygments/lexers/erlang.py +29 -33
  114. data/vendor/pygments-main/pygments/lexers/esoteric.py +46 -20
  115. data/vendor/pygments-main/pygments/lexers/ezhil.py +21 -14
  116. data/vendor/pygments-main/pygments/lexers/factor.py +3 -4
  117. data/vendor/pygments-main/pygments/lexers/fantom.py +1 -2
  118. data/vendor/pygments-main/pygments/lexers/felix.py +1 -2
  119. data/vendor/pygments-main/pygments/lexers/floscript.py +82 -0
  120. data/vendor/pygments-main/pygments/lexers/forth.py +41 -41
  121. data/vendor/pygments-main/pygments/lexers/fortran.py +13 -10
  122. data/vendor/pygments-main/pygments/lexers/foxpro.py +2 -3
  123. data/vendor/pygments-main/pygments/lexers/freefem.py +897 -0
  124. data/vendor/pygments-main/pygments/lexers/functional.py +1 -2
  125. data/vendor/pygments-main/pygments/lexers/futhark.py +110 -0
  126. data/vendor/pygments-main/pygments/lexers/gdscript.py +345 -0
  127. data/vendor/pygments-main/pygments/lexers/go.py +2 -3
  128. data/vendor/pygments-main/pygments/lexers/grammar_notation.py +62 -6
  129. data/vendor/pygments-main/pygments/lexers/graph.py +14 -10
  130. data/vendor/pygments-main/pygments/lexers/graphics.py +274 -28
  131. data/vendor/pygments-main/pygments/lexers/graphviz.py +57 -0
  132. data/vendor/pygments-main/pygments/lexers/haskell.py +48 -22
  133. data/vendor/pygments-main/pygments/lexers/haxe.py +8 -9
  134. data/vendor/pygments-main/pygments/lexers/hdl.py +176 -90
  135. data/vendor/pygments-main/pygments/lexers/hexdump.py +1 -2
  136. data/vendor/pygments-main/pygments/lexers/html.py +37 -26
  137. data/vendor/pygments-main/pygments/lexers/idl.py +19 -9
  138. data/vendor/pygments-main/pygments/lexers/igor.py +244 -113
  139. data/vendor/pygments-main/pygments/lexers/inferno.py +2 -3
  140. data/vendor/pygments-main/pygments/lexers/installers.py +1 -2
  141. data/vendor/pygments-main/pygments/lexers/int_fiction.py +40 -16
  142. data/vendor/pygments-main/pygments/lexers/iolang.py +3 -4
  143. data/vendor/pygments-main/pygments/lexers/j.py +4 -5
  144. data/vendor/pygments-main/pygments/lexers/javascript.py +115 -104
  145. data/vendor/pygments-main/pygments/lexers/julia.py +44 -47
  146. data/vendor/pygments-main/pygments/lexers/jvm.py +368 -202
  147. data/vendor/pygments-main/pygments/lexers/lisp.py +887 -810
  148. data/vendor/pygments-main/pygments/lexers/make.py +12 -9
  149. data/vendor/pygments-main/pygments/lexers/markup.py +212 -45
  150. data/vendor/pygments-main/pygments/lexers/math.py +1 -2
  151. data/vendor/pygments-main/pygments/lexers/matlab.py +2705 -88
  152. data/vendor/pygments-main/pygments/lexers/mime.py +225 -0
  153. data/vendor/pygments-main/pygments/lexers/ml.py +203 -15
  154. data/vendor/pygments-main/pygments/lexers/modeling.py +26 -19
  155. data/vendor/pygments-main/pygments/lexers/modula2.py +27 -9
  156. data/vendor/pygments-main/pygments/lexers/monte.py +1 -2
  157. data/vendor/pygments-main/pygments/lexers/mosel.py +447 -0
  158. data/vendor/pygments-main/pygments/lexers/ncl.py +1 -2
  159. data/vendor/pygments-main/pygments/lexers/nimrod.py +4 -5
  160. data/vendor/pygments-main/pygments/lexers/nit.py +1 -2
  161. data/vendor/pygments-main/pygments/lexers/nix.py +1 -2
  162. data/vendor/pygments-main/pygments/lexers/oberon.py +17 -2
  163. data/vendor/pygments-main/pygments/lexers/objective.py +18 -19
  164. data/vendor/pygments-main/pygments/lexers/ooc.py +1 -2
  165. data/vendor/pygments-main/pygments/lexers/other.py +1 -2
  166. data/vendor/pygments-main/pygments/lexers/parasail.py +1 -2
  167. data/vendor/pygments-main/pygments/lexers/parsers.py +47 -83
  168. data/vendor/pygments-main/pygments/lexers/pascal.py +22 -23
  169. data/vendor/pygments-main/pygments/lexers/pawn.py +31 -28
  170. data/vendor/pygments-main/pygments/lexers/perl.py +260 -149
  171. data/vendor/pygments-main/pygments/lexers/php.py +66 -13
  172. data/vendor/pygments-main/pygments/lexers/pointless.py +70 -0
  173. data/vendor/pygments-main/pygments/lexers/pony.py +93 -0
  174. data/vendor/pygments-main/pygments/lexers/praat.py +38 -31
  175. data/vendor/pygments-main/pygments/lexers/prolog.py +38 -39
  176. data/vendor/pygments-main/pygments/lexers/promql.py +182 -0
  177. data/vendor/pygments-main/pygments/lexers/python.py +450 -231
  178. data/vendor/pygments-main/pygments/lexers/qvt.py +6 -7
  179. data/vendor/pygments-main/pygments/lexers/r.py +13 -276
  180. data/vendor/pygments-main/pygments/lexers/rdf.py +232 -40
  181. data/vendor/pygments-main/pygments/lexers/rebol.py +8 -9
  182. data/vendor/pygments-main/pygments/lexers/resource.py +2 -3
  183. data/vendor/pygments-main/pygments/lexers/ride.py +138 -0
  184. data/vendor/pygments-main/pygments/lexers/rnc.py +1 -2
  185. data/vendor/pygments-main/pygments/lexers/roboconf.py +1 -2
  186. data/vendor/pygments-main/pygments/lexers/robotframework.py +23 -32
  187. data/vendor/pygments-main/pygments/lexers/ruby.py +50 -46
  188. data/vendor/pygments-main/pygments/lexers/rust.py +76 -73
  189. data/vendor/pygments-main/pygments/lexers/sas.py +1 -2
  190. data/vendor/pygments-main/pygments/lexers/scdoc.py +82 -0
  191. data/vendor/pygments-main/pygments/lexers/scripting.py +79 -18
  192. data/vendor/pygments-main/pygments/lexers/sgf.py +60 -0
  193. data/vendor/pygments-main/pygments/lexers/shell.py +164 -49
  194. data/vendor/pygments-main/pygments/lexers/sieve.py +68 -0
  195. data/vendor/pygments-main/pygments/lexers/slash.py +184 -0
  196. data/vendor/pygments-main/pygments/lexers/smalltalk.py +2 -3
  197. data/vendor/pygments-main/pygments/lexers/smv.py +3 -4
  198. data/vendor/pygments-main/pygments/lexers/snobol.py +1 -2
  199. data/vendor/pygments-main/pygments/lexers/solidity.py +91 -0
  200. data/vendor/pygments-main/pygments/lexers/special.py +31 -28
  201. data/vendor/pygments-main/pygments/lexers/sql.py +330 -179
  202. data/vendor/pygments-main/pygments/lexers/stata.py +107 -45
  203. data/vendor/pygments-main/pygments/lexers/supercollider.py +8 -4
  204. data/vendor/pygments-main/pygments/lexers/tcl.py +1 -2
  205. data/vendor/pygments-main/pygments/lexers/templates.py +116 -136
  206. data/vendor/pygments-main/pygments/lexers/teraterm.py +334 -0
  207. data/vendor/pygments-main/pygments/lexers/testing.py +6 -7
  208. data/vendor/pygments-main/pygments/lexers/text.py +2 -2
  209. data/vendor/pygments-main/pygments/lexers/textedit.py +6 -7
  210. data/vendor/pygments-main/pygments/lexers/textfmts.py +146 -14
  211. data/vendor/pygments-main/pygments/lexers/theorem.py +74 -56
  212. data/vendor/pygments-main/pygments/lexers/tnt.py +262 -0
  213. data/vendor/pygments-main/pygments/lexers/trafficscript.py +1 -2
  214. data/vendor/pygments-main/pygments/lexers/typoscript.py +4 -12
  215. data/vendor/pygments-main/pygments/lexers/unicon.py +411 -0
  216. data/vendor/pygments-main/pygments/lexers/urbi.py +16 -4
  217. data/vendor/pygments-main/pygments/lexers/usd.py +89 -0
  218. data/vendor/pygments-main/pygments/lexers/varnish.py +4 -5
  219. data/vendor/pygments-main/pygments/lexers/verification.py +13 -11
  220. data/vendor/pygments-main/pygments/lexers/web.py +1 -2
  221. data/vendor/pygments-main/pygments/lexers/webidl.py +298 -0
  222. data/vendor/pygments-main/pygments/lexers/webmisc.py +35 -32
  223. data/vendor/pygments-main/pygments/lexers/whiley.py +5 -6
  224. data/vendor/pygments-main/pygments/lexers/x10.py +2 -3
  225. data/vendor/pygments-main/pygments/lexers/xorg.py +5 -5
  226. data/vendor/pygments-main/pygments/lexers/yang.py +103 -0
  227. data/vendor/pygments-main/pygments/lexers/zig.py +123 -0
  228. data/vendor/pygments-main/pygments/modeline.py +1 -2
  229. data/vendor/pygments-main/pygments/plugin.py +4 -3
  230. data/vendor/pygments-main/pygments/regexopt.py +1 -2
  231. data/vendor/pygments-main/pygments/scanner.py +2 -3
  232. data/vendor/pygments-main/pygments/sphinxext.py +2 -5
  233. data/vendor/pygments-main/pygments/style.py +61 -25
  234. data/vendor/pygments-main/pygments/styles/__init__.py +12 -5
  235. data/vendor/pygments-main/pygments/styles/abap.py +1 -2
  236. data/vendor/pygments-main/pygments/styles/algol.py +1 -2
  237. data/vendor/pygments-main/pygments/styles/algol_nu.py +1 -2
  238. data/vendor/pygments-main/pygments/styles/arduino.py +2 -3
  239. data/vendor/pygments-main/pygments/styles/autumn.py +1 -2
  240. data/vendor/pygments-main/pygments/styles/borland.py +1 -2
  241. data/vendor/pygments-main/pygments/styles/bw.py +1 -2
  242. data/vendor/pygments-main/pygments/styles/colorful.py +1 -2
  243. data/vendor/pygments-main/pygments/styles/default.py +1 -2
  244. data/vendor/pygments-main/pygments/styles/emacs.py +1 -2
  245. data/vendor/pygments-main/pygments/styles/friendly.py +1 -2
  246. data/vendor/pygments-main/pygments/styles/fruity.py +1 -2
  247. data/vendor/pygments-main/pygments/styles/igor.py +1 -2
  248. data/vendor/pygments-main/pygments/styles/inkpot.py +66 -0
  249. data/vendor/pygments-main/pygments/styles/lovelace.py +1 -2
  250. data/vendor/pygments-main/pygments/styles/manni.py +1 -2
  251. data/vendor/pygments-main/pygments/styles/material.py +118 -0
  252. data/vendor/pygments-main/pygments/styles/monokai.py +4 -4
  253. data/vendor/pygments-main/pygments/styles/murphy.py +1 -2
  254. data/vendor/pygments-main/pygments/styles/native.py +1 -2
  255. data/vendor/pygments-main/pygments/styles/paraiso_dark.py +1 -2
  256. data/vendor/pygments-main/pygments/styles/paraiso_light.py +1 -2
  257. data/vendor/pygments-main/pygments/styles/pastie.py +1 -2
  258. data/vendor/pygments-main/pygments/styles/perldoc.py +1 -2
  259. data/vendor/pygments-main/pygments/styles/rainbow_dash.py +1 -2
  260. data/vendor/pygments-main/pygments/styles/rrt.py +1 -2
  261. data/vendor/pygments-main/pygments/styles/sas.py +1 -2
  262. data/vendor/pygments-main/pygments/styles/solarized.py +136 -0
  263. data/vendor/pygments-main/pygments/styles/stata_dark.py +40 -0
  264. data/vendor/pygments-main/pygments/styles/{stata.py → stata_light.py} +14 -16
  265. data/vendor/pygments-main/pygments/styles/tango.py +1 -2
  266. data/vendor/pygments-main/pygments/styles/trac.py +1 -2
  267. data/vendor/pygments-main/pygments/styles/vim.py +1 -2
  268. data/vendor/pygments-main/pygments/styles/vs.py +1 -2
  269. data/vendor/pygments-main/pygments/styles/xcode.py +1 -2
  270. data/vendor/pygments-main/pygments/styles/zenburn.py +80 -0
  271. data/vendor/pygments-main/pygments/token.py +1 -2
  272. data/vendor/pygments-main/pygments/unistring.py +47 -109
  273. data/vendor/pygments-main/pygments/util.py +16 -96
  274. metadata +76 -137
  275. data/CHANGELOG.md +0 -105
  276. data/README.md +0 -121
  277. data/circle.yml +0 -20
  278. data/test/test_data.c +0 -2581
  279. data/test/test_data.py +0 -514
  280. data/test/test_data_generated +0 -2582
  281. data/vendor/custom_lexers/github.py +0 -565
  282. data/vendor/pygments-main/CHANGES +0 -1186
  283. data/vendor/pygments-main/MANIFEST.in +0 -6
  284. data/vendor/pygments-main/Makefile +0 -65
  285. data/vendor/pygments-main/README.rst +0 -39
  286. data/vendor/pygments-main/REVISION +0 -1
  287. data/vendor/pygments-main/TODO +0 -12
  288. data/vendor/pygments-main/doc/Makefile +0 -153
  289. data/vendor/pygments-main/doc/_static/favicon.ico +0 -0
  290. data/vendor/pygments-main/doc/_static/logo_new.png +0 -0
  291. data/vendor/pygments-main/doc/_static/logo_only.png +0 -0
  292. data/vendor/pygments-main/doc/_templates/docssidebar.html +0 -3
  293. data/vendor/pygments-main/doc/_templates/indexsidebar.html +0 -25
  294. data/vendor/pygments-main/doc/_themes/pygments14/layout.html +0 -98
  295. data/vendor/pygments-main/doc/_themes/pygments14/static/bodybg.png +0 -0
  296. data/vendor/pygments-main/doc/_themes/pygments14/static/docbg.png +0 -0
  297. data/vendor/pygments-main/doc/_themes/pygments14/static/listitem.png +0 -0
  298. data/vendor/pygments-main/doc/_themes/pygments14/static/logo.png +0 -0
  299. data/vendor/pygments-main/doc/_themes/pygments14/static/pocoo.png +0 -0
  300. data/vendor/pygments-main/doc/_themes/pygments14/static/pygments14.css_t +0 -401
  301. data/vendor/pygments-main/doc/_themes/pygments14/theme.conf +0 -15
  302. data/vendor/pygments-main/doc/conf.py +0 -241
  303. data/vendor/pygments-main/doc/docs/api.rst +0 -354
  304. data/vendor/pygments-main/doc/docs/authors.rst +0 -4
  305. data/vendor/pygments-main/doc/docs/changelog.rst +0 -1
  306. data/vendor/pygments-main/doc/docs/cmdline.rst +0 -166
  307. data/vendor/pygments-main/doc/docs/filterdevelopment.rst +0 -71
  308. data/vendor/pygments-main/doc/docs/filters.rst +0 -41
  309. data/vendor/pygments-main/doc/docs/formatterdevelopment.rst +0 -169
  310. data/vendor/pygments-main/doc/docs/formatters.rst +0 -48
  311. data/vendor/pygments-main/doc/docs/index.rst +0 -66
  312. data/vendor/pygments-main/doc/docs/integrate.rst +0 -40
  313. data/vendor/pygments-main/doc/docs/java.rst +0 -70
  314. data/vendor/pygments-main/doc/docs/lexerdevelopment.rst +0 -728
  315. data/vendor/pygments-main/doc/docs/lexers.rst +0 -69
  316. data/vendor/pygments-main/doc/docs/moinmoin.rst +0 -39
  317. data/vendor/pygments-main/doc/docs/plugins.rst +0 -93
  318. data/vendor/pygments-main/doc/docs/quickstart.rst +0 -205
  319. data/vendor/pygments-main/doc/docs/rstdirective.rst +0 -22
  320. data/vendor/pygments-main/doc/docs/styles.rst +0 -201
  321. data/vendor/pygments-main/doc/docs/tokens.rst +0 -372
  322. data/vendor/pygments-main/doc/docs/unicode.rst +0 -58
  323. data/vendor/pygments-main/doc/download.rst +0 -41
  324. data/vendor/pygments-main/doc/faq.rst +0 -139
  325. data/vendor/pygments-main/doc/index.rst +0 -54
  326. data/vendor/pygments-main/doc/languages.rst +0 -154
  327. data/vendor/pygments-main/doc/make.bat +0 -190
  328. data/vendor/pygments-main/doc/pygmentize.1 +0 -94
  329. data/vendor/pygments-main/external/autopygmentize +0 -101
  330. data/vendor/pygments-main/external/lasso-builtins-generator-9.lasso +0 -162
  331. data/vendor/pygments-main/external/markdown-processor.py +0 -67
  332. data/vendor/pygments-main/external/moin-parser.py +0 -112
  333. data/vendor/pygments-main/external/pygments.bashcomp +0 -38
  334. data/vendor/pygments-main/external/rst-directive.py +0 -82
  335. data/vendor/pygments-main/pygmentize +0 -8
  336. data/vendor/pygments-main/pygments/lexers/github.py +0 -565
  337. data/vendor/pygments-main/requirements.txt +0 -5
  338. data/vendor/pygments-main/scripts/check_sources.py +0 -211
  339. data/vendor/pygments-main/scripts/debug_lexer.py +0 -246
  340. data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +0 -33
  341. data/vendor/pygments-main/scripts/epydoc.css +0 -280
  342. data/vendor/pygments-main/scripts/get_vimkw.py +0 -74
  343. data/vendor/pygments-main/scripts/pylintrc +0 -301
  344. data/vendor/pygments-main/scripts/vim2pygments.py +0 -935
  345. data/vendor/pygments-main/setup.cfg +0 -10
  346. data/vendor/pygments-main/setup.py +0 -77
  347. data/vendor/pygments-main/tox.ini +0 -7
  348. data/vendor/simplejson/.gitignore +0 -10
  349. data/vendor/simplejson/.travis.yml +0 -5
  350. data/vendor/simplejson/CHANGES.txt +0 -291
  351. data/vendor/simplejson/LICENSE.txt +0 -19
  352. data/vendor/simplejson/MANIFEST.in +0 -5
  353. data/vendor/simplejson/README.rst +0 -19
  354. data/vendor/simplejson/conf.py +0 -179
  355. data/vendor/simplejson/index.rst +0 -628
  356. data/vendor/simplejson/scripts/make_docs.py +0 -18
  357. data/vendor/simplejson/setup.py +0 -104
  358. data/vendor/simplejson/simplejson/__init__.py +0 -510
  359. data/vendor/simplejson/simplejson/_speedups.c +0 -2745
  360. data/vendor/simplejson/simplejson/decoder.py +0 -425
  361. data/vendor/simplejson/simplejson/encoder.py +0 -567
  362. data/vendor/simplejson/simplejson/ordered_dict.py +0 -119
  363. data/vendor/simplejson/simplejson/scanner.py +0 -77
  364. data/vendor/simplejson/simplejson/tests/__init__.py +0 -67
  365. data/vendor/simplejson/simplejson/tests/test_bigint_as_string.py +0 -55
  366. data/vendor/simplejson/simplejson/tests/test_check_circular.py +0 -30
  367. data/vendor/simplejson/simplejson/tests/test_decimal.py +0 -66
  368. data/vendor/simplejson/simplejson/tests/test_decode.py +0 -83
  369. data/vendor/simplejson/simplejson/tests/test_default.py +0 -9
  370. data/vendor/simplejson/simplejson/tests/test_dump.py +0 -67
  371. data/vendor/simplejson/simplejson/tests/test_encode_basestring_ascii.py +0 -46
  372. data/vendor/simplejson/simplejson/tests/test_encode_for_html.py +0 -32
  373. data/vendor/simplejson/simplejson/tests/test_errors.py +0 -34
  374. data/vendor/simplejson/simplejson/tests/test_fail.py +0 -91
  375. data/vendor/simplejson/simplejson/tests/test_float.py +0 -19
  376. data/vendor/simplejson/simplejson/tests/test_indent.py +0 -86
  377. data/vendor/simplejson/simplejson/tests/test_item_sort_key.py +0 -20
  378. data/vendor/simplejson/simplejson/tests/test_namedtuple.py +0 -121
  379. data/vendor/simplejson/simplejson/tests/test_pass1.py +0 -76
  380. data/vendor/simplejson/simplejson/tests/test_pass2.py +0 -14
  381. data/vendor/simplejson/simplejson/tests/test_pass3.py +0 -20
  382. data/vendor/simplejson/simplejson/tests/test_recursion.py +0 -67
  383. data/vendor/simplejson/simplejson/tests/test_scanstring.py +0 -117
  384. data/vendor/simplejson/simplejson/tests/test_separators.py +0 -42
  385. data/vendor/simplejson/simplejson/tests/test_speedups.py +0 -20
  386. data/vendor/simplejson/simplejson/tests/test_tuple.py +0 -49
  387. data/vendor/simplejson/simplejson/tests/test_unicode.py +0 -109
  388. data/vendor/simplejson/simplejson/tool.py +0 -39
@@ -1,20 +1,19 @@
1
- # -*- coding: utf-8 -*-
2
1
  """
3
2
  pygments.lexers.csound
4
3
  ~~~~~~~~~~~~~~~~~~~~~~
5
4
 
6
- Lexers for CSound languages.
5
+ Lexers for Csound languages.
7
6
 
8
- :copyright: Copyright 2006-2017 by the Pygments team, see AUTHORS.
7
+ :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
9
8
  :license: BSD, see LICENSE for details.
10
9
  """
11
10
 
12
11
  import re
13
12
 
14
13
  from pygments.lexer import RegexLexer, bygroups, default, include, using, words
15
- from pygments.token import Comment, Keyword, Name, Number, Operator, Punctuation, \
16
- String, Text
17
- from pygments.lexers._csound_builtins import OPCODES
14
+ from pygments.token import Comment, Error, Keyword, Name, Number, Operator, Punctuation, \
15
+ String, Text, Whitespace
16
+ from pygments.lexers._csound_builtins import OPCODES, DEPRECATED_OPCODES
18
17
  from pygments.lexers.html import HtmlLexer
19
18
  from pygments.lexers.python import PythonLexer
20
19
  from pygments.lexers.scripting import LuaLexer
@@ -25,74 +24,116 @@ newline = (r'((?:(?:;|//).*)*)(\n)', bygroups(Comment.Single, Text))
25
24
 
26
25
 
27
26
  class CsoundLexer(RegexLexer):
28
- # Subclasses must define a 'single-line string' state.
29
27
  tokens = {
30
28
  'whitespace': [
31
29
  (r'[ \t]+', Text),
32
- (r'\\\n', Text),
33
- (r'/[*](.|\n)*?[*]/', Comment.Multiline)
30
+ (r'/[*](?:.|\n)*?[*]/', Comment.Multiline),
31
+ (r'(?:;|//).*$', Comment.Single),
32
+ (r'(\\)(\n)', bygroups(Whitespace, Text))
34
33
  ],
35
34
 
36
- 'macro call': [
37
- (r'(\$\w+\.?)(\()', bygroups(Comment.Preproc, Punctuation),
38
- 'function macro call'),
39
- (r'\$\w+(\.|\b)', Comment.Preproc)
40
- ],
41
- 'function macro call': [
42
- (r"((?:\\['\)]|[^'\)])+)(')", bygroups(Comment.Preproc, Punctuation)),
43
- (r"([^'\)]+)(\))", bygroups(Comment.Preproc, Punctuation), '#pop')
35
+ 'preprocessor directives': [
36
+ (r'#(?:e(?:nd(?:if)?|lse)\b|##)|@@?[ \t]*\d+', Comment.Preproc),
37
+ (r'#includestr', Comment.Preproc, 'includestr directive'),
38
+ (r'#include', Comment.Preproc, 'include directive'),
39
+ (r'#[ \t]*define', Comment.Preproc, 'define directive'),
40
+ (r'#(?:ifn?def|undef)\b', Comment.Preproc, 'macro directive')
44
41
  ],
45
42
 
46
- 'whitespace or macro call': [
43
+ 'include directive': [
47
44
  include('whitespace'),
48
- include('macro call')
45
+ (r'([^ \t]).*?\1', String, '#pop')
49
46
  ],
50
-
51
- 'preprocessor directives': [
52
- (r'#(e(nd(if)?|lse)|ifn?def|undef)\b|##', Comment.Preproc),
53
- (r'#include\b', Comment.Preproc, 'include'),
54
- (r'#[ \t]*define\b', Comment.Preproc, 'macro name'),
55
- (r'@+[ \t]*\d*', Comment.Preproc)
47
+ 'includestr directive': [
48
+ include('whitespace'),
49
+ (r'"', String, ('#pop', 'quoted string'))
56
50
  ],
57
51
 
58
- 'include': [
52
+ 'define directive': [
53
+ (r'\n', Text),
59
54
  include('whitespace'),
60
- (r'"', String, 'single-line string')
55
+ (r'([A-Z_a-z]\w*)(\()', bygroups(Comment.Preproc, Punctuation),
56
+ ('#pop', 'macro parameter name list')),
57
+ (r'[A-Z_a-z]\w*', Comment.Preproc, ('#pop', 'before macro body'))
61
58
  ],
62
-
63
- 'macro name': [
59
+ 'macro parameter name list': [
64
60
  include('whitespace'),
65
- (r'(\w+)(\()', bygroups(Comment.Preproc, Text),
66
- 'function macro argument list'),
67
- (r'\w+', Comment.Preproc, 'object macro definition after name')
61
+ (r'[A-Z_a-z]\w*', Comment.Preproc),
62
+ (r"['#]", Punctuation),
63
+ (r'\)', Punctuation, ('#pop', 'before macro body'))
68
64
  ],
69
- 'object macro definition after name': [
65
+ 'before macro body': [
66
+ (r'\n', Text),
70
67
  include('whitespace'),
71
- (r'#', Punctuation, 'object macro replacement text')
68
+ (r'#', Punctuation, ('#pop', 'macro body'))
72
69
  ],
73
- 'object macro replacement text': [
74
- (r'(\\#|[^#])+', Comment.Preproc),
75
- (r'#', Punctuation, '#pop:3')
70
+ 'macro body': [
71
+ (r'(?:\\(?!#)|[^#\\]|\n)+', Comment.Preproc),
72
+ (r'\\#', Comment.Preproc),
73
+ (r'(?<!\\)#', Punctuation, '#pop')
76
74
  ],
77
- 'function macro argument list': [
78
- (r"(\w+)(['#])", bygroups(Comment.Preproc, Punctuation)),
79
- (r'(\w+)(\))', bygroups(Comment.Preproc, Punctuation),
80
- 'function macro definition after name')
75
+
76
+ 'macro directive': [
77
+ include('whitespace'),
78
+ (r'[A-Z_a-z]\w*', Comment.Preproc, '#pop')
81
79
  ],
82
- 'function macro definition after name': [
83
- (r'[ \t]+', Text),
84
- (r'#', Punctuation, 'function macro replacement text')
80
+
81
+ 'macro uses': [
82
+ (r'(\$[A-Z_a-z]\w*\.?)(\()', bygroups(Comment.Preproc, Punctuation),
83
+ 'macro parameter value list'),
84
+ (r'\$[A-Z_a-z]\w*(?:\.|\b)', Comment.Preproc)
85
+ ],
86
+ 'macro parameter value list': [
87
+ (r'(?:[^\'#"{()]|\{(?!\{))+', Comment.Preproc),
88
+ (r"['#]", Punctuation),
89
+ (r'"', String, 'macro parameter value quoted string'),
90
+ (r'\{\{', String, 'macro parameter value braced string'),
91
+ (r'\(', Comment.Preproc, 'macro parameter value parenthetical'),
92
+ (r'\)', Punctuation, '#pop')
93
+ ],
94
+ 'macro parameter value quoted string': [
95
+ (r"\\[#'()]", Comment.Preproc),
96
+ (r"[#'()]", Error),
97
+ include('quoted string')
98
+ ],
99
+ 'macro parameter value braced string': [
100
+ (r"\\[#'()]", Comment.Preproc),
101
+ (r"[#'()]", Error),
102
+ include('braced string')
103
+ ],
104
+ 'macro parameter value parenthetical': [
105
+ (r'(?:[^\\()]|\\\))+', Comment.Preproc),
106
+ (r'\(', Comment.Preproc, '#push'),
107
+ (r'\)', Comment.Preproc, '#pop')
108
+ ],
109
+
110
+ 'whitespace and macro uses': [
111
+ include('whitespace'),
112
+ include('macro uses')
113
+ ],
114
+
115
+ 'numbers': [
116
+ (r'\d+[Ee][+-]?\d+|(\d+\.\d*|\d*\.\d+)([Ee][+-]?\d+)?', Number.Float),
117
+ (r'(0[Xx])([0-9A-Fa-f]+)', bygroups(Keyword.Type, Number.Hex)),
118
+ (r'\d+', Number.Integer)
85
119
  ],
86
- 'function macro replacement text': [
87
- (r'(\\#|[^#])+', Comment.Preproc),
88
- (r'#', Punctuation, '#pop:4')
120
+
121
+ 'quoted string': [
122
+ (r'"', String, '#pop'),
123
+ (r'[^"$]+', String),
124
+ include('macro uses'),
125
+ (r'[$]', String)
126
+ ],
127
+
128
+ 'braced string': [
129
+ # Do nothing. This must be defined in subclasses.
89
130
  ]
90
131
  }
91
132
 
92
133
 
93
134
  class CsoundScoreLexer(CsoundLexer):
94
135
  """
95
- For `Csound <http://csound.github.io>`_ scores.
136
+ For `Csound <https://csound.com>`_ scores.
96
137
 
97
138
  .. versionadded:: 2.1
98
139
  """
@@ -102,47 +143,70 @@ class CsoundScoreLexer(CsoundLexer):
102
143
  filenames = ['*.sco']
103
144
 
104
145
  tokens = {
105
- 'partial statement': [
146
+ 'root': [
147
+ (r'\n', Text),
148
+ include('whitespace and macro uses'),
106
149
  include('preprocessor directives'),
107
- (r'\d+e[+-]?\d+|(\d+\.\d*|\d*\.\d+)(e[+-]?\d+)?', Number.Float),
108
- (r'0[xX][a-fA-F0-9]+', Number.Hex),
109
- (r'\d+', Number.Integer),
110
- (r'"', String, 'single-line string'),
111
- (r'[+\-*/%^!=<>|&#~.]', Operator),
112
- (r'[]()[]', Punctuation),
113
- (r'\w+', Comment.Preproc)
150
+
151
+ (r'[aBbCdefiqstvxy]', Keyword),
152
+ # There is also a w statement that is generated internally and should not be
153
+ # used; see https://github.com/csound/csound/issues/750.
154
+
155
+ (r'z', Keyword.Constant),
156
+ # z is a constant equal to 800,000,000,000. 800 billion seconds is about
157
+ # 25,367.8 years. See also
158
+ # https://csound.com/docs/manual/ScoreTop.html and
159
+ # https://github.com/csound/csound/search?q=stof+path%3AEngine+filename%3Asread.c.
160
+
161
+ (r'([nNpP][pP])(\d+)', bygroups(Keyword, Number.Integer)),
162
+
163
+ (r'[mn]', Keyword, 'mark statement'),
164
+
165
+ include('numbers'),
166
+ (r'[!+\-*/^%&|<>#~.]', Operator),
167
+ (r'[()\[\]]', Punctuation),
168
+ (r'"', String, 'quoted string'),
169
+ (r'\{', Comment.Preproc, 'loop after left brace'),
114
170
  ],
115
171
 
116
- 'statement': [
117
- include('whitespace or macro call'),
118
- newline + ('#pop',),
119
- include('partial statement')
172
+ 'mark statement': [
173
+ include('whitespace and macro uses'),
174
+ (r'[A-Z_a-z]\w*', Name.Label),
175
+ (r'\n', Text, '#pop')
120
176
  ],
121
177
 
122
- 'root': [
123
- newline,
124
- include('whitespace or macro call'),
125
- (r'[{}]', Punctuation, 'statement'),
126
- (r'[abefimq-tv-z]|[nN][pP]?', Keyword, 'statement')
178
+ 'loop after left brace': [
179
+ include('whitespace and macro uses'),
180
+ (r'\d+', Number.Integer, ('#pop', 'loop after repeat count')),
181
+ ],
182
+ 'loop after repeat count': [
183
+ include('whitespace and macro uses'),
184
+ (r'[A-Z_a-z]\w*', Comment.Preproc, ('#pop', 'loop'))
185
+ ],
186
+ 'loop': [
187
+ (r'\}', Comment.Preproc, '#pop'),
188
+ include('root')
127
189
  ],
128
190
 
129
- 'single-line string': [
130
- (r'"', String, '#pop'),
131
- (r'[^\\"]+', String)
191
+ # Braced strings are not allowed in Csound scores, but this is needed because the
192
+ # superclass includes it.
193
+ 'braced string': [
194
+ (r'\}\}', String, '#pop'),
195
+ (r'[^}]|\}(?!\})', String)
132
196
  ]
133
197
  }
134
198
 
135
199
 
136
200
  class CsoundOrchestraLexer(CsoundLexer):
137
201
  """
138
- For `Csound <http://csound.github.io>`_ orchestras.
202
+ For `Csound <https://csound.com>`_ orchestras.
139
203
 
140
204
  .. versionadded:: 2.1
141
205
  """
142
206
 
143
207
  name = 'Csound Orchestra'
144
208
  aliases = ['csound', 'csound-orc']
145
- filenames = ['*.orc']
209
+ filenames = ['*.orc', '*.udo']
146
210
 
147
211
  user_defined_opcodes = set()
148
212
 
@@ -152,159 +216,191 @@ class CsoundOrchestraLexer(CsoundLexer):
152
216
  yield match.start(), Name.Function, opcode
153
217
 
154
218
  def name_callback(lexer, match):
155
- name = match.group(0)
156
- if re.match('p\d+$', name) or name in OPCODES:
219
+ type_annotation_token = Keyword.Type
220
+
221
+ name = match.group(1)
222
+ if name in OPCODES or name in DEPRECATED_OPCODES:
157
223
  yield match.start(), Name.Builtin, name
158
224
  elif name in lexer.user_defined_opcodes:
159
225
  yield match.start(), Name.Function, name
160
226
  else:
161
- nameMatch = re.search(r'^(g?[aikSw])(\w+)', name)
162
- if nameMatch:
163
- yield nameMatch.start(1), Keyword.Type, nameMatch.group(1)
164
- yield nameMatch.start(2), Name, nameMatch.group(2)
227
+ type_annotation_token = Name
228
+ name_match = re.search(r'^(g?[afikSw])(\w+)', name)
229
+ if name_match:
230
+ yield name_match.start(1), Keyword.Type, name_match.group(1)
231
+ yield name_match.start(2), Name, name_match.group(2)
165
232
  else:
166
233
  yield match.start(), Name, name
167
234
 
235
+ if match.group(2):
236
+ yield match.start(2), Punctuation, match.group(2)
237
+ yield match.start(3), type_annotation_token, match.group(3)
238
+
168
239
  tokens = {
169
- 'label': [
170
- (r'\b(\w+)(:)', bygroups(Name.Label, Punctuation))
171
- ],
240
+ 'root': [
241
+ (r'\n', Text),
242
+
243
+ (r'^([ \t]*)(\w+)(:)([ \t]+|$)', bygroups(Text, Name.Label, Punctuation, Text)),
172
244
 
173
- 'partial expression': [
245
+ include('whitespace and macro uses'),
174
246
  include('preprocessor directives'),
175
- (r'\b(0dbfs|k(r|smps)|nchnls(_i)?|sr)\b', Name.Variable.Global),
176
- (r'\d+e[+-]?\d+|(\d+\.\d*|\d*\.\d+)(e[+-]?\d+)?', Number.Float),
177
- (r'0[xX][a-fA-F0-9]+', Number.Hex),
178
- (r'\d+', Number.Integer),
179
- (r'"', String, 'single-line string'),
180
- (r'\{\{', String, 'multi-line string'),
181
- (r'[+\-*/%^!=&|<>#~¬]', Operator),
182
- (r'[](),?:[]', Punctuation),
247
+
248
+ (r'\binstr\b', Keyword.Declaration, 'instrument numbers and identifiers'),
249
+ (r'\bopcode\b', Keyword.Declaration, 'after opcode keyword'),
250
+ (r'\b(?:end(?:in|op))\b', Keyword.Declaration),
251
+
252
+ include('partial statements')
253
+ ],
254
+
255
+ 'partial statements': [
256
+ (r'\b(?:0dbfs|A4|k(?:r|smps)|nchnls(?:_i)?|sr)\b', Name.Variable.Global),
257
+
258
+ include('numbers'),
259
+
260
+ (r'\+=|-=|\*=|/=|<<|>>|<=|>=|==|!=|&&|\|\||[~¬]|[=!+\-*/^%&|<>#?:]', Operator),
261
+ (r'[(),\[\]]', Punctuation),
262
+
263
+ (r'"', String, 'quoted string'),
264
+ (r'\{\{', String, 'braced string'),
265
+
183
266
  (words((
184
- # Keywords
185
267
  'do', 'else', 'elseif', 'endif', 'enduntil', 'fi', 'if', 'ithen', 'kthen',
186
268
  'od', 'then', 'until', 'while',
187
- # Opcodes that act as control structures
188
- 'return', 'timout'
189
269
  ), prefix=r'\b', suffix=r'\b'), Keyword),
190
- (words(('goto', 'igoto', 'kgoto', 'rigoto', 'tigoto'),
191
- prefix=r'\b', suffix=r'\b'), Keyword, 'goto label'),
192
- (words(('cggoto', 'cigoto', 'cingoto', 'ckgoto', 'cngoto'),
193
- prefix=r'\b', suffix=r'\b'), Keyword,
194
- ('goto label', 'goto expression')),
195
- (words(('loop_ge', 'loop_gt', 'loop_le', 'loop_lt'),
196
- prefix=r'\b', suffix=r'\b'), Keyword,
197
- ('goto label', 'goto expression', 'goto expression', 'goto expression')),
198
- (r'\bscoreline(_i)?\b', Name.Builtin, 'scoreline opcode'),
199
- (r'\bpyl?run[it]?\b', Name.Builtin, 'python opcode'),
200
- (r'\blua_(exec|opdef)\b', Name.Builtin, 'lua opcode'),
201
- (r'\b[a-zA-Z_]\w*\b', name_callback)
202
- ],
203
-
204
- 'expression': [
205
- include('whitespace or macro call'),
206
- newline + ('#pop',),
207
- include('partial expression')
208
- ],
270
+ (words(('return', 'rireturn'), prefix=r'\b', suffix=r'\b'), Keyword.Pseudo),
209
271
 
210
- 'root': [
211
- newline,
212
- include('whitespace or macro call'),
213
- (r'\binstr\b', Keyword, ('instrument block', 'instrument name list')),
214
- (r'\bopcode\b', Keyword, ('opcode block', 'opcode parameter list',
215
- 'opcode types', 'opcode types', 'opcode name')),
216
- include('label'),
217
- default('expression')
218
- ],
219
-
220
- 'instrument name list': [
221
- include('whitespace or macro call'),
222
- (r'\d+|\+?[a-zA-Z_]\w*', Name.Function),
223
- (r',', Punctuation),
224
- newline + ('#pop',)
272
+ (r'\b[ik]?goto\b', Keyword, 'goto label'),
273
+ (r'\b(r(?:einit|igoto)|tigoto)(\(|\b)', bygroups(Keyword.Pseudo, Punctuation),
274
+ 'goto label'),
275
+ (r'\b(c(?:g|in?|k|nk?)goto)(\(|\b)', bygroups(Keyword.Pseudo, Punctuation),
276
+ ('goto label', 'goto argument')),
277
+ (r'\b(timout)(\(|\b)', bygroups(Keyword.Pseudo, Punctuation),
278
+ ('goto label', 'goto argument', 'goto argument')),
279
+ (r'\b(loop_[gl][et])(\(|\b)', bygroups(Keyword.Pseudo, Punctuation),
280
+ ('goto label', 'goto argument', 'goto argument', 'goto argument')),
281
+
282
+ (r'\bprintk?s\b', Name.Builtin, 'prints opcode'),
283
+ (r'\b(?:readscore|scoreline(?:_i)?)\b', Name.Builtin, 'Csound score opcode'),
284
+ (r'\bpyl?run[it]?\b', Name.Builtin, 'Python opcode'),
285
+ (r'\blua_(?:exec|opdef)\b', Name.Builtin, 'Lua opcode'),
286
+ (r'\bp\d+\b', Name.Variable.Instance),
287
+ (r'\b([A-Z_a-z]\w*)(?:(:)([A-Za-z]))?\b', name_callback)
225
288
  ],
226
- 'instrument block': [
227
- newline,
228
- include('whitespace or macro call'),
229
- (r'\bendin\b', Keyword, '#pop'),
230
- include('label'),
231
- default('expression')
289
+
290
+ 'instrument numbers and identifiers': [
291
+ include('whitespace and macro uses'),
292
+ (r'\d+|[A-Z_a-z]\w*', Name.Function),
293
+ (r'[+,]', Punctuation),
294
+ (r'\n', Text, '#pop')
232
295
  ],
233
296
 
234
- 'opcode name': [
235
- include('whitespace or macro call'),
236
- (r'[a-zA-Z_]\w*', opcode_name_callback, '#pop')
297
+ 'after opcode keyword': [
298
+ include('whitespace and macro uses'),
299
+ (r'[A-Z_a-z]\w*', opcode_name_callback, ('#pop', 'opcode type signatures')),
300
+ (r'\n', Text, '#pop')
237
301
  ],
238
- 'opcode types': [
239
- include('whitespace or macro call'),
240
- (r'0|[]afijkKoOpPStV[]+', Keyword.Type, '#pop'),
241
- (r',', Punctuation)
302
+ 'opcode type signatures': [
303
+ include('whitespace and macro uses'),
304
+
305
+ # https://github.com/csound/csound/search?q=XIDENT+path%3AEngine+filename%3Acsound_orc.lex
306
+ (r'0|[afijkKoOpPStV\[\]]+', Keyword.Type),
307
+
308
+ (r',', Punctuation),
309
+ (r'\n', Text, '#pop')
242
310
  ],
243
- 'opcode parameter list': [
244
- include('whitespace or macro call'),
245
- newline + ('#pop',)
311
+
312
+ 'quoted string': [
313
+ (r'"', String, '#pop'),
314
+ (r'[^\\"$%)]+', String),
315
+ include('macro uses'),
316
+ include('escape sequences'),
317
+ include('format specifiers'),
318
+ (r'[\\$%)]', String)
246
319
  ],
247
- 'opcode block': [
248
- newline,
249
- include('whitespace or macro call'),
250
- (r'\bendop\b', Keyword, '#pop'),
251
- include('label'),
252
- default('expression')
320
+ 'braced string': [
321
+ (r'\}\}', String, '#pop'),
322
+ (r'(?:[^\\%)}]|\}(?!\}))+', String),
323
+ include('escape sequences'),
324
+ include('format specifiers'),
325
+ (r'[\\%)]', String)
326
+ ],
327
+ 'escape sequences': [
328
+ # https://github.com/csound/csound/search?q=unquote_string+path%3AEngine+filename%3Acsound_orc_compile.c
329
+ (r'\\(?:[\\abnrt"]|[0-7]{1,3})', String.Escape)
330
+ ],
331
+ # Format specifiers are highlighted in all strings, even though only
332
+ # fprintks https://csound.com/docs/manual/fprintks.html
333
+ # fprints https://csound.com/docs/manual/fprints.html
334
+ # printf/printf_i https://csound.com/docs/manual/printf.html
335
+ # printks https://csound.com/docs/manual/printks.html
336
+ # prints https://csound.com/docs/manual/prints.html
337
+ # sprintf https://csound.com/docs/manual/sprintf.html
338
+ # sprintfk https://csound.com/docs/manual/sprintfk.html
339
+ # work with strings that contain format specifiers. In addition, these opcodes’
340
+ # handling of format specifiers is inconsistent:
341
+ # - fprintks and fprints accept %a and %A specifiers, and accept %s specifiers
342
+ # starting in Csound 6.15.0.
343
+ # - printks and prints accept %a and %A specifiers, but don’t accept %s
344
+ # specifiers.
345
+ # - printf, printf_i, sprintf, and sprintfk don’t accept %a and %A specifiers,
346
+ # but accept %s specifiers.
347
+ # See https://github.com/csound/csound/issues/747 for more information.
348
+ 'format specifiers': [
349
+ (r'%[#0\- +]*\d*(?:\.\d+)?[AE-GXac-giosux]', String.Interpol),
350
+ (r'%%', String.Escape)
351
+ ],
352
+
353
+ 'goto argument': [
354
+ include('whitespace and macro uses'),
355
+ (r',', Punctuation, '#pop'),
356
+ include('partial statements')
253
357
  ],
254
-
255
358
  'goto label': [
256
- include('whitespace or macro call'),
359
+ include('whitespace and macro uses'),
257
360
  (r'\w+', Name.Label, '#pop'),
258
361
  default('#pop')
259
362
  ],
260
- 'goto expression': [
261
- include('whitespace or macro call'),
262
- (r',', Punctuation, '#pop'),
263
- include('partial expression')
264
- ],
265
363
 
266
- 'single-line string': [
267
- include('macro call'),
268
- (r'"', String, '#pop'),
269
- # From https://github.com/csound/csound/blob/develop/Opcodes/fout.c#L1405
270
- (r'%\d*(\.\d+)?[cdhilouxX]', String.Interpol),
271
- (r'%[!%nNrRtT]|[~^]|\\([\\aAbBnNrRtT"]|[0-7]{1,3})', String.Escape),
272
- (r'[^\\"~$%\^\n]+', String),
273
- (r'[\\"~$%\^\n]', String)
364
+ 'prints opcode': [
365
+ include('whitespace and macro uses'),
366
+ (r'"', String, 'prints quoted string'),
367
+ default('#pop')
274
368
  ],
275
- 'multi-line string': [
276
- (r'\}\}', String, '#pop'),
277
- (r'[^}]+|\}(?!\})', String)
369
+ 'prints quoted string': [
370
+ (r'\\\\[aAbBnNrRtT]', String.Escape),
371
+ (r'%[!nNrRtT]|[~^]{1,2}', String.Escape),
372
+ include('quoted string')
278
373
  ],
279
374
 
280
- 'scoreline opcode': [
281
- include('whitespace or macro call'),
282
- (r'\{\{', String, 'scoreline'),
283
- default('#pop')
375
+ 'Csound score opcode': [
376
+ include('whitespace and macro uses'),
377
+ (r'"', String, 'quoted string'),
378
+ (r'\{\{', String, 'Csound score'),
379
+ (r'\n', Text, '#pop')
284
380
  ],
285
- 'scoreline': [
381
+ 'Csound score': [
286
382
  (r'\}\}', String, '#pop'),
287
383
  (r'([^}]+)|\}(?!\})', using(CsoundScoreLexer))
288
384
  ],
289
385
 
290
- 'python opcode': [
291
- include('whitespace or macro call'),
292
- (r'\{\{', String, 'python'),
293
- default('#pop')
386
+ 'Python opcode': [
387
+ include('whitespace and macro uses'),
388
+ (r'"', String, 'quoted string'),
389
+ (r'\{\{', String, 'Python'),
390
+ (r'\n', Text, '#pop')
294
391
  ],
295
- 'python': [
392
+ 'Python': [
296
393
  (r'\}\}', String, '#pop'),
297
394
  (r'([^}]+)|\}(?!\})', using(PythonLexer))
298
395
  ],
299
396
 
300
- 'lua opcode': [
301
- include('whitespace or macro call'),
302
- (r'"', String, 'single-line string'),
303
- (r'\{\{', String, 'lua'),
304
- (r',', Punctuation),
305
- default('#pop')
397
+ 'Lua opcode': [
398
+ include('whitespace and macro uses'),
399
+ (r'"', String, 'quoted string'),
400
+ (r'\{\{', String, 'Lua'),
401
+ (r'\n', Text, '#pop')
306
402
  ],
307
- 'lua': [
403
+ 'Lua': [
308
404
  (r'\}\}', String, '#pop'),
309
405
  (r'([^}]+)|\}(?!\})', using(LuaLexer))
310
406
  ]
@@ -313,7 +409,7 @@ class CsoundOrchestraLexer(CsoundLexer):
313
409
 
314
410
  class CsoundDocumentLexer(RegexLexer):
315
411
  """
316
- For `Csound <http://csound.github.io>`_ documents.
412
+ For `Csound <https://csound.com>`_ documents.
317
413
 
318
414
  .. versionadded:: 2.1
319
415
  """
@@ -331,15 +427,18 @@ class CsoundDocumentLexer(RegexLexer):
331
427
  # be XML files.
332
428
  tokens = {
333
429
  'root': [
334
- newline,
335
430
  (r'/[*](.|\n)*?[*]/', Comment.Multiline),
336
- (r'[^<&;/]+', Text),
431
+ (r'(?:;|//).*$', Comment.Single),
432
+ (r'[^/;<]+|/(?!/)', Text),
433
+
337
434
  (r'<\s*CsInstruments', Name.Tag, ('orchestra', 'tag')),
338
435
  (r'<\s*CsScore', Name.Tag, ('score', 'tag')),
339
- (r'<\s*[hH][tT][mM][lL]', Name.Tag, ('HTML', 'tag')),
436
+ (r'<\s*[Hh][Tt][Mm][Ll]', Name.Tag, ('HTML', 'tag')),
437
+
340
438
  (r'<\s*[\w:.-]+', Name.Tag, 'tag'),
341
439
  (r'<\s*/\s*[\w:.-]+\s*>', Name.Tag)
342
440
  ],
441
+
343
442
  'orchestra': [
344
443
  (r'<\s*/\s*CsInstruments\s*>', Name.Tag, '#pop'),
345
444
  (r'(.|\n)+?(?=<\s*/\s*CsInstruments\s*>)', using(CsoundOrchestraLexer))
@@ -349,9 +448,10 @@ class CsoundDocumentLexer(RegexLexer):
349
448
  (r'(.|\n)+?(?=<\s*/\s*CsScore\s*>)', using(CsoundScoreLexer))
350
449
  ],
351
450
  'HTML': [
352
- (r'<\s*/\s*[hH][tT][mM][lL]\s*>', Name.Tag, '#pop'),
353
- (r'(.|\n)+?(?=<\s*/\s*[hH][tT][mM][lL]\s*>)', using(HtmlLexer))
451
+ (r'<\s*/\s*[Hh][Tt][Mm][Ll]\s*>', Name.Tag, '#pop'),
452
+ (r'(.|\n)+?(?=<\s*/\s*[Hh][Tt][Mm][Ll]\s*>)', using(HtmlLexer))
354
453
  ],
454
+
355
455
  'tag': [
356
456
  (r'\s+', Text),
357
457
  (r'[\w.:-]+\s*=', Name.Attribute, 'attr'),