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,25 +5,25 @@
5
5
 
6
6
  Base formatter class.
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
12
  import codecs
13
13
 
14
- from pygments.util import get_bool_opt, string_types
14
+ from pygments.util import get_bool_opt
15
15
  from pygments.styles import get_style_by_name
16
16
 
17
17
  __all__ = ['Formatter']
18
18
 
19
19
 
20
20
  def _lookup_style(style):
21
- if isinstance(style, string_types):
21
+ if isinstance(style, str):
22
22
  return get_style_by_name(style)
23
23
  return style
24
24
 
25
25
 
26
- class Formatter(object):
26
+ class Formatter:
27
27
  """
28
28
  Converts a token stream to text.
29
29
 
@@ -5,7 +5,7 @@
5
5
 
6
6
  Pygments formatters.
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
 
@@ -17,10 +17,10 @@ from os.path import basename
17
17
 
18
18
  from pygments.formatters._mapping import FORMATTERS
19
19
  from pygments.plugin import find_plugin_formatters
20
- from pygments.util import ClassNotFound, itervalues
20
+ from pygments.util import ClassNotFound
21
21
 
22
22
  __all__ = ['get_formatter_by_name', 'get_formatter_for_filename',
23
- 'get_all_formatters'] + list(FORMATTERS)
23
+ 'get_all_formatters', 'load_formatter_from_file'] + list(FORMATTERS)
24
24
 
25
25
  _formatter_cache = {} # classes by name
26
26
  _pattern_cache = {}
@@ -45,7 +45,7 @@ def _load_formatters(module_name):
45
45
  def get_all_formatters():
46
46
  """Return a generator for all formatter classes."""
47
47
  # NB: this returns formatter classes, not info like get_all_lexers().
48
- for info in itervalues(FORMATTERS):
48
+ for info in FORMATTERS.values():
49
49
  if info[1] not in _formatter_cache:
50
50
  _load_formatters(info[0])
51
51
  yield _formatter_cache[info[1]]
@@ -58,7 +58,7 @@ def find_formatter_class(alias):
58
58
 
59
59
  Returns None if not found.
60
60
  """
61
- for module_name, name, aliases, _, _ in itervalues(FORMATTERS):
61
+ for module_name, name, aliases, _, _ in FORMATTERS.values():
62
62
  if alias in aliases:
63
63
  if name not in _formatter_cache:
64
64
  _load_formatters(module_name)
@@ -79,13 +79,49 @@ def get_formatter_by_name(_alias, **options):
79
79
  return cls(**options)
80
80
 
81
81
 
82
+ def load_formatter_from_file(filename, formattername="CustomFormatter",
83
+ **options):
84
+ """Load a formatter from a file.
85
+
86
+ This method expects a file located relative to the current working
87
+ directory, which contains a class named CustomFormatter. By default,
88
+ it expects the Formatter to be named CustomFormatter; you can specify
89
+ your own class name as the second argument to this function.
90
+
91
+ Users should be very careful with the input, because this method
92
+ is equivalent to running eval on the input file.
93
+
94
+ Raises ClassNotFound if there are any problems importing the Formatter.
95
+
96
+ .. versionadded:: 2.2
97
+ """
98
+ try:
99
+ # This empty dict will contain the namespace for the exec'd file
100
+ custom_namespace = {}
101
+ with open(filename, 'rb') as f:
102
+ exec(f.read(), custom_namespace)
103
+ # Retrieve the class `formattername` from that namespace
104
+ if formattername not in custom_namespace:
105
+ raise ClassNotFound('no valid %s class found in %s' %
106
+ (formattername, filename))
107
+ formatter_class = custom_namespace[formattername]
108
+ # And finally instantiate it with the options
109
+ return formatter_class(**options)
110
+ except IOError as err:
111
+ raise ClassNotFound('cannot read %s: %s' % (filename, err))
112
+ except ClassNotFound:
113
+ raise
114
+ except Exception as err:
115
+ raise ClassNotFound('error when loading custom formatter: %s' % err)
116
+
117
+
82
118
  def get_formatter_for_filename(fn, **options):
83
119
  """Lookup and instantiate a formatter by filename pattern.
84
120
 
85
121
  Raises ClassNotFound if not found.
86
122
  """
87
123
  fn = basename(fn)
88
- for modname, name, _, filenames, _ in itervalues(FORMATTERS):
124
+ for modname, name, _, filenames, _ in FORMATTERS.values():
89
125
  for filename in filenames:
90
126
  if _fn_matches(fn, filename):
91
127
  if name not in _formatter_cache:
@@ -9,12 +9,10 @@
9
9
 
10
10
  Do not alter the FORMATTERS dictionary by hand.
11
11
 
12
- :copyright: Copyright 2006-2015 by the Pygments team, see AUTHORS.
12
+ :copyright: Copyright 2006-2020 by the Pygments team, see AUTHORS.
13
13
  :license: BSD, see LICENSE for details.
14
14
  """
15
15
 
16
- from __future__ import print_function
17
-
18
16
  FORMATTERS = {
19
17
  'BBCodeFormatter': ('pygments.formatters.bbcode', 'BBCode', ('bbcode', 'bb'), (), 'Format tokens with BBcodes. These formatting codes are used by many bulletin boards, so you can highlight your sourcecode with pygments before posting it there.'),
20
18
  'BmpImageFormatter': ('pygments.formatters.img', 'img_bmp', ('bmp', 'bitmap'), ('*.bmp',), 'Create a bitmap image from source code. This uses the Python Imaging Library to generate a pixmap from the source code.'),
@@ -5,7 +5,7 @@
5
5
 
6
6
  BBcode formatter.
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
 
@@ -5,20 +5,19 @@
5
5
 
6
6
  Formatter for HTML 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 print_function
13
-
12
+ import functools
14
13
  import os
15
14
  import sys
16
15
  import os.path
16
+ from io import StringIO
17
17
 
18
18
  from pygments.formatter import Formatter
19
19
  from pygments.token import Token, Text, STANDARD_TYPES
20
- from pygments.util import get_bool_opt, get_int_opt, get_list_opt, \
21
- StringIO, string_types, iteritems
20
+ from pygments.util import get_bool_opt, get_int_opt, get_list_opt
22
21
 
23
22
  try:
24
23
  import ctags
@@ -29,11 +28,11 @@ __all__ = ['HtmlFormatter']
29
28
 
30
29
 
31
30
  _escape_html_table = {
32
- ord('&'): u'&',
33
- ord('<'): u'&lt;',
34
- ord('>'): u'&gt;',
35
- ord('"'): u'&quot;',
36
- ord("'"): u'&#39;',
31
+ ord('&'): '&amp;',
32
+ ord('<'): '&lt;',
33
+ ord('>'): '&gt;',
34
+ ord('"'): '&quot;',
35
+ ord("'"): '&#39;',
37
36
  }
38
37
 
39
38
 
@@ -42,6 +41,13 @@ def escape_html(text, table=_escape_html_table):
42
41
  return text.translate(table)
43
42
 
44
43
 
44
+ def webify(color):
45
+ if color.startswith('calc') or color.startswith('var'):
46
+ return color
47
+ else:
48
+ return '#' + color
49
+
50
+
45
51
  def _get_ttype_class(ttype):
46
52
  fname = STANDARD_TYPES.get(ttype)
47
53
  if fname:
@@ -55,16 +61,22 @@ def _get_ttype_class(ttype):
55
61
 
56
62
 
57
63
  CSSFILE_TEMPLATE = '''\
58
- td.linenos { background-color: #f0f0f0; padding-right: 10px; }
59
- span.lineno { background-color: #f0f0f0; padding: 0 5px 0 5px; }
60
- pre { line-height: 125%%; }
64
+ /*
65
+ generated by Pygments <https://pygments.org/>
66
+ Copyright 2006-2020 by the Pygments team.
67
+ Licensed under the BSD license, see LICENSE for details.
68
+ */
61
69
  %(styledefs)s
62
70
  '''
63
71
 
64
72
  DOC_HEADER = '''\
65
73
  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
66
74
  "http://www.w3.org/TR/html4/strict.dtd">
67
-
75
+ <!--
76
+ generated by Pygments <https://pygments.org/>
77
+ Copyright 2006-2020 by the Pygments team.
78
+ Licensed under the BSD license, see LICENSE for details.
79
+ -->
68
80
  <html>
69
81
  <head>
70
82
  <title>%(title)s</title>
@@ -194,9 +206,10 @@ class HtmlFormatter(Formatter):
194
206
  `cssfile` exists.
195
207
 
196
208
  `noclasses`
197
- If set to true, token ``<span>`` tags will not use CSS classes, but
198
- inline styles. This is not recommended for larger pieces of code since
199
- it increases output size by quite a bit (default: ``False``).
209
+ If set to true, token ``<span>`` tags (as well as line number elements)
210
+ will not use CSS classes, but inline styles. This is not recommended
211
+ for larger pieces of code since it increases output size by quite a bit
212
+ (default: ``False``).
200
213
 
201
214
  `classprefix`
202
215
  Since the token types use relatively short class names, they may clash
@@ -322,11 +335,17 @@ class HtmlFormatter(Formatter):
322
335
  .. versionadded:: 1.6
323
336
 
324
337
  `filename`
325
- A string used to generate a filename when rendering <pre> blocks,
338
+ A string used to generate a filename when rendering ``<pre>`` blocks,
326
339
  for example if displaying source code.
327
340
 
328
341
  .. versionadded:: 2.1
329
342
 
343
+ `wrapcode`
344
+ Wrap the code inside ``<pre>`` blocks using ``<code>``, as recommended
345
+ by the HTML5 specification.
346
+
347
+ .. versionadded:: 2.4
348
+
330
349
 
331
350
  **Subclassing the HTML formatter**
332
351
 
@@ -395,6 +414,8 @@ class HtmlFormatter(Formatter):
395
414
  self.tagsfile = self._decodeifneeded(options.get('tagsfile', ''))
396
415
  self.tagurlformat = self._decodeifneeded(options.get('tagurlformat', ''))
397
416
  self.filename = self._decodeifneeded(options.get('filename', ''))
417
+ self.wrapcode = get_bool_opt(options, 'wrapcode', False)
418
+ self.span_element_openers = {}
398
419
 
399
420
  if self.tagsfile:
400
421
  if not ctags:
@@ -417,7 +438,7 @@ class HtmlFormatter(Formatter):
417
438
  self.lineseparator = options.get('lineseparator', '\n')
418
439
  self.lineanchors = options.get('lineanchors', '')
419
440
  self.linespans = options.get('linespans', '')
420
- self.anchorlinenos = options.get('anchorlinenos', False)
441
+ self.anchorlinenos = get_bool_opt(options, 'anchorlinenos', False)
421
442
  self.hl_lines = set()
422
443
  for lineno in get_list_opt(options, 'hl_lines', []):
423
444
  try:
@@ -436,13 +457,20 @@ class HtmlFormatter(Formatter):
436
457
  return ''
437
458
 
438
459
  def _get_css_classes(self, ttype):
439
- """Return the css classes of this token type prefixed with
440
- the classprefix option."""
460
+ """Generate the opening <span> tag for a given token type using CSS classes."""
441
461
  cls = self._get_css_class(ttype)
442
462
  while ttype not in STANDARD_TYPES:
443
463
  ttype = ttype.parent
444
464
  cls = self._get_css_class(ttype) + ' ' + cls
445
- return cls
465
+ return cls and '<span class="%s">' % cls or ''
466
+
467
+ def _get_css_inline_styles(self, ttype):
468
+ """Generate the opening <span> tag for a given token type using inline CSS styles."""
469
+ cclass = self.ttype2class.get(ttype)
470
+ while cclass is None:
471
+ ttype = ttype.parent
472
+ cclass = self.ttype2class.get(ttype)
473
+ return cclass and '<span style="%s">' % self.class2style[cclass][0] or ''
446
474
 
447
475
  def _create_stylesheet(self):
448
476
  t2c = self.ttype2class = {Token: ''}
@@ -451,7 +479,7 @@ class HtmlFormatter(Formatter):
451
479
  name = self._get_css_class(ttype)
452
480
  style = ''
453
481
  if ndef['color']:
454
- style += 'color: #%s; ' % ndef['color']
482
+ style += 'color: %s; ' % webify(ndef['color'])
455
483
  if ndef['bold']:
456
484
  style += 'font-weight: bold; '
457
485
  if ndef['italic']:
@@ -459,9 +487,9 @@ class HtmlFormatter(Formatter):
459
487
  if ndef['underline']:
460
488
  style += 'text-decoration: underline; '
461
489
  if ndef['bgcolor']:
462
- style += 'background-color: #%s; ' % ndef['bgcolor']
490
+ style += 'background-color: %s; ' % webify(ndef['bgcolor'])
463
491
  if ndef['border']:
464
- style += 'border: 1px solid #%s; ' % ndef['border']
492
+ style += 'border: 1px solid %s; ' % webify(ndef['border'])
465
493
  if style:
466
494
  t2c[ttype] = name
467
495
  # save len(ttype) to enable ordering the styles by
@@ -474,9 +502,69 @@ class HtmlFormatter(Formatter):
474
502
  highlighting style. ``arg`` can be a string or list of selectors to
475
503
  insert before the token type classes.
476
504
  """
505
+ style_lines = []
506
+
507
+ style_lines.extend(self.get_linenos_style_defs())
508
+ style_lines.extend(self.get_background_style_defs(arg))
509
+ style_lines.extend(self.get_token_style_defs(arg))
510
+
511
+ return '\n'.join(style_lines)
512
+
513
+ def get_token_style_defs(self, arg=None):
514
+ prefix = self.get_css_prefix(arg)
515
+
516
+ styles = [
517
+ (level, ttype, cls, style)
518
+ for cls, (style, ttype, level) in self.class2style.items()
519
+ if cls and style
520
+ ]
521
+ styles.sort()
522
+
523
+ lines = [
524
+ '%s { %s } /* %s */' % (prefix(cls), style, repr(ttype)[6:])
525
+ for (level, ttype, cls, style) in styles
526
+ ]
527
+
528
+ return lines
529
+
530
+ def get_background_style_defs(self, arg=None):
531
+ prefix = self.get_css_prefix(arg)
532
+ bg_color = self.style.background_color
533
+ hl_color = self.style.highlight_color
534
+
535
+ lines = []
536
+
537
+ if arg and not self.nobackground and bg_color is not None:
538
+ text_style = ''
539
+ if Text in self.ttype2class:
540
+ text_style = ' ' + self.class2style[self.ttype2class[Text]][0]
541
+ lines.insert(
542
+ 0, '%s{ background: %s;%s }' % (
543
+ prefix(''), bg_color, text_style
544
+ )
545
+ )
546
+ if hl_color is not None:
547
+ lines.insert(
548
+ 0, '%s { background-color: %s }' % (prefix('hll'), hl_color)
549
+ )
550
+
551
+ return lines
552
+
553
+ def get_linenos_style_defs(self):
554
+ lines = [
555
+ 'pre { %s }' % self._pre_style,
556
+ 'td.linenos pre { %s }' % self._linenos_style,
557
+ 'span.linenos { %s }' % self._linenos_style,
558
+ 'td.linenos pre.special { %s }' % self._linenos_special_style,
559
+ 'span.linenos.special { %s }' % self._linenos_special_style,
560
+ ]
561
+
562
+ return lines
563
+
564
+ def get_css_prefix(self, arg):
477
565
  if arg is None:
478
566
  arg = ('cssclass' in self.options and '.'+self.cssclass or '')
479
- if isinstance(arg, string_types):
567
+ if isinstance(arg, str):
480
568
  args = [arg]
481
569
  else:
482
570
  args = list(arg)
@@ -489,23 +577,25 @@ class HtmlFormatter(Formatter):
489
577
  tmp.append((arg and arg + ' ' or '') + cls)
490
578
  return ', '.join(tmp)
491
579
 
492
- styles = [(level, ttype, cls, style)
493
- for cls, (style, ttype, level) in iteritems(self.class2style)
494
- if cls and style]
495
- styles.sort()
496
- lines = ['%s { %s } /* %s */' % (prefix(cls), style, repr(ttype)[6:])
497
- for (level, ttype, cls, style) in styles]
498
- if arg and not self.nobackground and \
499
- self.style.background_color is not None:
500
- text_style = ''
501
- if Text in self.ttype2class:
502
- text_style = ' ' + self.class2style[self.ttype2class[Text]][0]
503
- lines.insert(0, '%s { background: %s;%s }' %
504
- (prefix(''), self.style.background_color, text_style))
505
- if self.style.highlight_color is not None:
506
- lines.insert(0, '%s.hll { background-color: %s }' %
507
- (prefix(''), self.style.highlight_color))
508
- return '\n'.join(lines)
580
+ return prefix
581
+
582
+ @property
583
+ def _pre_style(self):
584
+ return 'line-height: 125%;'
585
+
586
+ @property
587
+ def _linenos_style(self):
588
+ return 'color: %s; background-color: %s; padding-left: 5px; padding-right: 5px;' % (
589
+ self.style.line_number_color,
590
+ self.style.line_number_background_color
591
+ )
592
+
593
+ @property
594
+ def _linenos_special_style(self):
595
+ return 'color: %s; background-color: %s; padding-left: 5px; padding-right: 5px;' % (
596
+ self.style.line_number_special_color,
597
+ self.style.line_number_special_background_color
598
+ )
509
599
 
510
600
  def _decodeifneeded(self, value):
511
601
  if isinstance(value, bytes):
@@ -535,10 +625,9 @@ class HtmlFormatter(Formatter):
535
625
  # write CSS file only if noclobber_cssfile isn't given as an option.
536
626
  try:
537
627
  if not os.path.exists(cssfilename) or not self.noclobber_cssfile:
538
- cf = open(cssfilename, "w")
539
- cf.write(CSSFILE_TEMPLATE %
540
- {'styledefs': self.get_style_defs('body')})
541
- cf.close()
628
+ with open(cssfilename, "w") as cf:
629
+ cf.write(CSSFILE_TEMPLATE %
630
+ {'styledefs': self.get_style_defs('body')})
542
631
  except IOError as err:
543
632
  err.strerror = 'Error writing CSS file: ' + err.strerror
544
633
  raise
@@ -553,8 +642,7 @@ class HtmlFormatter(Formatter):
553
642
  styledefs=self.get_style_defs('body'),
554
643
  encoding=self.encoding))
555
644
 
556
- for t, line in inner:
557
- yield t, line
645
+ yield from inner
558
646
  yield 0, DOC_FOOTER
559
647
 
560
648
  def _wrap_tablelinenos(self, inner):
@@ -572,88 +660,83 @@ class HtmlFormatter(Formatter):
572
660
  la = self.lineanchors
573
661
  aln = self.anchorlinenos
574
662
  nocls = self.noclasses
575
- if sp:
576
- lines = []
577
-
578
- for i in range(fl, fl+lncount):
579
- if i % st == 0:
580
- if i % sp == 0:
581
- if aln:
582
- lines.append('<a href="#%s-%d" class="special">%*d</a>' %
583
- (la, i, mw, i))
584
- else:
585
- lines.append('<span class="special">%*d</span>' % (mw, i))
586
- else:
587
- if aln:
588
- lines.append('<a href="#%s-%d">%*d</a>' % (la, i, mw, i))
589
- else:
590
- lines.append('%*d' % (mw, i))
663
+
664
+ lines = []
665
+
666
+ for i in range(fl, fl+lncount):
667
+ print_line = i % st == 0
668
+ special_line = sp and i % sp == 0
669
+
670
+ if print_line:
671
+ line = '%*d' % (mw, i)
672
+ if aln:
673
+ line = '<a href="#%s-%d">%s</a>' % (la, i, line)
674
+ else:
675
+ line = ' ' * mw
676
+
677
+ if nocls:
678
+ if special_line:
679
+ style = ' style="%s"' % self._linenos_special_style
591
680
  else:
592
- lines.append('')
593
- ls = '\n'.join(lines)
594
- else:
595
- lines = []
596
- for i in range(fl, fl+lncount):
597
- if i % st == 0:
598
- if aln:
599
- lines.append('<a href="#%s-%d">%*d</a>' % (la, i, mw, i))
600
- else:
601
- lines.append('%*d' % (mw, i))
681
+ style = ' style="%s"' % self._linenos_style
682
+ else:
683
+ if special_line:
684
+ style = ' class="special"'
602
685
  else:
603
- lines.append('')
604
- ls = '\n'.join(lines)
686
+ style = ''
687
+
688
+ if style:
689
+ line = '<span%s>%s</span>' % (style, line)
690
+
691
+ lines.append(line)
692
+
693
+ ls = '\n'.join(lines)
605
694
 
606
695
  # in case you wonder about the seemingly redundant <div> here: since the
607
696
  # content in the other cell also is wrapped in a div, some browsers in
608
697
  # some configurations seem to mess up the formatting...
609
- if nocls:
610
- yield 0, ('<table class="%stable">' % self.cssclass +
611
- '<tr><td><div class="linenodiv" '
612
- 'style="background-color: #f0f0f0; padding-right: 10px">'
613
- '<pre style="line-height: 125%">' +
614
- ls + '</pre></div></td><td class="code">')
615
- else:
616
- yield 0, ('<table class="%stable">' % self.cssclass +
617
- '<tr><td class="linenos"><div class="linenodiv"><pre>' +
618
- ls + '</pre></div></td><td class="code">')
698
+ yield 0, (
699
+ '<table class="%stable">' % self.cssclass +
700
+ '<tr><td class="linenos"><div class="linenodiv"><pre>' +
701
+ ls + '</pre></div></td><td class="code">'
702
+ )
619
703
  yield 0, dummyoutfile.getvalue()
620
704
  yield 0, '</td></tr></table>'
621
705
 
622
706
  def _wrap_inlinelinenos(self, inner):
623
707
  # need a list of lines since we need the width of a single number :(
624
- lines = list(inner)
708
+ inner_lines = list(inner)
625
709
  sp = self.linenospecial
626
710
  st = self.linenostep
627
711
  num = self.linenostart
628
- mw = len(str(len(lines) + num - 1))
712
+ mw = len(str(len(inner_lines) + num - 1))
713
+ nocls = self.noclasses
629
714
 
630
- if self.noclasses:
631
- if sp:
632
- for t, line in lines:
633
- if num % sp == 0:
634
- style = 'background-color: #ffffc0; padding: 0 5px 0 5px'
635
- else:
636
- style = 'background-color: #f0f0f0; padding: 0 5px 0 5px'
637
- yield 1, '<span style="%s">%*s </span>' % (
638
- style, mw, (num % st and ' ' or num)) + line
639
- num += 1
715
+ for _, inner_line in inner_lines:
716
+ print_line = num % st == 0
717
+ special_line = sp and num % sp == 0
718
+
719
+ if print_line:
720
+ line = '%*d' % (mw, num)
640
721
  else:
641
- for t, line in lines:
642
- yield 1, ('<span style="background-color: #f0f0f0; '
643
- 'padding: 0 5px 0 5px">%*s </span>' % (
644
- mw, (num % st and ' ' or num)) + line)
645
- num += 1
646
- elif sp:
647
- for t, line in lines:
648
- yield 1, '<span class="lineno%s">%*s </span>' % (
649
- num % sp == 0 and ' special' or '', mw,
650
- (num % st and ' ' or num)) + line
651
- num += 1
652
- else:
653
- for t, line in lines:
654
- yield 1, '<span class="lineno">%*s </span>' % (
655
- mw, (num % st and ' ' or num)) + line
656
- num += 1
722
+ line = ' ' * mw
723
+
724
+ if nocls:
725
+ if special_line:
726
+ style = ' style="%s"' % self._linenos_special_style
727
+ else:
728
+ style = ' style="%s"' % self._linenos_style
729
+ else:
730
+ if special_line:
731
+ style = ' class="linenos special"'
732
+ else:
733
+ style = ' class="linenos"'
734
+
735
+ if style:
736
+ yield 1, '<span%s>%s</span>' % (style, line) + inner_line
737
+ else:
738
+ yield 1, line + inner_line
739
+ num += 1
657
740
 
658
741
  def _wrap_lineanchors(self, inner):
659
742
  s = self.lineanchors
@@ -687,8 +770,7 @@ class HtmlFormatter(Formatter):
687
770
 
688
771
  yield 0, ('<div' + (self.cssclass and ' class="%s"' % self.cssclass) +
689
772
  (style and (' style="%s"' % style)) + '>')
690
- for tup in inner:
691
- yield tup
773
+ yield from inner
692
774
  yield 0, '</div>\n'
693
775
 
694
776
  def _wrap_pre(self, inner):
@@ -696,7 +778,7 @@ class HtmlFormatter(Formatter):
696
778
  if self.prestyles:
697
779
  style.append(self.prestyles)
698
780
  if self.noclasses:
699
- style.append('line-height: 125%')
781
+ style.append(self._pre_style)
700
782
  style = '; '.join(style)
701
783
 
702
784
  if self.filename:
@@ -705,10 +787,19 @@ class HtmlFormatter(Formatter):
705
787
  # the empty span here is to keep leading empty lines from being
706
788
  # ignored by HTML parsers
707
789
  yield 0, ('<pre' + (style and ' style="%s"' % style) + '><span></span>')
708
- for tup in inner:
709
- yield tup
790
+ yield from inner
710
791
  yield 0, '</pre>'
711
792
 
793
+ def _wrap_code(self, inner):
794
+ yield 0, '<code>'
795
+ yield from inner
796
+ yield 0, '</code>'
797
+
798
+ @functools.lru_cache(maxsize=100)
799
+ def _translate_parts(self, value):
800
+ """HTML-escape a value and split it by newlines."""
801
+ return value.translate(_escape_html_table).split('\n')
802
+
712
803
  def _format_lines(self, tokensource):
713
804
  """
714
805
  Just format the tokens, without any wrapping tags.
@@ -716,26 +807,20 @@ class HtmlFormatter(Formatter):
716
807
  """
717
808
  nocls = self.noclasses
718
809
  lsep = self.lineseparator
719
- # for <span style=""> lookup only
720
- getcls = self.ttype2class.get
721
- c2s = self.class2style
722
- escape_table = _escape_html_table
723
810
  tagsfile = self.tagsfile
724
811
 
725
812
  lspan = ''
726
813
  line = []
727
814
  for ttype, value in tokensource:
728
- if nocls:
729
- cclass = getcls(ttype)
730
- while cclass is None:
731
- ttype = ttype.parent
732
- cclass = getcls(ttype)
733
- cspan = cclass and '<span style="%s">' % c2s[cclass][0] or ''
734
- else:
735
- cls = self._get_css_classes(ttype)
736
- cspan = cls and '<span class="%s">' % cls or ''
815
+ try:
816
+ cspan = self.span_element_openers[ttype]
817
+ except KeyError:
818
+ if nocls:
819
+ cspan = self.span_element_openers[ttype] = self._get_css_inline_styles(ttype)
820
+ else:
821
+ cspan = self.span_element_openers[ttype] = self._get_css_classes(ttype)
737
822
 
738
- parts = value.translate(escape_table).split('\n')
823
+ parts = self._translate_parts(value)
739
824
 
740
825
  if tagsfile and ttype in Token.Name:
741
826
  filename, linenumber = self._lookup_ctag(value)
@@ -815,7 +900,10 @@ class HtmlFormatter(Formatter):
815
900
  individual lines, in custom generators. See docstring
816
901
  for `format`. Can be overridden.
817
902
  """
818
- return self._wrap_div(self._wrap_pre(source))
903
+ if self.wrapcode:
904
+ return self._wrap_div(self._wrap_pre(self._wrap_code(source)))
905
+ else:
906
+ return self._wrap_div(self._wrap_pre(source))
819
907
 
820
908
  def format_unencoded(self, tokensource, outfile):
821
909
  """