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,11 +1,10 @@
1
- # -*- coding: utf-8 -*-
2
1
  """
3
2
  pygments.lexers.prolog
4
3
  ~~~~~~~~~~~~~~~~~~~~~~
5
4
 
6
5
  Lexers for Prolog and Prolog-like 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
 
@@ -31,7 +30,6 @@ class PrologLexer(RegexLexer):
31
30
 
32
31
  tokens = {
33
32
  'root': [
34
- (r'^#.*', Comment.Single),
35
33
  (r'/\*', Comment.Multiline, 'nested-comment'),
36
34
  (r'%.*', Comment.Single),
37
35
  # character literal
@@ -56,22 +54,22 @@ class PrologLexer(RegexLexer):
56
54
  (r'(mod|div|not)\b', Operator),
57
55
  (r'_', Keyword), # The don't-care variable
58
56
  (r'([a-z]+)(:)', bygroups(Name.Namespace, Punctuation)),
59
- (u'([a-z\u00c0-\u1fff\u3040-\ud7ff\ue000-\uffef]'
60
- u'[\w$\u00c0-\u1fff\u3040-\ud7ff\ue000-\uffef]*)'
61
- u'(\\s*)(:-|-->)',
57
+ (r'([a-z\u00c0-\u1fff\u3040-\ud7ff\ue000-\uffef]'
58
+ r'[\w$\u00c0-\u1fff\u3040-\ud7ff\ue000-\uffef]*)'
59
+ r'(\s*)(:-|-->)',
62
60
  bygroups(Name.Function, Text, Operator)), # function defn
63
- (u'([a-z\u00c0-\u1fff\u3040-\ud7ff\ue000-\uffef]'
64
- u'[\w$\u00c0-\u1fff\u3040-\ud7ff\ue000-\uffef]*)'
65
- u'(\\s*)(\\()',
61
+ (r'([a-z\u00c0-\u1fff\u3040-\ud7ff\ue000-\uffef]'
62
+ r'[\w$\u00c0-\u1fff\u3040-\ud7ff\ue000-\uffef]*)'
63
+ r'(\s*)(\()',
66
64
  bygroups(Name.Function, Text, Punctuation)),
67
- (u'[a-z\u00c0-\u1fff\u3040-\ud7ff\ue000-\uffef]'
68
- u'[\w$\u00c0-\u1fff\u3040-\ud7ff\ue000-\uffef]*',
65
+ (r'[a-z\u00c0-\u1fff\u3040-\ud7ff\ue000-\uffef]'
66
+ r'[\w$\u00c0-\u1fff\u3040-\ud7ff\ue000-\uffef]*',
69
67
  String.Atom), # atom, characters
70
68
  # This one includes !
71
- (u'[#&*+\\-./:<=>?@\\\\^~\u00a1-\u00bf\u2010-\u303f]+',
69
+ (r'[#&*+\-./:<=>?@\\^~\u00a1-\u00bf\u2010-\u303f]+',
72
70
  String.Atom), # atom, graphics
73
71
  (r'[A-Z_]\w*', Name.Variable),
74
- (u'\\s+|[\u2000-\u200f\ufff0-\ufffe\uffef]', Text),
72
+ (r'\s+|[\u2000-\u200f\ufff0-\ufffe\uffef]', Text),
75
73
  ],
76
74
  'nested-comment': [
77
75
  (r'\*/', Comment.Multiline, '#pop'),
@@ -108,19 +106,19 @@ class LogtalkLexer(RegexLexer):
108
106
  (r'\n', Text),
109
107
  (r'\s+', Text),
110
108
  # Numbers
111
- (r"0'.", Number),
109
+ (r"0'[\\]?.", Number),
112
110
  (r'0b[01]+', Number.Bin),
113
111
  (r'0o[0-7]+', Number.Oct),
114
112
  (r'0x[0-9a-fA-F]+', Number.Hex),
115
113
  (r'\d+\.?\d*((e|E)(\+|-)?\d+)?', Number),
116
114
  # Variables
117
- (r'([A-Z_]\w*)', Name.Variable),
115
+ (r'([A-Z_][a-zA-Z0-9_]*)', Name.Variable),
118
116
  # Event handlers
119
117
  (r'(after|before)(?=[(])', Keyword),
120
118
  # Message forwarding handler
121
119
  (r'forward(?=[(])', Keyword),
122
120
  # Execution-context methods
123
- (r'(parameter|this|se(lf|nder))(?=[(])', Keyword),
121
+ (r'(context|parameter|this|se(lf|nder))(?=[(])', Keyword),
124
122
  # Reflection
125
123
  (r'(current_predicate|predicate_property)(?=[(])', Keyword),
126
124
  # DCGs and term expansion
@@ -136,20 +134,23 @@ class LogtalkLexer(RegexLexer):
136
134
  # Events
137
135
  (r'(current_event|(abolish|define)_events)(?=[(])', Keyword),
138
136
  # Flags
139
- (r'(current|set)_logtalk_flag(?=[(])', Keyword),
137
+ (r'(create|current|set)_logtalk_flag(?=[(])', Keyword),
140
138
  # Compiling, loading, and library paths
141
- (r'logtalk_(compile|l(ibrary_path|oad|oad_context)|make)(?=[(])', Keyword),
139
+ (r'logtalk_(compile|l(ibrary_path|oad|oad_context)|make(_target_action)?)(?=[(])', Keyword),
142
140
  (r'\blogtalk_make\b', Keyword),
143
141
  # Database
144
142
  (r'(clause|retract(all)?)(?=[(])', Keyword),
145
143
  (r'a(bolish|ssert(a|z))(?=[(])', Keyword),
146
144
  # Control constructs
147
145
  (r'(ca(ll|tch)|throw)(?=[(])', Keyword),
148
- (r'(fa(il|lse)|true)\b', Keyword),
146
+ (r'(fa(il|lse)|true|(instantiation|system)_error)\b', Keyword),
147
+ (r'(type|domain|existence|permission|representation|evaluation|resource|syntax)_error(?=[(])', Keyword),
149
148
  # All solutions
150
149
  (r'((bag|set)of|f(ind|or)all)(?=[(])', Keyword),
151
- # Multi-threading meta-predicates
152
- (r'threaded(_(call|once|ignore|exit|peek|wait|notify))?(?=[(])', Keyword),
150
+ # Multi-threading predicates
151
+ (r'threaded(_(ca(ll|ncel)|once|ignore|exit|peek|wait|notify))?(?=[(])', Keyword),
152
+ # Engine predicates
153
+ (r'threaded_engine(_(create|destroy|self|next|next_reified|yield|post|fetch))?(?=[(])', Keyword),
153
154
  # Term unification
154
155
  (r'(subsumes_term|unify_with_occurs_check)(?=[(])', Keyword),
155
156
  # Term creation and decomposition
@@ -161,8 +162,7 @@ class LogtalkLexer(RegexLexer):
161
162
  # Other arithmetic functors
162
163
  (r'(cos|a(cos|sin|tan|tan2)|exp|log|s(in|qrt)|xor)(?=[(])', Keyword),
163
164
  # Term testing
164
- (r'(var|atom(ic)?|integer|float|c(allable|ompound)|n(onvar|umber)|'
165
- r'ground|acyclic_term)(?=[(])', Keyword),
165
+ (r'(var|atom(ic)?|integer|float|c(allable|ompound)|n(onvar|umber)|ground|acyclic_term)(?=[(])', Keyword),
166
166
  # Term comparison
167
167
  (r'compare(?=[(])', Keyword),
168
168
  # Stream selection and control
@@ -226,11 +226,11 @@ class LogtalkLexer(RegexLexer):
226
226
  # Existential quantifier
227
227
  (r'\^', Operator),
228
228
  # Strings
229
- (r'"(\\\\|\\"|[^"])*"', String),
230
- # Ponctuation
229
+ (r'"(\\\\|\\[^\\]|[^"\\])*"', String),
230
+ # Punctuation
231
231
  (r'[()\[\],.|]', Text),
232
232
  # Atoms
233
- (r"[a-z]\w*", Text),
233
+ (r"[a-z][a-zA-Z0-9_]*", Text),
234
234
  (r"'", String, 'quoted_atom'),
235
235
  ],
236
236
 
@@ -245,44 +245,43 @@ class LogtalkLexer(RegexLexer):
245
245
  'directive': [
246
246
  # Conditional compilation directives
247
247
  (r'(el)?if(?=[(])', Keyword, 'root'),
248
- (r'(e(lse|ndif))[.]', Keyword, 'root'),
248
+ (r'(e(lse|ndif))(?=[.])', Keyword, 'root'),
249
249
  # Entity directives
250
250
  (r'(category|object|protocol)(?=[(])', Keyword, 'entityrelations'),
251
- (r'(end_(category|object|protocol))[.]', Keyword, 'root'),
251
+ (r'(end_(category|object|protocol))(?=[.])', Keyword, 'root'),
252
252
  # Predicate scope directives
253
253
  (r'(public|protected|private)(?=[(])', Keyword, 'root'),
254
254
  # Other directives
255
255
  (r'e(n(coding|sure_loaded)|xport)(?=[(])', Keyword, 'root'),
256
256
  (r'in(clude|itialization|fo)(?=[(])', Keyword, 'root'),
257
- (r'(built_in|dynamic|synchronized|threaded)[.]', Keyword, 'root'),
258
- (r'(alias|d(ynamic|iscontiguous)|m(eta_(non_terminal|predicate)|ode|ultifile)|'
259
- r's(et_(logtalk|prolog)_flag|ynchronized))(?=[(])', Keyword, 'root'),
257
+ (r'(built_in|dynamic|synchronized|threaded)(?=[.])', Keyword, 'root'),
258
+ (r'(alias|d(ynamic|iscontiguous)|m(eta_(non_terminal|predicate)|ode|ultifile)|s(et_(logtalk|prolog)_flag|ynchronized))(?=[(])', Keyword, 'root'),
260
259
  (r'op(?=[(])', Keyword, 'root'),
261
260
  (r'(c(alls|oinductive)|module|reexport|use(s|_module))(?=[(])', Keyword, 'root'),
262
- (r'[a-z]\w*(?=[(])', Text, 'root'),
263
- (r'[a-z]\w*[.]', Text, 'root'),
261
+ (r'[a-z][a-zA-Z0-9_]*(?=[(])', Text, 'root'),
262
+ (r'[a-z][a-zA-Z0-9_]*(?=[.])', Text, 'root'),
264
263
  ],
265
264
 
266
265
  'entityrelations': [
267
266
  (r'(complements|extends|i(nstantiates|mp(lements|orts))|specializes)(?=[(])', Keyword),
268
267
  # Numbers
269
- (r"0'.", Number),
268
+ (r"0'[\\]?.", Number),
270
269
  (r'0b[01]+', Number.Bin),
271
270
  (r'0o[0-7]+', Number.Oct),
272
271
  (r'0x[0-9a-fA-F]+', Number.Hex),
273
272
  (r'\d+\.?\d*((e|E)(\+|-)?\d+)?', Number),
274
273
  # Variables
275
- (r'([A-Z_]\w*)', Name.Variable),
274
+ (r'([A-Z_][a-zA-Z0-9_]*)', Name.Variable),
276
275
  # Atoms
277
- (r"[a-z]\w*", Text),
276
+ (r"[a-z][a-zA-Z0-9_]*", Text),
278
277
  (r"'", String, 'quoted_atom'),
279
278
  # Strings
280
- (r'"(\\\\|\\"|[^"])*"', String),
279
+ (r'"(\\\\|\\[^\\]|[^"\\])*"', String),
281
280
  # End of entity-opening directive
282
281
  (r'([)]\.)', Text, 'root'),
283
282
  # Scope operator
284
283
  (r'(::)', Operator),
285
- # Ponctuation
284
+ # Punctuation
286
285
  (r'[()\[\],.|]', Text),
287
286
  # Comments
288
287
  (r'%.*?\n', Comment),
@@ -300,7 +299,7 @@ class LogtalkLexer(RegexLexer):
300
299
  return 1.0
301
300
  elif ':- category(' in text:
302
301
  return 1.0
303
- elif re.search('^:-\s[a-z]', text, re.M):
302
+ elif re.search(r'^:-\s[a-z]', text, re.M):
304
303
  return 0.9
305
304
  else:
306
305
  return 0.0
@@ -0,0 +1,182 @@
1
+ """
2
+ pygments.lexers.promql
3
+ ~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexer for Prometheus Query Language.
6
+
7
+ :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from pygments.lexer import RegexLexer, bygroups, default, words
12
+ from pygments.token import (
13
+ Comment,
14
+ Keyword,
15
+ Name,
16
+ Number,
17
+ Operator,
18
+ Punctuation,
19
+ String,
20
+ Whitespace,
21
+ )
22
+
23
+ __all__ = ["PromQLLexer"]
24
+
25
+
26
+ class PromQLLexer(RegexLexer):
27
+ """
28
+ For `PromQL <https://prometheus.io/docs/prometheus/latest/querying/basics/>`_ queries.
29
+
30
+ For details about the grammar see:
31
+ https://github.com/prometheus/prometheus/tree/master/promql/parser
32
+
33
+ .. versionadded: 2.7
34
+ """
35
+
36
+ name = "PromQL"
37
+ aliases = ["promql"]
38
+ filenames = ["*.promql"]
39
+
40
+ base_keywords = (
41
+ words(
42
+ (
43
+ "bool",
44
+ "by",
45
+ "group_left",
46
+ "group_right",
47
+ "ignoring",
48
+ "offset",
49
+ "on",
50
+ "without",
51
+ ),
52
+ suffix=r"\b",
53
+ ),
54
+ Keyword,
55
+ )
56
+
57
+ aggregator_keywords = (
58
+ words(
59
+ (
60
+ "sum",
61
+ "min",
62
+ "max",
63
+ "avg",
64
+ "group",
65
+ "stddev",
66
+ "stdvar",
67
+ "count",
68
+ "count_values",
69
+ "bottomk",
70
+ "topk",
71
+ "quantile",
72
+ ),
73
+ suffix=r"\b",
74
+ ),
75
+ Keyword,
76
+ )
77
+
78
+ function_keywords = (
79
+ words(
80
+ (
81
+ "abs",
82
+ "absent",
83
+ "absent_over_time",
84
+ "avg_over_time",
85
+ "ceil",
86
+ "changes",
87
+ "clamp_max",
88
+ "clamp_min",
89
+ "count_over_time",
90
+ "day_of_month",
91
+ "day_of_week",
92
+ "days_in_month",
93
+ "delta",
94
+ "deriv",
95
+ "exp",
96
+ "floor",
97
+ "histogram_quantile",
98
+ "holt_winters",
99
+ "hour",
100
+ "idelta",
101
+ "increase",
102
+ "irate",
103
+ "label_join",
104
+ "label_replace",
105
+ "ln",
106
+ "log10",
107
+ "log2",
108
+ "max_over_time",
109
+ "min_over_time",
110
+ "minute",
111
+ "month",
112
+ "predict_linear",
113
+ "quantile_over_time",
114
+ "rate",
115
+ "resets",
116
+ "round",
117
+ "scalar",
118
+ "sort",
119
+ "sort_desc",
120
+ "sqrt",
121
+ "stddev_over_time",
122
+ "stdvar_over_time",
123
+ "sum_over_time",
124
+ "time",
125
+ "timestamp",
126
+ "vector",
127
+ "year",
128
+ ),
129
+ suffix=r"\b",
130
+ ),
131
+ Keyword.Reserved,
132
+ )
133
+
134
+ tokens = {
135
+ "root": [
136
+ (r"\n", Whitespace),
137
+ (r"\s+", Whitespace),
138
+ (r",", Punctuation),
139
+ # Keywords
140
+ base_keywords,
141
+ aggregator_keywords,
142
+ function_keywords,
143
+ # Offsets
144
+ (r"[1-9][0-9]*[smhdwy]", String),
145
+ # Numbers
146
+ (r"-?[0-9]+\.[0-9]+", Number.Float),
147
+ (r"-?[0-9]+", Number.Integer),
148
+ # Comments
149
+ (r"#.*?$", Comment.Single),
150
+ # Operators
151
+ (r"(\+|\-|\*|\/|\%|\^)", Operator),
152
+ (r"==|!=|>=|<=|<|>", Operator),
153
+ (r"and|or|unless", Operator.Word),
154
+ # Metrics
155
+ (r"[_a-zA-Z][a-zA-Z0-9_]+", Name.Variable),
156
+ # Params
157
+ (r'(["\'])(.*?)(["\'])', bygroups(Punctuation, String, Punctuation)),
158
+ # Other states
159
+ (r"\(", Operator, "function"),
160
+ (r"\)", Operator),
161
+ (r"\{", Punctuation, "labels"),
162
+ (r"\[", Punctuation, "range"),
163
+ ],
164
+ "labels": [
165
+ (r"\}", Punctuation, "#pop"),
166
+ (r"\n", Whitespace),
167
+ (r"\s+", Whitespace),
168
+ (r",", Punctuation),
169
+ (r'([_a-zA-Z][a-zA-Z0-9_]*?)(\s*?)(=~|!=|=|~!)(\s*?)(")(.*?)(")',
170
+ bygroups(Name.Label, Whitespace, Operator, Whitespace,
171
+ Punctuation, String, Punctuation)),
172
+ ],
173
+ "range": [
174
+ (r"\]", Punctuation, "#pop"),
175
+ (r"[1-9][0-9]*[smhdwy]", String),
176
+ ],
177
+ "function": [
178
+ (r"\)", Operator, "#pop"),
179
+ (r"\(", Operator, "#push"),
180
+ default("#pop"),
181
+ ],
182
+ }
@@ -1,11 +1,10 @@
1
- # -*- coding: utf-8 -*-
2
1
  """
3
2
  pygments.lexers.python
4
3
  ~~~~~~~~~~~~~~~~~~~~~~
5
4
 
6
5
  Lexers for Python and related 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
 
@@ -19,21 +18,387 @@ from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
19
18
  from pygments import unistring as uni
20
19
 
21
20
  __all__ = ['PythonLexer', 'PythonConsoleLexer', 'PythonTracebackLexer',
22
- 'Python3Lexer', 'Python3TracebackLexer', 'CythonLexer',
23
- 'DgLexer', 'NumPyLexer']
21
+ 'Python2Lexer', 'Python2TracebackLexer',
22
+ 'CythonLexer', 'DgLexer', 'NumPyLexer']
24
23
 
25
24
  line_re = re.compile('.*?\n')
26
25
 
27
26
 
28
27
  class PythonLexer(RegexLexer):
29
28
  """
30
- For `Python <http://www.python.org>`_ source code.
29
+ For `Python <http://www.python.org>`_ source code (version 3.x).
30
+
31
+ .. versionadded:: 0.10
32
+
33
+ .. versionchanged:: 2.5
34
+ This is now the default ``PythonLexer``. It is still available as the
35
+ alias ``Python3Lexer``.
31
36
  """
32
37
 
33
38
  name = 'Python'
34
- aliases = ['python', 'py', 'sage']
35
- filenames = ['*.py', '*.pyw', '*.sc', 'SConstruct', 'SConscript', '*.tac', '*.sage']
36
- mimetypes = ['text/x-python', 'application/x-python']
39
+ aliases = ['python', 'py', 'sage', 'python3', 'py3']
40
+ filenames = [
41
+ '*.py',
42
+ '*.pyw',
43
+ # Jython
44
+ '*.jy',
45
+ # Sage
46
+ '*.sage',
47
+ # SCons
48
+ '*.sc',
49
+ 'SConstruct',
50
+ 'SConscript',
51
+ # Skylark/Starlark (used by Bazel, Buck, and Pants)
52
+ '*.bzl',
53
+ 'BUCK',
54
+ 'BUILD',
55
+ 'BUILD.bazel',
56
+ 'WORKSPACE',
57
+ # Twisted Application infrastructure
58
+ '*.tac',
59
+ ]
60
+ mimetypes = ['text/x-python', 'application/x-python',
61
+ 'text/x-python3', 'application/x-python3']
62
+
63
+ flags = re.MULTILINE | re.UNICODE
64
+
65
+ uni_name = "[%s][%s]*" % (uni.xid_start, uni.xid_continue)
66
+
67
+ def innerstring_rules(ttype):
68
+ return [
69
+ # the old style '%s' % (...) string formatting (still valid in Py3)
70
+ (r'%(\(\w+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?'
71
+ '[hlL]?[E-GXc-giorsaux%]', String.Interpol),
72
+ # the new style '{}'.format(...) string formatting
73
+ (r'\{'
74
+ r'((\w+)((\.\w+)|(\[[^\]]+\]))*)?' # field name
75
+ r'(\![sra])?' # conversion
76
+ r'(\:(.?[<>=\^])?[-+ ]?#?0?(\d+)?,?(\.\d+)?[E-GXb-gnosx%]?)?'
77
+ r'\}', String.Interpol),
78
+
79
+ # backslashes, quotes and formatting signs must be parsed one at a time
80
+ (r'[^\\\'"%{\n]+', ttype),
81
+ (r'[\'"\\]', ttype),
82
+ # unhandled string formatting sign
83
+ (r'%|(\{{1,2})', ttype)
84
+ # newlines are an error (use "nl" state)
85
+ ]
86
+
87
+ def fstring_rules(ttype):
88
+ return [
89
+ # Assuming that a '}' is the closing brace after format specifier.
90
+ # Sadly, this means that we won't detect syntax error. But it's
91
+ # more important to parse correct syntax correctly, than to
92
+ # highlight invalid syntax.
93
+ (r'\}', String.Interpol),
94
+ (r'\{', String.Interpol, 'expr-inside-fstring'),
95
+ # backslashes, quotes and formatting signs must be parsed one at a time
96
+ (r'[^\\\'"{}\n]+', ttype),
97
+ (r'[\'"\\]', ttype),
98
+ # newlines are an error (use "nl" state)
99
+ ]
100
+
101
+ tokens = {
102
+ 'root': [
103
+ (r'\n', Text),
104
+ (r'^(\s*)([rRuUbB]{,2})("""(?:.|\n)*?""")',
105
+ bygroups(Text, String.Affix, String.Doc)),
106
+ (r"^(\s*)([rRuUbB]{,2})('''(?:.|\n)*?''')",
107
+ bygroups(Text, String.Affix, String.Doc)),
108
+ (r'\A#!.+$', Comment.Hashbang),
109
+ (r'#.*$', Comment.Single),
110
+ (r'\\\n', Text),
111
+ (r'\\', Text),
112
+ include('keywords'),
113
+ (r'(def)((?:\s|\\\s)+)', bygroups(Keyword, Text), 'funcname'),
114
+ (r'(class)((?:\s|\\\s)+)', bygroups(Keyword, Text), 'classname'),
115
+ (r'(from)((?:\s|\\\s)+)', bygroups(Keyword.Namespace, Text),
116
+ 'fromimport'),
117
+ (r'(import)((?:\s|\\\s)+)', bygroups(Keyword.Namespace, Text),
118
+ 'import'),
119
+ include('expr'),
120
+ ],
121
+ 'expr': [
122
+ # raw f-strings
123
+ ('(?i)(rf|fr)(""")',
124
+ bygroups(String.Affix, String.Double),
125
+ combined('rfstringescape', 'tdqf')),
126
+ ("(?i)(rf|fr)(''')",
127
+ bygroups(String.Affix, String.Single),
128
+ combined('rfstringescape', 'tsqf')),
129
+ ('(?i)(rf|fr)(")',
130
+ bygroups(String.Affix, String.Double),
131
+ combined('rfstringescape', 'dqf')),
132
+ ("(?i)(rf|fr)(')",
133
+ bygroups(String.Affix, String.Single),
134
+ combined('rfstringescape', 'sqf')),
135
+ # non-raw f-strings
136
+ ('([fF])(""")', bygroups(String.Affix, String.Double),
137
+ combined('fstringescape', 'tdqf')),
138
+ ("([fF])(''')", bygroups(String.Affix, String.Single),
139
+ combined('fstringescape', 'tsqf')),
140
+ ('([fF])(")', bygroups(String.Affix, String.Double),
141
+ combined('fstringescape', 'dqf')),
142
+ ("([fF])(')", bygroups(String.Affix, String.Single),
143
+ combined('fstringescape', 'sqf')),
144
+ # raw strings
145
+ ('(?i)(rb|br|r)(""")',
146
+ bygroups(String.Affix, String.Double), 'tdqs'),
147
+ ("(?i)(rb|br|r)(''')",
148
+ bygroups(String.Affix, String.Single), 'tsqs'),
149
+ ('(?i)(rb|br|r)(")',
150
+ bygroups(String.Affix, String.Double), 'dqs'),
151
+ ("(?i)(rb|br|r)(')",
152
+ bygroups(String.Affix, String.Single), 'sqs'),
153
+ # non-raw strings
154
+ ('([uUbB]?)(""")', bygroups(String.Affix, String.Double),
155
+ combined('stringescape', 'tdqs')),
156
+ ("([uUbB]?)(''')", bygroups(String.Affix, String.Single),
157
+ combined('stringescape', 'tsqs')),
158
+ ('([uUbB]?)(")', bygroups(String.Affix, String.Double),
159
+ combined('stringescape', 'dqs')),
160
+ ("([uUbB]?)(')", bygroups(String.Affix, String.Single),
161
+ combined('stringescape', 'sqs')),
162
+ (r'[^\S\n]+', Text),
163
+ (r'!=|==|<<|>>|:=|[-~+/*%=<>&^|.]', Operator),
164
+ (r'[]{}:(),;[]', Punctuation),
165
+ (r'(in|is|and|or|not)\b', Operator.Word),
166
+ include('expr-keywords'),
167
+ include('builtins'),
168
+ include('magicfuncs'),
169
+ include('magicvars'),
170
+ include('name'),
171
+ include('numbers'),
172
+ ],
173
+ 'expr-inside-fstring': [
174
+ (r'[{([]', Punctuation, 'expr-inside-fstring-inner'),
175
+ # without format specifier
176
+ (r'(=\s*)?' # debug (https://bugs.python.org/issue36817)
177
+ r'(\![sraf])?' # conversion
178
+ r'\}', String.Interpol, '#pop'),
179
+ # with format specifier
180
+ # we'll catch the remaining '}' in the outer scope
181
+ (r'(=\s*)?' # debug (https://bugs.python.org/issue36817)
182
+ r'(\![sraf])?' # conversion
183
+ r':', String.Interpol, '#pop'),
184
+ (r'\s+', Text), # allow new lines
185
+ include('expr'),
186
+ ],
187
+ 'expr-inside-fstring-inner': [
188
+ (r'[{([]', Punctuation, 'expr-inside-fstring-inner'),
189
+ (r'[])}]', Punctuation, '#pop'),
190
+ (r'\s+', Text), # allow new lines
191
+ include('expr'),
192
+ ],
193
+ 'expr-keywords': [
194
+ # Based on https://docs.python.org/3/reference/expressions.html
195
+ (words((
196
+ 'async for', 'await', 'else', 'for', 'if', 'lambda',
197
+ 'yield', 'yield from'), suffix=r'\b'),
198
+ Keyword),
199
+ (words(('True', 'False', 'None'), suffix=r'\b'), Keyword.Constant),
200
+ ],
201
+ 'keywords': [
202
+ (words((
203
+ 'assert', 'async', 'await', 'break', 'continue', 'del', 'elif',
204
+ 'else', 'except', 'finally', 'for', 'global', 'if', 'lambda',
205
+ 'pass', 'raise', 'nonlocal', 'return', 'try', 'while', 'yield',
206
+ 'yield from', 'as', 'with'), suffix=r'\b'),
207
+ Keyword),
208
+ (words(('True', 'False', 'None'), suffix=r'\b'), Keyword.Constant),
209
+ ],
210
+ 'builtins': [
211
+ (words((
212
+ '__import__', 'abs', 'all', 'any', 'bin', 'bool', 'bytearray',
213
+ 'bytes', 'chr', 'classmethod', 'compile', 'complex',
214
+ 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'filter',
215
+ 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr',
216
+ 'hash', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass',
217
+ 'iter', 'len', 'list', 'locals', 'map', 'max', 'memoryview',
218
+ 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print',
219
+ 'property', 'range', 'repr', 'reversed', 'round', 'set', 'setattr',
220
+ 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple',
221
+ 'type', 'vars', 'zip'), prefix=r'(?<!\.)', suffix=r'\b'),
222
+ Name.Builtin),
223
+ (r'(?<!\.)(self|Ellipsis|NotImplemented|cls)\b', Name.Builtin.Pseudo),
224
+ (words((
225
+ 'ArithmeticError', 'AssertionError', 'AttributeError',
226
+ 'BaseException', 'BufferError', 'BytesWarning', 'DeprecationWarning',
227
+ 'EOFError', 'EnvironmentError', 'Exception', 'FloatingPointError',
228
+ 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError',
229
+ 'ImportWarning', 'IndentationError', 'IndexError', 'KeyError',
230
+ 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'NameError',
231
+ 'NotImplementedError', 'OSError', 'OverflowError',
232
+ 'PendingDeprecationWarning', 'ReferenceError', 'ResourceWarning',
233
+ 'RuntimeError', 'RuntimeWarning', 'StopIteration',
234
+ 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit',
235
+ 'TabError', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError',
236
+ 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError',
237
+ 'UnicodeWarning', 'UserWarning', 'ValueError', 'VMSError',
238
+ 'Warning', 'WindowsError', 'ZeroDivisionError',
239
+ # new builtin exceptions from PEP 3151
240
+ 'BlockingIOError', 'ChildProcessError', 'ConnectionError',
241
+ 'BrokenPipeError', 'ConnectionAbortedError', 'ConnectionRefusedError',
242
+ 'ConnectionResetError', 'FileExistsError', 'FileNotFoundError',
243
+ 'InterruptedError', 'IsADirectoryError', 'NotADirectoryError',
244
+ 'PermissionError', 'ProcessLookupError', 'TimeoutError',
245
+ # others new in Python 3
246
+ 'StopAsyncIteration', 'ModuleNotFoundError', 'RecursionError'),
247
+ prefix=r'(?<!\.)', suffix=r'\b'),
248
+ Name.Exception),
249
+ ],
250
+ 'magicfuncs': [
251
+ (words((
252
+ '__abs__', '__add__', '__aenter__', '__aexit__', '__aiter__',
253
+ '__and__', '__anext__', '__await__', '__bool__', '__bytes__',
254
+ '__call__', '__complex__', '__contains__', '__del__', '__delattr__',
255
+ '__delete__', '__delitem__', '__dir__', '__divmod__', '__enter__',
256
+ '__eq__', '__exit__', '__float__', '__floordiv__', '__format__',
257
+ '__ge__', '__get__', '__getattr__', '__getattribute__',
258
+ '__getitem__', '__gt__', '__hash__', '__iadd__', '__iand__',
259
+ '__ifloordiv__', '__ilshift__', '__imatmul__', '__imod__',
260
+ '__imul__', '__index__', '__init__', '__instancecheck__',
261
+ '__int__', '__invert__', '__ior__', '__ipow__', '__irshift__',
262
+ '__isub__', '__iter__', '__itruediv__', '__ixor__', '__le__',
263
+ '__len__', '__length_hint__', '__lshift__', '__lt__', '__matmul__',
264
+ '__missing__', '__mod__', '__mul__', '__ne__', '__neg__',
265
+ '__new__', '__next__', '__or__', '__pos__', '__pow__',
266
+ '__prepare__', '__radd__', '__rand__', '__rdivmod__', '__repr__',
267
+ '__reversed__', '__rfloordiv__', '__rlshift__', '__rmatmul__',
268
+ '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__',
269
+ '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__',
270
+ '__rxor__', '__set__', '__setattr__', '__setitem__', '__str__',
271
+ '__sub__', '__subclasscheck__', '__truediv__',
272
+ '__xor__'), suffix=r'\b'),
273
+ Name.Function.Magic),
274
+ ],
275
+ 'magicvars': [
276
+ (words((
277
+ '__annotations__', '__bases__', '__class__', '__closure__',
278
+ '__code__', '__defaults__', '__dict__', '__doc__', '__file__',
279
+ '__func__', '__globals__', '__kwdefaults__', '__module__',
280
+ '__mro__', '__name__', '__objclass__', '__qualname__',
281
+ '__self__', '__slots__', '__weakref__'), suffix=r'\b'),
282
+ Name.Variable.Magic),
283
+ ],
284
+ 'numbers': [
285
+ (r'(\d(?:_?\d)*\.(?:\d(?:_?\d)*)?|(?:\d(?:_?\d)*)?\.\d(?:_?\d)*)'
286
+ r'([eE][+-]?\d(?:_?\d)*)?', Number.Float),
287
+ (r'\d(?:_?\d)*[eE][+-]?\d(?:_?\d)*j?', Number.Float),
288
+ (r'0[oO](?:_?[0-7])+', Number.Oct),
289
+ (r'0[bB](?:_?[01])+', Number.Bin),
290
+ (r'0[xX](?:_?[a-fA-F0-9])+', Number.Hex),
291
+ (r'\d(?:_?\d)*', Number.Integer),
292
+ ],
293
+ 'name': [
294
+ (r'@' + uni_name, Name.Decorator),
295
+ (r'@', Operator), # new matrix multiplication operator
296
+ (uni_name, Name),
297
+ ],
298
+ 'funcname': [
299
+ include('magicfuncs'),
300
+ (uni_name, Name.Function, '#pop'),
301
+ default('#pop'),
302
+ ],
303
+ 'classname': [
304
+ (uni_name, Name.Class, '#pop'),
305
+ ],
306
+ 'import': [
307
+ (r'(\s+)(as)(\s+)', bygroups(Text, Keyword, Text)),
308
+ (r'\.', Name.Namespace),
309
+ (uni_name, Name.Namespace),
310
+ (r'(\s*)(,)(\s*)', bygroups(Text, Operator, Text)),
311
+ default('#pop') # all else: go back
312
+ ],
313
+ 'fromimport': [
314
+ (r'(\s+)(import)\b', bygroups(Text, Keyword.Namespace), '#pop'),
315
+ (r'\.', Name.Namespace),
316
+ # if None occurs here, it's "raise x from None", since None can
317
+ # never be a module name
318
+ (r'None\b', Name.Builtin.Pseudo, '#pop'),
319
+ (uni_name, Name.Namespace),
320
+ default('#pop'),
321
+ ],
322
+ 'rfstringescape': [
323
+ (r'\{\{', String.Escape),
324
+ (r'\}\}', String.Escape),
325
+ ],
326
+ 'fstringescape': [
327
+ include('rfstringescape'),
328
+ include('stringescape'),
329
+ ],
330
+ 'stringescape': [
331
+ (r'\\([\\abfnrtv"\']|\n|N\{.*?\}|u[a-fA-F0-9]{4}|'
332
+ r'U[a-fA-F0-9]{8}|x[a-fA-F0-9]{2}|[0-7]{1,3})', String.Escape)
333
+ ],
334
+ 'fstrings-single': fstring_rules(String.Single),
335
+ 'fstrings-double': fstring_rules(String.Double),
336
+ 'strings-single': innerstring_rules(String.Single),
337
+ 'strings-double': innerstring_rules(String.Double),
338
+ 'dqf': [
339
+ (r'"', String.Double, '#pop'),
340
+ (r'\\\\|\\"|\\\n', String.Escape), # included here for raw strings
341
+ include('fstrings-double')
342
+ ],
343
+ 'sqf': [
344
+ (r"'", String.Single, '#pop'),
345
+ (r"\\\\|\\'|\\\n", String.Escape), # included here for raw strings
346
+ include('fstrings-single')
347
+ ],
348
+ 'dqs': [
349
+ (r'"', String.Double, '#pop'),
350
+ (r'\\\\|\\"|\\\n', String.Escape), # included here for raw strings
351
+ include('strings-double')
352
+ ],
353
+ 'sqs': [
354
+ (r"'", String.Single, '#pop'),
355
+ (r"\\\\|\\'|\\\n", String.Escape), # included here for raw strings
356
+ include('strings-single')
357
+ ],
358
+ 'tdqf': [
359
+ (r'"""', String.Double, '#pop'),
360
+ include('fstrings-double'),
361
+ (r'\n', String.Double)
362
+ ],
363
+ 'tsqf': [
364
+ (r"'''", String.Single, '#pop'),
365
+ include('fstrings-single'),
366
+ (r'\n', String.Single)
367
+ ],
368
+ 'tdqs': [
369
+ (r'"""', String.Double, '#pop'),
370
+ include('strings-double'),
371
+ (r'\n', String.Double)
372
+ ],
373
+ 'tsqs': [
374
+ (r"'''", String.Single, '#pop'),
375
+ include('strings-single'),
376
+ (r'\n', String.Single)
377
+ ],
378
+ }
379
+
380
+ def analyse_text(text):
381
+ return shebang_matches(text, r'pythonw?(3(\.\d)?)?') or \
382
+ 'import ' in text[:1000]
383
+
384
+
385
+ Python3Lexer = PythonLexer
386
+
387
+
388
+ class Python2Lexer(RegexLexer):
389
+ """
390
+ For `Python 2.x <http://www.python.org>`_ source code.
391
+
392
+ .. versionchanged:: 2.5
393
+ This class has been renamed from ``PythonLexer``. ``PythonLexer`` now
394
+ refers to the Python 3 variant. File name patterns like ``*.py`` have
395
+ been moved to Python 3 as well.
396
+ """
397
+
398
+ name = 'Python 2.x'
399
+ aliases = ['python2', 'py2']
400
+ filenames = [] # now taken over by PythonLexer (3.x)
401
+ mimetypes = ['text/x-python2', 'application/x-python2']
37
402
 
38
403
  def innerstring_rules(ttype):
39
404
  return [
@@ -124,15 +489,15 @@ class PythonLexer(RegexLexer):
124
489
  'Exception', 'FloatingPointError', 'FutureWarning', 'GeneratorExit',
125
490
  'IOError', 'ImportError', 'ImportWarning', 'IndentationError',
126
491
  'IndexError', 'KeyError', 'KeyboardInterrupt', 'LookupError',
127
- 'MemoryError', 'NameError', 'NotImplemented', 'NotImplementedError',
128
- 'OSError', 'OverflowError', 'OverflowWarning', 'PendingDeprecationWarning',
129
- 'ReferenceError', 'RuntimeError', 'RuntimeWarning', 'StandardError',
130
- 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError',
131
- 'SystemExit', 'TabError', 'TypeError', 'UnboundLocalError',
132
- 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError',
133
- 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning',
134
- 'ValueError', 'VMSError', 'Warning', 'WindowsError',
135
- 'ZeroDivisionError'), prefix=r'(?<!\.)', suffix=r'\b'),
492
+ 'MemoryError', 'NameError',
493
+ 'NotImplementedError', 'OSError', 'OverflowError', 'OverflowWarning',
494
+ 'PendingDeprecationWarning', 'ReferenceError',
495
+ 'RuntimeError', 'RuntimeWarning', 'StandardError', 'StopIteration',
496
+ 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit',
497
+ 'TabError', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError',
498
+ 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError',
499
+ 'UnicodeWarning', 'UserWarning', 'ValueError', 'VMSError', 'Warning',
500
+ 'WindowsError', 'ZeroDivisionError'), prefix=r'(?<!\.)', suffix=r'\b'),
136
501
  Name.Exception),
137
502
  ],
138
503
  'magicfuncs': [
@@ -180,15 +545,15 @@ class PythonLexer(RegexLexer):
180
545
  ],
181
546
  'name': [
182
547
  (r'@[\w.]+', Name.Decorator),
183
- ('[a-zA-Z_]\w*', Name),
548
+ (r'[a-zA-Z_]\w*', Name),
184
549
  ],
185
550
  'funcname': [
186
551
  include('magicfuncs'),
187
- ('[a-zA-Z_]\w*', Name.Function, '#pop'),
552
+ (r'[a-zA-Z_]\w*', Name.Function, '#pop'),
188
553
  default('#pop'),
189
554
  ],
190
555
  'classname': [
191
- ('[a-zA-Z_]\w*', Name.Class, '#pop')
556
+ (r'[a-zA-Z_]\w*', Name.Class, '#pop')
192
557
  ],
193
558
  'import': [
194
559
  (r'(?:[ \t]|\\\n)+', Text),
@@ -238,166 +603,7 @@ class PythonLexer(RegexLexer):
238
603
  }
239
604
 
240
605
  def analyse_text(text):
241
- return shebang_matches(text, r'pythonw?(2(\.\d)?)?') or \
242
- 'import ' in text[:1000]
243
-
244
-
245
- class Python3Lexer(RegexLexer):
246
- """
247
- For `Python <http://www.python.org>`_ source code (version 3.0).
248
-
249
- .. versionadded:: 0.10
250
- """
251
-
252
- name = 'Python 3'
253
- aliases = ['python3', 'py3']
254
- filenames = [] # Nothing until Python 3 gets widespread
255
- mimetypes = ['text/x-python3', 'application/x-python3']
256
-
257
- flags = re.MULTILINE | re.UNICODE
258
-
259
- uni_name = "[%s][%s]*" % (uni.xid_start, uni.xid_continue)
260
-
261
- def innerstring_rules(ttype):
262
- return [
263
- # the old style '%s' % (...) string formatting (still valid in Py3)
264
- (r'%(\(\w+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?'
265
- '[hlL]?[E-GXc-giorsux%]', String.Interpol),
266
- # the new style '{}'.format(...) string formatting
267
- (r'\{'
268
- '((\w+)((\.\w+)|(\[[^\]]+\]))*)?' # field name
269
- '(\![sra])?' # conversion
270
- '(\:(.?[<>=\^])?[-+ ]?#?0?(\d+)?,?(\.\d+)?[E-GXb-gnosx%]?)?'
271
- '\}', String.Interpol),
272
-
273
- # backslashes, quotes and formatting signs must be parsed one at a time
274
- (r'[^\\\'"%{\n]+', ttype),
275
- (r'[\'"\\]', ttype),
276
- # unhandled string formatting sign
277
- (r'%|(\{{1,2})', ttype)
278
- # newlines are an error (use "nl" state)
279
- ]
280
-
281
- tokens = PythonLexer.tokens.copy()
282
- tokens['keywords'] = [
283
- (words((
284
- 'assert', 'async', 'await', 'break', 'continue', 'del', 'elif',
285
- 'else', 'except', 'finally', 'for', 'global', 'if', 'lambda', 'pass',
286
- 'raise', 'nonlocal', 'return', 'try', 'while', 'yield', 'yield from',
287
- 'as', 'with'), suffix=r'\b'),
288
- Keyword),
289
- (words((
290
- 'True', 'False', 'None'), suffix=r'\b'),
291
- Keyword.Constant),
292
- ]
293
- tokens['builtins'] = [
294
- (words((
295
- '__import__', 'abs', 'all', 'any', 'bin', 'bool', 'bytearray', 'bytes',
296
- 'chr', 'classmethod', 'cmp', 'compile', 'complex', 'delattr', 'dict',
297
- 'dir', 'divmod', 'enumerate', 'eval', 'filter', 'float', 'format',
298
- 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'hex', 'id',
299
- 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'list',
300
- 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct',
301
- 'open', 'ord', 'pow', 'print', 'property', 'range', 'repr', 'reversed',
302
- 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str',
303
- 'sum', 'super', 'tuple', 'type', 'vars', 'zip'), prefix=r'(?<!\.)',
304
- suffix=r'\b'),
305
- Name.Builtin),
306
- (r'(?<!\.)(self|Ellipsis|NotImplemented|cls)\b', Name.Builtin.Pseudo),
307
- (words((
308
- 'ArithmeticError', 'AssertionError', 'AttributeError',
309
- 'BaseException', 'BufferError', 'BytesWarning', 'DeprecationWarning',
310
- 'EOFError', 'EnvironmentError', 'Exception', 'FloatingPointError',
311
- 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError',
312
- 'ImportWarning', 'IndentationError', 'IndexError', 'KeyError',
313
- 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'NameError',
314
- 'NotImplementedError', 'OSError', 'OverflowError',
315
- 'PendingDeprecationWarning', 'ReferenceError', 'ResourceWarning',
316
- 'RuntimeError', 'RuntimeWarning', 'StopIteration',
317
- 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError',
318
- 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError',
319
- 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError',
320
- 'UnicodeWarning', 'UserWarning', 'ValueError', 'VMSError', 'Warning',
321
- 'WindowsError', 'ZeroDivisionError',
322
- # new builtin exceptions from PEP 3151
323
- 'BlockingIOError', 'ChildProcessError', 'ConnectionError',
324
- 'BrokenPipeError', 'ConnectionAbortedError', 'ConnectionRefusedError',
325
- 'ConnectionResetError', 'FileExistsError', 'FileNotFoundError',
326
- 'InterruptedError', 'IsADirectoryError', 'NotADirectoryError',
327
- 'PermissionError', 'ProcessLookupError', 'TimeoutError'),
328
- prefix=r'(?<!\.)', suffix=r'\b'),
329
- Name.Exception),
330
- ]
331
- tokens['magicfuncs'] = [
332
- (words((
333
- '__abs__', '__add__', '__aenter__', '__aexit__', '__aiter__', '__and__',
334
- '__anext__', '__await__', '__bool__', '__bytes__', '__call__',
335
- '__complex__', '__contains__', '__del__', '__delattr__', '__delete__',
336
- '__delitem__', '__dir__', '__divmod__', '__enter__', '__eq__', '__exit__',
337
- '__float__', '__floordiv__', '__format__', '__ge__', '__get__',
338
- '__getattr__', '__getattribute__', '__getitem__', '__gt__', '__hash__',
339
- '__iadd__', '__iand__', '__ifloordiv__', '__ilshift__', '__imatmul__',
340
- '__imod__', '__import__', '__imul__', '__index__', '__init__',
341
- '__instancecheck__', '__int__', '__invert__', '__ior__', '__ipow__',
342
- '__irshift__', '__isub__', '__iter__', '__itruediv__', '__ixor__',
343
- '__le__', '__len__', '__length_hint__', '__lshift__', '__lt__',
344
- '__matmul__', '__missing__', '__mod__', '__mul__', '__ne__', '__neg__',
345
- '__new__', '__next__', '__or__', '__pos__', '__pow__', '__prepare__',
346
- '__radd__', '__rand__', '__rdivmod__', '__repr__', '__reversed__',
347
- '__rfloordiv__', '__rlshift__', '__rmatmul__', '__rmod__', '__rmul__',
348
- '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__',
349
- '__rsub__', '__rtruediv__', '__rxor__', '__set__', '__setattr__',
350
- '__setitem__', '__str__', '__sub__', '__subclasscheck__', '__truediv__',
351
- '__xor__'), suffix=r'\b'),
352
- Name.Function.Magic),
353
- ]
354
- tokens['magicvars'] = [
355
- (words((
356
- '__annotations__', '__bases__', '__class__', '__closure__', '__code__',
357
- '__defaults__', '__dict__', '__doc__', '__file__', '__func__',
358
- '__globals__', '__kwdefaults__', '__module__', '__mro__', '__name__',
359
- '__objclass__', '__qualname__', '__self__', '__slots__', '__weakref__'),
360
- suffix=r'\b'),
361
- Name.Variable.Magic),
362
- ]
363
- tokens['numbers'] = [
364
- (r'(\d+\.\d*|\d*\.\d+)([eE][+-]?[0-9]+)?', Number.Float),
365
- (r'\d+[eE][+-]?[0-9]+j?', Number.Float),
366
- (r'0[oO][0-7]+', Number.Oct),
367
- (r'0[bB][01]+', Number.Bin),
368
- (r'0[xX][a-fA-F0-9]+', Number.Hex),
369
- (r'\d+', Number.Integer)
370
- ]
371
- tokens['backtick'] = []
372
- tokens['name'] = [
373
- (r'@\w+', Name.Decorator),
374
- (r'@', Operator), # new matrix multiplication operator
375
- (uni_name, Name),
376
- ]
377
- tokens['funcname'] = [
378
- (uni_name, Name.Function, '#pop')
379
- ]
380
- tokens['classname'] = [
381
- (uni_name, Name.Class, '#pop')
382
- ]
383
- tokens['import'] = [
384
- (r'(\s+)(as)(\s+)', bygroups(Text, Keyword, Text)),
385
- (r'\.', Name.Namespace),
386
- (uni_name, Name.Namespace),
387
- (r'(\s*)(,)(\s*)', bygroups(Text, Operator, Text)),
388
- default('#pop') # all else: go back
389
- ]
390
- tokens['fromimport'] = [
391
- (r'(\s+)(import)\b', bygroups(Text, Keyword), '#pop'),
392
- (r'\.', Name.Namespace),
393
- (uni_name, Name.Namespace),
394
- default('#pop'),
395
- ]
396
- tokens['strings-single'] = innerstring_rules(String.Single)
397
- tokens['strings-double'] = innerstring_rules(String.Double)
398
-
399
- def analyse_text(text):
400
- return shebang_matches(text, r'pythonw?3(\.\d)?')
606
+ return shebang_matches(text, r'pythonw?2(\.\d)?')
401
607
 
402
608
 
403
609
  class PythonConsoleLexer(Lexer):
@@ -417,25 +623,27 @@ class PythonConsoleLexer(Lexer):
417
623
  Additional options:
418
624
 
419
625
  `python3`
420
- Use Python 3 lexer for code. Default is ``False``.
626
+ Use Python 3 lexer for code. Default is ``True``.
421
627
 
422
628
  .. versionadded:: 1.0
629
+ .. versionchanged:: 2.5
630
+ Now defaults to ``True``.
423
631
  """
424
632
  name = 'Python console session'
425
633
  aliases = ['pycon']
426
634
  mimetypes = ['text/x-python-doctest']
427
635
 
428
636
  def __init__(self, **options):
429
- self.python3 = get_bool_opt(options, 'python3', False)
637
+ self.python3 = get_bool_opt(options, 'python3', True)
430
638
  Lexer.__init__(self, **options)
431
639
 
432
640
  def get_tokens_unprocessed(self, text):
433
641
  if self.python3:
434
- pylexer = Python3Lexer(**self.options)
435
- tblexer = Python3TracebackLexer(**self.options)
436
- else:
437
642
  pylexer = PythonLexer(**self.options)
438
643
  tblexer = PythonTracebackLexer(**self.options)
644
+ else:
645
+ pylexer = Python2Lexer(**self.options)
646
+ tblexer = Python2TracebackLexer(**self.options)
439
647
 
440
648
  curcode = ''
441
649
  insertions = []
@@ -444,27 +652,26 @@ class PythonConsoleLexer(Lexer):
444
652
  tb = 0
445
653
  for match in line_re.finditer(text):
446
654
  line = match.group()
447
- if line.startswith(u'>>> ') or line.startswith(u'... '):
655
+ if line.startswith('>>> ') or line.startswith('... '):
448
656
  tb = 0
449
657
  insertions.append((len(curcode),
450
658
  [(0, Generic.Prompt, line[:4])]))
451
659
  curcode += line[4:]
452
- elif line.rstrip() == u'...' and not tb:
660
+ elif line.rstrip() == '...' and not tb:
453
661
  # only a new >>> prompt can end an exception block
454
662
  # otherwise an ellipsis in place of the traceback frames
455
663
  # will be mishandled
456
664
  insertions.append((len(curcode),
457
- [(0, Generic.Prompt, u'...')]))
665
+ [(0, Generic.Prompt, '...')]))
458
666
  curcode += line[3:]
459
667
  else:
460
668
  if curcode:
461
- for item in do_insertions(
462
- insertions, pylexer.get_tokens_unprocessed(curcode)):
463
- yield item
669
+ yield from do_insertions(
670
+ insertions, pylexer.get_tokens_unprocessed(curcode))
464
671
  curcode = ''
465
672
  insertions = []
466
- if (line.startswith(u'Traceback (most recent call last):') or
467
- re.match(u' File "[^"]+", line \\d+\\n$', line)):
673
+ if (line.startswith('Traceback (most recent call last):') or
674
+ re.match(' File "[^"]+", line \\d+\\n$', line)):
468
675
  tb = 1
469
676
  curtb = line
470
677
  tbindex = match.start()
@@ -472,7 +679,7 @@ class PythonConsoleLexer(Lexer):
472
679
  yield match.start(), Name.Class, line
473
680
  elif tb:
474
681
  curtb += line
475
- if not (line.startswith(' ') or line.strip() == u'...'):
682
+ if not (line.startswith(' ') or line.strip() == '...'):
476
683
  tb = 0
477
684
  for i, t, v in tblexer.get_tokens_unprocessed(curtb):
478
685
  yield tbindex+i, t, v
@@ -480,9 +687,8 @@ class PythonConsoleLexer(Lexer):
480
687
  else:
481
688
  yield match.start(), Generic.Output, line
482
689
  if curcode:
483
- for item in do_insertions(insertions,
484
- pylexer.get_tokens_unprocessed(curcode)):
485
- yield item
690
+ yield from do_insertions(insertions,
691
+ pylexer.get_tokens_unprocessed(curcode))
486
692
  if curtb:
487
693
  for i, t, v in tblexer.get_tokens_unprocessed(curtb):
488
694
  yield tbindex+i, t, v
@@ -490,23 +696,28 @@ class PythonConsoleLexer(Lexer):
490
696
 
491
697
  class PythonTracebackLexer(RegexLexer):
492
698
  """
493
- For Python tracebacks.
699
+ For Python 3.x tracebacks, with support for chained exceptions.
494
700
 
495
- .. versionadded:: 0.7
701
+ .. versionadded:: 1.0
702
+
703
+ .. versionchanged:: 2.5
704
+ This is now the default ``PythonTracebackLexer``. It is still available
705
+ as the alias ``Python3TracebackLexer``.
496
706
  """
497
707
 
498
708
  name = 'Python Traceback'
499
- aliases = ['pytb']
500
- filenames = ['*.pytb']
501
- mimetypes = ['text/x-python-traceback']
709
+ aliases = ['pytb', 'py3tb']
710
+ filenames = ['*.pytb', '*.py3tb']
711
+ mimetypes = ['text/x-python-traceback', 'text/x-python3-traceback']
502
712
 
503
713
  tokens = {
504
714
  'root': [
505
- # Cover both (most recent call last) and (innermost last)
506
- # The optional ^C allows us to catch keyboard interrupt signals.
507
- (r'^(\^C)?(Traceback.*\n)',
508
- bygroups(Text, Generic.Traceback), 'intb'),
509
- # SyntaxError starts with this.
715
+ (r'\n', Text),
716
+ (r'^Traceback \(most recent call last\):\n', Generic.Traceback, 'intb'),
717
+ (r'^During handling of the above exception, another '
718
+ r'exception occurred:\n\n', Generic.Traceback),
719
+ (r'^The above exception was the direct cause of the '
720
+ r'following exception:\n\n', Generic.Traceback),
510
721
  (r'^(?= File "[^"]+", line \d+)', Generic.Traceback, 'intb'),
511
722
  (r'^.*\n', Other),
512
723
  ],
@@ -521,33 +732,40 @@ class PythonTracebackLexer(RegexLexer):
521
732
  bygroups(Text, Comment, Text)), # for doctests...
522
733
  (r'^([^:]+)(: )(.+)(\n)',
523
734
  bygroups(Generic.Error, Text, Name, Text), '#pop'),
524
- (r'^([a-zA-Z_]\w*)(:?\n)',
735
+ (r'^([a-zA-Z_][\w.]*)(:?\n)',
525
736
  bygroups(Generic.Error, Text), '#pop')
526
737
  ],
527
738
  }
528
739
 
529
740
 
530
- class Python3TracebackLexer(RegexLexer):
741
+ Python3TracebackLexer = PythonTracebackLexer
742
+
743
+
744
+ class Python2TracebackLexer(RegexLexer):
531
745
  """
532
- For Python 3.0 tracebacks, with support for chained exceptions.
746
+ For Python tracebacks.
533
747
 
534
- .. versionadded:: 1.0
748
+ .. versionadded:: 0.7
749
+
750
+ .. versionchanged:: 2.5
751
+ This class has been renamed from ``PythonTracebackLexer``.
752
+ ``PythonTracebackLexer`` now refers to the Python 3 variant.
535
753
  """
536
754
 
537
- name = 'Python 3.0 Traceback'
538
- aliases = ['py3tb']
539
- filenames = ['*.py3tb']
540
- mimetypes = ['text/x-python3-traceback']
755
+ name = 'Python 2.x Traceback'
756
+ aliases = ['py2tb']
757
+ filenames = ['*.py2tb']
758
+ mimetypes = ['text/x-python2-traceback']
541
759
 
542
760
  tokens = {
543
761
  'root': [
544
- (r'\n', Text),
545
- (r'^Traceback \(most recent call last\):\n', Generic.Traceback, 'intb'),
546
- (r'^During handling of the above exception, another '
547
- r'exception occurred:\n\n', Generic.Traceback),
548
- (r'^The above exception was the direct cause of the '
549
- r'following exception:\n\n', Generic.Traceback),
762
+ # Cover both (most recent call last) and (innermost last)
763
+ # The optional ^C allows us to catch keyboard interrupt signals.
764
+ (r'^(\^C)?(Traceback.*\n)',
765
+ bygroups(Text, Generic.Traceback), 'intb'),
766
+ # SyntaxError starts with this.
550
767
  (r'^(?= File "[^"]+", line \d+)', Generic.Traceback, 'intb'),
768
+ (r'^.*\n', Other),
551
769
  ],
552
770
  'intb': [
553
771
  (r'^( File )("[^"]+")(, line )(\d+)(, in )(.+)(\n)',
@@ -555,7 +773,7 @@ class Python3TracebackLexer(RegexLexer):
555
773
  (r'^( File )("[^"]+")(, line )(\d+)(\n)',
556
774
  bygroups(Text, Name.Builtin, Text, Number, Text)),
557
775
  (r'^( )(.+)(\n)',
558
- bygroups(Text, using(Python3Lexer), Text)),
776
+ bygroups(Text, using(Python2Lexer), Text)),
559
777
  (r'^([ \t]*)(\.\.\.)(\n)',
560
778
  bygroups(Text, Comment, Text)), # for doctests...
561
779
  (r'^([^:]+)(: )(.+)(\n)',
@@ -618,7 +836,7 @@ class CythonLexer(RegexLexer):
618
836
  ],
619
837
  'keywords': [
620
838
  (words((
621
- 'assert', 'break', 'by', 'continue', 'ctypedef', 'del', 'elif',
839
+ 'assert', 'async', 'await', 'break', 'by', 'continue', 'ctypedef', 'del', 'elif',
622
840
  'else', 'except', 'except?', 'exec', 'finally', 'for', 'fused', 'gil',
623
841
  'global', 'if', 'include', 'lambda', 'nogil', 'pass', 'print',
624
842
  'raise', 'return', 'try', 'while', 'yield', 'as', 'with'), suffix=r'\b'),
@@ -671,10 +889,10 @@ class CythonLexer(RegexLexer):
671
889
  ],
672
890
  'name': [
673
891
  (r'@\w+', Name.Decorator),
674
- ('[a-zA-Z_]\w*', Name),
892
+ (r'[a-zA-Z_]\w*', Name),
675
893
  ],
676
894
  'funcname': [
677
- ('[a-zA-Z_]\w*', Name.Function, '#pop')
895
+ (r'[a-zA-Z_]\w*', Name.Function, '#pop')
678
896
  ],
679
897
  'cdef': [
680
898
  (r'(public|readonly|extern|api|inline)\b', Keyword.Reserved),
@@ -691,7 +909,7 @@ class CythonLexer(RegexLexer):
691
909
  (r'.', Text),
692
910
  ],
693
911
  'classname': [
694
- ('[a-zA-Z_]\w*', Name.Class, '#pop')
912
+ (r'[a-zA-Z_]\w*', Name.Class, '#pop')
695
913
  ],
696
914
  'import': [
697
915
  (r'(\s+)(as)(\s+)', bygroups(Text, Keyword, Text)),
@@ -858,7 +1076,7 @@ class NumPyLexer(PythonLexer):
858
1076
  mimetypes = []
859
1077
  filenames = []
860
1078
 
861
- EXTRA_KEYWORDS = set((
1079
+ EXTRA_KEYWORDS = {
862
1080
  'abs', 'absolute', 'accumulate', 'add', 'alen', 'all', 'allclose',
863
1081
  'alltrue', 'alterdot', 'amax', 'amin', 'angle', 'any', 'append',
864
1082
  'apply_along_axis', 'apply_over_axes', 'arange', 'arccos', 'arccosh',
@@ -923,7 +1141,7 @@ class NumPyLexer(PythonLexer):
923
1141
  'typename', 'uniform', 'union1d', 'unique', 'unique1d', 'unravel_index',
924
1142
  'unwrap', 'vander', 'var', 'vdot', 'vectorize', 'view', 'vonmises',
925
1143
  'vsplit', 'vstack', 'weibull', 'where', 'who', 'zeros', 'zeros_like'
926
- ))
1144
+ }
927
1145
 
928
1146
  def get_tokens_unprocessed(self, text):
929
1147
  for index, token, value in \
@@ -934,6 +1152,7 @@ class NumPyLexer(PythonLexer):
934
1152
  yield index, token, value
935
1153
 
936
1154
  def analyse_text(text):
937
- return (shebang_matches(text, r'pythonw?(2(\.\d)?)?') or
938
- 'import ' in text[:1000]) \
939
- and ('import numpy' in text or 'from numpy import' in text)
1155
+ ltext = text[:1000]
1156
+ return (shebang_matches(text, r'pythonw?(3(\.\d)?)?') or
1157
+ 'import ' in ltext) \
1158
+ and ('import numpy' in ltext or 'from numpy import' in ltext)