pygments.rb 1.1.2 → 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 (383) 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 -5
  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 +13 -19
  11. data/bench.rb +8 -7
  12. data/cache-lexers.rb +3 -2
  13. data/lexers +0 -0
  14. data/lib/pygments.rb +10 -11
  15. data/lib/pygments/lexer.rb +5 -5
  16. data/lib/pygments/mentos.py +23 -110
  17. data/lib/pygments/popen.rb +148 -229
  18. data/lib/pygments/version.rb +2 -2
  19. data/pygments.rb.gemspec +12 -11
  20. data/test/test_pygments.rb +46 -104
  21. data/vendor/pygments-main/{AUTHORS → Pygments-2.7.3.dist-info/AUTHORS} +23 -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 +94 -41
  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 +42 -6
  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 +102 -38
  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 +62 -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 +8 -1
  57. data/vendor/pygments-main/pygments/lexers/_lua_builtins.py +2 -4
  58. data/vendor/pygments-main/pygments/lexers/_mapping.py +79 -33
  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 +445 -70
  81. data/vendor/pygments-main/pygments/lexers/automation.py +3 -3
  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 +13 -9
  85. data/vendor/pygments-main/pygments/lexers/boa.py +102 -0
  86. data/vendor/pygments-main/pygments/lexers/business.py +69 -36
  87. data/vendor/pygments-main/pygments/lexers/c_cpp.py +137 -45
  88. data/vendor/pygments-main/pygments/lexers/c_like.py +68 -43
  89. data/vendor/pygments-main/pygments/lexers/capnproto.py +20 -21
  90. data/vendor/pygments-main/pygments/lexers/chapel.py +25 -14
  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 +188 -37
  94. data/vendor/pygments-main/pygments/lexers/console.py +1 -1
  95. data/vendor/pygments-main/pygments/lexers/crystal.py +31 -23
  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 +147 -65
  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 +54 -25
  112. data/vendor/pygments-main/pygments/lexers/ezhil.py +24 -15
  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 +63 -6
  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 +52 -22
  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 +18 -12
  131. data/vendor/pygments-main/pygments/lexers/html.py +31 -19
  132. data/vendor/pygments-main/pygments/lexers/idl.py +20 -9
  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 +100 -66
  140. data/vendor/pygments-main/pygments/lexers/julia.py +46 -48
  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 +4 -3
  152. data/vendor/pygments-main/pygments/lexers/mosel.py +448 -0
  153. data/vendor/pygments-main/pygments/lexers/ncl.py +85 -244
  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 +23 -23
  164. data/vendor/pygments-main/pygments/lexers/pawn.py +30 -24
  165. data/vendor/pygments-main/pygments/lexers/perl.py +276 -160
  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 -226
  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 +86 -71
  184. data/vendor/pygments-main/pygments/lexers/sas.py +7 -7
  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 +175 -51
  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 +30 -26
  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 -42
  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 +144 -132
  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 +8 -14
  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 +5 -5
  214. data/vendor/pygments-main/pygments/lexers/verification.py +15 -12
  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 +50 -38
  218. data/vendor/pygments-main/pygments/lexers/whiley.py +11 -12
  219. data/vendor/pygments-main/pygments/lexers/x10.py +1 -1
  220. data/vendor/pygments-main/pygments/lexers/xorg.py +37 -0
  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 +6 -5
  224. data/vendor/pygments-main/pygments/plugin.py +14 -18
  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 +13 -5
  230. data/vendor/pygments-main/pygments/styles/abap.py +29 -0
  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 +89 -0
  254. data/vendor/pygments-main/pygments/styles/rrt.py +1 -1
  255. data/vendor/pygments-main/pygments/styles/sas.py +3 -0
  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_light.py +39 -0
  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 +19 -95
  267. metadata +71 -137
  268. data/CHANGELOG.md +0 -98
  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 -1163
  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 -331
  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 -149
  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 -689
  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 -84
  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/pygments/styles/stata.py +0 -37
  331. data/vendor/pygments-main/requirements.txt +0 -5
  332. data/vendor/pygments-main/scripts/check_sources.py +0 -211
  333. data/vendor/pygments-main/scripts/debug_lexer.py +0 -246
  334. data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +0 -33
  335. data/vendor/pygments-main/scripts/epydoc.css +0 -280
  336. data/vendor/pygments-main/scripts/find_error.py +0 -1
  337. data/vendor/pygments-main/scripts/get_vimkw.py +0 -74
  338. data/vendor/pygments-main/scripts/pylintrc +0 -301
  339. data/vendor/pygments-main/scripts/vim2pygments.py +0 -935
  340. data/vendor/pygments-main/setup.cfg +0 -10
  341. data/vendor/pygments-main/setup.py +0 -77
  342. data/vendor/pygments-main/tox.ini +0 -7
  343. data/vendor/simplejson/.gitignore +0 -10
  344. data/vendor/simplejson/.travis.yml +0 -5
  345. data/vendor/simplejson/CHANGES.txt +0 -291
  346. data/vendor/simplejson/LICENSE.txt +0 -19
  347. data/vendor/simplejson/MANIFEST.in +0 -5
  348. data/vendor/simplejson/README.rst +0 -19
  349. data/vendor/simplejson/conf.py +0 -179
  350. data/vendor/simplejson/index.rst +0 -628
  351. data/vendor/simplejson/scripts/make_docs.py +0 -18
  352. data/vendor/simplejson/setup.py +0 -104
  353. data/vendor/simplejson/simplejson/__init__.py +0 -510
  354. data/vendor/simplejson/simplejson/_speedups.c +0 -2745
  355. data/vendor/simplejson/simplejson/decoder.py +0 -425
  356. data/vendor/simplejson/simplejson/encoder.py +0 -567
  357. data/vendor/simplejson/simplejson/ordered_dict.py +0 -119
  358. data/vendor/simplejson/simplejson/scanner.py +0 -77
  359. data/vendor/simplejson/simplejson/tests/__init__.py +0 -67
  360. data/vendor/simplejson/simplejson/tests/test_bigint_as_string.py +0 -55
  361. data/vendor/simplejson/simplejson/tests/test_check_circular.py +0 -30
  362. data/vendor/simplejson/simplejson/tests/test_decimal.py +0 -66
  363. data/vendor/simplejson/simplejson/tests/test_decode.py +0 -83
  364. data/vendor/simplejson/simplejson/tests/test_default.py +0 -9
  365. data/vendor/simplejson/simplejson/tests/test_dump.py +0 -67
  366. data/vendor/simplejson/simplejson/tests/test_encode_basestring_ascii.py +0 -46
  367. data/vendor/simplejson/simplejson/tests/test_encode_for_html.py +0 -32
  368. data/vendor/simplejson/simplejson/tests/test_errors.py +0 -34
  369. data/vendor/simplejson/simplejson/tests/test_fail.py +0 -91
  370. data/vendor/simplejson/simplejson/tests/test_float.py +0 -19
  371. data/vendor/simplejson/simplejson/tests/test_indent.py +0 -86
  372. data/vendor/simplejson/simplejson/tests/test_item_sort_key.py +0 -20
  373. data/vendor/simplejson/simplejson/tests/test_namedtuple.py +0 -121
  374. data/vendor/simplejson/simplejson/tests/test_pass1.py +0 -76
  375. data/vendor/simplejson/simplejson/tests/test_pass2.py +0 -14
  376. data/vendor/simplejson/simplejson/tests/test_pass3.py +0 -20
  377. data/vendor/simplejson/simplejson/tests/test_recursion.py +0 -67
  378. data/vendor/simplejson/simplejson/tests/test_scanstring.py +0 -117
  379. data/vendor/simplejson/simplejson/tests/test_separators.py +0 -42
  380. data/vendor/simplejson/simplejson/tests/test_speedups.py +0 -20
  381. data/vendor/simplejson/simplejson/tests/test_tuple.py +0 -49
  382. data/vendor/simplejson/simplejson/tests/test_unicode.py +0 -109
  383. data/vendor/simplejson/simplejson/tool.py +0 -39
@@ -5,15 +5,16 @@
5
5
 
6
6
  Formatter for Pixmap output.
7
7
 
8
- :copyright: Copyright 2006-2015 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
+ import os
12
13
  import sys
13
14
 
14
15
  from pygments.formatter import Formatter
15
16
  from pygments.util import get_bool_opt, get_int_opt, get_list_opt, \
16
- get_choice_opt, xrange
17
+ get_choice_opt
17
18
 
18
19
  import subprocess
19
20
 
@@ -45,8 +46,9 @@ STYLES = {
45
46
  }
46
47
 
47
48
  # A sane default for modern systems
48
- DEFAULT_FONT_NAME_NIX = 'Bitstream Vera Sans Mono'
49
+ DEFAULT_FONT_NAME_NIX = 'DejaVu Sans Mono'
49
50
  DEFAULT_FONT_NAME_WIN = 'Courier New'
51
+ DEFAULT_FONT_NAME_MAC = 'Menlo'
50
52
 
51
53
 
52
54
  class PilNotAvailable(ImportError):
@@ -57,7 +59,7 @@ class FontNotFound(Exception):
57
59
  """When there are no usable fonts specified"""
58
60
 
59
61
 
60
- class FontManager(object):
62
+ class FontManager:
61
63
  """
62
64
  Manages a set of fonts: normal, italic, bold, etc...
63
65
  """
@@ -71,6 +73,10 @@ class FontManager(object):
71
73
  if not font_name:
72
74
  self.font_name = DEFAULT_FONT_NAME_WIN
73
75
  self._create_win()
76
+ elif sys.platform.startswith('darwin'):
77
+ if not font_name:
78
+ self.font_name = DEFAULT_FONT_NAME_MAC
79
+ self._create_mac()
74
80
  else:
75
81
  if not font_name:
76
82
  self.font_name = DEFAULT_FONT_NAME_NIX
@@ -111,6 +117,38 @@ class FontManager(object):
111
117
  else:
112
118
  self.fonts[style] = self.fonts['NORMAL']
113
119
 
120
+ def _get_mac_font_path(self, font_map, name, style):
121
+ return font_map.get((name + ' ' + style).strip().lower())
122
+
123
+ def _create_mac(self):
124
+ font_map = {}
125
+ for font_dir in (os.path.join(os.getenv("HOME"), 'Library/Fonts/'),
126
+ '/Library/Fonts/', '/System/Library/Fonts/'):
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)
130
+ if f.lower().endswith(('ttf', 'ttc')))
131
+
132
+ for name in STYLES['NORMAL']:
133
+ path = self._get_mac_font_path(font_map, self.font_name, name)
134
+ if path is not None:
135
+ self.fonts['NORMAL'] = ImageFont.truetype(path, self.font_size)
136
+ break
137
+ else:
138
+ raise FontNotFound('No usable fonts named: "%s"' %
139
+ self.font_name)
140
+ for style in ('ITALIC', 'BOLD', 'BOLDITALIC'):
141
+ for stylename in STYLES[style]:
142
+ path = self._get_mac_font_path(font_map, self.font_name, stylename)
143
+ if path is not None:
144
+ self.fonts[style] = ImageFont.truetype(path, self.font_size)
145
+ break
146
+ else:
147
+ if style == 'BOLDITALIC':
148
+ self.fonts[style] = self.fonts['BOLD']
149
+ else:
150
+ self.fonts[style] = self.fonts['NORMAL']
151
+
114
152
  def _lookup_win(self, key, basename, styles, fail=False):
115
153
  for suffix in ('', ' (TrueType)'):
116
154
  for style in styles:
@@ -127,31 +165,43 @@ class FontManager(object):
127
165
  return None
128
166
 
129
167
  def _create_win(self):
130
- try:
131
- key = _winreg.OpenKey(
132
- _winreg.HKEY_LOCAL_MACHINE,
133
- r'Software\Microsoft\Windows NT\CurrentVersion\Fonts')
134
- 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:
135
174
  try:
136
- key = _winreg.OpenKey(
137
- _winreg.HKEY_LOCAL_MACHINE,
138
- 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)
139
193
  except EnvironmentError:
140
- raise FontNotFound('Can\'t open Windows font registry key')
141
- try:
142
- path = self._lookup_win(key, self.font_name, STYLES['NORMAL'], True)
143
- self.fonts['NORMAL'] = ImageFont.truetype(path, self.font_size)
144
- for style in ('ITALIC', 'BOLD', 'BOLDITALIC'):
145
- path = self._lookup_win(key, self.font_name, STYLES[style])
146
- if path:
147
- self.fonts[style] = ImageFont.truetype(path, self.font_size)
148
- else:
149
- if style == 'BOLDITALIC':
150
- self.fonts[style] = self.fonts['BOLD']
151
- else:
152
- self.fonts[style] = self.fonts['NORMAL']
153
- finally:
154
- _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')
155
205
 
156
206
  def get_char_size(self):
157
207
  """
@@ -159,6 +209,12 @@ class FontManager(object):
159
209
  """
160
210
  return self.fonts['NORMAL'].getsize('M')
161
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
+
162
218
  def get_font(self, bold, oblique):
163
219
  """
164
220
  Get the font based on bold and italic flags.
@@ -200,7 +256,8 @@ class ImageFormatter(Formatter):
200
256
  bold and italic fonts will be generated. This really should be a
201
257
  monospace font to look sane.
202
258
 
203
- 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
204
261
 
205
262
  `font_size`
206
263
  The font size in points to be used.
@@ -368,17 +425,17 @@ class ImageFormatter(Formatter):
368
425
  """
369
426
  return self.fontw
370
427
 
371
- def _get_char_x(self, charno):
428
+ def _get_char_x(self, linelength):
372
429
  """
373
430
  Get the X coordinate of a character position.
374
431
  """
375
- return charno * self.fontw + self.image_pad + self.line_number_width
432
+ return linelength + self.image_pad + self.line_number_width
376
433
 
377
- def _get_text_pos(self, charno, lineno):
434
+ def _get_text_pos(self, linelength, lineno):
378
435
  """
379
436
  Get the actual position for a character and line position.
380
437
  """
381
- return self._get_char_x(charno), self._get_line_y(lineno)
438
+ return self._get_char_x(linelength), self._get_line_y(lineno)
382
439
 
383
440
  def _get_linenumber_pos(self, lineno):
384
441
  """
@@ -402,11 +459,11 @@ class ImageFormatter(Formatter):
402
459
  """
403
460
  return self.fonts.get_font(style['bold'], style['italic'])
404
461
 
405
- def _get_image_size(self, maxcharno, maxlineno):
462
+ def _get_image_size(self, maxlinelength, maxlineno):
406
463
  """
407
464
  Get the required image size.
408
465
  """
409
- return (self._get_char_x(maxcharno) + self.image_pad,
466
+ return (self._get_char_x(maxlinelength) + self.image_pad,
410
467
  self._get_line_y(maxlineno + 0) + self.image_pad)
411
468
 
412
469
  def _draw_linenumber(self, posno, lineno):
@@ -432,6 +489,7 @@ class ImageFormatter(Formatter):
432
489
  Create drawables for the token content.
433
490
  """
434
491
  lineno = charno = maxcharno = 0
492
+ maxlinelength = linelength = 0
435
493
  for ttype, value in tokensource:
436
494
  while ttype not in self.styles:
437
495
  ttype = ttype.parent
@@ -446,17 +504,22 @@ class ImageFormatter(Formatter):
446
504
  temp = line.rstrip('\n')
447
505
  if temp:
448
506
  self._draw_text(
449
- self._get_text_pos(charno, lineno),
507
+ self._get_text_pos(linelength, lineno),
450
508
  temp,
451
509
  font = self._get_style_font(style),
452
510
  fill = self._get_text_color(style)
453
511
  )
512
+ temp_width, temp_hight = self.fonts.get_text_size(temp)
513
+ linelength += temp_width
514
+ maxlinelength = max(maxlinelength, linelength)
454
515
  charno += len(temp)
455
516
  maxcharno = max(maxcharno, charno)
456
517
  if line.endswith('\n'):
457
518
  # add a line for each extra line in the value
519
+ linelength = 0
458
520
  charno = 0
459
521
  lineno += 1
522
+ self.maxlinelength = maxlinelength
460
523
  self.maxcharno = maxcharno
461
524
  self.maxlineno = lineno
462
525
 
@@ -466,7 +529,7 @@ class ImageFormatter(Formatter):
466
529
  """
467
530
  if not self.line_numbers:
468
531
  return
469
- for p in xrange(self.maxlineno):
532
+ for p in range(self.maxlineno):
470
533
  n = p + self.line_number_start
471
534
  if (n % self.line_number_step) == 0:
472
535
  self._draw_linenumber(p, n)
@@ -484,7 +547,8 @@ class ImageFormatter(Formatter):
484
547
  rectw = self.image_pad + self.line_number_width - self.line_number_pad
485
548
  draw.rectangle([(0, 0), (rectw, recth)],
486
549
  fill=self.line_number_bg)
487
- 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)
488
552
  del draw
489
553
 
490
554
  def format(self, tokensource, outfile):
@@ -499,7 +563,7 @@ class ImageFormatter(Formatter):
499
563
  self._draw_line_numbers()
500
564
  im = Image.new(
501
565
  'RGB',
502
- self._get_image_size(self.maxcharno, self.maxlineno),
566
+ self._get_image_size(self.maxlinelength, self.maxlineno),
503
567
  self.background_color
504
568
  )
505
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-2015 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-2015 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: