pygments.rb 1.2.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (381) hide show
  1. checksums.yaml +5 -5
  2. data/.github/dependabot.yml +13 -0
  3. data/.github/workflows/ci.yml +28 -0
  4. data/.github/workflows/release.yml +24 -0
  5. data/.gitignore +5 -6
  6. data/CHANGELOG.adoc +128 -0
  7. data/Gemfile +3 -1
  8. data/LICENSE +1 -1
  9. data/README.adoc +160 -0
  10. data/Rakefile +11 -21
  11. data/bench.rb +8 -7
  12. data/cache-lexers.rb +3 -2
  13. data/lexers +0 -0
  14. data/lib/pygments/lexer.rb +5 -5
  15. data/lib/pygments/mentos.py +23 -110
  16. data/lib/pygments/popen.rb +148 -229
  17. data/lib/pygments/version.rb +2 -2
  18. data/lib/pygments.rb +10 -11
  19. data/pygments.rb.gemspec +12 -10
  20. data/test/test_pygments.rb +46 -104
  21. data/vendor/pygments-main/{AUTHORS → Pygments-2.7.3.dist-info/AUTHORS} +21 -3
  22. data/vendor/pygments-main/Pygments-2.7.3.dist-info/INSTALLER +1 -0
  23. data/vendor/pygments-main/{LICENSE → Pygments-2.7.3.dist-info/LICENSE} +1 -1
  24. data/vendor/pygments-main/Pygments-2.7.3.dist-info/METADATA +49 -0
  25. data/vendor/pygments-main/Pygments-2.7.3.dist-info/RECORD +482 -0
  26. data/vendor/pygments-main/Pygments-2.7.3.dist-info/REQUESTED +0 -0
  27. data/vendor/pygments-main/Pygments-2.7.3.dist-info/WHEEL +5 -0
  28. data/vendor/pygments-main/Pygments-2.7.3.dist-info/entry_points.txt +3 -0
  29. data/vendor/pygments-main/Pygments-2.7.3.dist-info/top_level.txt +1 -0
  30. data/vendor/pygments-main/bin/pygmentize +8 -0
  31. data/vendor/pygments-main/pygments/__init__.py +6 -11
  32. data/vendor/pygments-main/pygments/__main__.py +18 -0
  33. data/vendor/pygments-main/pygments/cmdline.py +38 -29
  34. data/vendor/pygments-main/pygments/console.py +6 -9
  35. data/vendor/pygments-main/pygments/filter.py +4 -6
  36. data/vendor/pygments-main/pygments/filters/__init__.py +609 -21
  37. data/vendor/pygments-main/pygments/formatter.py +4 -4
  38. data/vendor/pygments-main/pygments/formatters/__init__.py +9 -8
  39. data/vendor/pygments-main/pygments/formatters/_mapping.py +1 -3
  40. data/vendor/pygments-main/pygments/formatters/bbcode.py +1 -1
  41. data/vendor/pygments-main/pygments/formatters/html.py +223 -135
  42. data/vendor/pygments-main/pygments/formatters/img.py +68 -41
  43. data/vendor/pygments-main/pygments/formatters/irc.py +39 -39
  44. data/vendor/pygments-main/pygments/formatters/latex.py +56 -26
  45. data/vendor/pygments-main/pygments/formatters/other.py +12 -8
  46. data/vendor/pygments-main/pygments/formatters/rtf.py +29 -29
  47. data/vendor/pygments-main/pygments/formatters/svg.py +38 -4
  48. data/vendor/pygments-main/pygments/formatters/terminal.py +25 -31
  49. data/vendor/pygments-main/pygments/formatters/terminal256.py +22 -12
  50. data/vendor/pygments-main/pygments/lexer.py +41 -39
  51. data/vendor/pygments-main/pygments/lexers/__init__.py +28 -15
  52. data/vendor/pygments-main/pygments/lexers/_asy_builtins.py +5 -5
  53. data/vendor/pygments-main/pygments/lexers/_cl_builtins.py +15 -15
  54. data/vendor/pygments-main/pygments/lexers/_cocoa_builtins.py +11 -12
  55. data/vendor/pygments-main/pygments/lexers/_csound_builtins.py +1717 -1338
  56. data/vendor/pygments-main/pygments/lexers/_lasso_builtins.py +1 -1
  57. data/vendor/pygments-main/pygments/lexers/_lua_builtins.py +2 -4
  58. data/vendor/pygments-main/pygments/lexers/_mapping.py +74 -29
  59. data/vendor/pygments-main/pygments/lexers/_mql_builtins.py +2 -2
  60. data/vendor/pygments-main/pygments/lexers/_mysql_builtins.py +1282 -0
  61. data/vendor/pygments-main/pygments/lexers/_openedge_builtins.py +1 -1
  62. data/vendor/pygments-main/pygments/lexers/_php_builtins.py +17 -20
  63. data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +73 -16
  64. data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +2 -2
  65. data/vendor/pygments-main/pygments/lexers/_sourcemod_builtins.py +1 -3
  66. data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +151 -125
  67. data/vendor/pygments-main/pygments/lexers/_stata_builtins.py +6 -4
  68. data/vendor/pygments-main/pygments/lexers/_tsql_builtins.py +1 -1
  69. data/vendor/pygments-main/pygments/lexers/_usd_builtins.py +113 -0
  70. data/vendor/pygments-main/pygments/lexers/_vbscript_builtins.py +280 -0
  71. data/vendor/pygments-main/pygments/lexers/_vim_builtins.py +1 -1
  72. data/vendor/pygments-main/pygments/lexers/actionscript.py +8 -3
  73. data/vendor/pygments-main/pygments/lexers/agile.py +1 -1
  74. data/vendor/pygments-main/pygments/lexers/algebra.py +20 -1
  75. data/vendor/pygments-main/pygments/lexers/ambient.py +1 -1
  76. data/vendor/pygments-main/pygments/lexers/ampl.py +3 -3
  77. data/vendor/pygments-main/pygments/lexers/apl.py +15 -15
  78. data/vendor/pygments-main/pygments/lexers/archetype.py +3 -3
  79. data/vendor/pygments-main/pygments/lexers/arrow.py +117 -0
  80. data/vendor/pygments-main/pygments/lexers/asm.py +440 -76
  81. data/vendor/pygments-main/pygments/lexers/automation.py +1 -1
  82. data/vendor/pygments-main/pygments/lexers/bare.py +104 -0
  83. data/vendor/pygments-main/pygments/lexers/basic.py +166 -4
  84. data/vendor/pygments-main/pygments/lexers/bibtex.py +5 -5
  85. data/vendor/pygments-main/pygments/lexers/boa.py +102 -0
  86. data/vendor/pygments-main/pygments/lexers/business.py +17 -2
  87. data/vendor/pygments-main/pygments/lexers/c_cpp.py +137 -45
  88. data/vendor/pygments-main/pygments/lexers/c_like.py +67 -42
  89. data/vendor/pygments-main/pygments/lexers/capnproto.py +7 -7
  90. data/vendor/pygments-main/pygments/lexers/chapel.py +23 -13
  91. data/vendor/pygments-main/pygments/lexers/clean.py +135 -244
  92. data/vendor/pygments-main/pygments/lexers/compiled.py +1 -1
  93. data/vendor/pygments-main/pygments/lexers/configs.py +187 -36
  94. data/vendor/pygments-main/pygments/lexers/console.py +1 -1
  95. data/vendor/pygments-main/pygments/lexers/crystal.py +3 -4
  96. data/vendor/pygments-main/pygments/lexers/csound.py +288 -187
  97. data/vendor/pygments-main/pygments/lexers/css.py +18 -16
  98. data/vendor/pygments-main/pygments/lexers/d.py +10 -5
  99. data/vendor/pygments-main/pygments/lexers/dalvik.py +1 -1
  100. data/vendor/pygments-main/pygments/lexers/data.py +240 -97
  101. data/vendor/pygments-main/pygments/lexers/devicetree.py +109 -0
  102. data/vendor/pygments-main/pygments/lexers/diff.py +4 -4
  103. data/vendor/pygments-main/pygments/lexers/dotnet.py +40 -24
  104. data/vendor/pygments-main/pygments/lexers/dsls.py +144 -62
  105. data/vendor/pygments-main/pygments/lexers/dylan.py +16 -18
  106. data/vendor/pygments-main/pygments/lexers/ecl.py +16 -2
  107. data/vendor/pygments-main/pygments/lexers/eiffel.py +1 -1
  108. data/vendor/pygments-main/pygments/lexers/elm.py +5 -5
  109. data/vendor/pygments-main/pygments/lexers/email.py +151 -0
  110. data/vendor/pygments-main/pygments/lexers/erlang.py +29 -32
  111. data/vendor/pygments-main/pygments/lexers/esoteric.py +46 -19
  112. data/vendor/pygments-main/pygments/lexers/ezhil.py +21 -13
  113. data/vendor/pygments-main/pygments/lexers/factor.py +1 -1
  114. data/vendor/pygments-main/pygments/lexers/fantom.py +1 -1
  115. data/vendor/pygments-main/pygments/lexers/felix.py +1 -1
  116. data/vendor/pygments-main/pygments/lexers/floscript.py +83 -0
  117. data/vendor/pygments-main/pygments/lexers/forth.py +41 -40
  118. data/vendor/pygments-main/pygments/lexers/fortran.py +5 -4
  119. data/vendor/pygments-main/pygments/lexers/foxpro.py +2 -2
  120. data/vendor/pygments-main/pygments/lexers/freefem.py +898 -0
  121. data/vendor/pygments-main/pygments/lexers/functional.py +1 -1
  122. data/vendor/pygments-main/pygments/lexers/gdscript.py +346 -0
  123. data/vendor/pygments-main/pygments/lexers/go.py +1 -1
  124. data/vendor/pygments-main/pygments/lexers/grammar_notation.py +62 -5
  125. data/vendor/pygments-main/pygments/lexers/graph.py +14 -9
  126. data/vendor/pygments-main/pygments/lexers/graphics.py +272 -25
  127. data/vendor/pygments-main/pygments/lexers/haskell.py +48 -21
  128. data/vendor/pygments-main/pygments/lexers/haxe.py +6 -6
  129. data/vendor/pygments-main/pygments/lexers/hdl.py +176 -86
  130. data/vendor/pygments-main/pygments/lexers/hexdump.py +1 -1
  131. data/vendor/pygments-main/pygments/lexers/html.py +31 -19
  132. data/vendor/pygments-main/pygments/lexers/idl.py +19 -8
  133. data/vendor/pygments-main/pygments/lexers/igor.py +244 -112
  134. data/vendor/pygments-main/pygments/lexers/inferno.py +2 -2
  135. data/vendor/pygments-main/pygments/lexers/installers.py +1 -1
  136. data/vendor/pygments-main/pygments/lexers/int_fiction.py +40 -15
  137. data/vendor/pygments-main/pygments/lexers/iolang.py +2 -2
  138. data/vendor/pygments-main/pygments/lexers/j.py +3 -3
  139. data/vendor/pygments-main/pygments/lexers/javascript.py +60 -45
  140. data/vendor/pygments-main/pygments/lexers/julia.py +44 -46
  141. data/vendor/pygments-main/pygments/lexers/jvm.py +265 -165
  142. data/vendor/pygments-main/pygments/lexers/lisp.py +882 -804
  143. data/vendor/pygments-main/pygments/lexers/make.py +10 -6
  144. data/vendor/pygments-main/pygments/lexers/markup.py +213 -43
  145. data/vendor/pygments-main/pygments/lexers/math.py +1 -1
  146. data/vendor/pygments-main/pygments/lexers/matlab.py +98 -41
  147. data/vendor/pygments-main/pygments/lexers/mime.py +226 -0
  148. data/vendor/pygments-main/pygments/lexers/ml.py +198 -9
  149. data/vendor/pygments-main/pygments/lexers/modeling.py +26 -18
  150. data/vendor/pygments-main/pygments/lexers/modula2.py +25 -6
  151. data/vendor/pygments-main/pygments/lexers/monte.py +1 -1
  152. data/vendor/pygments-main/pygments/lexers/mosel.py +448 -0
  153. data/vendor/pygments-main/pygments/lexers/ncl.py +1 -1
  154. data/vendor/pygments-main/pygments/lexers/nimrod.py +4 -4
  155. data/vendor/pygments-main/pygments/lexers/nit.py +1 -1
  156. data/vendor/pygments-main/pygments/lexers/nix.py +1 -1
  157. data/vendor/pygments-main/pygments/lexers/oberon.py +17 -1
  158. data/vendor/pygments-main/pygments/lexers/objective.py +16 -16
  159. data/vendor/pygments-main/pygments/lexers/ooc.py +1 -1
  160. data/vendor/pygments-main/pygments/lexers/other.py +1 -1
  161. data/vendor/pygments-main/pygments/lexers/parasail.py +1 -1
  162. data/vendor/pygments-main/pygments/lexers/parsers.py +23 -58
  163. data/vendor/pygments-main/pygments/lexers/pascal.py +22 -22
  164. data/vendor/pygments-main/pygments/lexers/pawn.py +30 -24
  165. data/vendor/pygments-main/pygments/lexers/perl.py +260 -148
  166. data/vendor/pygments-main/pygments/lexers/php.py +64 -10
  167. data/vendor/pygments-main/pygments/lexers/pointless.py +71 -0
  168. data/vendor/pygments-main/pygments/lexers/pony.py +94 -0
  169. data/vendor/pygments-main/pygments/lexers/praat.py +38 -30
  170. data/vendor/pygments-main/pygments/lexers/prolog.py +36 -36
  171. data/vendor/pygments-main/pygments/lexers/promql.py +183 -0
  172. data/vendor/pygments-main/pygments/lexers/python.py +439 -227
  173. data/vendor/pygments-main/pygments/lexers/qvt.py +6 -6
  174. data/vendor/pygments-main/pygments/lexers/r.py +13 -275
  175. data/vendor/pygments-main/pygments/lexers/rdf.py +232 -39
  176. data/vendor/pygments-main/pygments/lexers/rebol.py +8 -8
  177. data/vendor/pygments-main/pygments/lexers/resource.py +2 -2
  178. data/vendor/pygments-main/pygments/lexers/ride.py +139 -0
  179. data/vendor/pygments-main/pygments/lexers/rnc.py +1 -1
  180. data/vendor/pygments-main/pygments/lexers/roboconf.py +1 -1
  181. data/vendor/pygments-main/pygments/lexers/robotframework.py +23 -31
  182. data/vendor/pygments-main/pygments/lexers/ruby.py +22 -24
  183. data/vendor/pygments-main/pygments/lexers/rust.py +76 -72
  184. data/vendor/pygments-main/pygments/lexers/sas.py +1 -1
  185. data/vendor/pygments-main/pygments/lexers/scdoc.py +83 -0
  186. data/vendor/pygments-main/pygments/lexers/scripting.py +75 -13
  187. data/vendor/pygments-main/pygments/lexers/sgf.py +61 -0
  188. data/vendor/pygments-main/pygments/lexers/shell.py +162 -42
  189. data/vendor/pygments-main/pygments/lexers/sieve.py +69 -0
  190. data/vendor/pygments-main/pygments/lexers/slash.py +185 -0
  191. data/vendor/pygments-main/pygments/lexers/smalltalk.py +2 -2
  192. data/vendor/pygments-main/pygments/lexers/smv.py +3 -3
  193. data/vendor/pygments-main/pygments/lexers/snobol.py +1 -1
  194. data/vendor/pygments-main/pygments/lexers/solidity.py +92 -0
  195. data/vendor/pygments-main/pygments/lexers/special.py +5 -3
  196. data/vendor/pygments-main/pygments/lexers/sql.py +333 -177
  197. data/vendor/pygments-main/pygments/lexers/stata.py +107 -44
  198. data/vendor/pygments-main/pygments/lexers/supercollider.py +6 -1
  199. data/vendor/pygments-main/pygments/lexers/tcl.py +1 -1
  200. data/vendor/pygments-main/pygments/lexers/templates.py +102 -121
  201. data/vendor/pygments-main/pygments/lexers/teraterm.py +335 -0
  202. data/vendor/pygments-main/pygments/lexers/testing.py +6 -6
  203. data/vendor/pygments-main/pygments/lexers/text.py +2 -1
  204. data/vendor/pygments-main/pygments/lexers/textedit.py +4 -4
  205. data/vendor/pygments-main/pygments/lexers/textfmts.py +146 -13
  206. data/vendor/pygments-main/pygments/lexers/theorem.py +69 -53
  207. data/vendor/pygments-main/pygments/lexers/tnt.py +263 -0
  208. data/vendor/pygments-main/pygments/lexers/trafficscript.py +1 -1
  209. data/vendor/pygments-main/pygments/lexers/typoscript.py +4 -11
  210. data/vendor/pygments-main/pygments/lexers/unicon.py +412 -0
  211. data/vendor/pygments-main/pygments/lexers/urbi.py +14 -1
  212. data/vendor/pygments-main/pygments/lexers/usd.py +90 -0
  213. data/vendor/pygments-main/pygments/lexers/varnish.py +3 -3
  214. data/vendor/pygments-main/pygments/lexers/verification.py +13 -10
  215. data/vendor/pygments-main/pygments/lexers/web.py +1 -1
  216. data/vendor/pygments-main/pygments/lexers/webidl.py +299 -0
  217. data/vendor/pygments-main/pygments/lexers/webmisc.py +31 -28
  218. data/vendor/pygments-main/pygments/lexers/whiley.py +5 -5
  219. data/vendor/pygments-main/pygments/lexers/x10.py +1 -1
  220. data/vendor/pygments-main/pygments/lexers/xorg.py +5 -4
  221. data/vendor/pygments-main/pygments/lexers/yang.py +104 -0
  222. data/vendor/pygments-main/pygments/lexers/zig.py +124 -0
  223. data/vendor/pygments-main/pygments/modeline.py +1 -1
  224. data/vendor/pygments-main/pygments/plugin.py +4 -2
  225. data/vendor/pygments-main/pygments/regexopt.py +1 -1
  226. data/vendor/pygments-main/pygments/scanner.py +2 -2
  227. data/vendor/pygments-main/pygments/sphinxext.py +2 -4
  228. data/vendor/pygments-main/pygments/style.py +61 -24
  229. data/vendor/pygments-main/pygments/styles/__init__.py +10 -4
  230. data/vendor/pygments-main/pygments/styles/abap.py +1 -1
  231. data/vendor/pygments-main/pygments/styles/algol.py +1 -1
  232. data/vendor/pygments-main/pygments/styles/algol_nu.py +1 -1
  233. data/vendor/pygments-main/pygments/styles/arduino.py +2 -2
  234. data/vendor/pygments-main/pygments/styles/autumn.py +1 -1
  235. data/vendor/pygments-main/pygments/styles/borland.py +1 -1
  236. data/vendor/pygments-main/pygments/styles/bw.py +1 -1
  237. data/vendor/pygments-main/pygments/styles/colorful.py +1 -1
  238. data/vendor/pygments-main/pygments/styles/default.py +1 -1
  239. data/vendor/pygments-main/pygments/styles/emacs.py +1 -1
  240. data/vendor/pygments-main/pygments/styles/friendly.py +1 -1
  241. data/vendor/pygments-main/pygments/styles/fruity.py +1 -1
  242. data/vendor/pygments-main/pygments/styles/igor.py +1 -1
  243. data/vendor/pygments-main/pygments/styles/inkpot.py +67 -0
  244. data/vendor/pygments-main/pygments/styles/lovelace.py +1 -1
  245. data/vendor/pygments-main/pygments/styles/manni.py +1 -1
  246. data/vendor/pygments-main/pygments/styles/monokai.py +4 -3
  247. data/vendor/pygments-main/pygments/styles/murphy.py +1 -1
  248. data/vendor/pygments-main/pygments/styles/native.py +1 -1
  249. data/vendor/pygments-main/pygments/styles/paraiso_dark.py +1 -1
  250. data/vendor/pygments-main/pygments/styles/paraiso_light.py +1 -1
  251. data/vendor/pygments-main/pygments/styles/pastie.py +1 -1
  252. data/vendor/pygments-main/pygments/styles/perldoc.py +1 -1
  253. data/vendor/pygments-main/pygments/styles/rainbow_dash.py +1 -1
  254. data/vendor/pygments-main/pygments/styles/rrt.py +1 -1
  255. data/vendor/pygments-main/pygments/styles/sas.py +1 -1
  256. data/vendor/pygments-main/pygments/styles/solarized.py +134 -0
  257. data/vendor/pygments-main/pygments/styles/stata_dark.py +41 -0
  258. data/vendor/pygments-main/pygments/styles/{stata.py → stata_light.py} +14 -15
  259. data/vendor/pygments-main/pygments/styles/tango.py +1 -1
  260. data/vendor/pygments-main/pygments/styles/trac.py +1 -1
  261. data/vendor/pygments-main/pygments/styles/vim.py +1 -1
  262. data/vendor/pygments-main/pygments/styles/vs.py +1 -1
  263. data/vendor/pygments-main/pygments/styles/xcode.py +1 -1
  264. data/vendor/pygments-main/pygments/token.py +1 -1
  265. data/vendor/pygments-main/pygments/unistring.py +47 -108
  266. data/vendor/pygments-main/pygments/util.py +15 -92
  267. metadata +68 -136
  268. data/CHANGELOG.md +0 -111
  269. data/README.md +0 -121
  270. data/circle.yml +0 -20
  271. data/test/test_data.c +0 -2581
  272. data/test/test_data.py +0 -514
  273. data/test/test_data_generated +0 -2582
  274. data/vendor/custom_lexers/github.py +0 -565
  275. data/vendor/pygments-main/CHANGES +0 -1186
  276. data/vendor/pygments-main/MANIFEST.in +0 -6
  277. data/vendor/pygments-main/Makefile +0 -65
  278. data/vendor/pygments-main/README.rst +0 -39
  279. data/vendor/pygments-main/REVISION +0 -1
  280. data/vendor/pygments-main/TODO +0 -12
  281. data/vendor/pygments-main/doc/Makefile +0 -153
  282. data/vendor/pygments-main/doc/_static/favicon.ico +0 -0
  283. data/vendor/pygments-main/doc/_static/logo_new.png +0 -0
  284. data/vendor/pygments-main/doc/_static/logo_only.png +0 -0
  285. data/vendor/pygments-main/doc/_templates/docssidebar.html +0 -3
  286. data/vendor/pygments-main/doc/_templates/indexsidebar.html +0 -25
  287. data/vendor/pygments-main/doc/_themes/pygments14/layout.html +0 -98
  288. data/vendor/pygments-main/doc/_themes/pygments14/static/bodybg.png +0 -0
  289. data/vendor/pygments-main/doc/_themes/pygments14/static/docbg.png +0 -0
  290. data/vendor/pygments-main/doc/_themes/pygments14/static/listitem.png +0 -0
  291. data/vendor/pygments-main/doc/_themes/pygments14/static/logo.png +0 -0
  292. data/vendor/pygments-main/doc/_themes/pygments14/static/pocoo.png +0 -0
  293. data/vendor/pygments-main/doc/_themes/pygments14/static/pygments14.css_t +0 -401
  294. data/vendor/pygments-main/doc/_themes/pygments14/theme.conf +0 -15
  295. data/vendor/pygments-main/doc/conf.py +0 -241
  296. data/vendor/pygments-main/doc/docs/api.rst +0 -354
  297. data/vendor/pygments-main/doc/docs/authors.rst +0 -4
  298. data/vendor/pygments-main/doc/docs/changelog.rst +0 -1
  299. data/vendor/pygments-main/doc/docs/cmdline.rst +0 -166
  300. data/vendor/pygments-main/doc/docs/filterdevelopment.rst +0 -71
  301. data/vendor/pygments-main/doc/docs/filters.rst +0 -41
  302. data/vendor/pygments-main/doc/docs/formatterdevelopment.rst +0 -169
  303. data/vendor/pygments-main/doc/docs/formatters.rst +0 -48
  304. data/vendor/pygments-main/doc/docs/index.rst +0 -66
  305. data/vendor/pygments-main/doc/docs/integrate.rst +0 -40
  306. data/vendor/pygments-main/doc/docs/java.rst +0 -70
  307. data/vendor/pygments-main/doc/docs/lexerdevelopment.rst +0 -728
  308. data/vendor/pygments-main/doc/docs/lexers.rst +0 -69
  309. data/vendor/pygments-main/doc/docs/moinmoin.rst +0 -39
  310. data/vendor/pygments-main/doc/docs/plugins.rst +0 -93
  311. data/vendor/pygments-main/doc/docs/quickstart.rst +0 -205
  312. data/vendor/pygments-main/doc/docs/rstdirective.rst +0 -22
  313. data/vendor/pygments-main/doc/docs/styles.rst +0 -201
  314. data/vendor/pygments-main/doc/docs/tokens.rst +0 -372
  315. data/vendor/pygments-main/doc/docs/unicode.rst +0 -58
  316. data/vendor/pygments-main/doc/download.rst +0 -41
  317. data/vendor/pygments-main/doc/faq.rst +0 -139
  318. data/vendor/pygments-main/doc/index.rst +0 -54
  319. data/vendor/pygments-main/doc/languages.rst +0 -154
  320. data/vendor/pygments-main/doc/make.bat +0 -190
  321. data/vendor/pygments-main/doc/pygmentize.1 +0 -94
  322. data/vendor/pygments-main/external/autopygmentize +0 -101
  323. data/vendor/pygments-main/external/lasso-builtins-generator-9.lasso +0 -162
  324. data/vendor/pygments-main/external/markdown-processor.py +0 -67
  325. data/vendor/pygments-main/external/moin-parser.py +0 -112
  326. data/vendor/pygments-main/external/pygments.bashcomp +0 -38
  327. data/vendor/pygments-main/external/rst-directive.py +0 -82
  328. data/vendor/pygments-main/pygmentize +0 -8
  329. data/vendor/pygments-main/pygments/lexers/github.py +0 -565
  330. data/vendor/pygments-main/requirements.txt +0 -5
  331. data/vendor/pygments-main/scripts/check_sources.py +0 -211
  332. data/vendor/pygments-main/scripts/debug_lexer.py +0 -246
  333. data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +0 -33
  334. data/vendor/pygments-main/scripts/epydoc.css +0 -280
  335. data/vendor/pygments-main/scripts/get_vimkw.py +0 -74
  336. data/vendor/pygments-main/scripts/pylintrc +0 -301
  337. data/vendor/pygments-main/scripts/vim2pygments.py +0 -935
  338. data/vendor/pygments-main/setup.cfg +0 -10
  339. data/vendor/pygments-main/setup.py +0 -77
  340. data/vendor/pygments-main/tox.ini +0 -7
  341. data/vendor/simplejson/.gitignore +0 -10
  342. data/vendor/simplejson/.travis.yml +0 -5
  343. data/vendor/simplejson/CHANGES.txt +0 -291
  344. data/vendor/simplejson/LICENSE.txt +0 -19
  345. data/vendor/simplejson/MANIFEST.in +0 -5
  346. data/vendor/simplejson/README.rst +0 -19
  347. data/vendor/simplejson/conf.py +0 -179
  348. data/vendor/simplejson/index.rst +0 -628
  349. data/vendor/simplejson/scripts/make_docs.py +0 -18
  350. data/vendor/simplejson/setup.py +0 -104
  351. data/vendor/simplejson/simplejson/__init__.py +0 -510
  352. data/vendor/simplejson/simplejson/_speedups.c +0 -2745
  353. data/vendor/simplejson/simplejson/decoder.py +0 -425
  354. data/vendor/simplejson/simplejson/encoder.py +0 -567
  355. data/vendor/simplejson/simplejson/ordered_dict.py +0 -119
  356. data/vendor/simplejson/simplejson/scanner.py +0 -77
  357. data/vendor/simplejson/simplejson/tests/__init__.py +0 -67
  358. data/vendor/simplejson/simplejson/tests/test_bigint_as_string.py +0 -55
  359. data/vendor/simplejson/simplejson/tests/test_check_circular.py +0 -30
  360. data/vendor/simplejson/simplejson/tests/test_decimal.py +0 -66
  361. data/vendor/simplejson/simplejson/tests/test_decode.py +0 -83
  362. data/vendor/simplejson/simplejson/tests/test_default.py +0 -9
  363. data/vendor/simplejson/simplejson/tests/test_dump.py +0 -67
  364. data/vendor/simplejson/simplejson/tests/test_encode_basestring_ascii.py +0 -46
  365. data/vendor/simplejson/simplejson/tests/test_encode_for_html.py +0 -32
  366. data/vendor/simplejson/simplejson/tests/test_errors.py +0 -34
  367. data/vendor/simplejson/simplejson/tests/test_fail.py +0 -91
  368. data/vendor/simplejson/simplejson/tests/test_float.py +0 -19
  369. data/vendor/simplejson/simplejson/tests/test_indent.py +0 -86
  370. data/vendor/simplejson/simplejson/tests/test_item_sort_key.py +0 -20
  371. data/vendor/simplejson/simplejson/tests/test_namedtuple.py +0 -121
  372. data/vendor/simplejson/simplejson/tests/test_pass1.py +0 -76
  373. data/vendor/simplejson/simplejson/tests/test_pass2.py +0 -14
  374. data/vendor/simplejson/simplejson/tests/test_pass3.py +0 -20
  375. data/vendor/simplejson/simplejson/tests/test_recursion.py +0 -67
  376. data/vendor/simplejson/simplejson/tests/test_scanstring.py +0 -117
  377. data/vendor/simplejson/simplejson/tests/test_separators.py +0 -42
  378. data/vendor/simplejson/simplejson/tests/test_speedups.py +0 -20
  379. data/vendor/simplejson/simplejson/tests/test_tuple.py +0 -49
  380. data/vendor/simplejson/simplejson/tests/test_unicode.py +0 -109
  381. data/vendor/simplejson/simplejson/tool.py +0 -39
@@ -5,7 +5,7 @@
5
5
 
6
6
  Lexers for Python and related languages.
7
7
 
8
- :copyright: Copyright 2006-2017 by the Pygments team, see AUTHORS.
8
+ :copyright: Copyright 2006-2020 by the Pygments team, see AUTHORS.
9
9
  :license: BSD, see LICENSE for details.
10
10
  """
11
11
 
@@ -19,21 +19,379 @@ from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
19
19
  from pygments import unistring as uni
20
20
 
21
21
  __all__ = ['PythonLexer', 'PythonConsoleLexer', 'PythonTracebackLexer',
22
- 'Python3Lexer', 'Python3TracebackLexer', 'CythonLexer',
23
- 'DgLexer', 'NumPyLexer']
22
+ 'Python2Lexer', 'Python2TracebackLexer',
23
+ 'CythonLexer', 'DgLexer', 'NumPyLexer']
24
24
 
25
25
  line_re = re.compile('.*?\n')
26
26
 
27
27
 
28
28
  class PythonLexer(RegexLexer):
29
29
  """
30
- For `Python <http://www.python.org>`_ source code.
30
+ For `Python <http://www.python.org>`_ source code (version 3.x).
31
+
32
+ .. versionadded:: 0.10
33
+
34
+ .. versionchanged:: 2.5
35
+ This is now the default ``PythonLexer``. It is still available as the
36
+ alias ``Python3Lexer``.
31
37
  """
32
38
 
33
39
  name = 'Python'
34
- aliases = ['python', 'py', 'sage']
35
- filenames = ['*.py', '*.pyw', '*.sc', 'SConstruct', 'SConscript', '*.tac', '*.sage']
36
- mimetypes = ['text/x-python', 'application/x-python']
40
+ aliases = ['python', 'py', 'sage', 'python3', 'py3']
41
+ filenames = [
42
+ '*.py',
43
+ '*.pyw',
44
+ # Jython
45
+ '*.jy',
46
+ # Sage
47
+ '*.sage',
48
+ # SCons
49
+ '*.sc',
50
+ 'SConstruct',
51
+ 'SConscript',
52
+ # Skylark/Starlark (used by Bazel, Buck, and Pants)
53
+ '*.bzl',
54
+ 'BUCK',
55
+ 'BUILD',
56
+ 'BUILD.bazel',
57
+ 'WORKSPACE',
58
+ # Twisted Application infrastructure
59
+ '*.tac',
60
+ ]
61
+ mimetypes = ['text/x-python', 'application/x-python',
62
+ 'text/x-python3', 'application/x-python3']
63
+
64
+ flags = re.MULTILINE | re.UNICODE
65
+
66
+ uni_name = "[%s][%s]*" % (uni.xid_start, uni.xid_continue)
67
+
68
+ def innerstring_rules(ttype):
69
+ return [
70
+ # the old style '%s' % (...) string formatting (still valid in Py3)
71
+ (r'%(\(\w+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?'
72
+ '[hlL]?[E-GXc-giorsaux%]', String.Interpol),
73
+ # the new style '{}'.format(...) string formatting
74
+ (r'\{'
75
+ r'((\w+)((\.\w+)|(\[[^\]]+\]))*)?' # field name
76
+ r'(\![sra])?' # conversion
77
+ r'(\:(.?[<>=\^])?[-+ ]?#?0?(\d+)?,?(\.\d+)?[E-GXb-gnosx%]?)?'
78
+ r'\}', String.Interpol),
79
+
80
+ # backslashes, quotes and formatting signs must be parsed one at a time
81
+ (r'[^\\\'"%{\n]+', ttype),
82
+ (r'[\'"\\]', ttype),
83
+ # unhandled string formatting sign
84
+ (r'%|(\{{1,2})', ttype)
85
+ # newlines are an error (use "nl" state)
86
+ ]
87
+
88
+ def fstring_rules(ttype):
89
+ return [
90
+ # Assuming that a '}' is the closing brace after format specifier.
91
+ # Sadly, this means that we won't detect syntax error. But it's
92
+ # more important to parse correct syntax correctly, than to
93
+ # highlight invalid syntax.
94
+ (r'\}', String.Interpol),
95
+ (r'\{', String.Interpol, 'expr-inside-fstring'),
96
+ # backslashes, quotes and formatting signs must be parsed one at a time
97
+ (r'[^\\\'"{}\n]+', ttype),
98
+ (r'[\'"\\]', ttype),
99
+ # newlines are an error (use "nl" state)
100
+ ]
101
+
102
+ tokens = {
103
+ 'root': [
104
+ (r'\n', Text),
105
+ (r'^(\s*)([rRuUbB]{,2})("""(?:.|\n)*?""")',
106
+ bygroups(Text, String.Affix, String.Doc)),
107
+ (r"^(\s*)([rRuUbB]{,2})('''(?:.|\n)*?''')",
108
+ bygroups(Text, String.Affix, String.Doc)),
109
+ (r'\A#!.+$', Comment.Hashbang),
110
+ (r'#.*$', Comment.Single),
111
+ (r'\\\n', Text),
112
+ (r'\\', Text),
113
+ include('keywords'),
114
+ (r'(def)((?:\s|\\\s)+)', bygroups(Keyword, Text), 'funcname'),
115
+ (r'(class)((?:\s|\\\s)+)', bygroups(Keyword, Text), 'classname'),
116
+ (r'(from)((?:\s|\\\s)+)', bygroups(Keyword.Namespace, Text),
117
+ 'fromimport'),
118
+ (r'(import)((?:\s|\\\s)+)', bygroups(Keyword.Namespace, Text),
119
+ 'import'),
120
+ include('expr'),
121
+ ],
122
+ 'expr': [
123
+ # raw f-strings
124
+ ('(?i)(rf|fr)(""")',
125
+ bygroups(String.Affix, String.Double), 'tdqf'),
126
+ ("(?i)(rf|fr)(''')",
127
+ bygroups(String.Affix, String.Single), 'tsqf'),
128
+ ('(?i)(rf|fr)(")',
129
+ bygroups(String.Affix, String.Double), 'dqf'),
130
+ ("(?i)(rf|fr)(')",
131
+ bygroups(String.Affix, String.Single), 'sqf'),
132
+ # non-raw f-strings
133
+ ('([fF])(""")', bygroups(String.Affix, String.Double),
134
+ combined('fstringescape', 'tdqf')),
135
+ ("([fF])(''')", bygroups(String.Affix, String.Single),
136
+ combined('fstringescape', 'tsqf')),
137
+ ('([fF])(")', bygroups(String.Affix, String.Double),
138
+ combined('fstringescape', 'dqf')),
139
+ ("([fF])(')", bygroups(String.Affix, String.Single),
140
+ combined('fstringescape', 'sqf')),
141
+ # raw strings
142
+ ('(?i)(rb|br|r)(""")',
143
+ bygroups(String.Affix, String.Double), 'tdqs'),
144
+ ("(?i)(rb|br|r)(''')",
145
+ bygroups(String.Affix, String.Single), 'tsqs'),
146
+ ('(?i)(rb|br|r)(")',
147
+ bygroups(String.Affix, String.Double), 'dqs'),
148
+ ("(?i)(rb|br|r)(')",
149
+ bygroups(String.Affix, String.Single), 'sqs'),
150
+ # non-raw strings
151
+ ('([uUbB]?)(""")', bygroups(String.Affix, String.Double),
152
+ combined('stringescape', 'tdqs')),
153
+ ("([uUbB]?)(''')", bygroups(String.Affix, String.Single),
154
+ combined('stringescape', 'tsqs')),
155
+ ('([uUbB]?)(")', bygroups(String.Affix, String.Double),
156
+ combined('stringescape', 'dqs')),
157
+ ("([uUbB]?)(')", bygroups(String.Affix, String.Single),
158
+ combined('stringescape', 'sqs')),
159
+ (r'[^\S\n]+', Text),
160
+ (r'!=|==|<<|>>|:=|[-~+/*%=<>&^|.]', Operator),
161
+ (r'[]{}:(),;[]', Punctuation),
162
+ (r'(in|is|and|or|not)\b', Operator.Word),
163
+ include('expr-keywords'),
164
+ include('builtins'),
165
+ include('magicfuncs'),
166
+ include('magicvars'),
167
+ include('name'),
168
+ include('numbers'),
169
+ ],
170
+ 'expr-inside-fstring': [
171
+ (r'[{([]', Punctuation, 'expr-inside-fstring-inner'),
172
+ # without format specifier
173
+ (r'(=\s*)?' # debug (https://bugs.python.org/issue36817)
174
+ r'(\![sraf])?' # conversion
175
+ r'\}', String.Interpol, '#pop'),
176
+ # with format specifier
177
+ # we'll catch the remaining '}' in the outer scope
178
+ (r'(=\s*)?' # debug (https://bugs.python.org/issue36817)
179
+ r'(\![sraf])?' # conversion
180
+ r':', String.Interpol, '#pop'),
181
+ (r'\s+', Text), # allow new lines
182
+ include('expr'),
183
+ ],
184
+ 'expr-inside-fstring-inner': [
185
+ (r'[{([]', Punctuation, 'expr-inside-fstring-inner'),
186
+ (r'[])}]', Punctuation, '#pop'),
187
+ (r'\s+', Text), # allow new lines
188
+ include('expr'),
189
+ ],
190
+ 'expr-keywords': [
191
+ # Based on https://docs.python.org/3/reference/expressions.html
192
+ (words((
193
+ 'async for', 'await', 'else', 'for', 'if', 'lambda',
194
+ 'yield', 'yield from'), suffix=r'\b'),
195
+ Keyword),
196
+ (words(('True', 'False', 'None'), suffix=r'\b'), Keyword.Constant),
197
+ ],
198
+ 'keywords': [
199
+ (words((
200
+ 'assert', 'async', 'await', 'break', 'continue', 'del', 'elif',
201
+ 'else', 'except', 'finally', 'for', 'global', 'if', 'lambda',
202
+ 'pass', 'raise', 'nonlocal', 'return', 'try', 'while', 'yield',
203
+ 'yield from', 'as', 'with'), suffix=r'\b'),
204
+ Keyword),
205
+ (words(('True', 'False', 'None'), suffix=r'\b'), Keyword.Constant),
206
+ ],
207
+ 'builtins': [
208
+ (words((
209
+ '__import__', 'abs', 'all', 'any', 'bin', 'bool', 'bytearray',
210
+ 'bytes', 'chr', 'classmethod', 'compile', 'complex',
211
+ 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'filter',
212
+ 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr',
213
+ 'hash', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass',
214
+ 'iter', 'len', 'list', 'locals', 'map', 'max', 'memoryview',
215
+ 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print',
216
+ 'property', 'range', 'repr', 'reversed', 'round', 'set', 'setattr',
217
+ 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple',
218
+ 'type', 'vars', 'zip'), prefix=r'(?<!\.)', suffix=r'\b'),
219
+ Name.Builtin),
220
+ (r'(?<!\.)(self|Ellipsis|NotImplemented|cls)\b', Name.Builtin.Pseudo),
221
+ (words((
222
+ 'ArithmeticError', 'AssertionError', 'AttributeError',
223
+ 'BaseException', 'BufferError', 'BytesWarning', 'DeprecationWarning',
224
+ 'EOFError', 'EnvironmentError', 'Exception', 'FloatingPointError',
225
+ 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError',
226
+ 'ImportWarning', 'IndentationError', 'IndexError', 'KeyError',
227
+ 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'NameError',
228
+ 'NotImplementedError', 'OSError', 'OverflowError',
229
+ 'PendingDeprecationWarning', 'ReferenceError', 'ResourceWarning',
230
+ 'RuntimeError', 'RuntimeWarning', 'StopIteration',
231
+ 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit',
232
+ 'TabError', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError',
233
+ 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError',
234
+ 'UnicodeWarning', 'UserWarning', 'ValueError', 'VMSError',
235
+ 'Warning', 'WindowsError', 'ZeroDivisionError',
236
+ # new builtin exceptions from PEP 3151
237
+ 'BlockingIOError', 'ChildProcessError', 'ConnectionError',
238
+ 'BrokenPipeError', 'ConnectionAbortedError', 'ConnectionRefusedError',
239
+ 'ConnectionResetError', 'FileExistsError', 'FileNotFoundError',
240
+ 'InterruptedError', 'IsADirectoryError', 'NotADirectoryError',
241
+ 'PermissionError', 'ProcessLookupError', 'TimeoutError',
242
+ # others new in Python 3
243
+ 'StopAsyncIteration', 'ModuleNotFoundError', 'RecursionError'),
244
+ prefix=r'(?<!\.)', suffix=r'\b'),
245
+ Name.Exception),
246
+ ],
247
+ 'magicfuncs': [
248
+ (words((
249
+ '__abs__', '__add__', '__aenter__', '__aexit__', '__aiter__',
250
+ '__and__', '__anext__', '__await__', '__bool__', '__bytes__',
251
+ '__call__', '__complex__', '__contains__', '__del__', '__delattr__',
252
+ '__delete__', '__delitem__', '__dir__', '__divmod__', '__enter__',
253
+ '__eq__', '__exit__', '__float__', '__floordiv__', '__format__',
254
+ '__ge__', '__get__', '__getattr__', '__getattribute__',
255
+ '__getitem__', '__gt__', '__hash__', '__iadd__', '__iand__',
256
+ '__ifloordiv__', '__ilshift__', '__imatmul__', '__imod__',
257
+ '__imul__', '__index__', '__init__', '__instancecheck__',
258
+ '__int__', '__invert__', '__ior__', '__ipow__', '__irshift__',
259
+ '__isub__', '__iter__', '__itruediv__', '__ixor__', '__le__',
260
+ '__len__', '__length_hint__', '__lshift__', '__lt__', '__matmul__',
261
+ '__missing__', '__mod__', '__mul__', '__ne__', '__neg__',
262
+ '__new__', '__next__', '__or__', '__pos__', '__pow__',
263
+ '__prepare__', '__radd__', '__rand__', '__rdivmod__', '__repr__',
264
+ '__reversed__', '__rfloordiv__', '__rlshift__', '__rmatmul__',
265
+ '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__',
266
+ '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__',
267
+ '__rxor__', '__set__', '__setattr__', '__setitem__', '__str__',
268
+ '__sub__', '__subclasscheck__', '__truediv__',
269
+ '__xor__'), suffix=r'\b'),
270
+ Name.Function.Magic),
271
+ ],
272
+ 'magicvars': [
273
+ (words((
274
+ '__annotations__', '__bases__', '__class__', '__closure__',
275
+ '__code__', '__defaults__', '__dict__', '__doc__', '__file__',
276
+ '__func__', '__globals__', '__kwdefaults__', '__module__',
277
+ '__mro__', '__name__', '__objclass__', '__qualname__',
278
+ '__self__', '__slots__', '__weakref__'), suffix=r'\b'),
279
+ Name.Variable.Magic),
280
+ ],
281
+ 'numbers': [
282
+ (r'(\d(?:_?\d)*\.(?:\d(?:_?\d)*)?|(?:\d(?:_?\d)*)?\.\d(?:_?\d)*)'
283
+ r'([eE][+-]?\d(?:_?\d)*)?', Number.Float),
284
+ (r'\d(?:_?\d)*[eE][+-]?\d(?:_?\d)*j?', Number.Float),
285
+ (r'0[oO](?:_?[0-7])+', Number.Oct),
286
+ (r'0[bB](?:_?[01])+', Number.Bin),
287
+ (r'0[xX](?:_?[a-fA-F0-9])+', Number.Hex),
288
+ (r'\d(?:_?\d)*', Number.Integer),
289
+ ],
290
+ 'name': [
291
+ (r'@' + uni_name, Name.Decorator),
292
+ (r'@', Operator), # new matrix multiplication operator
293
+ (uni_name, Name),
294
+ ],
295
+ 'funcname': [
296
+ include('magicfuncs'),
297
+ (uni_name, Name.Function, '#pop'),
298
+ default('#pop'),
299
+ ],
300
+ 'classname': [
301
+ (uni_name, Name.Class, '#pop'),
302
+ ],
303
+ 'import': [
304
+ (r'(\s+)(as)(\s+)', bygroups(Text, Keyword, Text)),
305
+ (r'\.', Name.Namespace),
306
+ (uni_name, Name.Namespace),
307
+ (r'(\s*)(,)(\s*)', bygroups(Text, Operator, Text)),
308
+ default('#pop') # all else: go back
309
+ ],
310
+ 'fromimport': [
311
+ (r'(\s+)(import)\b', bygroups(Text, Keyword.Namespace), '#pop'),
312
+ (r'\.', Name.Namespace),
313
+ # if None occurs here, it's "raise x from None", since None can
314
+ # never be a module name
315
+ (r'None\b', Name.Builtin.Pseudo, '#pop'),
316
+ (uni_name, Name.Namespace),
317
+ default('#pop'),
318
+ ],
319
+ 'fstringescape': [
320
+ (r'\{\{', String.Escape),
321
+ (r'\}\}', String.Escape),
322
+ include('stringescape'),
323
+ ],
324
+ 'stringescape': [
325
+ (r'\\([\\abfnrtv"\']|\n|N\{.*?\}|u[a-fA-F0-9]{4}|'
326
+ r'U[a-fA-F0-9]{8}|x[a-fA-F0-9]{2}|[0-7]{1,3})', String.Escape)
327
+ ],
328
+ 'fstrings-single': fstring_rules(String.Single),
329
+ 'fstrings-double': fstring_rules(String.Double),
330
+ 'strings-single': innerstring_rules(String.Single),
331
+ 'strings-double': innerstring_rules(String.Double),
332
+ 'dqf': [
333
+ (r'"', String.Double, '#pop'),
334
+ (r'\\\\|\\"|\\\n', String.Escape), # included here for raw strings
335
+ include('fstrings-double')
336
+ ],
337
+ 'sqf': [
338
+ (r"'", String.Single, '#pop'),
339
+ (r"\\\\|\\'|\\\n", String.Escape), # included here for raw strings
340
+ include('fstrings-single')
341
+ ],
342
+ 'dqs': [
343
+ (r'"', String.Double, '#pop'),
344
+ (r'\\\\|\\"|\\\n', String.Escape), # included here for raw strings
345
+ include('strings-double')
346
+ ],
347
+ 'sqs': [
348
+ (r"'", String.Single, '#pop'),
349
+ (r"\\\\|\\'|\\\n", String.Escape), # included here for raw strings
350
+ include('strings-single')
351
+ ],
352
+ 'tdqf': [
353
+ (r'"""', String.Double, '#pop'),
354
+ include('fstrings-double'),
355
+ (r'\n', String.Double)
356
+ ],
357
+ 'tsqf': [
358
+ (r"'''", String.Single, '#pop'),
359
+ include('fstrings-single'),
360
+ (r'\n', String.Single)
361
+ ],
362
+ 'tdqs': [
363
+ (r'"""', String.Double, '#pop'),
364
+ include('strings-double'),
365
+ (r'\n', String.Double)
366
+ ],
367
+ 'tsqs': [
368
+ (r"'''", String.Single, '#pop'),
369
+ include('strings-single'),
370
+ (r'\n', String.Single)
371
+ ],
372
+ }
373
+
374
+ def analyse_text(text):
375
+ return shebang_matches(text, r'pythonw?(3(\.\d)?)?')
376
+
377
+
378
+ Python3Lexer = PythonLexer
379
+
380
+
381
+ class Python2Lexer(RegexLexer):
382
+ """
383
+ For `Python 2.x <http://www.python.org>`_ source code.
384
+
385
+ .. versionchanged:: 2.5
386
+ This class has been renamed from ``PythonLexer``. ``PythonLexer`` now
387
+ refers to the Python 3 variant. File name patterns like ``*.py`` have
388
+ been moved to Python 3 as well.
389
+ """
390
+
391
+ name = 'Python 2.x'
392
+ aliases = ['python2', 'py2']
393
+ filenames = [] # now taken over by PythonLexer (3.x)
394
+ mimetypes = ['text/x-python2', 'application/x-python2']
37
395
 
38
396
  def innerstring_rules(ttype):
39
397
  return [
@@ -124,15 +482,15 @@ class PythonLexer(RegexLexer):
124
482
  'Exception', 'FloatingPointError', 'FutureWarning', 'GeneratorExit',
125
483
  'IOError', 'ImportError', 'ImportWarning', 'IndentationError',
126
484
  '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'),
485
+ 'MemoryError', 'NameError',
486
+ 'NotImplementedError', 'OSError', 'OverflowError', 'OverflowWarning',
487
+ 'PendingDeprecationWarning', 'ReferenceError',
488
+ 'RuntimeError', 'RuntimeWarning', 'StandardError', 'StopIteration',
489
+ 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit',
490
+ 'TabError', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError',
491
+ 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError',
492
+ 'UnicodeWarning', 'UserWarning', 'ValueError', 'VMSError', 'Warning',
493
+ 'WindowsError', 'ZeroDivisionError'), prefix=r'(?<!\.)', suffix=r'\b'),
136
494
  Name.Exception),
137
495
  ],
138
496
  'magicfuncs': [
@@ -180,15 +538,15 @@ class PythonLexer(RegexLexer):
180
538
  ],
181
539
  'name': [
182
540
  (r'@[\w.]+', Name.Decorator),
183
- ('[a-zA-Z_]\w*', Name),
541
+ (r'[a-zA-Z_]\w*', Name),
184
542
  ],
185
543
  'funcname': [
186
544
  include('magicfuncs'),
187
- ('[a-zA-Z_]\w*', Name.Function, '#pop'),
545
+ (r'[a-zA-Z_]\w*', Name.Function, '#pop'),
188
546
  default('#pop'),
189
547
  ],
190
548
  'classname': [
191
- ('[a-zA-Z_]\w*', Name.Class, '#pop')
549
+ (r'[a-zA-Z_]\w*', Name.Class, '#pop')
192
550
  ],
193
551
  'import': [
194
552
  (r'(?:[ \t]|\\\n)+', Text),
@@ -238,168 +596,10 @@ class PythonLexer(RegexLexer):
238
596
  }
239
597
 
240
598
  def analyse_text(text):
241
- return shebang_matches(text, r'pythonw?(2(\.\d)?)?') or \
599
+ return shebang_matches(text, r'pythonw?2(\.\d)?') or \
242
600
  'import ' in text[:1000]
243
601
 
244
602
 
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)?')
401
-
402
-
403
603
  class PythonConsoleLexer(Lexer):
404
604
  """
405
605
  For Python console output or doctests, such as:
@@ -417,25 +617,27 @@ class PythonConsoleLexer(Lexer):
417
617
  Additional options:
418
618
 
419
619
  `python3`
420
- Use Python 3 lexer for code. Default is ``False``.
620
+ Use Python 3 lexer for code. Default is ``True``.
421
621
 
422
622
  .. versionadded:: 1.0
623
+ .. versionchanged:: 2.5
624
+ Now defaults to ``True``.
423
625
  """
424
626
  name = 'Python console session'
425
627
  aliases = ['pycon']
426
628
  mimetypes = ['text/x-python-doctest']
427
629
 
428
630
  def __init__(self, **options):
429
- self.python3 = get_bool_opt(options, 'python3', False)
631
+ self.python3 = get_bool_opt(options, 'python3', True)
430
632
  Lexer.__init__(self, **options)
431
633
 
432
634
  def get_tokens_unprocessed(self, text):
433
635
  if self.python3:
434
- pylexer = Python3Lexer(**self.options)
435
- tblexer = Python3TracebackLexer(**self.options)
436
- else:
437
636
  pylexer = PythonLexer(**self.options)
438
637
  tblexer = PythonTracebackLexer(**self.options)
638
+ else:
639
+ pylexer = Python2Lexer(**self.options)
640
+ tblexer = Python2TracebackLexer(**self.options)
439
641
 
440
642
  curcode = ''
441
643
  insertions = []
@@ -444,27 +646,26 @@ class PythonConsoleLexer(Lexer):
444
646
  tb = 0
445
647
  for match in line_re.finditer(text):
446
648
  line = match.group()
447
- if line.startswith(u'>>> ') or line.startswith(u'... '):
649
+ if line.startswith('>>> ') or line.startswith('... '):
448
650
  tb = 0
449
651
  insertions.append((len(curcode),
450
652
  [(0, Generic.Prompt, line[:4])]))
451
653
  curcode += line[4:]
452
- elif line.rstrip() == u'...' and not tb:
654
+ elif line.rstrip() == '...' and not tb:
453
655
  # only a new >>> prompt can end an exception block
454
656
  # otherwise an ellipsis in place of the traceback frames
455
657
  # will be mishandled
456
658
  insertions.append((len(curcode),
457
- [(0, Generic.Prompt, u'...')]))
659
+ [(0, Generic.Prompt, '...')]))
458
660
  curcode += line[3:]
459
661
  else:
460
662
  if curcode:
461
- for item in do_insertions(
462
- insertions, pylexer.get_tokens_unprocessed(curcode)):
463
- yield item
663
+ yield from do_insertions(
664
+ insertions, pylexer.get_tokens_unprocessed(curcode))
464
665
  curcode = ''
465
666
  insertions = []
466
- if (line.startswith(u'Traceback (most recent call last):') or
467
- re.match(u' File "[^"]+", line \\d+\\n$', line)):
667
+ if (line.startswith('Traceback (most recent call last):') or
668
+ re.match(' File "[^"]+", line \\d+\\n$', line)):
468
669
  tb = 1
469
670
  curtb = line
470
671
  tbindex = match.start()
@@ -472,7 +673,7 @@ class PythonConsoleLexer(Lexer):
472
673
  yield match.start(), Name.Class, line
473
674
  elif tb:
474
675
  curtb += line
475
- if not (line.startswith(' ') or line.strip() == u'...'):
676
+ if not (line.startswith(' ') or line.strip() == '...'):
476
677
  tb = 0
477
678
  for i, t, v in tblexer.get_tokens_unprocessed(curtb):
478
679
  yield tbindex+i, t, v
@@ -480,9 +681,8 @@ class PythonConsoleLexer(Lexer):
480
681
  else:
481
682
  yield match.start(), Generic.Output, line
482
683
  if curcode:
483
- for item in do_insertions(insertions,
484
- pylexer.get_tokens_unprocessed(curcode)):
485
- yield item
684
+ yield from do_insertions(insertions,
685
+ pylexer.get_tokens_unprocessed(curcode))
486
686
  if curtb:
487
687
  for i, t, v in tblexer.get_tokens_unprocessed(curtb):
488
688
  yield tbindex+i, t, v
@@ -490,23 +690,28 @@ class PythonConsoleLexer(Lexer):
490
690
 
491
691
  class PythonTracebackLexer(RegexLexer):
492
692
  """
493
- For Python tracebacks.
693
+ For Python 3.x tracebacks, with support for chained exceptions.
494
694
 
495
- .. versionadded:: 0.7
695
+ .. versionadded:: 1.0
696
+
697
+ .. versionchanged:: 2.5
698
+ This is now the default ``PythonTracebackLexer``. It is still available
699
+ as the alias ``Python3TracebackLexer``.
496
700
  """
497
701
 
498
702
  name = 'Python Traceback'
499
- aliases = ['pytb']
500
- filenames = ['*.pytb']
501
- mimetypes = ['text/x-python-traceback']
703
+ aliases = ['pytb', 'py3tb']
704
+ filenames = ['*.pytb', '*.py3tb']
705
+ mimetypes = ['text/x-python-traceback', 'text/x-python3-traceback']
502
706
 
503
707
  tokens = {
504
708
  '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.
709
+ (r'\n', Text),
710
+ (r'^Traceback \(most recent call last\):\n', Generic.Traceback, 'intb'),
711
+ (r'^During handling of the above exception, another '
712
+ r'exception occurred:\n\n', Generic.Traceback),
713
+ (r'^The above exception was the direct cause of the '
714
+ r'following exception:\n\n', Generic.Traceback),
510
715
  (r'^(?= File "[^"]+", line \d+)', Generic.Traceback, 'intb'),
511
716
  (r'^.*\n', Other),
512
717
  ],
@@ -521,33 +726,40 @@ class PythonTracebackLexer(RegexLexer):
521
726
  bygroups(Text, Comment, Text)), # for doctests...
522
727
  (r'^([^:]+)(: )(.+)(\n)',
523
728
  bygroups(Generic.Error, Text, Name, Text), '#pop'),
524
- (r'^([a-zA-Z_]\w*)(:?\n)',
729
+ (r'^([a-zA-Z_][\w.]*)(:?\n)',
525
730
  bygroups(Generic.Error, Text), '#pop')
526
731
  ],
527
732
  }
528
733
 
529
734
 
530
- class Python3TracebackLexer(RegexLexer):
735
+ Python3TracebackLexer = PythonTracebackLexer
736
+
737
+
738
+ class Python2TracebackLexer(RegexLexer):
531
739
  """
532
- For Python 3.0 tracebacks, with support for chained exceptions.
740
+ For Python tracebacks.
533
741
 
534
- .. versionadded:: 1.0
742
+ .. versionadded:: 0.7
743
+
744
+ .. versionchanged:: 2.5
745
+ This class has been renamed from ``PythonTracebackLexer``.
746
+ ``PythonTracebackLexer`` now refers to the Python 3 variant.
535
747
  """
536
748
 
537
- name = 'Python 3.0 Traceback'
538
- aliases = ['py3tb']
539
- filenames = ['*.py3tb']
540
- mimetypes = ['text/x-python3-traceback']
749
+ name = 'Python 2.x Traceback'
750
+ aliases = ['py2tb']
751
+ filenames = ['*.py2tb']
752
+ mimetypes = ['text/x-python2-traceback']
541
753
 
542
754
  tokens = {
543
755
  '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),
756
+ # Cover both (most recent call last) and (innermost last)
757
+ # The optional ^C allows us to catch keyboard interrupt signals.
758
+ (r'^(\^C)?(Traceback.*\n)',
759
+ bygroups(Text, Generic.Traceback), 'intb'),
760
+ # SyntaxError starts with this.
550
761
  (r'^(?= File "[^"]+", line \d+)', Generic.Traceback, 'intb'),
762
+ (r'^.*\n', Other),
551
763
  ],
552
764
  'intb': [
553
765
  (r'^( File )("[^"]+")(, line )(\d+)(, in )(.+)(\n)',
@@ -555,7 +767,7 @@ class Python3TracebackLexer(RegexLexer):
555
767
  (r'^( File )("[^"]+")(, line )(\d+)(\n)',
556
768
  bygroups(Text, Name.Builtin, Text, Number, Text)),
557
769
  (r'^( )(.+)(\n)',
558
- bygroups(Text, using(Python3Lexer), Text)),
770
+ bygroups(Text, using(Python2Lexer), Text)),
559
771
  (r'^([ \t]*)(\.\.\.)(\n)',
560
772
  bygroups(Text, Comment, Text)), # for doctests...
561
773
  (r'^([^:]+)(: )(.+)(\n)',
@@ -618,7 +830,7 @@ class CythonLexer(RegexLexer):
618
830
  ],
619
831
  'keywords': [
620
832
  (words((
621
- 'assert', 'break', 'by', 'continue', 'ctypedef', 'del', 'elif',
833
+ 'assert', 'async', 'await', 'break', 'by', 'continue', 'ctypedef', 'del', 'elif',
622
834
  'else', 'except', 'except?', 'exec', 'finally', 'for', 'fused', 'gil',
623
835
  'global', 'if', 'include', 'lambda', 'nogil', 'pass', 'print',
624
836
  'raise', 'return', 'try', 'while', 'yield', 'as', 'with'), suffix=r'\b'),
@@ -671,10 +883,10 @@ class CythonLexer(RegexLexer):
671
883
  ],
672
884
  'name': [
673
885
  (r'@\w+', Name.Decorator),
674
- ('[a-zA-Z_]\w*', Name),
886
+ (r'[a-zA-Z_]\w*', Name),
675
887
  ],
676
888
  'funcname': [
677
- ('[a-zA-Z_]\w*', Name.Function, '#pop')
889
+ (r'[a-zA-Z_]\w*', Name.Function, '#pop')
678
890
  ],
679
891
  'cdef': [
680
892
  (r'(public|readonly|extern|api|inline)\b', Keyword.Reserved),
@@ -691,7 +903,7 @@ class CythonLexer(RegexLexer):
691
903
  (r'.', Text),
692
904
  ],
693
905
  'classname': [
694
- ('[a-zA-Z_]\w*', Name.Class, '#pop')
906
+ (r'[a-zA-Z_]\w*', Name.Class, '#pop')
695
907
  ],
696
908
  'import': [
697
909
  (r'(\s+)(as)(\s+)', bygroups(Text, Keyword, Text)),
@@ -858,7 +1070,7 @@ class NumPyLexer(PythonLexer):
858
1070
  mimetypes = []
859
1071
  filenames = []
860
1072
 
861
- EXTRA_KEYWORDS = set((
1073
+ EXTRA_KEYWORDS = {
862
1074
  'abs', 'absolute', 'accumulate', 'add', 'alen', 'all', 'allclose',
863
1075
  'alltrue', 'alterdot', 'amax', 'amin', 'angle', 'any', 'append',
864
1076
  'apply_along_axis', 'apply_over_axes', 'arange', 'arccos', 'arccosh',
@@ -923,7 +1135,7 @@ class NumPyLexer(PythonLexer):
923
1135
  'typename', 'uniform', 'union1d', 'unique', 'unique1d', 'unravel_index',
924
1136
  'unwrap', 'vander', 'var', 'vdot', 'vectorize', 'view', 'vonmises',
925
1137
  'vsplit', 'vstack', 'weibull', 'where', 'who', 'zeros', 'zeros_like'
926
- ))
1138
+ }
927
1139
 
928
1140
  def get_tokens_unprocessed(self, text):
929
1141
  for index, token, value in \
@@ -934,6 +1146,6 @@ class NumPyLexer(PythonLexer):
934
1146
  yield index, token, value
935
1147
 
936
1148
  def analyse_text(text):
937
- return (shebang_matches(text, r'pythonw?(2(\.\d)?)?') or
1149
+ return (shebang_matches(text, r'pythonw?(3(\.\d)?)?') or
938
1150
  'import ' in text[:1000]) \
939
1151
  and ('import numpy' in text or 'from numpy import' in text)