pygments.rb 1.2.1 → 2.0.0.rc2

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 (378) 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 +119 -0
  7. data/Gemfile +3 -1
  8. data/LICENSE +1 -1
  9. data/README.adoc +161 -0
  10. data/Rakefile +10 -21
  11. data/bench.rb +8 -7
  12. data/cache-lexers.rb +3 -2
  13. data/lib/pygments.rb +10 -11
  14. data/lib/pygments/lexer.rb +5 -5
  15. data/lib/pygments/mentos.py +23 -66
  16. data/lib/pygments/popen.rb +152 -204
  17. data/lib/pygments/version.rb +2 -2
  18. data/pygments.rb.gemspec +11 -9
  19. data/test/test_pygments.rb +51 -84
  20. data/vendor/pygments-main/{AUTHORS → Pygments-2.7.3.dist-info/AUTHORS} +21 -3
  21. data/vendor/pygments-main/Pygments-2.7.3.dist-info/INSTALLER +1 -0
  22. data/vendor/pygments-main/{LICENSE → Pygments-2.7.3.dist-info/LICENSE} +1 -1
  23. data/vendor/pygments-main/Pygments-2.7.3.dist-info/METADATA +49 -0
  24. data/vendor/pygments-main/Pygments-2.7.3.dist-info/RECORD +482 -0
  25. data/vendor/pygments-main/Pygments-2.7.3.dist-info/REQUESTED +0 -0
  26. data/vendor/pygments-main/Pygments-2.7.3.dist-info/WHEEL +5 -0
  27. data/vendor/pygments-main/Pygments-2.7.3.dist-info/entry_points.txt +3 -0
  28. data/vendor/pygments-main/Pygments-2.7.3.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 -11
  31. data/vendor/pygments-main/pygments/__main__.py +18 -0
  32. data/vendor/pygments-main/pygments/cmdline.py +38 -29
  33. data/vendor/pygments-main/pygments/console.py +6 -9
  34. data/vendor/pygments-main/pygments/filter.py +4 -6
  35. data/vendor/pygments-main/pygments/filters/__init__.py +609 -21
  36. data/vendor/pygments-main/pygments/formatter.py +4 -4
  37. data/vendor/pygments-main/pygments/formatters/__init__.py +9 -8
  38. data/vendor/pygments-main/pygments/formatters/_mapping.py +1 -3
  39. data/vendor/pygments-main/pygments/formatters/bbcode.py +1 -1
  40. data/vendor/pygments-main/pygments/formatters/html.py +223 -135
  41. data/vendor/pygments-main/pygments/formatters/img.py +68 -41
  42. data/vendor/pygments-main/pygments/formatters/irc.py +39 -39
  43. data/vendor/pygments-main/pygments/formatters/latex.py +56 -26
  44. data/vendor/pygments-main/pygments/formatters/other.py +12 -8
  45. data/vendor/pygments-main/pygments/formatters/rtf.py +29 -29
  46. data/vendor/pygments-main/pygments/formatters/svg.py +38 -4
  47. data/vendor/pygments-main/pygments/formatters/terminal.py +25 -31
  48. data/vendor/pygments-main/pygments/formatters/terminal256.py +22 -12
  49. data/vendor/pygments-main/pygments/lexer.py +41 -39
  50. data/vendor/pygments-main/pygments/lexers/__init__.py +342 -0
  51. data/vendor/pygments-main/pygments/lexers/_asy_builtins.py +1645 -0
  52. data/vendor/pygments-main/pygments/lexers/_cl_builtins.py +232 -0
  53. data/vendor/pygments-main/pygments/lexers/_cocoa_builtins.py +71 -0
  54. data/vendor/pygments-main/pygments/lexers/_csound_builtins.py +1725 -0
  55. data/vendor/pygments-main/pygments/lexers/_lasso_builtins.py +5327 -0
  56. data/vendor/pygments-main/pygments/lexers/_lua_builtins.py +293 -0
  57. data/vendor/pygments-main/pygments/lexers/_mapping.py +551 -0
  58. data/vendor/pygments-main/pygments/lexers/_mql_builtins.py +1172 -0
  59. data/vendor/pygments-main/pygments/lexers/_mysql_builtins.py +1282 -0
  60. data/vendor/pygments-main/pygments/lexers/_openedge_builtins.py +2547 -0
  61. data/vendor/pygments-main/pygments/lexers/_php_builtins.py +4753 -0
  62. data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +678 -0
  63. data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +3094 -0
  64. data/vendor/pygments-main/pygments/lexers/_sourcemod_builtins.py +1161 -0
  65. data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +558 -0
  66. data/vendor/pygments-main/pygments/lexers/_stata_builtins.py +421 -0
  67. data/vendor/pygments-main/pygments/lexers/_tsql_builtins.py +1004 -0
  68. data/vendor/pygments-main/pygments/lexers/_usd_builtins.py +113 -0
  69. data/vendor/pygments-main/pygments/lexers/_vbscript_builtins.py +280 -0
  70. data/vendor/pygments-main/pygments/lexers/_vim_builtins.py +1939 -0
  71. data/vendor/pygments-main/pygments/lexers/actionscript.py +245 -0
  72. data/vendor/pygments-main/pygments/lexers/agile.py +24 -0
  73. data/vendor/pygments-main/pygments/lexers/algebra.py +240 -0
  74. data/vendor/pygments-main/pygments/lexers/ambient.py +76 -0
  75. data/vendor/pygments-main/pygments/lexers/ampl.py +87 -0
  76. data/vendor/pygments-main/pygments/lexers/apl.py +101 -0
  77. data/vendor/pygments-main/pygments/lexers/archetype.py +318 -0
  78. data/vendor/pygments-main/pygments/lexers/arrow.py +117 -0
  79. data/vendor/pygments-main/pygments/lexers/asm.py +1005 -0
  80. data/vendor/pygments-main/pygments/lexers/automation.py +374 -0
  81. data/vendor/pygments-main/pygments/lexers/bare.py +104 -0
  82. data/vendor/pygments-main/pygments/lexers/basic.py +662 -0
  83. data/vendor/pygments-main/pygments/lexers/bibtex.py +160 -0
  84. data/vendor/pygments-main/pygments/lexers/boa.py +102 -0
  85. data/vendor/pygments-main/pygments/lexers/business.py +627 -0
  86. data/vendor/pygments-main/pygments/lexers/c_cpp.py +344 -0
  87. data/vendor/pygments-main/pygments/lexers/c_like.py +566 -0
  88. data/vendor/pygments-main/pygments/lexers/capnproto.py +78 -0
  89. data/vendor/pygments-main/pygments/lexers/chapel.py +112 -0
  90. data/vendor/pygments-main/pygments/lexers/clean.py +179 -0
  91. data/vendor/pygments-main/pygments/lexers/compiled.py +34 -0
  92. data/vendor/pygments-main/pygments/lexers/configs.py +984 -0
  93. data/vendor/pygments-main/pygments/lexers/console.py +114 -0
  94. data/vendor/pygments-main/pygments/lexers/crystal.py +392 -0
  95. data/vendor/pygments-main/pygments/lexers/csound.py +467 -0
  96. data/vendor/pygments-main/pygments/lexers/css.py +691 -0
  97. data/vendor/pygments-main/pygments/lexers/d.py +256 -0
  98. data/vendor/pygments-main/pygments/lexers/dalvik.py +125 -0
  99. data/vendor/pygments-main/pygments/lexers/data.py +698 -0
  100. data/vendor/pygments-main/pygments/lexers/devicetree.py +109 -0
  101. data/vendor/pygments-main/pygments/lexers/diff.py +165 -0
  102. data/vendor/pygments-main/pygments/lexers/dotnet.py +707 -0
  103. data/vendor/pygments-main/pygments/lexers/dsls.py +960 -0
  104. data/vendor/pygments-main/pygments/lexers/dylan.py +287 -0
  105. data/vendor/pygments-main/pygments/lexers/ecl.py +139 -0
  106. data/vendor/pygments-main/pygments/lexers/eiffel.py +65 -0
  107. data/vendor/pygments-main/pygments/lexers/elm.py +121 -0
  108. data/vendor/pygments-main/pygments/lexers/email.py +151 -0
  109. data/vendor/pygments-main/pygments/lexers/erlang.py +530 -0
  110. data/vendor/pygments-main/pygments/lexers/esoteric.py +304 -0
  111. data/vendor/pygments-main/pygments/lexers/ezhil.py +77 -0
  112. data/vendor/pygments-main/pygments/lexers/factor.py +344 -0
  113. data/vendor/pygments-main/pygments/lexers/fantom.py +250 -0
  114. data/vendor/pygments-main/pygments/lexers/felix.py +273 -0
  115. data/vendor/pygments-main/pygments/lexers/floscript.py +83 -0
  116. data/vendor/pygments-main/pygments/lexers/forth.py +178 -0
  117. data/vendor/pygments-main/pygments/lexers/fortran.py +206 -0
  118. data/vendor/pygments-main/pygments/lexers/foxpro.py +428 -0
  119. data/vendor/pygments-main/pygments/lexers/freefem.py +898 -0
  120. data/vendor/pygments-main/pygments/lexers/functional.py +21 -0
  121. data/vendor/pygments-main/pygments/lexers/gdscript.py +346 -0
  122. data/vendor/pygments-main/pygments/lexers/go.py +101 -0
  123. data/vendor/pygments-main/pygments/lexers/grammar_notation.py +270 -0
  124. data/vendor/pygments-main/pygments/lexers/graph.py +85 -0
  125. data/vendor/pygments-main/pygments/lexers/graphics.py +800 -0
  126. data/vendor/pygments-main/pygments/lexers/haskell.py +870 -0
  127. data/vendor/pygments-main/pygments/lexers/haxe.py +936 -0
  128. data/vendor/pygments-main/pygments/lexers/hdl.py +472 -0
  129. data/vendor/pygments-main/pygments/lexers/hexdump.py +103 -0
  130. data/vendor/pygments-main/pygments/lexers/html.py +614 -0
  131. data/vendor/pygments-main/pygments/lexers/idl.py +281 -0
  132. data/vendor/pygments-main/pygments/lexers/igor.py +420 -0
  133. data/vendor/pygments-main/pygments/lexers/inferno.py +96 -0
  134. data/vendor/pygments-main/pygments/lexers/installers.py +322 -0
  135. data/vendor/pygments-main/pygments/lexers/int_fiction.py +1368 -0
  136. data/vendor/pygments-main/pygments/lexers/iolang.py +63 -0
  137. data/vendor/pygments-main/pygments/lexers/j.py +146 -0
  138. data/vendor/pygments-main/pygments/lexers/javascript.py +1540 -0
  139. data/vendor/pygments-main/pygments/lexers/julia.py +331 -0
  140. data/vendor/pygments-main/pygments/lexers/jvm.py +1673 -0
  141. data/vendor/pygments-main/pygments/lexers/lisp.py +2699 -0
  142. data/vendor/pygments-main/pygments/lexers/make.py +206 -0
  143. data/vendor/pygments-main/pygments/lexers/markup.py +765 -0
  144. data/vendor/pygments-main/pygments/lexers/math.py +21 -0
  145. data/vendor/pygments-main/pygments/lexers/matlab.py +720 -0
  146. data/vendor/pygments-main/pygments/lexers/mime.py +226 -0
  147. data/vendor/pygments-main/pygments/lexers/ml.py +958 -0
  148. data/vendor/pygments-main/pygments/lexers/modeling.py +366 -0
  149. data/vendor/pygments-main/pygments/lexers/modula2.py +1580 -0
  150. data/vendor/pygments-main/pygments/lexers/monte.py +204 -0
  151. data/vendor/pygments-main/pygments/lexers/mosel.py +448 -0
  152. data/vendor/pygments-main/pygments/lexers/ncl.py +894 -0
  153. data/vendor/pygments-main/pygments/lexers/nimrod.py +159 -0
  154. data/vendor/pygments-main/pygments/lexers/nit.py +64 -0
  155. data/vendor/pygments-main/pygments/lexers/nix.py +136 -0
  156. data/vendor/pygments-main/pygments/lexers/oberon.py +121 -0
  157. data/vendor/pygments-main/pygments/lexers/objective.py +504 -0
  158. data/vendor/pygments-main/pygments/lexers/ooc.py +85 -0
  159. data/vendor/pygments-main/pygments/lexers/other.py +41 -0
  160. data/vendor/pygments-main/pygments/lexers/parasail.py +79 -0
  161. data/vendor/pygments-main/pygments/lexers/parsers.py +800 -0
  162. data/vendor/pygments-main/pygments/lexers/pascal.py +644 -0
  163. data/vendor/pygments-main/pygments/lexers/pawn.py +205 -0
  164. data/vendor/pygments-main/pygments/lexers/perl.py +732 -0
  165. data/vendor/pygments-main/pygments/lexers/php.py +321 -0
  166. data/vendor/pygments-main/pygments/lexers/pointless.py +71 -0
  167. data/vendor/pygments-main/pygments/lexers/pony.py +94 -0
  168. data/vendor/pygments-main/pygments/lexers/praat.py +302 -0
  169. data/vendor/pygments-main/pygments/lexers/prolog.py +306 -0
  170. data/vendor/pygments-main/pygments/lexers/promql.py +183 -0
  171. data/vendor/pygments-main/pygments/lexers/python.py +1151 -0
  172. data/vendor/pygments-main/pygments/lexers/qvt.py +152 -0
  173. data/vendor/pygments-main/pygments/lexers/r.py +191 -0
  174. data/vendor/pygments-main/pygments/lexers/rdf.py +463 -0
  175. data/vendor/pygments-main/pygments/lexers/rebol.py +431 -0
  176. data/vendor/pygments-main/pygments/lexers/resource.py +85 -0
  177. data/vendor/pygments-main/pygments/lexers/ride.py +139 -0
  178. data/vendor/pygments-main/pygments/lexers/rnc.py +67 -0
  179. data/vendor/pygments-main/pygments/lexers/roboconf.py +82 -0
  180. data/vendor/pygments-main/pygments/lexers/robotframework.py +552 -0
  181. data/vendor/pygments-main/pygments/lexers/ruby.py +517 -0
  182. data/vendor/pygments-main/pygments/lexers/rust.py +224 -0
  183. data/vendor/pygments-main/pygments/lexers/sas.py +228 -0
  184. data/vendor/pygments-main/pygments/lexers/scdoc.py +83 -0
  185. data/vendor/pygments-main/pygments/lexers/scripting.py +1284 -0
  186. data/vendor/pygments-main/pygments/lexers/sgf.py +61 -0
  187. data/vendor/pygments-main/pygments/lexers/shell.py +914 -0
  188. data/vendor/pygments-main/pygments/lexers/sieve.py +69 -0
  189. data/vendor/pygments-main/pygments/lexers/slash.py +185 -0
  190. data/vendor/pygments-main/pygments/lexers/smalltalk.py +195 -0
  191. data/vendor/pygments-main/pygments/lexers/smv.py +79 -0
  192. data/vendor/pygments-main/pygments/lexers/snobol.py +83 -0
  193. data/vendor/pygments-main/pygments/lexers/solidity.py +92 -0
  194. data/vendor/pygments-main/pygments/lexers/special.py +105 -0
  195. data/vendor/pygments-main/pygments/lexers/sql.py +837 -0
  196. data/vendor/pygments-main/pygments/lexers/stata.py +171 -0
  197. data/vendor/pygments-main/pygments/lexers/supercollider.py +95 -0
  198. data/vendor/pygments-main/pygments/lexers/tcl.py +145 -0
  199. data/vendor/pygments-main/pygments/lexers/templates.py +2264 -0
  200. data/vendor/pygments-main/pygments/lexers/teraterm.py +335 -0
  201. data/vendor/pygments-main/pygments/lexers/testing.py +207 -0
  202. data/vendor/pygments-main/pygments/lexers/text.py +26 -0
  203. data/vendor/pygments-main/pygments/lexers/textedit.py +169 -0
  204. data/vendor/pygments-main/pygments/lexers/textfmts.py +430 -0
  205. data/vendor/pygments-main/pygments/lexers/theorem.py +474 -0
  206. data/vendor/pygments-main/pygments/lexers/tnt.py +263 -0
  207. data/vendor/pygments-main/pygments/lexers/trafficscript.py +54 -0
  208. data/vendor/pygments-main/pygments/lexers/typoscript.py +219 -0
  209. data/vendor/pygments-main/pygments/lexers/unicon.py +412 -0
  210. data/vendor/pygments-main/pygments/lexers/urbi.py +146 -0
  211. data/vendor/pygments-main/pygments/lexers/usd.py +90 -0
  212. data/vendor/pygments-main/pygments/lexers/varnish.py +190 -0
  213. data/vendor/pygments-main/pygments/lexers/verification.py +114 -0
  214. data/vendor/pygments-main/pygments/lexers/web.py +24 -0
  215. data/vendor/pygments-main/pygments/lexers/webidl.py +299 -0
  216. data/vendor/pygments-main/pygments/lexers/webmisc.py +991 -0
  217. data/vendor/pygments-main/pygments/lexers/whiley.py +116 -0
  218. data/vendor/pygments-main/pygments/lexers/x10.py +69 -0
  219. data/vendor/pygments-main/pygments/lexers/xorg.py +37 -0
  220. data/vendor/pygments-main/pygments/lexers/yang.py +104 -0
  221. data/vendor/pygments-main/pygments/lexers/zig.py +124 -0
  222. data/vendor/pygments-main/pygments/modeline.py +1 -1
  223. data/vendor/pygments-main/pygments/plugin.py +4 -2
  224. data/vendor/pygments-main/pygments/regexopt.py +1 -1
  225. data/vendor/pygments-main/pygments/scanner.py +2 -2
  226. data/vendor/pygments-main/pygments/sphinxext.py +2 -4
  227. data/vendor/pygments-main/pygments/style.py +61 -24
  228. data/vendor/pygments-main/pygments/styles/__init__.py +10 -4
  229. data/vendor/pygments-main/pygments/styles/abap.py +1 -1
  230. data/vendor/pygments-main/pygments/styles/algol.py +1 -1
  231. data/vendor/pygments-main/pygments/styles/algol_nu.py +1 -1
  232. data/vendor/pygments-main/pygments/styles/arduino.py +2 -2
  233. data/vendor/pygments-main/pygments/styles/autumn.py +1 -1
  234. data/vendor/pygments-main/pygments/styles/borland.py +1 -1
  235. data/vendor/pygments-main/pygments/styles/bw.py +1 -1
  236. data/vendor/pygments-main/pygments/styles/colorful.py +1 -1
  237. data/vendor/pygments-main/pygments/styles/default.py +1 -1
  238. data/vendor/pygments-main/pygments/styles/emacs.py +1 -1
  239. data/vendor/pygments-main/pygments/styles/friendly.py +1 -1
  240. data/vendor/pygments-main/pygments/styles/fruity.py +1 -1
  241. data/vendor/pygments-main/pygments/styles/igor.py +1 -1
  242. data/vendor/pygments-main/pygments/styles/inkpot.py +67 -0
  243. data/vendor/pygments-main/pygments/styles/lovelace.py +1 -1
  244. data/vendor/pygments-main/pygments/styles/manni.py +1 -1
  245. data/vendor/pygments-main/pygments/styles/monokai.py +4 -3
  246. data/vendor/pygments-main/pygments/styles/murphy.py +1 -1
  247. data/vendor/pygments-main/pygments/styles/native.py +1 -1
  248. data/vendor/pygments-main/pygments/styles/paraiso_dark.py +1 -1
  249. data/vendor/pygments-main/pygments/styles/paraiso_light.py +1 -1
  250. data/vendor/pygments-main/pygments/styles/pastie.py +1 -1
  251. data/vendor/pygments-main/pygments/styles/perldoc.py +1 -1
  252. data/vendor/pygments-main/pygments/styles/rainbow_dash.py +1 -1
  253. data/vendor/pygments-main/pygments/styles/rrt.py +1 -1
  254. data/vendor/pygments-main/pygments/styles/sas.py +1 -1
  255. data/vendor/pygments-main/pygments/styles/solarized.py +134 -0
  256. data/vendor/pygments-main/pygments/styles/stata_dark.py +41 -0
  257. data/vendor/pygments-main/pygments/styles/{stata.py → stata_light.py} +14 -15
  258. data/vendor/pygments-main/pygments/styles/tango.py +1 -1
  259. data/vendor/pygments-main/pygments/styles/trac.py +1 -1
  260. data/vendor/pygments-main/pygments/styles/vim.py +1 -1
  261. data/vendor/pygments-main/pygments/styles/vs.py +1 -1
  262. data/vendor/pygments-main/pygments/styles/xcode.py +1 -1
  263. data/vendor/pygments-main/pygments/token.py +1 -1
  264. data/vendor/pygments-main/pygments/unistring.py +47 -108
  265. data/vendor/pygments-main/pygments/util.py +15 -92
  266. metadata +69 -136
  267. data/CHANGELOG.md +0 -111
  268. data/README.md +0 -121
  269. data/circle.yml +0 -20
  270. data/test/test_data.py +0 -514
  271. data/test/test_data_generated +0 -2582
  272. data/vendor/custom_lexers/github.py +0 -565
  273. data/vendor/pygments-main/CHANGES +0 -1186
  274. data/vendor/pygments-main/MANIFEST.in +0 -6
  275. data/vendor/pygments-main/Makefile +0 -65
  276. data/vendor/pygments-main/README.rst +0 -39
  277. data/vendor/pygments-main/REVISION +0 -1
  278. data/vendor/pygments-main/TODO +0 -12
  279. data/vendor/pygments-main/doc/Makefile +0 -153
  280. data/vendor/pygments-main/doc/_static/favicon.ico +0 -0
  281. data/vendor/pygments-main/doc/_static/logo_new.png +0 -0
  282. data/vendor/pygments-main/doc/_static/logo_only.png +0 -0
  283. data/vendor/pygments-main/doc/_templates/docssidebar.html +0 -3
  284. data/vendor/pygments-main/doc/_templates/indexsidebar.html +0 -25
  285. data/vendor/pygments-main/doc/_themes/pygments14/layout.html +0 -98
  286. data/vendor/pygments-main/doc/_themes/pygments14/static/bodybg.png +0 -0
  287. data/vendor/pygments-main/doc/_themes/pygments14/static/docbg.png +0 -0
  288. data/vendor/pygments-main/doc/_themes/pygments14/static/listitem.png +0 -0
  289. data/vendor/pygments-main/doc/_themes/pygments14/static/logo.png +0 -0
  290. data/vendor/pygments-main/doc/_themes/pygments14/static/pocoo.png +0 -0
  291. data/vendor/pygments-main/doc/_themes/pygments14/static/pygments14.css_t +0 -401
  292. data/vendor/pygments-main/doc/_themes/pygments14/theme.conf +0 -15
  293. data/vendor/pygments-main/doc/conf.py +0 -241
  294. data/vendor/pygments-main/doc/docs/api.rst +0 -354
  295. data/vendor/pygments-main/doc/docs/authors.rst +0 -4
  296. data/vendor/pygments-main/doc/docs/changelog.rst +0 -1
  297. data/vendor/pygments-main/doc/docs/cmdline.rst +0 -166
  298. data/vendor/pygments-main/doc/docs/filterdevelopment.rst +0 -71
  299. data/vendor/pygments-main/doc/docs/filters.rst +0 -41
  300. data/vendor/pygments-main/doc/docs/formatterdevelopment.rst +0 -169
  301. data/vendor/pygments-main/doc/docs/formatters.rst +0 -48
  302. data/vendor/pygments-main/doc/docs/index.rst +0 -66
  303. data/vendor/pygments-main/doc/docs/integrate.rst +0 -40
  304. data/vendor/pygments-main/doc/docs/java.rst +0 -70
  305. data/vendor/pygments-main/doc/docs/lexerdevelopment.rst +0 -728
  306. data/vendor/pygments-main/doc/docs/lexers.rst +0 -69
  307. data/vendor/pygments-main/doc/docs/moinmoin.rst +0 -39
  308. data/vendor/pygments-main/doc/docs/plugins.rst +0 -93
  309. data/vendor/pygments-main/doc/docs/quickstart.rst +0 -205
  310. data/vendor/pygments-main/doc/docs/rstdirective.rst +0 -22
  311. data/vendor/pygments-main/doc/docs/styles.rst +0 -201
  312. data/vendor/pygments-main/doc/docs/tokens.rst +0 -372
  313. data/vendor/pygments-main/doc/docs/unicode.rst +0 -58
  314. data/vendor/pygments-main/doc/download.rst +0 -41
  315. data/vendor/pygments-main/doc/faq.rst +0 -139
  316. data/vendor/pygments-main/doc/index.rst +0 -54
  317. data/vendor/pygments-main/doc/languages.rst +0 -154
  318. data/vendor/pygments-main/doc/make.bat +0 -190
  319. data/vendor/pygments-main/doc/pygmentize.1 +0 -94
  320. data/vendor/pygments-main/external/autopygmentize +0 -101
  321. data/vendor/pygments-main/external/lasso-builtins-generator-9.lasso +0 -162
  322. data/vendor/pygments-main/external/markdown-processor.py +0 -67
  323. data/vendor/pygments-main/external/moin-parser.py +0 -112
  324. data/vendor/pygments-main/external/pygments.bashcomp +0 -38
  325. data/vendor/pygments-main/external/rst-directive.py +0 -82
  326. data/vendor/pygments-main/pygmentize +0 -8
  327. data/vendor/pygments-main/requirements.txt +0 -5
  328. data/vendor/pygments-main/scripts/check_sources.py +0 -211
  329. data/vendor/pygments-main/scripts/debug_lexer.py +0 -246
  330. data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +0 -33
  331. data/vendor/pygments-main/scripts/epydoc.css +0 -280
  332. data/vendor/pygments-main/scripts/get_vimkw.py +0 -74
  333. data/vendor/pygments-main/scripts/pylintrc +0 -301
  334. data/vendor/pygments-main/scripts/vim2pygments.py +0 -935
  335. data/vendor/pygments-main/setup.cfg +0 -10
  336. data/vendor/pygments-main/setup.py +0 -77
  337. data/vendor/pygments-main/tox.ini +0 -7
  338. data/vendor/simplejson/.gitignore +0 -10
  339. data/vendor/simplejson/.travis.yml +0 -5
  340. data/vendor/simplejson/CHANGES.txt +0 -291
  341. data/vendor/simplejson/LICENSE.txt +0 -19
  342. data/vendor/simplejson/MANIFEST.in +0 -5
  343. data/vendor/simplejson/README.rst +0 -19
  344. data/vendor/simplejson/conf.py +0 -179
  345. data/vendor/simplejson/index.rst +0 -628
  346. data/vendor/simplejson/scripts/make_docs.py +0 -18
  347. data/vendor/simplejson/setup.py +0 -104
  348. data/vendor/simplejson/simplejson/__init__.py +0 -510
  349. data/vendor/simplejson/simplejson/_speedups.c +0 -2745
  350. data/vendor/simplejson/simplejson/decoder.py +0 -425
  351. data/vendor/simplejson/simplejson/encoder.py +0 -567
  352. data/vendor/simplejson/simplejson/ordered_dict.py +0 -119
  353. data/vendor/simplejson/simplejson/scanner.py +0 -77
  354. data/vendor/simplejson/simplejson/tests/__init__.py +0 -67
  355. data/vendor/simplejson/simplejson/tests/test_bigint_as_string.py +0 -55
  356. data/vendor/simplejson/simplejson/tests/test_check_circular.py +0 -30
  357. data/vendor/simplejson/simplejson/tests/test_decimal.py +0 -66
  358. data/vendor/simplejson/simplejson/tests/test_decode.py +0 -83
  359. data/vendor/simplejson/simplejson/tests/test_default.py +0 -9
  360. data/vendor/simplejson/simplejson/tests/test_dump.py +0 -67
  361. data/vendor/simplejson/simplejson/tests/test_encode_basestring_ascii.py +0 -46
  362. data/vendor/simplejson/simplejson/tests/test_encode_for_html.py +0 -32
  363. data/vendor/simplejson/simplejson/tests/test_errors.py +0 -34
  364. data/vendor/simplejson/simplejson/tests/test_fail.py +0 -91
  365. data/vendor/simplejson/simplejson/tests/test_float.py +0 -19
  366. data/vendor/simplejson/simplejson/tests/test_indent.py +0 -86
  367. data/vendor/simplejson/simplejson/tests/test_item_sort_key.py +0 -20
  368. data/vendor/simplejson/simplejson/tests/test_namedtuple.py +0 -121
  369. data/vendor/simplejson/simplejson/tests/test_pass1.py +0 -76
  370. data/vendor/simplejson/simplejson/tests/test_pass2.py +0 -14
  371. data/vendor/simplejson/simplejson/tests/test_pass3.py +0 -20
  372. data/vendor/simplejson/simplejson/tests/test_recursion.py +0 -67
  373. data/vendor/simplejson/simplejson/tests/test_scanstring.py +0 -117
  374. data/vendor/simplejson/simplejson/tests/test_separators.py +0 -42
  375. data/vendor/simplejson/simplejson/tests/test_speedups.py +0 -20
  376. data/vendor/simplejson/simplejson/tests/test_tuple.py +0 -49
  377. data/vendor/simplejson/simplejson/tests/test_unicode.py +0 -109
  378. 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: