pygments.rb 1.2.1 → 2.2.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 (386) hide show
  1. checksums.yaml +5 -5
  2. data/.github/dependabot.yml +13 -0
  3. data/.github/workflows/ci.yml +40 -0
  4. data/.github/workflows/release.yml +24 -0
  5. data/.gitignore +4 -6
  6. data/.rubocop.yml +16 -0
  7. data/CHANGELOG.adoc +137 -0
  8. data/Gemfile +3 -1
  9. data/LICENSE +1 -1
  10. data/README.adoc +159 -0
  11. data/Rakefile +8 -32
  12. data/bench.rb +14 -8
  13. data/lib/pygments.rb +16 -14
  14. data/lib/pygments/lexer.rb +87 -65
  15. data/lib/pygments/mentos.py +23 -110
  16. data/lib/pygments/popen.rb +188 -284
  17. data/lib/pygments/version.rb +2 -2
  18. data/pygments.rb.gemspec +20 -13
  19. data/test/test_pygments.rb +50 -110
  20. data/vendor/pygments-main/{AUTHORS → Pygments-2.8.1.dist-info/AUTHORS} +26 -3
  21. data/vendor/pygments-main/Pygments-2.8.1.dist-info/INSTALLER +1 -0
  22. data/vendor/pygments-main/{LICENSE → Pygments-2.8.1.dist-info/LICENSE} +1 -1
  23. data/vendor/pygments-main/Pygments-2.8.1.dist-info/METADATA +48 -0
  24. data/vendor/pygments-main/Pygments-2.8.1.dist-info/RECORD +494 -0
  25. data/vendor/pygments-main/Pygments-2.8.1.dist-info/REQUESTED +0 -0
  26. data/vendor/pygments-main/Pygments-2.8.1.dist-info/WHEEL +5 -0
  27. data/vendor/pygments-main/Pygments-2.8.1.dist-info/entry_points.txt +3 -0
  28. data/vendor/pygments-main/Pygments-2.8.1.dist-info/top_level.txt +1 -0
  29. data/vendor/pygments-main/bin/pygmentize +8 -0
  30. data/vendor/pygments-main/pygments/__init__.py +6 -12
  31. data/vendor/pygments-main/pygments/__main__.py +17 -0
  32. data/vendor/pygments-main/pygments/cmdline.py +213 -184
  33. data/vendor/pygments-main/pygments/console.py +6 -10
  34. data/vendor/pygments-main/pygments/filter.py +4 -7
  35. data/vendor/pygments-main/pygments/filters/__init__.py +609 -22
  36. data/vendor/pygments-main/pygments/formatter.py +4 -5
  37. data/vendor/pygments-main/pygments/formatters/__init__.py +10 -10
  38. data/vendor/pygments-main/pygments/formatters/_mapping.py +1 -4
  39. data/vendor/pygments-main/pygments/formatters/bbcode.py +1 -2
  40. data/vendor/pygments-main/pygments/formatters/html.py +242 -139
  41. data/vendor/pygments-main/pygments/formatters/img.py +91 -50
  42. data/vendor/pygments-main/pygments/formatters/irc.py +39 -40
  43. data/vendor/pygments-main/pygments/formatters/latex.py +62 -33
  44. data/vendor/pygments-main/pygments/formatters/other.py +18 -17
  45. data/vendor/pygments-main/pygments/formatters/rtf.py +29 -30
  46. data/vendor/pygments-main/pygments/formatters/svg.py +40 -5
  47. data/vendor/pygments-main/pygments/formatters/terminal.py +25 -32
  48. data/vendor/pygments-main/pygments/formatters/terminal256.py +45 -14
  49. data/vendor/pygments-main/pygments/lexer.py +47 -44
  50. data/vendor/pygments-main/pygments/lexers/__init__.py +341 -0
  51. data/vendor/pygments-main/pygments/lexers/_asy_builtins.py +1644 -0
  52. data/vendor/pygments-main/pygments/lexers/_cl_builtins.py +231 -0
  53. data/vendor/pygments-main/pygments/lexers/_cocoa_builtins.py +75 -0
  54. data/vendor/pygments-main/pygments/lexers/_csound_builtins.py +1724 -0
  55. data/vendor/pygments-main/pygments/lexers/_lasso_builtins.py +5326 -0
  56. data/vendor/pygments-main/pygments/lexers/_lua_builtins.py +292 -0
  57. data/vendor/pygments-main/pygments/lexers/_mapping.py +554 -0
  58. data/vendor/pygments-main/pygments/lexers/_mql_builtins.py +1171 -0
  59. data/vendor/pygments-main/pygments/lexers/_mysql_builtins.py +1281 -0
  60. data/vendor/pygments-main/pygments/lexers/_openedge_builtins.py +2600 -0
  61. data/vendor/pygments-main/pygments/lexers/_php_builtins.py +4752 -0
  62. data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +677 -0
  63. data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +3093 -0
  64. data/vendor/pygments-main/pygments/lexers/_sourcemod_builtins.py +1160 -0
  65. data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +557 -0
  66. data/vendor/pygments-main/pygments/lexers/_stata_builtins.py +457 -0
  67. data/vendor/pygments-main/pygments/lexers/_tsql_builtins.py +1003 -0
  68. data/vendor/pygments-main/pygments/lexers/_usd_builtins.py +112 -0
  69. data/vendor/pygments-main/pygments/lexers/_vbscript_builtins.py +279 -0
  70. data/vendor/pygments-main/pygments/lexers/_vim_builtins.py +1938 -0
  71. data/vendor/pygments-main/pygments/lexers/actionscript.py +244 -0
  72. data/vendor/pygments-main/pygments/lexers/agile.py +23 -0
  73. data/vendor/pygments-main/pygments/lexers/algebra.py +239 -0
  74. data/vendor/pygments-main/pygments/lexers/ambient.py +75 -0
  75. data/vendor/pygments-main/pygments/lexers/amdgpu.py +48 -0
  76. data/vendor/pygments-main/pygments/lexers/ampl.py +86 -0
  77. data/vendor/pygments-main/pygments/lexers/apl.py +100 -0
  78. data/vendor/pygments-main/pygments/lexers/archetype.py +317 -0
  79. data/vendor/pygments-main/pygments/lexers/arrow.py +116 -0
  80. data/vendor/pygments-main/pygments/lexers/asm.py +1004 -0
  81. data/vendor/pygments-main/pygments/lexers/automation.py +379 -0
  82. data/vendor/pygments-main/pygments/lexers/bare.py +103 -0
  83. data/vendor/pygments-main/pygments/lexers/basic.py +661 -0
  84. data/vendor/pygments-main/pygments/lexers/bibtex.py +159 -0
  85. data/vendor/pygments-main/pygments/lexers/boa.py +101 -0
  86. data/vendor/pygments-main/pygments/lexers/business.py +626 -0
  87. data/vendor/pygments-main/pygments/lexers/c_cpp.py +342 -0
  88. data/vendor/pygments-main/pygments/lexers/c_like.py +565 -0
  89. data/vendor/pygments-main/pygments/lexers/capnproto.py +77 -0
  90. data/vendor/pygments-main/pygments/lexers/cddl.py +190 -0
  91. data/vendor/pygments-main/pygments/lexers/chapel.py +111 -0
  92. data/vendor/pygments-main/pygments/lexers/clean.py +178 -0
  93. data/vendor/pygments-main/pygments/lexers/compiled.py +33 -0
  94. data/vendor/pygments-main/pygments/lexers/configs.py +985 -0
  95. data/vendor/pygments-main/pygments/lexers/console.py +113 -0
  96. data/vendor/pygments-main/pygments/lexers/crystal.py +366 -0
  97. data/vendor/pygments-main/pygments/lexers/csound.py +466 -0
  98. data/vendor/pygments-main/pygments/lexers/css.py +694 -0
  99. data/vendor/pygments-main/pygments/lexers/d.py +255 -0
  100. data/vendor/pygments-main/pygments/lexers/dalvik.py +124 -0
  101. data/vendor/pygments-main/pygments/lexers/data.py +697 -0
  102. data/vendor/pygments-main/pygments/lexers/devicetree.py +108 -0
  103. data/vendor/pygments-main/pygments/lexers/diff.py +164 -0
  104. data/vendor/pygments-main/pygments/lexers/dotnet.py +706 -0
  105. data/vendor/pygments-main/pygments/lexers/dsls.py +959 -0
  106. data/vendor/pygments-main/pygments/lexers/dylan.py +286 -0
  107. data/vendor/pygments-main/pygments/lexers/ecl.py +137 -0
  108. data/vendor/pygments-main/pygments/lexers/eiffel.py +64 -0
  109. data/vendor/pygments-main/pygments/lexers/elm.py +120 -0
  110. data/vendor/pygments-main/pygments/lexers/email.py +150 -0
  111. data/vendor/pygments-main/pygments/lexers/erlang.py +529 -0
  112. data/vendor/pygments-main/pygments/lexers/esoteric.py +303 -0
  113. data/vendor/pygments-main/pygments/lexers/ezhil.py +76 -0
  114. data/vendor/pygments-main/pygments/lexers/factor.py +343 -0
  115. data/vendor/pygments-main/pygments/lexers/fantom.py +249 -0
  116. data/vendor/pygments-main/pygments/lexers/felix.py +272 -0
  117. data/vendor/pygments-main/pygments/lexers/floscript.py +82 -0
  118. data/vendor/pygments-main/pygments/lexers/forth.py +177 -0
  119. data/vendor/pygments-main/pygments/lexers/fortran.py +208 -0
  120. data/vendor/pygments-main/pygments/lexers/foxpro.py +427 -0
  121. data/vendor/pygments-main/pygments/lexers/freefem.py +897 -0
  122. data/vendor/pygments-main/pygments/lexers/functional.py +20 -0
  123. data/vendor/pygments-main/pygments/lexers/futhark.py +110 -0
  124. data/vendor/pygments-main/pygments/lexers/gdscript.py +345 -0
  125. data/vendor/pygments-main/pygments/lexers/go.py +100 -0
  126. data/vendor/pygments-main/pygments/lexers/grammar_notation.py +269 -0
  127. data/vendor/pygments-main/pygments/lexers/graph.py +84 -0
  128. data/vendor/pygments-main/pygments/lexers/graphics.py +799 -0
  129. data/vendor/pygments-main/pygments/lexers/graphviz.py +57 -0
  130. data/vendor/pygments-main/pygments/lexers/haskell.py +869 -0
  131. data/vendor/pygments-main/pygments/lexers/haxe.py +935 -0
  132. data/vendor/pygments-main/pygments/lexers/hdl.py +468 -0
  133. data/vendor/pygments-main/pygments/lexers/hexdump.py +102 -0
  134. data/vendor/pygments-main/pygments/lexers/html.py +613 -0
  135. data/vendor/pygments-main/pygments/lexers/idl.py +280 -0
  136. data/vendor/pygments-main/pygments/lexers/igor.py +419 -0
  137. data/vendor/pygments-main/pygments/lexers/inferno.py +95 -0
  138. data/vendor/pygments-main/pygments/lexers/installers.py +321 -0
  139. data/vendor/pygments-main/pygments/lexers/int_fiction.py +1367 -0
  140. data/vendor/pygments-main/pygments/lexers/iolang.py +62 -0
  141. data/vendor/pygments-main/pygments/lexers/j.py +145 -0
  142. data/vendor/pygments-main/pygments/lexers/javascript.py +1536 -0
  143. data/vendor/pygments-main/pygments/lexers/julia.py +330 -0
  144. data/vendor/pygments-main/pygments/lexers/jvm.py +1739 -0
  145. data/vendor/pygments-main/pygments/lexers/lisp.py +2698 -0
  146. data/vendor/pygments-main/pygments/lexers/make.py +205 -0
  147. data/vendor/pygments-main/pygments/lexers/markup.py +762 -0
  148. data/vendor/pygments-main/pygments/lexers/math.py +20 -0
  149. data/vendor/pygments-main/pygments/lexers/matlab.py +3280 -0
  150. data/vendor/pygments-main/pygments/lexers/mime.py +225 -0
  151. data/vendor/pygments-main/pygments/lexers/ml.py +957 -0
  152. data/vendor/pygments-main/pygments/lexers/modeling.py +365 -0
  153. data/vendor/pygments-main/pygments/lexers/modula2.py +1579 -0
  154. data/vendor/pygments-main/pygments/lexers/monte.py +203 -0
  155. data/vendor/pygments-main/pygments/lexers/mosel.py +447 -0
  156. data/vendor/pygments-main/pygments/lexers/ncl.py +893 -0
  157. data/vendor/pygments-main/pygments/lexers/nimrod.py +158 -0
  158. data/vendor/pygments-main/pygments/lexers/nit.py +63 -0
  159. data/vendor/pygments-main/pygments/lexers/nix.py +135 -0
  160. data/vendor/pygments-main/pygments/lexers/oberon.py +120 -0
  161. data/vendor/pygments-main/pygments/lexers/objective.py +503 -0
  162. data/vendor/pygments-main/pygments/lexers/ooc.py +84 -0
  163. data/vendor/pygments-main/pygments/lexers/other.py +40 -0
  164. data/vendor/pygments-main/pygments/lexers/parasail.py +78 -0
  165. data/vendor/pygments-main/pygments/lexers/parsers.py +799 -0
  166. data/vendor/pygments-main/pygments/lexers/pascal.py +643 -0
  167. data/vendor/pygments-main/pygments/lexers/pawn.py +202 -0
  168. data/vendor/pygments-main/pygments/lexers/perl.py +731 -0
  169. data/vendor/pygments-main/pygments/lexers/php.py +320 -0
  170. data/vendor/pygments-main/pygments/lexers/pointless.py +70 -0
  171. data/vendor/pygments-main/pygments/lexers/pony.py +93 -0
  172. data/vendor/pygments-main/pygments/lexers/praat.py +301 -0
  173. data/vendor/pygments-main/pygments/lexers/prolog.py +305 -0
  174. data/vendor/pygments-main/pygments/lexers/promql.py +182 -0
  175. data/vendor/pygments-main/pygments/lexers/python.py +1158 -0
  176. data/vendor/pygments-main/pygments/lexers/qvt.py +151 -0
  177. data/vendor/pygments-main/pygments/lexers/r.py +190 -0
  178. data/vendor/pygments-main/pygments/lexers/rdf.py +462 -0
  179. data/vendor/pygments-main/pygments/lexers/rebol.py +430 -0
  180. data/vendor/pygments-main/pygments/lexers/resource.py +84 -0
  181. data/vendor/pygments-main/pygments/lexers/ride.py +138 -0
  182. data/vendor/pygments-main/pygments/lexers/rnc.py +66 -0
  183. data/vendor/pygments-main/pygments/lexers/roboconf.py +81 -0
  184. data/vendor/pygments-main/pygments/lexers/robotframework.py +551 -0
  185. data/vendor/pygments-main/pygments/lexers/ruby.py +523 -0
  186. data/vendor/pygments-main/pygments/lexers/rust.py +223 -0
  187. data/vendor/pygments-main/pygments/lexers/sas.py +227 -0
  188. data/vendor/pygments-main/pygments/lexers/scdoc.py +82 -0
  189. data/vendor/pygments-main/pygments/lexers/scripting.py +1283 -0
  190. data/vendor/pygments-main/pygments/lexers/sgf.py +60 -0
  191. data/vendor/pygments-main/pygments/lexers/shell.py +909 -0
  192. data/vendor/pygments-main/pygments/lexers/sieve.py +68 -0
  193. data/vendor/pygments-main/pygments/lexers/slash.py +184 -0
  194. data/vendor/pygments-main/pygments/lexers/smalltalk.py +194 -0
  195. data/vendor/pygments-main/pygments/lexers/smv.py +78 -0
  196. data/vendor/pygments-main/pygments/lexers/snobol.py +82 -0
  197. data/vendor/pygments-main/pygments/lexers/solidity.py +91 -0
  198. data/vendor/pygments-main/pygments/lexers/special.py +106 -0
  199. data/vendor/pygments-main/pygments/lexers/sql.py +832 -0
  200. data/vendor/pygments-main/pygments/lexers/stata.py +170 -0
  201. data/vendor/pygments-main/pygments/lexers/supercollider.py +94 -0
  202. data/vendor/pygments-main/pygments/lexers/tcl.py +144 -0
  203. data/vendor/pygments-main/pygments/lexers/templates.py +2263 -0
  204. data/vendor/pygments-main/pygments/lexers/teraterm.py +334 -0
  205. data/vendor/pygments-main/pygments/lexers/testing.py +206 -0
  206. data/vendor/pygments-main/pygments/lexers/text.py +25 -0
  207. data/vendor/pygments-main/pygments/lexers/textedit.py +168 -0
  208. data/vendor/pygments-main/pygments/lexers/textfmts.py +429 -0
  209. data/vendor/pygments-main/pygments/lexers/theorem.py +476 -0
  210. data/vendor/pygments-main/pygments/lexers/tnt.py +262 -0
  211. data/vendor/pygments-main/pygments/lexers/trafficscript.py +53 -0
  212. data/vendor/pygments-main/pygments/lexers/typoscript.py +218 -0
  213. data/vendor/pygments-main/pygments/lexers/unicon.py +411 -0
  214. data/vendor/pygments-main/pygments/lexers/urbi.py +145 -0
  215. data/vendor/pygments-main/pygments/lexers/usd.py +89 -0
  216. data/vendor/pygments-main/pygments/lexers/varnish.py +189 -0
  217. data/vendor/pygments-main/pygments/lexers/verification.py +113 -0
  218. data/vendor/pygments-main/pygments/lexers/web.py +23 -0
  219. data/vendor/pygments-main/pygments/lexers/webidl.py +298 -0
  220. data/vendor/pygments-main/pygments/lexers/webmisc.py +991 -0
  221. data/vendor/pygments-main/pygments/lexers/whiley.py +115 -0
  222. data/vendor/pygments-main/pygments/lexers/x10.py +68 -0
  223. data/vendor/pygments-main/pygments/lexers/xorg.py +36 -0
  224. data/vendor/pygments-main/pygments/lexers/yang.py +103 -0
  225. data/vendor/pygments-main/pygments/lexers/zig.py +123 -0
  226. data/vendor/pygments-main/pygments/modeline.py +1 -2
  227. data/vendor/pygments-main/pygments/plugin.py +4 -3
  228. data/vendor/pygments-main/pygments/regexopt.py +1 -2
  229. data/vendor/pygments-main/pygments/scanner.py +2 -3
  230. data/vendor/pygments-main/pygments/sphinxext.py +2 -5
  231. data/vendor/pygments-main/pygments/style.py +61 -25
  232. data/vendor/pygments-main/pygments/styles/__init__.py +12 -5
  233. data/vendor/pygments-main/pygments/styles/abap.py +1 -2
  234. data/vendor/pygments-main/pygments/styles/algol.py +1 -2
  235. data/vendor/pygments-main/pygments/styles/algol_nu.py +1 -2
  236. data/vendor/pygments-main/pygments/styles/arduino.py +2 -3
  237. data/vendor/pygments-main/pygments/styles/autumn.py +1 -2
  238. data/vendor/pygments-main/pygments/styles/borland.py +1 -2
  239. data/vendor/pygments-main/pygments/styles/bw.py +1 -2
  240. data/vendor/pygments-main/pygments/styles/colorful.py +1 -2
  241. data/vendor/pygments-main/pygments/styles/default.py +1 -2
  242. data/vendor/pygments-main/pygments/styles/emacs.py +1 -2
  243. data/vendor/pygments-main/pygments/styles/friendly.py +1 -2
  244. data/vendor/pygments-main/pygments/styles/fruity.py +1 -2
  245. data/vendor/pygments-main/pygments/styles/igor.py +1 -2
  246. data/vendor/pygments-main/pygments/styles/inkpot.py +66 -0
  247. data/vendor/pygments-main/pygments/styles/lovelace.py +1 -2
  248. data/vendor/pygments-main/pygments/styles/manni.py +1 -2
  249. data/vendor/pygments-main/pygments/styles/material.py +118 -0
  250. data/vendor/pygments-main/pygments/styles/monokai.py +4 -4
  251. data/vendor/pygments-main/pygments/styles/murphy.py +1 -2
  252. data/vendor/pygments-main/pygments/styles/native.py +1 -2
  253. data/vendor/pygments-main/pygments/styles/paraiso_dark.py +1 -2
  254. data/vendor/pygments-main/pygments/styles/paraiso_light.py +1 -2
  255. data/vendor/pygments-main/pygments/styles/pastie.py +1 -2
  256. data/vendor/pygments-main/pygments/styles/perldoc.py +1 -2
  257. data/vendor/pygments-main/pygments/styles/rainbow_dash.py +1 -2
  258. data/vendor/pygments-main/pygments/styles/rrt.py +1 -2
  259. data/vendor/pygments-main/pygments/styles/sas.py +1 -2
  260. data/vendor/pygments-main/pygments/styles/solarized.py +136 -0
  261. data/vendor/pygments-main/pygments/styles/stata_dark.py +40 -0
  262. data/vendor/pygments-main/pygments/styles/{stata.py → stata_light.py} +14 -16
  263. data/vendor/pygments-main/pygments/styles/tango.py +1 -2
  264. data/vendor/pygments-main/pygments/styles/trac.py +1 -2
  265. data/vendor/pygments-main/pygments/styles/vim.py +1 -2
  266. data/vendor/pygments-main/pygments/styles/vs.py +1 -2
  267. data/vendor/pygments-main/pygments/styles/xcode.py +1 -2
  268. data/vendor/pygments-main/pygments/styles/zenburn.py +80 -0
  269. data/vendor/pygments-main/pygments/token.py +1 -2
  270. data/vendor/pygments-main/pygments/unistring.py +47 -109
  271. data/vendor/pygments-main/pygments/util.py +16 -96
  272. metadata +81 -139
  273. data/CHANGELOG.md +0 -111
  274. data/README.md +0 -121
  275. data/cache-lexers.rb +0 -8
  276. data/circle.yml +0 -20
  277. data/test/test_data.c +0 -2581
  278. data/test/test_data.py +0 -514
  279. data/test/test_data_generated +0 -2582
  280. data/vendor/custom_lexers/github.py +0 -565
  281. data/vendor/pygments-main/CHANGES +0 -1186
  282. data/vendor/pygments-main/MANIFEST.in +0 -6
  283. data/vendor/pygments-main/Makefile +0 -65
  284. data/vendor/pygments-main/README.rst +0 -39
  285. data/vendor/pygments-main/REVISION +0 -1
  286. data/vendor/pygments-main/TODO +0 -12
  287. data/vendor/pygments-main/doc/Makefile +0 -153
  288. data/vendor/pygments-main/doc/_static/favicon.ico +0 -0
  289. data/vendor/pygments-main/doc/_static/logo_new.png +0 -0
  290. data/vendor/pygments-main/doc/_static/logo_only.png +0 -0
  291. data/vendor/pygments-main/doc/_templates/docssidebar.html +0 -3
  292. data/vendor/pygments-main/doc/_templates/indexsidebar.html +0 -25
  293. data/vendor/pygments-main/doc/_themes/pygments14/layout.html +0 -98
  294. data/vendor/pygments-main/doc/_themes/pygments14/static/bodybg.png +0 -0
  295. data/vendor/pygments-main/doc/_themes/pygments14/static/docbg.png +0 -0
  296. data/vendor/pygments-main/doc/_themes/pygments14/static/listitem.png +0 -0
  297. data/vendor/pygments-main/doc/_themes/pygments14/static/logo.png +0 -0
  298. data/vendor/pygments-main/doc/_themes/pygments14/static/pocoo.png +0 -0
  299. data/vendor/pygments-main/doc/_themes/pygments14/static/pygments14.css_t +0 -401
  300. data/vendor/pygments-main/doc/_themes/pygments14/theme.conf +0 -15
  301. data/vendor/pygments-main/doc/conf.py +0 -241
  302. data/vendor/pygments-main/doc/docs/api.rst +0 -354
  303. data/vendor/pygments-main/doc/docs/authors.rst +0 -4
  304. data/vendor/pygments-main/doc/docs/changelog.rst +0 -1
  305. data/vendor/pygments-main/doc/docs/cmdline.rst +0 -166
  306. data/vendor/pygments-main/doc/docs/filterdevelopment.rst +0 -71
  307. data/vendor/pygments-main/doc/docs/filters.rst +0 -41
  308. data/vendor/pygments-main/doc/docs/formatterdevelopment.rst +0 -169
  309. data/vendor/pygments-main/doc/docs/formatters.rst +0 -48
  310. data/vendor/pygments-main/doc/docs/index.rst +0 -66
  311. data/vendor/pygments-main/doc/docs/integrate.rst +0 -40
  312. data/vendor/pygments-main/doc/docs/java.rst +0 -70
  313. data/vendor/pygments-main/doc/docs/lexerdevelopment.rst +0 -728
  314. data/vendor/pygments-main/doc/docs/lexers.rst +0 -69
  315. data/vendor/pygments-main/doc/docs/moinmoin.rst +0 -39
  316. data/vendor/pygments-main/doc/docs/plugins.rst +0 -93
  317. data/vendor/pygments-main/doc/docs/quickstart.rst +0 -205
  318. data/vendor/pygments-main/doc/docs/rstdirective.rst +0 -22
  319. data/vendor/pygments-main/doc/docs/styles.rst +0 -201
  320. data/vendor/pygments-main/doc/docs/tokens.rst +0 -372
  321. data/vendor/pygments-main/doc/docs/unicode.rst +0 -58
  322. data/vendor/pygments-main/doc/download.rst +0 -41
  323. data/vendor/pygments-main/doc/faq.rst +0 -139
  324. data/vendor/pygments-main/doc/index.rst +0 -54
  325. data/vendor/pygments-main/doc/languages.rst +0 -154
  326. data/vendor/pygments-main/doc/make.bat +0 -190
  327. data/vendor/pygments-main/doc/pygmentize.1 +0 -94
  328. data/vendor/pygments-main/external/autopygmentize +0 -101
  329. data/vendor/pygments-main/external/lasso-builtins-generator-9.lasso +0 -162
  330. data/vendor/pygments-main/external/markdown-processor.py +0 -67
  331. data/vendor/pygments-main/external/moin-parser.py +0 -112
  332. data/vendor/pygments-main/external/pygments.bashcomp +0 -38
  333. data/vendor/pygments-main/external/rst-directive.py +0 -82
  334. data/vendor/pygments-main/pygmentize +0 -8
  335. data/vendor/pygments-main/requirements.txt +0 -5
  336. data/vendor/pygments-main/scripts/check_sources.py +0 -211
  337. data/vendor/pygments-main/scripts/debug_lexer.py +0 -246
  338. data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +0 -33
  339. data/vendor/pygments-main/scripts/epydoc.css +0 -280
  340. data/vendor/pygments-main/scripts/get_vimkw.py +0 -74
  341. data/vendor/pygments-main/scripts/pylintrc +0 -301
  342. data/vendor/pygments-main/scripts/vim2pygments.py +0 -935
  343. data/vendor/pygments-main/setup.cfg +0 -10
  344. data/vendor/pygments-main/setup.py +0 -77
  345. data/vendor/pygments-main/tox.ini +0 -7
  346. data/vendor/simplejson/.gitignore +0 -10
  347. data/vendor/simplejson/.travis.yml +0 -5
  348. data/vendor/simplejson/CHANGES.txt +0 -291
  349. data/vendor/simplejson/LICENSE.txt +0 -19
  350. data/vendor/simplejson/MANIFEST.in +0 -5
  351. data/vendor/simplejson/README.rst +0 -19
  352. data/vendor/simplejson/conf.py +0 -179
  353. data/vendor/simplejson/index.rst +0 -628
  354. data/vendor/simplejson/scripts/make_docs.py +0 -18
  355. data/vendor/simplejson/setup.py +0 -104
  356. data/vendor/simplejson/simplejson/__init__.py +0 -510
  357. data/vendor/simplejson/simplejson/_speedups.c +0 -2745
  358. data/vendor/simplejson/simplejson/decoder.py +0 -425
  359. data/vendor/simplejson/simplejson/encoder.py +0 -567
  360. data/vendor/simplejson/simplejson/ordered_dict.py +0 -119
  361. data/vendor/simplejson/simplejson/scanner.py +0 -77
  362. data/vendor/simplejson/simplejson/tests/__init__.py +0 -67
  363. data/vendor/simplejson/simplejson/tests/test_bigint_as_string.py +0 -55
  364. data/vendor/simplejson/simplejson/tests/test_check_circular.py +0 -30
  365. data/vendor/simplejson/simplejson/tests/test_decimal.py +0 -66
  366. data/vendor/simplejson/simplejson/tests/test_decode.py +0 -83
  367. data/vendor/simplejson/simplejson/tests/test_default.py +0 -9
  368. data/vendor/simplejson/simplejson/tests/test_dump.py +0 -67
  369. data/vendor/simplejson/simplejson/tests/test_encode_basestring_ascii.py +0 -46
  370. data/vendor/simplejson/simplejson/tests/test_encode_for_html.py +0 -32
  371. data/vendor/simplejson/simplejson/tests/test_errors.py +0 -34
  372. data/vendor/simplejson/simplejson/tests/test_fail.py +0 -91
  373. data/vendor/simplejson/simplejson/tests/test_float.py +0 -19
  374. data/vendor/simplejson/simplejson/tests/test_indent.py +0 -86
  375. data/vendor/simplejson/simplejson/tests/test_item_sort_key.py +0 -20
  376. data/vendor/simplejson/simplejson/tests/test_namedtuple.py +0 -121
  377. data/vendor/simplejson/simplejson/tests/test_pass1.py +0 -76
  378. data/vendor/simplejson/simplejson/tests/test_pass2.py +0 -14
  379. data/vendor/simplejson/simplejson/tests/test_pass3.py +0 -20
  380. data/vendor/simplejson/simplejson/tests/test_recursion.py +0 -67
  381. data/vendor/simplejson/simplejson/tests/test_scanstring.py +0 -117
  382. data/vendor/simplejson/simplejson/tests/test_separators.py +0 -42
  383. data/vendor/simplejson/simplejson/tests/test_speedups.py +0 -20
  384. data/vendor/simplejson/simplejson/tests/test_tuple.py +0 -49
  385. data/vendor/simplejson/simplejson/tests/test_unicode.py +0 -109
  386. data/vendor/simplejson/simplejson/tool.py +0 -39
@@ -1,11 +1,10 @@
1
- # -*- coding: utf-8 -*-
2
1
  """
3
2
  pygments.formatters.img
4
3
  ~~~~~~~~~~~~~~~~~~~~~~~
5
4
 
6
5
  Formatter for Pixmap output.
7
6
 
8
- :copyright: Copyright 2006-2017 by the Pygments team, see AUTHORS.
7
+ :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
9
8
  :license: BSD, see LICENSE for details.
10
9
  """
11
10
 
@@ -14,7 +13,7 @@ import sys
14
13
 
15
14
  from pygments.formatter import Formatter
16
15
  from pygments.util import get_bool_opt, get_int_opt, get_list_opt, \
17
- get_choice_opt, xrange
16
+ get_choice_opt
18
17
 
19
18
  import subprocess
20
19
 
@@ -46,9 +45,9 @@ STYLES = {
46
45
  }
47
46
 
48
47
  # A sane default for modern systems
49
- DEFAULT_FONT_NAME_NIX = 'Bitstream Vera Sans Mono'
48
+ DEFAULT_FONT_NAME_NIX = 'DejaVu Sans Mono'
50
49
  DEFAULT_FONT_NAME_WIN = 'Courier New'
51
- DEFAULT_FONT_NAME_MAC = 'Courier New'
50
+ DEFAULT_FONT_NAME_MAC = 'Menlo'
52
51
 
53
52
 
54
53
  class PilNotAvailable(ImportError):
@@ -59,7 +58,7 @@ class FontNotFound(Exception):
59
58
  """When there are no usable fonts specified"""
60
59
 
61
60
 
62
- class FontManager(object):
61
+ class FontManager:
63
62
  """
64
63
  Manages a set of fonts: normal, italic, bold, etc...
65
64
  """
@@ -125,8 +124,9 @@ class FontManager(object):
125
124
  for font_dir in (os.path.join(os.getenv("HOME"), 'Library/Fonts/'),
126
125
  '/Library/Fonts/', '/System/Library/Fonts/'):
127
126
  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')))
127
+ (os.path.splitext(f)[0].lower(), os.path.join(font_dir, f))
128
+ for f in os.listdir(font_dir)
129
+ if f.lower().endswith(('ttf', 'ttc')))
130
130
 
131
131
  for name in STYLES['NORMAL']:
132
132
  path = self._get_mac_font_path(font_map, self.font_name, name)
@@ -155,7 +155,7 @@ class FontManager(object):
155
155
  valname = '%s%s%s' % (basename, style and ' '+style, suffix)
156
156
  val, _ = _winreg.QueryValueEx(key, valname)
157
157
  return val
158
- except EnvironmentError:
158
+ except OSError:
159
159
  continue
160
160
  else:
161
161
  if fail:
@@ -164,31 +164,43 @@ class FontManager(object):
164
164
  return None
165
165
 
166
166
  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:
167
+ lookuperror = None
168
+ keynames = [ (_winreg.HKEY_CURRENT_USER, r'Software\Microsoft\Windows NT\CurrentVersion\Fonts'),
169
+ (_winreg.HKEY_CURRENT_USER, r'Software\Microsoft\Windows\CurrentVersion\Fonts'),
170
+ (_winreg.HKEY_LOCAL_MACHINE, r'Software\Microsoft\Windows NT\CurrentVersion\Fonts'),
171
+ (_winreg.HKEY_LOCAL_MACHINE, r'Software\Microsoft\Windows\CurrentVersion\Fonts') ]
172
+ for keyname in keynames:
172
173
  try:
173
- key = _winreg.OpenKey(
174
- _winreg.HKEY_LOCAL_MACHINE,
175
- r'Software\Microsoft\Windows\CurrentVersion\Fonts')
176
- 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)
174
+ key = _winreg.OpenKey(*keyname)
175
+ try:
176
+ path = self._lookup_win(key, self.font_name, STYLES['NORMAL'], True)
177
+ self.fonts['NORMAL'] = ImageFont.truetype(path, self.font_size)
178
+ for style in ('ITALIC', 'BOLD', 'BOLDITALIC'):
179
+ path = self._lookup_win(key, self.font_name, STYLES[style])
180
+ if path:
181
+ self.fonts[style] = ImageFont.truetype(path, self.font_size)
182
+ else:
183
+ if style == 'BOLDITALIC':
184
+ self.fonts[style] = self.fonts['BOLD']
185
+ else:
186
+ self.fonts[style] = self.fonts['NORMAL']
187
+ return
188
+ except FontNotFound as err:
189
+ lookuperror = err
190
+ finally:
191
+ _winreg.CloseKey(key)
192
+ except OSError:
193
+ pass
194
+ else:
195
+ # If we get here, we checked all registry keys and had no luck
196
+ # We can be in one of two situations now:
197
+ # * All key lookups failed. In this case lookuperror is None and we
198
+ # will raise a generic error
199
+ # * At least one lookup failed with a FontNotFound error. In this
200
+ # case, we will raise that as a more specific error
201
+ if lookuperror:
202
+ raise lookuperror
203
+ raise FontNotFound('Can\'t open Windows font registry key')
192
204
 
193
205
  def get_char_size(self):
194
206
  """
@@ -196,6 +208,12 @@ class FontManager(object):
196
208
  """
197
209
  return self.fonts['NORMAL'].getsize('M')
198
210
 
211
+ def get_text_size(self, text):
212
+ """
213
+ Get the text size(width, height).
214
+ """
215
+ return self.fonts['NORMAL'].getsize(text)
216
+
199
217
  def get_font(self, bold, oblique):
200
218
  """
201
219
  Get the font based on bold and italic flags.
@@ -237,7 +255,8 @@ class ImageFormatter(Formatter):
237
255
  bold and italic fonts will be generated. This really should be a
238
256
  monospace font to look sane.
239
257
 
240
- Default: "Bitstream Vera Sans Mono" on Windows, Courier New on \*nix
258
+ Default: "Courier New" on Windows, "Menlo" on Mac OS, and
259
+ "DejaVu Sans Mono" on \\*nix
241
260
 
242
261
  `font_size`
243
262
  The font size in points to be used.
@@ -405,17 +424,17 @@ class ImageFormatter(Formatter):
405
424
  """
406
425
  return self.fontw
407
426
 
408
- def _get_char_x(self, charno):
427
+ def _get_char_x(self, linelength):
409
428
  """
410
429
  Get the X coordinate of a character position.
411
430
  """
412
- return charno * self.fontw + self.image_pad + self.line_number_width
431
+ return linelength + self.image_pad + self.line_number_width
413
432
 
414
- def _get_text_pos(self, charno, lineno):
433
+ def _get_text_pos(self, linelength, lineno):
415
434
  """
416
435
  Get the actual position for a character and line position.
417
436
  """
418
- return self._get_char_x(charno), self._get_line_y(lineno)
437
+ return self._get_char_x(linelength), self._get_line_y(lineno)
419
438
 
420
439
  def _get_linenumber_pos(self, lineno):
421
440
  """
@@ -433,17 +452,27 @@ class ImageFormatter(Formatter):
433
452
  fill = '#000'
434
453
  return fill
435
454
 
455
+ def _get_text_bg_color(self, style):
456
+ """
457
+ Get the correct background color for the token from the style.
458
+ """
459
+ if style['bgcolor'] is not None:
460
+ bg_color = '#' + style['bgcolor']
461
+ else:
462
+ bg_color = None
463
+ return bg_color
464
+
436
465
  def _get_style_font(self, style):
437
466
  """
438
467
  Get the correct font for the style.
439
468
  """
440
469
  return self.fonts.get_font(style['bold'], style['italic'])
441
470
 
442
- def _get_image_size(self, maxcharno, maxlineno):
471
+ def _get_image_size(self, maxlinelength, maxlineno):
443
472
  """
444
473
  Get the required image size.
445
474
  """
446
- return (self._get_char_x(maxcharno) + self.image_pad,
475
+ return (self._get_char_x(maxlinelength) + self.image_pad,
447
476
  self._get_line_y(maxlineno + 0) + self.image_pad)
448
477
 
449
478
  def _draw_linenumber(self, posno, lineno):
@@ -455,20 +484,22 @@ class ImageFormatter(Formatter):
455
484
  str(lineno).rjust(self.line_number_chars),
456
485
  font=self.fonts.get_font(self.line_number_bold,
457
486
  self.line_number_italic),
458
- fill=self.line_number_fg,
487
+ text_fg=self.line_number_fg,
488
+ text_bg=None,
459
489
  )
460
490
 
461
- def _draw_text(self, pos, text, font, **kw):
491
+ def _draw_text(self, pos, text, font, text_fg, text_bg):
462
492
  """
463
493
  Remember a single drawable tuple to paint later.
464
494
  """
465
- self.drawables.append((pos, text, font, kw))
495
+ self.drawables.append((pos, text, font, text_fg, text_bg))
466
496
 
467
497
  def _create_drawables(self, tokensource):
468
498
  """
469
499
  Create drawables for the token content.
470
500
  """
471
501
  lineno = charno = maxcharno = 0
502
+ maxlinelength = linelength = 0
472
503
  for ttype, value in tokensource:
473
504
  while ttype not in self.styles:
474
505
  ttype = ttype.parent
@@ -483,17 +514,23 @@ class ImageFormatter(Formatter):
483
514
  temp = line.rstrip('\n')
484
515
  if temp:
485
516
  self._draw_text(
486
- self._get_text_pos(charno, lineno),
517
+ self._get_text_pos(linelength, lineno),
487
518
  temp,
488
519
  font = self._get_style_font(style),
489
- fill = self._get_text_color(style)
520
+ text_fg = self._get_text_color(style),
521
+ text_bg = self._get_text_bg_color(style),
490
522
  )
523
+ temp_width, temp_hight = self.fonts.get_text_size(temp)
524
+ linelength += temp_width
525
+ maxlinelength = max(maxlinelength, linelength)
491
526
  charno += len(temp)
492
527
  maxcharno = max(maxcharno, charno)
493
528
  if line.endswith('\n'):
494
529
  # add a line for each extra line in the value
530
+ linelength = 0
495
531
  charno = 0
496
532
  lineno += 1
533
+ self.maxlinelength = maxlinelength
497
534
  self.maxcharno = maxcharno
498
535
  self.maxlineno = lineno
499
536
 
@@ -503,7 +540,7 @@ class ImageFormatter(Formatter):
503
540
  """
504
541
  if not self.line_numbers:
505
542
  return
506
- for p in xrange(self.maxlineno):
543
+ for p in range(self.maxlineno):
507
544
  n = p + self.line_number_start
508
545
  if (n % self.line_number_step) == 0:
509
546
  self._draw_linenumber(p, n)
@@ -521,7 +558,8 @@ class ImageFormatter(Formatter):
521
558
  rectw = self.image_pad + self.line_number_width - self.line_number_pad
522
559
  draw.rectangle([(0, 0), (rectw, recth)],
523
560
  fill=self.line_number_bg)
524
- draw.line([(rectw, 0), (rectw, recth)], fill=self.line_number_fg)
561
+ if self.line_number_separator:
562
+ draw.line([(rectw, 0), (rectw, recth)], fill=self.line_number_fg)
525
563
  del draw
526
564
 
527
565
  def format(self, tokensource, outfile):
@@ -536,7 +574,7 @@ class ImageFormatter(Formatter):
536
574
  self._draw_line_numbers()
537
575
  im = Image.new(
538
576
  'RGB',
539
- self._get_image_size(self.maxcharno, self.maxlineno),
577
+ self._get_image_size(self.maxlinelength, self.maxlineno),
540
578
  self.background_color
541
579
  )
542
580
  self._paint_line_number_bg(im)
@@ -550,8 +588,11 @@ class ImageFormatter(Formatter):
550
588
  y = self._get_line_y(linenumber - 1)
551
589
  draw.rectangle([(x, y), (x + rectw, y + recth)],
552
590
  fill=self.hl_color)
553
- for pos, value, font, kw in self.drawables:
554
- draw.text(pos, value, font=font, **kw)
591
+ for pos, value, font, text_fg, text_bg in self.drawables:
592
+ if text_bg:
593
+ text_size = draw.textsize(text=value, font=font)
594
+ draw.rectangle([pos[0], pos[1], pos[0] + text_size[0], pos[1] + text_size[1]], fill=text_bg)
595
+ draw.text(pos, value, font=font, fill=text_fg)
555
596
  im.save(outfile, self.image_format.upper())
556
597
 
557
598
 
@@ -1,11 +1,10 @@
1
- # -*- coding: utf-8 -*-
2
1
  """
3
2
  pygments.formatters.irc
4
3
  ~~~~~~~~~~~~~~~~~~~~~~~
5
4
 
6
5
  Formatter for IRC output
7
6
 
8
- :copyright: Copyright 2006-2017 by the Pygments team, see AUTHORS.
7
+ :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
9
8
  :license: BSD, see LICENSE for details.
10
9
  """
11
10
 
@@ -25,55 +24,55 @@ __all__ = ['IRCFormatter']
25
24
  IRC_COLORS = {
26
25
  Token: ('', ''),
27
26
 
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'),
27
+ Whitespace: ('gray', 'brightblack'),
28
+ Comment: ('gray', 'brightblack'),
29
+ Comment.Preproc: ('cyan', 'brightcyan'),
30
+ Keyword: ('blue', 'brightblue'),
31
+ Keyword.Type: ('cyan', 'brightcyan'),
32
+ Operator.Word: ('magenta', 'brightcyan'),
33
+ Name.Builtin: ('cyan', 'brightcyan'),
34
+ Name.Function: ('green', 'brightgreen'),
35
+ Name.Namespace: ('_cyan_', '_brightcyan_'),
36
+ Name.Class: ('_green_', '_brightgreen_'),
37
+ Name.Exception: ('cyan', 'brightcyan'),
38
+ Name.Decorator: ('brightblack', 'gray'),
39
+ Name.Variable: ('red', 'brightred'),
40
+ Name.Constant: ('red', 'brightred'),
41
+ Name.Attribute: ('cyan', 'brightcyan'),
42
+ Name.Tag: ('brightblue', 'brightblue'),
43
+ String: ('yellow', 'yellow'),
44
+ Number: ('blue', 'brightblue'),
45
+
46
+ Generic.Deleted: ('brightred', 'brightred'),
47
+ Generic.Inserted: ('green', 'brightgreen'),
49
48
  Generic.Heading: ('**', '**'),
50
- Generic.Subheading: ('*purple*', '*fuchsia*'),
51
- Generic.Error: ('red', 'red'),
49
+ Generic.Subheading: ('*magenta*', '*brightmagenta*'),
50
+ Generic.Error: ('brightred', 'brightred'),
52
51
 
53
- Error: ('_red_', '_red_'),
52
+ Error: ('_brightred_', '_brightred_'),
54
53
  }
55
54
 
56
55
 
57
56
  IRC_COLOR_MAP = {
58
57
  'white': 0,
59
58
  'black': 1,
60
- 'darkblue': 2,
61
- 'green': 3,
62
- 'red': 4,
63
- 'brown': 5,
64
- 'purple': 6,
59
+ 'blue': 2,
60
+ 'brightgreen': 3,
61
+ 'brightred': 4,
62
+ 'yellow': 5,
63
+ 'magenta': 6,
65
64
  'orange': 7,
66
- 'darkgreen': 7, #compat w/ ansi
67
- 'yellow': 8,
65
+ 'green': 7, #compat w/ ansi
66
+ 'brightyellow': 8,
68
67
  'lightgreen': 9,
69
- 'turquoise': 9, # compat w/ ansi
70
- 'teal': 10,
68
+ 'brightcyan': 9, # compat w/ ansi
69
+ 'cyan': 10,
71
70
  'lightblue': 11,
72
- 'darkred': 11, # compat w/ ansi
73
- 'blue': 12,
74
- 'fuchsia': 13,
75
- 'darkgray': 14,
76
- 'lightgray': 15,
71
+ 'red': 11, # compat w/ ansi
72
+ 'brightblue': 12,
73
+ 'brightmagenta': 13,
74
+ 'brightblack': 14,
75
+ 'gray': 15,
77
76
  }
78
77
 
79
78
  def ircformat(color, text):
@@ -1,21 +1,19 @@
1
- # -*- coding: utf-8 -*-
2
1
  """
3
2
  pygments.formatters.latex
4
3
  ~~~~~~~~~~~~~~~~~~~~~~~~~
5
4
 
6
5
  Formatter for LaTeX fancyvrb output.
7
6
 
8
- :copyright: Copyright 2006-2017 by the Pygments team, see AUTHORS.
7
+ :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
9
8
  :license: BSD, see LICENSE for details.
10
9
  """
11
10
 
12
- from __future__ import division
11
+ from io import StringIO
13
12
 
14
13
  from pygments.formatter import Formatter
15
- from pygments.lexer import Lexer
14
+ from pygments.lexer import Lexer, do_insertions
16
15
  from pygments.token import Token, STANDARD_TYPES
17
- from pygments.util import get_bool_opt, get_int_opt, StringIO, xrange, \
18
- iteritems
16
+ from pygments.util import get_bool_opt, get_int_opt
19
17
 
20
18
 
21
19
  __all__ = ['LatexFormatter']
@@ -266,7 +264,7 @@ class LatexFormatter(Formatter):
266
264
  self.right = self.escapeinside[1]
267
265
  else:
268
266
  self.escapeinside = ''
269
- self.envname = options.get('envname', u'Verbatim')
267
+ self.envname = options.get('envname', 'Verbatim')
270
268
 
271
269
  self._create_stylesheet()
272
270
 
@@ -301,13 +299,13 @@ class LatexFormatter(Formatter):
301
299
  cmndef += (r'\def\$$@tc##1{\textcolor[rgb]{%s}{##1}}' %
302
300
  rgbcolor(ndef['color']))
303
301
  if ndef['border']:
304
- cmndef += (r'\def\$$@bc##1{\setlength{\fboxsep}{0pt}'
305
- r'\fcolorbox[rgb]{%s}{%s}{\strut ##1}}' %
302
+ cmndef += (r'\def\$$@bc##1{{\setlength{\fboxsep}{\string -\fboxrule}'
303
+ r'\fcolorbox[rgb]{%s}{%s}{\strut ##1}}}' %
306
304
  (rgbcolor(ndef['border']),
307
305
  rgbcolor(ndef['bgcolor'])))
308
306
  elif ndef['bgcolor']:
309
- cmndef += (r'\def\$$@bc##1{\setlength{\fboxsep}{0pt}'
310
- r'\colorbox[rgb]{%s}{\strut ##1}}' %
307
+ cmndef += (r'\def\$$@bc##1{{\setlength{\fboxsep}{0pt}'
308
+ r'\colorbox[rgb]{%s}{\strut ##1}}}' %
311
309
  rgbcolor(ndef['bgcolor']))
312
310
  if cmndef == '':
313
311
  continue
@@ -322,9 +320,8 @@ class LatexFormatter(Formatter):
322
320
  """
323
321
  cp = self.commandprefix
324
322
  styles = []
325
- for name, definition in iteritems(self.cmd2def):
326
- styles.append(r'\expandafter\def\csname %s@tok@%s\endcsname{%s}' %
327
- (cp, name, definition))
323
+ for name, definition in self.cmd2def.items():
324
+ styles.append(r'\@namedef{%s@tok@%s}{%s}' % (cp, name, definition))
328
325
  return STYLE_TEMPLATE % {'cp': self.commandprefix,
329
326
  'styles': '\n'.join(styles)}
330
327
 
@@ -337,24 +334,25 @@ class LatexFormatter(Formatter):
337
334
  realoutfile = outfile
338
335
  outfile = StringIO()
339
336
 
340
- outfile.write(u'\\begin{' + self.envname + u'}[commandchars=\\\\\\{\\}')
337
+ outfile.write('\\begin{' + self.envname + '}[commandchars=\\\\\\{\\}')
341
338
  if self.linenos:
342
339
  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''))
340
+ outfile.write(',numbers=left' +
341
+ (start and ',firstnumber=%d' % start or '') +
342
+ (step and ',stepnumber=%d' % step or ''))
346
343
  if self.mathescape or self.texcomments or self.escapeinside:
347
- outfile.write(u',codes={\\catcode`\\$=3\\catcode`\\^=7\\catcode`\\_=8}')
344
+ outfile.write(',codes={\\catcode`\\$=3\\catcode`\\^=7'
345
+ '\\catcode`\\_=8\\relax}')
348
346
  if self.verboptions:
349
- outfile.write(u',' + self.verboptions)
350
- outfile.write(u']\n')
347
+ outfile.write(',' + self.verboptions)
348
+ outfile.write(']\n')
351
349
 
352
350
  for ttype, value in tokensource:
353
351
  if ttype in Token.Comment:
354
352
  if self.texcomments:
355
353
  # Try to guess comment starting lexeme and escape it ...
356
354
  start = value[0:1]
357
- for i in xrange(1, len(value)):
355
+ for i in range(1, len(value)):
358
356
  if start[0] != value[i]:
359
357
  break
360
358
  start += value[i]
@@ -410,7 +408,7 @@ class LatexFormatter(Formatter):
410
408
  else:
411
409
  outfile.write(value)
412
410
 
413
- outfile.write(u'\\end{' + self.envname + u'}\n')
411
+ outfile.write('\\end{' + self.envname + '}\n')
414
412
 
415
413
  if self.full:
416
414
  encoding = self.encoding or 'utf8'
@@ -447,13 +445,44 @@ class LatexEmbeddedLexer(Lexer):
447
445
  Lexer.__init__(self, **options)
448
446
 
449
447
  def get_tokens_unprocessed(self, text):
448
+ # find and remove all the escape tokens (replace with an empty string)
449
+ # this is very similar to DelegatingLexer.get_tokens_unprocessed.
450
+ buffered = ''
451
+ insertions = []
452
+ insertion_buf = []
453
+ for i, t, v in self._find_safe_escape_tokens(text):
454
+ if t is None:
455
+ if insertion_buf:
456
+ insertions.append((len(buffered), insertion_buf))
457
+ insertion_buf = []
458
+ buffered += v
459
+ else:
460
+ insertion_buf.append((i, t, v))
461
+ if insertion_buf:
462
+ insertions.append((len(buffered), insertion_buf))
463
+ return do_insertions(insertions,
464
+ self.lang.get_tokens_unprocessed(buffered))
465
+
466
+ def _find_safe_escape_tokens(self, text):
467
+ """ find escape tokens that are not in strings or comments """
468
+ for i, t, v in self._filter_to(
469
+ self.lang.get_tokens_unprocessed(text),
470
+ lambda t: t in Token.Comment or t in Token.String
471
+ ):
472
+ if t is None:
473
+ for i2, t2, v2 in self._find_escape_tokens(v):
474
+ yield i + i2, t2, v2
475
+ else:
476
+ yield i, None, v
477
+
478
+ def _filter_to(self, it, pred):
479
+ """ Keep only the tokens that match `pred`, merge the others together """
450
480
  buf = ''
451
481
  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:
482
+ for i, t, v in it:
483
+ if pred(t):
454
484
  if buf:
455
- for x in self.get_tokens_aux(idx, buf):
456
- yield x
485
+ yield idx, None, buf
457
486
  buf = ''
458
487
  yield i, t, v
459
488
  else:
@@ -461,16 +490,16 @@ class LatexEmbeddedLexer(Lexer):
461
490
  idx = i
462
491
  buf += v
463
492
  if buf:
464
- for x in self.get_tokens_aux(idx, buf):
465
- yield x
493
+ yield idx, None, buf
466
494
 
467
- def get_tokens_aux(self, index, text):
495
+ def _find_escape_tokens(self, text):
496
+ """ Find escape tokens within text, give token=None otherwise """
497
+ index = 0
468
498
  while text:
469
499
  a, sep1, text = text.partition(self.left)
470
500
  if a:
471
- for i, t, v in self.lang.get_tokens_unprocessed(a):
472
- yield index + i, t, v
473
- index += len(a)
501
+ yield index, None, a
502
+ index += len(a)
474
503
  if sep1:
475
504
  b, sep2, text = text.partition(self.right)
476
505
  if sep2: