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
  Formatter for Pixmap 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
 
@@ -14,7 +14,7 @@ import sys
14
14
 
15
15
  from pygments.formatter import Formatter
16
16
  from pygments.util import get_bool_opt, get_int_opt, get_list_opt, \
17
- get_choice_opt, xrange
17
+ get_choice_opt
18
18
 
19
19
  import subprocess
20
20
 
@@ -46,9 +46,9 @@ STYLES = {
46
46
  }
47
47
 
48
48
  # A sane default for modern systems
49
- DEFAULT_FONT_NAME_NIX = 'Bitstream Vera Sans Mono'
49
+ DEFAULT_FONT_NAME_NIX = 'DejaVu Sans Mono'
50
50
  DEFAULT_FONT_NAME_WIN = 'Courier New'
51
- DEFAULT_FONT_NAME_MAC = 'Courier New'
51
+ DEFAULT_FONT_NAME_MAC = 'Menlo'
52
52
 
53
53
 
54
54
  class PilNotAvailable(ImportError):
@@ -59,7 +59,7 @@ class FontNotFound(Exception):
59
59
  """When there are no usable fonts specified"""
60
60
 
61
61
 
62
- class FontManager(object):
62
+ class FontManager:
63
63
  """
64
64
  Manages a set of fonts: normal, italic, bold, etc...
65
65
  """
@@ -125,8 +125,9 @@ class FontManager(object):
125
125
  for font_dir in (os.path.join(os.getenv("HOME"), 'Library/Fonts/'),
126
126
  '/Library/Fonts/', '/System/Library/Fonts/'):
127
127
  font_map.update(
128
- ((os.path.splitext(f)[0].lower(), os.path.join(font_dir, f))
129
- for f in os.listdir(font_dir) if f.lower().endswith('ttf')))
128
+ (os.path.splitext(f)[0].lower(), os.path.join(font_dir, f))
129
+ for f in os.listdir(font_dir)
130
+ if f.lower().endswith(('ttf', 'ttc')))
130
131
 
131
132
  for name in STYLES['NORMAL']:
132
133
  path = self._get_mac_font_path(font_map, self.font_name, name)
@@ -164,31 +165,43 @@ class FontManager(object):
164
165
  return None
165
166
 
166
167
  def _create_win(self):
167
- try:
168
- key = _winreg.OpenKey(
169
- _winreg.HKEY_LOCAL_MACHINE,
170
- r'Software\Microsoft\Windows NT\CurrentVersion\Fonts')
171
- except EnvironmentError:
168
+ lookuperror = None
169
+ keynames = [ (_winreg.HKEY_CURRENT_USER, r'Software\Microsoft\Windows NT\CurrentVersion\Fonts'),
170
+ (_winreg.HKEY_CURRENT_USER, r'Software\Microsoft\Windows\CurrentVersion\Fonts'),
171
+ (_winreg.HKEY_LOCAL_MACHINE, r'Software\Microsoft\Windows NT\CurrentVersion\Fonts'),
172
+ (_winreg.HKEY_LOCAL_MACHINE, r'Software\Microsoft\Windows\CurrentVersion\Fonts') ]
173
+ for keyname in keynames:
172
174
  try:
173
- key = _winreg.OpenKey(
174
- _winreg.HKEY_LOCAL_MACHINE,
175
- r'Software\Microsoft\Windows\CurrentVersion\Fonts')
175
+ key = _winreg.OpenKey(*keyname)
176
+ try:
177
+ path = self._lookup_win(key, self.font_name, STYLES['NORMAL'], True)
178
+ self.fonts['NORMAL'] = ImageFont.truetype(path, self.font_size)
179
+ for style in ('ITALIC', 'BOLD', 'BOLDITALIC'):
180
+ path = self._lookup_win(key, self.font_name, STYLES[style])
181
+ if path:
182
+ self.fonts[style] = ImageFont.truetype(path, self.font_size)
183
+ else:
184
+ if style == 'BOLDITALIC':
185
+ self.fonts[style] = self.fonts['BOLD']
186
+ else:
187
+ self.fonts[style] = self.fonts['NORMAL']
188
+ return
189
+ except FontNotFound as err:
190
+ lookuperror = err
191
+ finally:
192
+ _winreg.CloseKey(key)
176
193
  except EnvironmentError:
177
- raise FontNotFound('Can\'t open Windows font registry key')
178
- try:
179
- path = self._lookup_win(key, self.font_name, STYLES['NORMAL'], True)
180
- self.fonts['NORMAL'] = ImageFont.truetype(path, self.font_size)
181
- for style in ('ITALIC', 'BOLD', 'BOLDITALIC'):
182
- path = self._lookup_win(key, self.font_name, STYLES[style])
183
- if path:
184
- self.fonts[style] = ImageFont.truetype(path, self.font_size)
185
- else:
186
- if style == 'BOLDITALIC':
187
- self.fonts[style] = self.fonts['BOLD']
188
- else:
189
- self.fonts[style] = self.fonts['NORMAL']
190
- finally:
191
- _winreg.CloseKey(key)
194
+ pass
195
+ else:
196
+ # If we get here, we checked all registry keys and had no luck
197
+ # We can be in one of two situations now:
198
+ # * All key lookups failed. In this case lookuperror is None and we
199
+ # will raise a generic error
200
+ # * At least one lookup failed with a FontNotFound error. In this
201
+ # case, we will raise that as a more specific error
202
+ if lookuperror:
203
+ raise lookuperror
204
+ raise FontNotFound('Can\'t open Windows font registry key')
192
205
 
193
206
  def get_char_size(self):
194
207
  """
@@ -196,6 +209,12 @@ class FontManager(object):
196
209
  """
197
210
  return self.fonts['NORMAL'].getsize('M')
198
211
 
212
+ def get_text_size(self, text):
213
+ """
214
+ Get the text size(width, height).
215
+ """
216
+ return self.fonts['NORMAL'].getsize(text)
217
+
199
218
  def get_font(self, bold, oblique):
200
219
  """
201
220
  Get the font based on bold and italic flags.
@@ -237,7 +256,8 @@ class ImageFormatter(Formatter):
237
256
  bold and italic fonts will be generated. This really should be a
238
257
  monospace font to look sane.
239
258
 
240
- Default: "Bitstream Vera Sans Mono" on Windows, Courier New on \*nix
259
+ Default: "Courier New" on Windows, "Menlo" on Mac OS, and
260
+ "DejaVu Sans Mono" on \\*nix
241
261
 
242
262
  `font_size`
243
263
  The font size in points to be used.
@@ -405,17 +425,17 @@ class ImageFormatter(Formatter):
405
425
  """
406
426
  return self.fontw
407
427
 
408
- def _get_char_x(self, charno):
428
+ def _get_char_x(self, linelength):
409
429
  """
410
430
  Get the X coordinate of a character position.
411
431
  """
412
- return charno * self.fontw + self.image_pad + self.line_number_width
432
+ return linelength + self.image_pad + self.line_number_width
413
433
 
414
- def _get_text_pos(self, charno, lineno):
434
+ def _get_text_pos(self, linelength, lineno):
415
435
  """
416
436
  Get the actual position for a character and line position.
417
437
  """
418
- return self._get_char_x(charno), self._get_line_y(lineno)
438
+ return self._get_char_x(linelength), self._get_line_y(lineno)
419
439
 
420
440
  def _get_linenumber_pos(self, lineno):
421
441
  """
@@ -439,11 +459,11 @@ class ImageFormatter(Formatter):
439
459
  """
440
460
  return self.fonts.get_font(style['bold'], style['italic'])
441
461
 
442
- def _get_image_size(self, maxcharno, maxlineno):
462
+ def _get_image_size(self, maxlinelength, maxlineno):
443
463
  """
444
464
  Get the required image size.
445
465
  """
446
- return (self._get_char_x(maxcharno) + self.image_pad,
466
+ return (self._get_char_x(maxlinelength) + self.image_pad,
447
467
  self._get_line_y(maxlineno + 0) + self.image_pad)
448
468
 
449
469
  def _draw_linenumber(self, posno, lineno):
@@ -469,6 +489,7 @@ class ImageFormatter(Formatter):
469
489
  Create drawables for the token content.
470
490
  """
471
491
  lineno = charno = maxcharno = 0
492
+ maxlinelength = linelength = 0
472
493
  for ttype, value in tokensource:
473
494
  while ttype not in self.styles:
474
495
  ttype = ttype.parent
@@ -483,17 +504,22 @@ class ImageFormatter(Formatter):
483
504
  temp = line.rstrip('\n')
484
505
  if temp:
485
506
  self._draw_text(
486
- self._get_text_pos(charno, lineno),
507
+ self._get_text_pos(linelength, lineno),
487
508
  temp,
488
509
  font = self._get_style_font(style),
489
510
  fill = self._get_text_color(style)
490
511
  )
512
+ temp_width, temp_hight = self.fonts.get_text_size(temp)
513
+ linelength += temp_width
514
+ maxlinelength = max(maxlinelength, linelength)
491
515
  charno += len(temp)
492
516
  maxcharno = max(maxcharno, charno)
493
517
  if line.endswith('\n'):
494
518
  # add a line for each extra line in the value
519
+ linelength = 0
495
520
  charno = 0
496
521
  lineno += 1
522
+ self.maxlinelength = maxlinelength
497
523
  self.maxcharno = maxcharno
498
524
  self.maxlineno = lineno
499
525
 
@@ -503,7 +529,7 @@ class ImageFormatter(Formatter):
503
529
  """
504
530
  if not self.line_numbers:
505
531
  return
506
- for p in xrange(self.maxlineno):
532
+ for p in range(self.maxlineno):
507
533
  n = p + self.line_number_start
508
534
  if (n % self.line_number_step) == 0:
509
535
  self._draw_linenumber(p, n)
@@ -521,7 +547,8 @@ class ImageFormatter(Formatter):
521
547
  rectw = self.image_pad + self.line_number_width - self.line_number_pad
522
548
  draw.rectangle([(0, 0), (rectw, recth)],
523
549
  fill=self.line_number_bg)
524
- draw.line([(rectw, 0), (rectw, recth)], fill=self.line_number_fg)
550
+ if self.line_number_separator:
551
+ draw.line([(rectw, 0), (rectw, recth)], fill=self.line_number_fg)
525
552
  del draw
526
553
 
527
554
  def format(self, tokensource, outfile):
@@ -536,7 +563,7 @@ class ImageFormatter(Formatter):
536
563
  self._draw_line_numbers()
537
564
  im = Image.new(
538
565
  'RGB',
539
- self._get_image_size(self.maxcharno, self.maxlineno),
566
+ self._get_image_size(self.maxlinelength, self.maxlineno),
540
567
  self.background_color
541
568
  )
542
569
  self._paint_line_number_bg(im)
@@ -5,7 +5,7 @@
5
5
 
6
6
  Formatter for IRC 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
 
@@ -25,55 +25,55 @@ __all__ = ['IRCFormatter']
25
25
  IRC_COLORS = {
26
26
  Token: ('', ''),
27
27
 
28
- Whitespace: ('lightgray', 'darkgray'),
29
- Comment: ('lightgray', 'darkgray'),
30
- Comment.Preproc: ('teal', 'turquoise'),
31
- Keyword: ('darkblue', 'blue'),
32
- Keyword.Type: ('teal', 'turquoise'),
33
- Operator.Word: ('purple', 'fuchsia'),
34
- Name.Builtin: ('teal', 'turquoise'),
35
- Name.Function: ('darkgreen', 'green'),
36
- Name.Namespace: ('_teal_', '_turquoise_'),
37
- Name.Class: ('_darkgreen_', '_green_'),
38
- Name.Exception: ('teal', 'turquoise'),
39
- Name.Decorator: ('darkgray', 'lightgray'),
40
- Name.Variable: ('darkred', 'red'),
41
- Name.Constant: ('darkred', 'red'),
42
- Name.Attribute: ('teal', 'turquoise'),
43
- Name.Tag: ('blue', 'blue'),
44
- String: ('brown', 'brown'),
45
- Number: ('darkblue', 'blue'),
46
-
47
- Generic.Deleted: ('red', 'red'),
48
- Generic.Inserted: ('darkgreen', 'green'),
28
+ Whitespace: ('gray', 'brightblack'),
29
+ Comment: ('gray', 'brightblack'),
30
+ Comment.Preproc: ('cyan', 'brightcyan'),
31
+ Keyword: ('blue', 'brightblue'),
32
+ Keyword.Type: ('cyan', 'brightcyan'),
33
+ Operator.Word: ('magenta', 'brightcyan'),
34
+ Name.Builtin: ('cyan', 'brightcyan'),
35
+ Name.Function: ('green', 'brightgreen'),
36
+ Name.Namespace: ('_cyan_', '_brightcyan_'),
37
+ Name.Class: ('_green_', '_brightgreen_'),
38
+ Name.Exception: ('cyan', 'brightcyan'),
39
+ Name.Decorator: ('brightblack', 'gray'),
40
+ Name.Variable: ('red', 'brightred'),
41
+ Name.Constant: ('red', 'brightred'),
42
+ Name.Attribute: ('cyan', 'brightcyan'),
43
+ Name.Tag: ('brightblue', 'brightblue'),
44
+ String: ('yellow', 'yellow'),
45
+ Number: ('blue', 'brightblue'),
46
+
47
+ Generic.Deleted: ('brightred', 'brightred'),
48
+ Generic.Inserted: ('green', 'brightgreen'),
49
49
  Generic.Heading: ('**', '**'),
50
- Generic.Subheading: ('*purple*', '*fuchsia*'),
51
- Generic.Error: ('red', 'red'),
50
+ Generic.Subheading: ('*magenta*', '*brightmagenta*'),
51
+ Generic.Error: ('brightred', 'brightred'),
52
52
 
53
- Error: ('_red_', '_red_'),
53
+ Error: ('_brightred_', '_brightred_'),
54
54
  }
55
55
 
56
56
 
57
57
  IRC_COLOR_MAP = {
58
58
  'white': 0,
59
59
  'black': 1,
60
- 'darkblue': 2,
61
- 'green': 3,
62
- 'red': 4,
63
- 'brown': 5,
64
- 'purple': 6,
60
+ 'blue': 2,
61
+ 'brightgreen': 3,
62
+ 'brightred': 4,
63
+ 'yellow': 5,
64
+ 'magenta': 6,
65
65
  'orange': 7,
66
- 'darkgreen': 7, #compat w/ ansi
67
- 'yellow': 8,
66
+ 'green': 7, #compat w/ ansi
67
+ 'brightyellow': 8,
68
68
  'lightgreen': 9,
69
- 'turquoise': 9, # compat w/ ansi
70
- 'teal': 10,
69
+ 'brightcyan': 9, # compat w/ ansi
70
+ 'cyan': 10,
71
71
  'lightblue': 11,
72
- 'darkred': 11, # compat w/ ansi
73
- 'blue': 12,
74
- 'fuchsia': 13,
75
- 'darkgray': 14,
76
- 'lightgray': 15,
72
+ 'red': 11, # compat w/ ansi
73
+ 'brightblue': 12,
74
+ 'brightmagenta': 13,
75
+ 'brightblack': 14,
76
+ 'gray': 15,
77
77
  }
78
78
 
79
79
  def ircformat(color, text):
@@ -5,17 +5,16 @@
5
5
 
6
6
  Formatter for LaTeX fancyvrb 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
- from __future__ import division
12
+ from io import StringIO
13
13
 
14
14
  from pygments.formatter import Formatter
15
- from pygments.lexer import Lexer
15
+ from pygments.lexer import Lexer, do_insertions
16
16
  from pygments.token import Token, STANDARD_TYPES
17
- from pygments.util import get_bool_opt, get_int_opt, StringIO, xrange, \
18
- iteritems
17
+ from pygments.util import get_bool_opt, get_int_opt
19
18
 
20
19
 
21
20
  __all__ = ['LatexFormatter']
@@ -266,7 +265,7 @@ class LatexFormatter(Formatter):
266
265
  self.right = self.escapeinside[1]
267
266
  else:
268
267
  self.escapeinside = ''
269
- self.envname = options.get('envname', u'Verbatim')
268
+ self.envname = options.get('envname', 'Verbatim')
270
269
 
271
270
  self._create_stylesheet()
272
271
 
@@ -322,7 +321,7 @@ class LatexFormatter(Formatter):
322
321
  """
323
322
  cp = self.commandprefix
324
323
  styles = []
325
- for name, definition in iteritems(self.cmd2def):
324
+ for name, definition in self.cmd2def.items():
326
325
  styles.append(r'\expandafter\def\csname %s@tok@%s\endcsname{%s}' %
327
326
  (cp, name, definition))
328
327
  return STYLE_TEMPLATE % {'cp': self.commandprefix,
@@ -337,24 +336,24 @@ class LatexFormatter(Formatter):
337
336
  realoutfile = outfile
338
337
  outfile = StringIO()
339
338
 
340
- outfile.write(u'\\begin{' + self.envname + u'}[commandchars=\\\\\\{\\}')
339
+ outfile.write('\\begin{' + self.envname + '}[commandchars=\\\\\\{\\}')
341
340
  if self.linenos:
342
341
  start, step = self.linenostart, self.linenostep
343
- outfile.write(u',numbers=left' +
344
- (start and u',firstnumber=%d' % start or u'') +
345
- (step and u',stepnumber=%d' % step or u''))
342
+ outfile.write(',numbers=left' +
343
+ (start and ',firstnumber=%d' % start or '') +
344
+ (step and ',stepnumber=%d' % step or ''))
346
345
  if self.mathescape or self.texcomments or self.escapeinside:
347
- outfile.write(u',codes={\\catcode`\\$=3\\catcode`\\^=7\\catcode`\\_=8}')
346
+ outfile.write(',codes={\\catcode`\\$=3\\catcode`\\^=7\\catcode`\\_=8}')
348
347
  if self.verboptions:
349
- outfile.write(u',' + self.verboptions)
350
- outfile.write(u']\n')
348
+ outfile.write(',' + self.verboptions)
349
+ outfile.write(']\n')
351
350
 
352
351
  for ttype, value in tokensource:
353
352
  if ttype in Token.Comment:
354
353
  if self.texcomments:
355
354
  # Try to guess comment starting lexeme and escape it ...
356
355
  start = value[0:1]
357
- for i in xrange(1, len(value)):
356
+ for i in range(1, len(value)):
358
357
  if start[0] != value[i]:
359
358
  break
360
359
  start += value[i]
@@ -410,7 +409,7 @@ class LatexFormatter(Formatter):
410
409
  else:
411
410
  outfile.write(value)
412
411
 
413
- outfile.write(u'\\end{' + self.envname + u'}\n')
412
+ outfile.write('\\end{' + self.envname + '}\n')
414
413
 
415
414
  if self.full:
416
415
  encoding = self.encoding or 'utf8'
@@ -447,13 +446,44 @@ class LatexEmbeddedLexer(Lexer):
447
446
  Lexer.__init__(self, **options)
448
447
 
449
448
  def get_tokens_unprocessed(self, text):
449
+ # find and remove all the escape tokens (replace with an empty string)
450
+ # this is very similar to DelegatingLexer.get_tokens_unprocessed.
451
+ buffered = ''
452
+ insertions = []
453
+ insertion_buf = []
454
+ for i, t, v in self._find_safe_escape_tokens(text):
455
+ if t is None:
456
+ if insertion_buf:
457
+ insertions.append((len(buffered), insertion_buf))
458
+ insertion_buf = []
459
+ buffered += v
460
+ else:
461
+ insertion_buf.append((i, t, v))
462
+ if insertion_buf:
463
+ insertions.append((len(buffered), insertion_buf))
464
+ return do_insertions(insertions,
465
+ self.lang.get_tokens_unprocessed(buffered))
466
+
467
+ def _find_safe_escape_tokens(self, text):
468
+ """ find escape tokens that are not in strings or comments """
469
+ for i, t, v in self._filter_to(
470
+ self.lang.get_tokens_unprocessed(text),
471
+ lambda t: t in Token.Comment or t in Token.String
472
+ ):
473
+ if t is None:
474
+ for i2, t2, v2 in self._find_escape_tokens(v):
475
+ yield i + i2, t2, v2
476
+ else:
477
+ yield i, None, v
478
+
479
+ def _filter_to(self, it, pred):
480
+ """ Keep only the tokens that match `pred`, merge the others together """
450
481
  buf = ''
451
482
  idx = 0
452
- for i, t, v in self.lang.get_tokens_unprocessed(text):
453
- if t in Token.Comment or t in Token.String:
483
+ for i, t, v in it:
484
+ if pred(t):
454
485
  if buf:
455
- for x in self.get_tokens_aux(idx, buf):
456
- yield x
486
+ yield idx, None, buf
457
487
  buf = ''
458
488
  yield i, t, v
459
489
  else:
@@ -461,16 +491,16 @@ class LatexEmbeddedLexer(Lexer):
461
491
  idx = i
462
492
  buf += v
463
493
  if buf:
464
- for x in self.get_tokens_aux(idx, buf):
465
- yield x
494
+ yield idx, None, buf
466
495
 
467
- def get_tokens_aux(self, index, text):
496
+ def _find_escape_tokens(self, text):
497
+ """ Find escape tokens within text, give token=None otherwise """
498
+ index = 0
468
499
  while text:
469
500
  a, sep1, text = text.partition(self.left)
470
501
  if a:
471
- for i, t, v in self.lang.get_tokens_unprocessed(a):
472
- yield index + i, t, v
473
- index += len(a)
502
+ yield index, None, a
503
+ index += len(a)
474
504
  if sep1:
475
505
  b, sep2, text = text.partition(self.right)
476
506
  if sep2:
@@ -5,12 +5,12 @@
5
5
 
6
6
  Other formatters: NullFormatter, RawTokenFormatter.
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 OptionError, get_choice_opt
13
+ from pygments.util import get_choice_opt
14
14
  from pygments.token import Token
15
15
  from pygments.console import colorize
16
16
 
@@ -87,14 +87,17 @@ class RawTokenFormatter(Formatter):
87
87
  if self.compress == 'gz':
88
88
  import gzip
89
89
  outfile = gzip.GzipFile('', 'wb', 9, outfile)
90
+
90
91
  def write(text):
91
92
  outfile.write(text.encode())
92
93
  flush = outfile.flush
93
94
  elif self.compress == 'bz2':
94
95
  import bz2
95
96
  compressor = bz2.BZ2Compressor(9)
97
+
96
98
  def write(text):
97
99
  outfile.write(compressor.compress(text.encode()))
100
+
98
101
  def flush():
99
102
  outfile.write(compressor.flush())
100
103
  outfile.flush()
@@ -115,14 +118,15 @@ class RawTokenFormatter(Formatter):
115
118
  write("%s\t%r\n" % (ttype, value))
116
119
  flush()
117
120
 
118
- TESTCASE_BEFORE = u'''\
119
- def testNeedsName(self):
121
+
122
+ TESTCASE_BEFORE = '''\
123
+ def testNeedsName(lexer):
120
124
  fragment = %r
121
125
  tokens = [
122
126
  '''
123
- TESTCASE_AFTER = u'''\
127
+ TESTCASE_AFTER = '''\
124
128
  ]
125
- self.assertEqual(tokens, list(self.lexer.get_tokens(fragment)))
129
+ assert list(lexer.get_tokens(fragment)) == tokens
126
130
  '''
127
131
 
128
132
 
@@ -148,8 +152,8 @@ class TestcaseFormatter(Formatter):
148
152
  rawbuf.append(value)
149
153
  outbuf.append('%s(%s, %r),\n' % (indentation, ttype, value))
150
154
 
151
- before = TESTCASE_BEFORE % (u''.join(rawbuf),)
152
- during = u''.join(outbuf)
155
+ before = TESTCASE_BEFORE % (''.join(rawbuf),)
156
+ during = ''.join(outbuf)
153
157
  after = TESTCASE_AFTER
154
158
  if self.encoding is None:
155
159
  outfile.write(before + during + after)