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,12 +5,12 @@
5
5
 
6
6
  A formatter that generates RTF files.
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
 
12
12
  from pygments.formatter import Formatter
13
- from pygments.util import get_int_opt, _surrogatepair
13
+ from pygments.util import get_int_opt, surrogatepair
14
14
 
15
15
 
16
16
  __all__ = ['RtfFormatter']
@@ -35,7 +35,7 @@ class RtfFormatter(Formatter):
35
35
  ``'default'``).
36
36
 
37
37
  `fontface`
38
- The used font famliy, for example ``Bitstream Vera Sans``. Defaults to
38
+ The used font family, for example ``Bitstream Vera Sans``. Defaults to
39
39
  some generic font which is supposed to have fixed width.
40
40
 
41
41
  `fontsize`
@@ -65,14 +65,14 @@ class RtfFormatter(Formatter):
65
65
  self.fontsize = get_int_opt(options, 'fontsize', 0)
66
66
 
67
67
  def _escape(self, text):
68
- return text.replace(u'\\', u'\\\\') \
69
- .replace(u'{', u'\\{') \
70
- .replace(u'}', u'\\}')
68
+ return text.replace('\\', '\\\\') \
69
+ .replace('{', '\\{') \
70
+ .replace('}', '\\}')
71
71
 
72
72
  def _escape_text(self, text):
73
- # empty strings, should give a small performance improvment
73
+ # empty strings, should give a small performance improvement
74
74
  if not text:
75
- return u''
75
+ return ''
76
76
 
77
77
  # escape text
78
78
  text = self._escape(text)
@@ -85,21 +85,21 @@ class RtfFormatter(Formatter):
85
85
  buf.append(str(c))
86
86
  elif (2**7) <= cn < (2**16):
87
87
  # single unicode escape sequence
88
- buf.append(u'{\\u%d}' % cn)
88
+ buf.append('{\\u%d}' % cn)
89
89
  elif (2**16) <= cn:
90
90
  # RTF limits unicode to 16 bits.
91
91
  # Force surrogate pairs
92
- buf.append(u'{\\u%d}{\\u%d}' % _surrogatepair(cn))
92
+ buf.append('{\\u%d}{\\u%d}' % surrogatepair(cn))
93
93
 
94
- return u''.join(buf).replace(u'\n', u'\\par\n')
94
+ return ''.join(buf).replace('\n', '\\par\n')
95
95
 
96
96
  def format_unencoded(self, tokensource, outfile):
97
97
  # rtf 1.8 header
98
- outfile.write(u'{\\rtf1\\ansi\\uc0\\deff0'
99
- u'{\\fonttbl{\\f0\\fmodern\\fprq1\\fcharset0%s;}}'
100
- u'{\\colortbl;' % (self.fontface and
101
- u' ' + self._escape(self.fontface) or
102
- u''))
98
+ outfile.write('{\\rtf1\\ansi\\uc0\\deff0'
99
+ '{\\fonttbl{\\f0\\fmodern\\fprq1\\fcharset0%s;}}'
100
+ '{\\colortbl;' % (self.fontface and
101
+ ' ' + self._escape(self.fontface) or
102
+ ''))
103
103
 
104
104
  # convert colors and save them in a mapping to access them later.
105
105
  color_mapping = {}
@@ -108,15 +108,15 @@ class RtfFormatter(Formatter):
108
108
  for color in style['color'], style['bgcolor'], style['border']:
109
109
  if color and color not in color_mapping:
110
110
  color_mapping[color] = offset
111
- outfile.write(u'\\red%d\\green%d\\blue%d;' % (
111
+ outfile.write('\\red%d\\green%d\\blue%d;' % (
112
112
  int(color[0:2], 16),
113
113
  int(color[2:4], 16),
114
114
  int(color[4:6], 16)
115
115
  ))
116
116
  offset += 1
117
- outfile.write(u'}\\f0 ')
117
+ outfile.write('}\\f0 ')
118
118
  if self.fontsize:
119
- outfile.write(u'\\fs%d' % (self.fontsize))
119
+ outfile.write('\\fs%d' % self.fontsize)
120
120
 
121
121
  # highlight stream
122
122
  for ttype, value in tokensource:
@@ -125,23 +125,23 @@ class RtfFormatter(Formatter):
125
125
  style = self.style.style_for_token(ttype)
126
126
  buf = []
127
127
  if style['bgcolor']:
128
- buf.append(u'\\cb%d' % color_mapping[style['bgcolor']])
128
+ buf.append('\\cb%d' % color_mapping[style['bgcolor']])
129
129
  if style['color']:
130
- buf.append(u'\\cf%d' % color_mapping[style['color']])
130
+ buf.append('\\cf%d' % color_mapping[style['color']])
131
131
  if style['bold']:
132
- buf.append(u'\\b')
132
+ buf.append('\\b')
133
133
  if style['italic']:
134
- buf.append(u'\\i')
134
+ buf.append('\\i')
135
135
  if style['underline']:
136
- buf.append(u'\\ul')
136
+ buf.append('\\ul')
137
137
  if style['border']:
138
- buf.append(u'\\chbrdr\\chcfpat%d' %
138
+ buf.append('\\chbrdr\\chcfpat%d' %
139
139
  color_mapping[style['border']])
140
- start = u''.join(buf)
140
+ start = ''.join(buf)
141
141
  if start:
142
- outfile.write(u'{%s ' % start)
142
+ outfile.write('{%s ' % start)
143
143
  outfile.write(self._escape_text(value))
144
144
  if start:
145
- outfile.write(u'}')
145
+ outfile.write('}')
146
146
 
147
- outfile.write(u'}')
147
+ outfile.write('}')
@@ -5,11 +5,12 @@
5
5
 
6
6
  Formatter for SVG output.
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
 
12
12
  from pygments.formatter import Formatter
13
+ from pygments.token import Comment
13
14
  from pygments.util import get_bool_opt, get_int_opt
14
15
 
15
16
  __all__ = ['SvgFormatter']
@@ -52,6 +53,19 @@ class SvgFormatter(Formatter):
52
53
  The value to give the wrapping ``<g>`` element's ``font-size``
53
54
  attribute, defaults to ``"14px"``.
54
55
 
56
+ `linenos`
57
+ If ``True``, add line numbers (default: ``False``).
58
+
59
+ `linenostart`
60
+ The line number for the first line (default: ``1``).
61
+
62
+ `linenostep`
63
+ If set to a number n > 1, only every nth line number is printed.
64
+
65
+ `linenowidth`
66
+ Maximum width devoted to line numbers (default: ``3*ystep``, sufficient
67
+ for up to 4-digit line numbers. Increase width for longer code blocks).
68
+
55
69
  `xoffset`
56
70
  Starting offset in X direction, defaults to ``0``.
57
71
 
@@ -92,6 +106,10 @@ class SvgFormatter(Formatter):
92
106
  self.yoffset = get_int_opt(options, 'yoffset', int_fs)
93
107
  self.ystep = get_int_opt(options, 'ystep', int_fs + 5)
94
108
  self.spacehack = get_bool_opt(options, 'spacehack', True)
109
+ self.linenos = get_bool_opt(options,'linenos',False)
110
+ self.linenostart = get_int_opt(options,'linenostart',1)
111
+ self.linenostep = get_int_opt(options,'linenostep',1)
112
+ self.linenowidth = get_int_opt(options,'linenowidth', 3*self.ystep)
95
113
  self._stylecache = {}
96
114
 
97
115
  def format_unencoded(self, tokensource, outfile):
@@ -115,7 +133,19 @@ class SvgFormatter(Formatter):
115
133
  outfile.write('<svg xmlns="http://www.w3.org/2000/svg">\n')
116
134
  outfile.write('<g font-family="%s" font-size="%s">\n' %
117
135
  (self.fontfamily, self.fontsize))
118
- outfile.write('<text x="%s" y="%s" xml:space="preserve">' % (x, y))
136
+
137
+ counter = self.linenostart
138
+ counter_step = self.linenostep
139
+ counter_style = self._get_style(Comment)
140
+ line_x = x
141
+
142
+ if self.linenos:
143
+ if counter % counter_step == 0:
144
+ outfile.write('<text x="%s" y="%s" %s text-anchor="end">%s</text>' % (x+self.linenowidth,y,counter_style,counter))
145
+ line_x += self.linenowidth + self.ystep
146
+ counter += 1
147
+
148
+ outfile.write('<text x="%s" y="%s" xml:space="preserve">' % (line_x, y))
119
149
  for ttype, value in tokensource:
120
150
  style = self._get_style(ttype)
121
151
  tspan = style and '<tspan' + style + '>' or ''
@@ -127,8 +157,12 @@ class SvgFormatter(Formatter):
127
157
  for part in parts[:-1]:
128
158
  outfile.write(tspan + part + tspanend)
129
159
  y += self.ystep
130
- outfile.write('</text>\n<text x="%s" y="%s" '
131
- 'xml:space="preserve">' % (x, y))
160
+ outfile.write('</text>\n')
161
+ if self.linenos and counter % counter_step == 0:
162
+ outfile.write('<text x="%s" y="%s" text-anchor="end" %s>%s</text>' % (x+self.linenowidth,y,counter_style,counter))
163
+
164
+ counter += 1
165
+ outfile.write('<text x="%s" y="%s" ' 'xml:space="preserve">' % (line_x,y))
132
166
  outfile.write(tspan + parts[-1] + tspanend)
133
167
  outfile.write('</text>')
134
168
 
@@ -5,7 +5,7 @@
5
5
 
6
6
  Formatter for terminal output with ANSI sequences.
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
 
@@ -26,33 +26,33 @@ __all__ = ['TerminalFormatter']
26
26
  TERMINAL_COLORS = {
27
27
  Token: ('', ''),
28
28
 
29
- Whitespace: ('lightgray', 'darkgray'),
30
- Comment: ('lightgray', 'darkgray'),
31
- Comment.Preproc: ('teal', 'turquoise'),
32
- Keyword: ('darkblue', 'blue'),
33
- Keyword.Type: ('teal', 'turquoise'),
34
- Operator.Word: ('purple', 'fuchsia'),
35
- Name.Builtin: ('teal', 'turquoise'),
36
- Name.Function: ('darkgreen', 'green'),
37
- Name.Namespace: ('_teal_', '_turquoise_'),
38
- Name.Class: ('_darkgreen_', '_green_'),
39
- Name.Exception: ('teal', 'turquoise'),
40
- Name.Decorator: ('darkgray', 'lightgray'),
41
- Name.Variable: ('darkred', 'red'),
42
- Name.Constant: ('darkred', 'red'),
43
- Name.Attribute: ('teal', 'turquoise'),
44
- Name.Tag: ('blue', 'blue'),
45
- String: ('brown', 'brown'),
46
- Number: ('darkblue', 'blue'),
47
-
48
- Generic.Deleted: ('red', 'red'),
49
- Generic.Inserted: ('darkgreen', 'green'),
29
+ Whitespace: ('gray', 'brightblack'),
30
+ Comment: ('gray', 'brightblack'),
31
+ Comment.Preproc: ('cyan', 'brightcyan'),
32
+ Keyword: ('blue', 'brightblue'),
33
+ Keyword.Type: ('cyan', 'brightcyan'),
34
+ Operator.Word: ('magenta', 'brightmagenta'),
35
+ Name.Builtin: ('cyan', 'brightcyan'),
36
+ Name.Function: ('green', 'brightgreen'),
37
+ Name.Namespace: ('_cyan_', '_brightcyan_'),
38
+ Name.Class: ('_green_', '_brightgreen_'),
39
+ Name.Exception: ('cyan', 'brightcyan'),
40
+ Name.Decorator: ('brightblack', 'gray'),
41
+ Name.Variable: ('red', 'brightred'),
42
+ Name.Constant: ('red', 'brightred'),
43
+ Name.Attribute: ('cyan', 'brightcyan'),
44
+ Name.Tag: ('brightblue', 'brightblue'),
45
+ String: ('yellow', 'yellow'),
46
+ Number: ('blue', 'brightblue'),
47
+
48
+ Generic.Deleted: ('brightred', 'brightred'),
49
+ Generic.Inserted: ('green', 'brightgreen'),
50
50
  Generic.Heading: ('**', '**'),
51
- Generic.Subheading: ('*purple*', '*fuchsia*'),
51
+ Generic.Subheading: ('*magenta*', '*brightmagenta*'),
52
52
  Generic.Prompt: ('**', '**'),
53
- Generic.Error: ('red', 'red'),
53
+ Generic.Error: ('brightred', 'brightred'),
54
54
 
55
- Error: ('_red_', '_red_'),
55
+ Error: ('_brightred_', '_brightred_'),
56
56
  }
57
57
 
58
58
 
@@ -92,12 +92,6 @@ class TerminalFormatter(Formatter):
92
92
  self._lineno = 0
93
93
 
94
94
  def format(self, tokensource, outfile):
95
- # hack: if the output is a terminal and has an encoding set,
96
- # use that to avoid unicode encode problems
97
- if not self.encoding and hasattr(outfile, "encoding") and \
98
- hasattr(outfile, "isatty") and outfile.isatty() and \
99
- sys.version_info < (3,):
100
- self.encoding = outfile.encoding
101
95
  return Formatter.format(self, tokensource, outfile)
102
96
 
103
97
  def _write_lineno(self, outfile):
@@ -11,7 +11,7 @@
11
11
 
12
12
  Formatter version 1.
13
13
 
14
- :copyright: Copyright 2006-2017 by the Pygments team, see AUTHORS.
14
+ :copyright: Copyright 2006-2020 by the Pygments team, see AUTHORS.
15
15
  :license: BSD, see LICENSE for details.
16
16
  """
17
17
 
@@ -35,11 +35,12 @@ __all__ = ['Terminal256Formatter', 'TerminalTrueColorFormatter']
35
35
 
36
36
 
37
37
  class EscapeSequence:
38
- def __init__(self, fg=None, bg=None, bold=False, underline=False):
38
+ def __init__(self, fg=None, bg=None, bold=False, underline=False, italic=False):
39
39
  self.fg = fg
40
40
  self.bg = bg
41
41
  self.bold = bold
42
42
  self.underline = underline
43
+ self.italic = italic
43
44
 
44
45
  def escape(self, attrs):
45
46
  if len(attrs):
@@ -50,7 +51,7 @@ class EscapeSequence:
50
51
  attrs = []
51
52
  if self.fg is not None:
52
53
  if self.fg in ansicolors:
53
- esc = codes[self.fg[5:]]
54
+ esc = codes[self.fg.replace('ansi','')]
54
55
  if ';01m' in esc:
55
56
  self.bold = True
56
57
  # extract fg color code.
@@ -59,7 +60,7 @@ class EscapeSequence:
59
60
  attrs.extend(("38", "5", "%i" % self.fg))
60
61
  if self.bg is not None:
61
62
  if self.bg in ansicolors:
62
- esc = codes[self.bg[5:]]
63
+ esc = codes[self.bg.replace('ansi','')]
63
64
  # extract fg color code, add 10 for bg.
64
65
  attrs.append(str(int(esc[2:4])+10))
65
66
  else:
@@ -68,6 +69,8 @@ class EscapeSequence:
68
69
  attrs.append("01")
69
70
  if self.underline:
70
71
  attrs.append("04")
72
+ if self.italic:
73
+ attrs.append("03")
71
74
  return self.escape(attrs)
72
75
 
73
76
  def true_color_string(self):
@@ -80,6 +83,8 @@ class EscapeSequence:
80
83
  attrs.append("01")
81
84
  if self.underline:
82
85
  attrs.append("04")
86
+ if self.italic:
87
+ attrs.append("03")
83
88
  return self.escape(attrs)
84
89
 
85
90
  def reset_string(self):
@@ -88,7 +93,7 @@ class EscapeSequence:
88
93
  attrs.append("39")
89
94
  if self.bg is not None:
90
95
  attrs.append("49")
91
- if self.bold or self.underline:
96
+ if self.bold or self.underline or self.italic:
92
97
  attrs.append("00")
93
98
  return self.escape(attrs)
94
99
 
@@ -110,6 +115,12 @@ class Terminal256Formatter(Formatter):
110
115
  `Terminal256Formatter` will map these to non extended foreground color.
111
116
  See :ref:`AnsiTerminalStyle` for more information.
112
117
 
118
+ .. versionchanged:: 2.4
119
+ The ANSI color names have been updated with names that are easier to
120
+ understand and align with colornames of other projects and terminals.
121
+ See :ref:`this table <new-ansi-color-names>` for more information.
122
+
123
+
113
124
  Options accepted:
114
125
 
115
126
  `style`
@@ -129,6 +140,7 @@ class Terminal256Formatter(Formatter):
129
140
 
130
141
  self.usebold = 'nobold' not in options
131
142
  self.useunderline = 'nounderline' not in options
143
+ self.useitalic = 'noitalic' not in options
132
144
 
133
145
  self._build_color_table() # build an RGB-to-256 color conversion table
134
146
  self._setup_styles() # convert selected style's colors to term. colors
@@ -189,7 +201,7 @@ class Terminal256Formatter(Formatter):
189
201
  def _color_index(self, color):
190
202
  index = self.best_match.get(color, None)
191
203
  if color in ansicolors:
192
- # strip the `#ansi` part and look up code
204
+ # strip the `ansi/#ansi` part and look up code
193
205
  index = color
194
206
  self.best_match[color] = index
195
207
  if index is None:
@@ -221,16 +233,12 @@ class Terminal256Formatter(Formatter):
221
233
  escape.bold = True
222
234
  if self.useunderline and ndef['underline']:
223
235
  escape.underline = True
236
+ if self.useitalic and ndef['italic']:
237
+ escape.italic = True
224
238
  self.style_string[str(ttype)] = (escape.color_string(),
225
239
  escape.reset_string())
226
240
 
227
241
  def format(self, tokensource, outfile):
228
- # hack: if the output is a terminal and has an encoding set,
229
- # use that to avoid unicode encode problems
230
- if not self.encoding and hasattr(outfile, "encoding") and \
231
- hasattr(outfile, "isatty") and outfile.isatty() and \
232
- sys.version_info < (3,):
233
- self.encoding = outfile.encoding
234
242
  return Formatter.format(self, tokensource, outfile)
235
243
 
236
244
  def format_unencoded(self, tokensource, outfile):
@@ -305,5 +313,7 @@ class TerminalTrueColorFormatter(Terminal256Formatter):
305
313
  escape.bold = True
306
314
  if self.useunderline and ndef['underline']:
307
315
  escape.underline = True
316
+ if self.useitalic and ndef['italic']:
317
+ escape.italic = True
308
318
  self.style_string[str(ttype)] = (escape.true_color_string(),
309
319
  escape.reset_string())
@@ -5,12 +5,10 @@
5
5
 
6
6
  Base lexer classes.
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
 
12
- from __future__ import print_function
13
-
14
12
  import re
15
13
  import sys
16
14
  import time
@@ -19,7 +17,7 @@ from pygments.filter import apply_filters, Filter
19
17
  from pygments.filters import get_filter_by_name
20
18
  from pygments.token import Error, Text, Other, _TokenType
21
19
  from pygments.util import get_bool_opt, get_int_opt, get_list_opt, \
22
- make_analysator, text_type, add_metaclass, iteritems, Future, guess_decode
20
+ make_analysator, Future, guess_decode
23
21
  from pygments.regexopt import regex_opt
24
22
 
25
23
  __all__ = ['Lexer', 'RegexLexer', 'ExtendedRegexLexer', 'DelegatingLexer',
@@ -48,8 +46,7 @@ class LexerMeta(type):
48
46
  return type.__new__(mcs, name, bases, d)
49
47
 
50
48
 
51
- @add_metaclass(LexerMeta)
52
- class Lexer(object):
49
+ class Lexer(metaclass=LexerMeta):
53
50
  """
54
51
  Lexer for a specific language.
55
52
 
@@ -145,16 +142,16 @@ class Lexer(object):
145
142
  Also preprocess the text, i.e. expand tabs and strip it if
146
143
  wanted and applies registered filters.
147
144
  """
148
- if not isinstance(text, text_type):
145
+ if not isinstance(text, str):
149
146
  if self.encoding == 'guess':
150
147
  text, _ = guess_decode(text)
151
148
  elif self.encoding == 'chardet':
152
149
  try:
153
150
  import chardet
154
- except ImportError:
151
+ except ImportError as e:
155
152
  raise ImportError('To enable chardet encoding guessing, '
156
153
  'please install the chardet library '
157
- 'from http://chardet.feedparser.org/')
154
+ 'from http://chardet.feedparser.org/') from e
158
155
  # check for BOM first
159
156
  decoded = None
160
157
  for bom, encoding in _encoding_map:
@@ -169,11 +166,11 @@ class Lexer(object):
169
166
  text = decoded
170
167
  else:
171
168
  text = text.decode(self.encoding)
172
- if text.startswith(u'\ufeff'):
173
- text = text[len(u'\ufeff'):]
169
+ if text.startswith('\ufeff'):
170
+ text = text[len('\ufeff'):]
174
171
  else:
175
- if text.startswith(u'\ufeff'):
176
- text = text[len(u'\ufeff'):]
172
+ if text.startswith('\ufeff'):
173
+ text = text[len('\ufeff'):]
177
174
 
178
175
  # text now *is* a unicode string
179
176
  text = text.replace('\r\n', '\n')
@@ -252,7 +249,7 @@ class include(str): # pylint: disable=invalid-name
252
249
  pass
253
250
 
254
251
 
255
- class _inherit(object):
252
+ class _inherit:
256
253
  """
257
254
  Indicates the a state should inherit from its superclass.
258
255
  """
@@ -275,7 +272,7 @@ class combined(tuple): # pylint: disable=invalid-name
275
272
  pass
276
273
 
277
274
 
278
- class _PseudoMatch(object):
275
+ class _PseudoMatch:
279
276
  """
280
277
  A pseudo match object constructed from a string.
281
278
  """
@@ -328,11 +325,12 @@ def bygroups(*args):
328
325
  return callback
329
326
 
330
327
 
331
- class _This(object):
328
+ class _This:
332
329
  """
333
330
  Special singleton used for indicating the caller class.
334
331
  Used by ``using``.
335
332
  """
333
+
336
334
  this = _This()
337
335
 
338
336
 
@@ -498,7 +496,7 @@ class RegexLexerMeta(LexerMeta):
498
496
  rex = cls._process_regex(tdef[0], rflags, state)
499
497
  except Exception as err:
500
498
  raise ValueError("uncompilable regex %r in state %r of %r: %s" %
501
- (tdef[0], state, cls, err))
499
+ (tdef[0], state, cls, err)) from err
502
500
 
503
501
  token = cls._process_token(tdef[1])
504
502
 
@@ -536,7 +534,7 @@ class RegexLexerMeta(LexerMeta):
536
534
  for c in cls.__mro__:
537
535
  toks = c.__dict__.get('tokens', {})
538
536
 
539
- for state, items in iteritems(toks):
537
+ for state, items in toks.items():
540
538
  curitems = tokens.get(state)
541
539
  if curitems is None:
542
540
  # N.b. because this is assigned by reference, sufficiently
@@ -582,8 +580,7 @@ class RegexLexerMeta(LexerMeta):
582
580
  return type.__call__(cls, *args, **kwds)
583
581
 
584
582
 
585
- @add_metaclass(RegexLexerMeta)
586
- class RegexLexer(Lexer):
583
+ class RegexLexer(Lexer, metaclass=RegexLexerMeta):
587
584
  """
588
585
  Base for simple stateful regular expression-based lexers.
589
586
  Simplifies the lexing process so that you need only
@@ -631,22 +628,27 @@ class RegexLexer(Lexer):
631
628
  if type(action) is _TokenType:
632
629
  yield pos, action, m.group()
633
630
  else:
634
- for item in action(self, m):
635
- yield item
631
+ yield from action(self, m)
636
632
  pos = m.end()
637
633
  if new_state is not None:
638
634
  # state transition
639
635
  if isinstance(new_state, tuple):
640
636
  for state in new_state:
641
637
  if state == '#pop':
642
- statestack.pop()
638
+ if len(statestack) > 1:
639
+ statestack.pop()
643
640
  elif state == '#push':
644
641
  statestack.append(statestack[-1])
645
642
  else:
646
643
  statestack.append(state)
647
644
  elif isinstance(new_state, int):
648
- # pop
649
- del statestack[new_state:]
645
+ # pop, but keep at least one state on the stack
646
+ # (random code leading to unexpected pops should
647
+ # not allow exceptions)
648
+ if abs(new_state) >= len(statestack):
649
+ del statestack[1:]
650
+ else:
651
+ del statestack[new_state:]
650
652
  elif new_state == '#push':
651
653
  statestack.append(statestack[-1])
652
654
  else:
@@ -661,7 +663,7 @@ class RegexLexer(Lexer):
661
663
  # at EOL, reset state to "root"
662
664
  statestack = ['root']
663
665
  statetokens = tokendefs['root']
664
- yield pos, Text, u'\n'
666
+ yield pos, Text, '\n'
665
667
  pos += 1
666
668
  continue
667
669
  yield pos, Error, text[pos]
@@ -670,7 +672,7 @@ class RegexLexer(Lexer):
670
672
  break
671
673
 
672
674
 
673
- class LexerContext(object):
675
+ class LexerContext:
674
676
  """
675
677
  A helper object that holds lexer position data.
676
678
  """
@@ -713,8 +715,7 @@ class ExtendedRegexLexer(RegexLexer):
713
715
  yield ctx.pos, action, m.group()
714
716
  ctx.pos = m.end()
715
717
  else:
716
- for item in action(self, m, ctx):
717
- yield item
718
+ yield from action(self, m, ctx)
718
719
  if not new_state:
719
720
  # altered the state stack?
720
721
  statetokens = tokendefs[ctx.stack[-1]]
@@ -724,14 +725,18 @@ class ExtendedRegexLexer(RegexLexer):
724
725
  if isinstance(new_state, tuple):
725
726
  for state in new_state:
726
727
  if state == '#pop':
727
- ctx.stack.pop()
728
+ if len(ctx.stack) > 1:
729
+ ctx.stack.pop()
728
730
  elif state == '#push':
729
731
  ctx.stack.append(ctx.stack[-1])
730
732
  else:
731
733
  ctx.stack.append(state)
732
734
  elif isinstance(new_state, int):
733
- # pop
734
- del ctx.stack[new_state:]
735
+ # see RegexLexer for why this check is made
736
+ if abs(new_state) >= len(ctx.stack):
737
+ del ctx.state[1:]
738
+ else:
739
+ del ctx.stack[new_state:]
735
740
  elif new_state == '#push':
736
741
  ctx.stack.append(ctx.stack[-1])
737
742
  else:
@@ -746,7 +751,7 @@ class ExtendedRegexLexer(RegexLexer):
746
751
  # at EOL, reset state to "root"
747
752
  ctx.stack = ['root']
748
753
  statetokens = tokendefs['root']
749
- yield ctx.pos, Text, u'\n'
754
+ yield ctx.pos, Text, '\n'
750
755
  ctx.pos += 1
751
756
  continue
752
757
  yield ctx.pos, Error, text[ctx.pos]
@@ -774,8 +779,7 @@ def do_insertions(insertions, tokens):
774
779
  index, itokens = next(insertions)
775
780
  except StopIteration:
776
781
  # no insertions
777
- for item in tokens:
778
- yield item
782
+ yield from tokens
779
783
  return
780
784
 
781
785
  realpos = None
@@ -840,8 +844,7 @@ class ProfilingRegexLexerMeta(RegexLexerMeta):
840
844
  return match_func
841
845
 
842
846
 
843
- @add_metaclass(ProfilingRegexLexerMeta)
844
- class ProfilingRegexLexer(RegexLexer):
847
+ class ProfilingRegexLexer(RegexLexer, metaclass=ProfilingRegexLexerMeta):
845
848
  """Drop-in replacement for RegexLexer that does profiling of its regexes."""
846
849
 
847
850
  _prof_data = []
@@ -850,8 +853,7 @@ class ProfilingRegexLexer(RegexLexer):
850
853
  def get_tokens_unprocessed(self, text, stack=('root',)):
851
854
  # this needs to be a stack, since using(this) will produce nested calls
852
855
  self.__class__._prof_data.append({})
853
- for tok in RegexLexer.get_tokens_unprocessed(self, text, stack):
854
- yield tok
856
+ yield from RegexLexer.get_tokens_unprocessed(self, text, stack)
855
857
  rawdata = self.__class__._prof_data.pop()
856
858
  data = sorted(((s, repr(r).strip('u\'').replace('\\\\', '\\')[:65],
857
859
  n, 1000 * t, 1000 * t / n)