pygments.rb 1.2.1 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.github/dependabot.yml +13 -0
- data/.github/workflows/ci.yml +40 -0
- data/.github/workflows/release.yml +24 -0
- data/.gitignore +4 -6
- data/.rubocop.yml +16 -0
- data/CHANGELOG.adoc +137 -0
- data/Gemfile +3 -1
- data/LICENSE +1 -1
- data/README.adoc +159 -0
- data/Rakefile +8 -32
- data/bench.rb +14 -8
- data/lib/pygments.rb +16 -14
- data/lib/pygments/lexer.rb +87 -65
- data/lib/pygments/mentos.py +23 -110
- data/lib/pygments/popen.rb +188 -284
- data/lib/pygments/version.rb +2 -2
- data/pygments.rb.gemspec +20 -13
- data/test/test_pygments.rb +50 -110
- data/vendor/pygments-main/{AUTHORS → Pygments-2.8.1.dist-info/AUTHORS} +26 -3
- data/vendor/pygments-main/Pygments-2.8.1.dist-info/INSTALLER +1 -0
- data/vendor/pygments-main/{LICENSE → Pygments-2.8.1.dist-info/LICENSE} +1 -1
- data/vendor/pygments-main/Pygments-2.8.1.dist-info/METADATA +48 -0
- data/vendor/pygments-main/Pygments-2.8.1.dist-info/RECORD +494 -0
- data/vendor/pygments-main/Pygments-2.8.1.dist-info/REQUESTED +0 -0
- data/vendor/pygments-main/Pygments-2.8.1.dist-info/WHEEL +5 -0
- data/vendor/pygments-main/Pygments-2.8.1.dist-info/entry_points.txt +3 -0
- data/vendor/pygments-main/Pygments-2.8.1.dist-info/top_level.txt +1 -0
- data/vendor/pygments-main/bin/pygmentize +8 -0
- data/vendor/pygments-main/pygments/__init__.py +6 -12
- data/vendor/pygments-main/pygments/__main__.py +17 -0
- data/vendor/pygments-main/pygments/cmdline.py +213 -184
- data/vendor/pygments-main/pygments/console.py +6 -10
- data/vendor/pygments-main/pygments/filter.py +4 -7
- data/vendor/pygments-main/pygments/filters/__init__.py +609 -22
- data/vendor/pygments-main/pygments/formatter.py +4 -5
- data/vendor/pygments-main/pygments/formatters/__init__.py +10 -10
- data/vendor/pygments-main/pygments/formatters/_mapping.py +1 -4
- data/vendor/pygments-main/pygments/formatters/bbcode.py +1 -2
- data/vendor/pygments-main/pygments/formatters/html.py +242 -139
- data/vendor/pygments-main/pygments/formatters/img.py +91 -50
- data/vendor/pygments-main/pygments/formatters/irc.py +39 -40
- data/vendor/pygments-main/pygments/formatters/latex.py +62 -33
- data/vendor/pygments-main/pygments/formatters/other.py +18 -17
- data/vendor/pygments-main/pygments/formatters/rtf.py +29 -30
- data/vendor/pygments-main/pygments/formatters/svg.py +40 -5
- data/vendor/pygments-main/pygments/formatters/terminal.py +25 -32
- data/vendor/pygments-main/pygments/formatters/terminal256.py +45 -14
- data/vendor/pygments-main/pygments/lexer.py +47 -44
- data/vendor/pygments-main/pygments/lexers/__init__.py +341 -0
- data/vendor/pygments-main/pygments/lexers/_asy_builtins.py +1644 -0
- data/vendor/pygments-main/pygments/lexers/_cl_builtins.py +231 -0
- data/vendor/pygments-main/pygments/lexers/_cocoa_builtins.py +75 -0
- data/vendor/pygments-main/pygments/lexers/_csound_builtins.py +1724 -0
- data/vendor/pygments-main/pygments/lexers/_lasso_builtins.py +5326 -0
- data/vendor/pygments-main/pygments/lexers/_lua_builtins.py +292 -0
- data/vendor/pygments-main/pygments/lexers/_mapping.py +554 -0
- data/vendor/pygments-main/pygments/lexers/_mql_builtins.py +1171 -0
- data/vendor/pygments-main/pygments/lexers/_mysql_builtins.py +1281 -0
- data/vendor/pygments-main/pygments/lexers/_openedge_builtins.py +2600 -0
- data/vendor/pygments-main/pygments/lexers/_php_builtins.py +4752 -0
- data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +677 -0
- data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +3093 -0
- data/vendor/pygments-main/pygments/lexers/_sourcemod_builtins.py +1160 -0
- data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +557 -0
- data/vendor/pygments-main/pygments/lexers/_stata_builtins.py +457 -0
- data/vendor/pygments-main/pygments/lexers/_tsql_builtins.py +1003 -0
- data/vendor/pygments-main/pygments/lexers/_usd_builtins.py +112 -0
- data/vendor/pygments-main/pygments/lexers/_vbscript_builtins.py +279 -0
- data/vendor/pygments-main/pygments/lexers/_vim_builtins.py +1938 -0
- data/vendor/pygments-main/pygments/lexers/actionscript.py +244 -0
- data/vendor/pygments-main/pygments/lexers/agile.py +23 -0
- data/vendor/pygments-main/pygments/lexers/algebra.py +239 -0
- data/vendor/pygments-main/pygments/lexers/ambient.py +75 -0
- data/vendor/pygments-main/pygments/lexers/amdgpu.py +48 -0
- data/vendor/pygments-main/pygments/lexers/ampl.py +86 -0
- data/vendor/pygments-main/pygments/lexers/apl.py +100 -0
- data/vendor/pygments-main/pygments/lexers/archetype.py +317 -0
- data/vendor/pygments-main/pygments/lexers/arrow.py +116 -0
- data/vendor/pygments-main/pygments/lexers/asm.py +1004 -0
- data/vendor/pygments-main/pygments/lexers/automation.py +379 -0
- data/vendor/pygments-main/pygments/lexers/bare.py +103 -0
- data/vendor/pygments-main/pygments/lexers/basic.py +661 -0
- data/vendor/pygments-main/pygments/lexers/bibtex.py +159 -0
- data/vendor/pygments-main/pygments/lexers/boa.py +101 -0
- data/vendor/pygments-main/pygments/lexers/business.py +626 -0
- data/vendor/pygments-main/pygments/lexers/c_cpp.py +342 -0
- data/vendor/pygments-main/pygments/lexers/c_like.py +565 -0
- data/vendor/pygments-main/pygments/lexers/capnproto.py +77 -0
- data/vendor/pygments-main/pygments/lexers/cddl.py +190 -0
- data/vendor/pygments-main/pygments/lexers/chapel.py +111 -0
- data/vendor/pygments-main/pygments/lexers/clean.py +178 -0
- data/vendor/pygments-main/pygments/lexers/compiled.py +33 -0
- data/vendor/pygments-main/pygments/lexers/configs.py +985 -0
- data/vendor/pygments-main/pygments/lexers/console.py +113 -0
- data/vendor/pygments-main/pygments/lexers/crystal.py +366 -0
- data/vendor/pygments-main/pygments/lexers/csound.py +466 -0
- data/vendor/pygments-main/pygments/lexers/css.py +694 -0
- data/vendor/pygments-main/pygments/lexers/d.py +255 -0
- data/vendor/pygments-main/pygments/lexers/dalvik.py +124 -0
- data/vendor/pygments-main/pygments/lexers/data.py +697 -0
- data/vendor/pygments-main/pygments/lexers/devicetree.py +108 -0
- data/vendor/pygments-main/pygments/lexers/diff.py +164 -0
- data/vendor/pygments-main/pygments/lexers/dotnet.py +706 -0
- data/vendor/pygments-main/pygments/lexers/dsls.py +959 -0
- data/vendor/pygments-main/pygments/lexers/dylan.py +286 -0
- data/vendor/pygments-main/pygments/lexers/ecl.py +137 -0
- data/vendor/pygments-main/pygments/lexers/eiffel.py +64 -0
- data/vendor/pygments-main/pygments/lexers/elm.py +120 -0
- data/vendor/pygments-main/pygments/lexers/email.py +150 -0
- data/vendor/pygments-main/pygments/lexers/erlang.py +529 -0
- data/vendor/pygments-main/pygments/lexers/esoteric.py +303 -0
- data/vendor/pygments-main/pygments/lexers/ezhil.py +76 -0
- data/vendor/pygments-main/pygments/lexers/factor.py +343 -0
- data/vendor/pygments-main/pygments/lexers/fantom.py +249 -0
- data/vendor/pygments-main/pygments/lexers/felix.py +272 -0
- data/vendor/pygments-main/pygments/lexers/floscript.py +82 -0
- data/vendor/pygments-main/pygments/lexers/forth.py +177 -0
- data/vendor/pygments-main/pygments/lexers/fortran.py +208 -0
- data/vendor/pygments-main/pygments/lexers/foxpro.py +427 -0
- data/vendor/pygments-main/pygments/lexers/freefem.py +897 -0
- data/vendor/pygments-main/pygments/lexers/functional.py +20 -0
- data/vendor/pygments-main/pygments/lexers/futhark.py +110 -0
- data/vendor/pygments-main/pygments/lexers/gdscript.py +345 -0
- data/vendor/pygments-main/pygments/lexers/go.py +100 -0
- data/vendor/pygments-main/pygments/lexers/grammar_notation.py +269 -0
- data/vendor/pygments-main/pygments/lexers/graph.py +84 -0
- data/vendor/pygments-main/pygments/lexers/graphics.py +799 -0
- data/vendor/pygments-main/pygments/lexers/graphviz.py +57 -0
- data/vendor/pygments-main/pygments/lexers/haskell.py +869 -0
- data/vendor/pygments-main/pygments/lexers/haxe.py +935 -0
- data/vendor/pygments-main/pygments/lexers/hdl.py +468 -0
- data/vendor/pygments-main/pygments/lexers/hexdump.py +102 -0
- data/vendor/pygments-main/pygments/lexers/html.py +613 -0
- data/vendor/pygments-main/pygments/lexers/idl.py +280 -0
- data/vendor/pygments-main/pygments/lexers/igor.py +419 -0
- data/vendor/pygments-main/pygments/lexers/inferno.py +95 -0
- data/vendor/pygments-main/pygments/lexers/installers.py +321 -0
- data/vendor/pygments-main/pygments/lexers/int_fiction.py +1367 -0
- data/vendor/pygments-main/pygments/lexers/iolang.py +62 -0
- data/vendor/pygments-main/pygments/lexers/j.py +145 -0
- data/vendor/pygments-main/pygments/lexers/javascript.py +1536 -0
- data/vendor/pygments-main/pygments/lexers/julia.py +330 -0
- data/vendor/pygments-main/pygments/lexers/jvm.py +1739 -0
- data/vendor/pygments-main/pygments/lexers/lisp.py +2698 -0
- data/vendor/pygments-main/pygments/lexers/make.py +205 -0
- data/vendor/pygments-main/pygments/lexers/markup.py +762 -0
- data/vendor/pygments-main/pygments/lexers/math.py +20 -0
- data/vendor/pygments-main/pygments/lexers/matlab.py +3280 -0
- data/vendor/pygments-main/pygments/lexers/mime.py +225 -0
- data/vendor/pygments-main/pygments/lexers/ml.py +957 -0
- data/vendor/pygments-main/pygments/lexers/modeling.py +365 -0
- data/vendor/pygments-main/pygments/lexers/modula2.py +1579 -0
- data/vendor/pygments-main/pygments/lexers/monte.py +203 -0
- data/vendor/pygments-main/pygments/lexers/mosel.py +447 -0
- data/vendor/pygments-main/pygments/lexers/ncl.py +893 -0
- data/vendor/pygments-main/pygments/lexers/nimrod.py +158 -0
- data/vendor/pygments-main/pygments/lexers/nit.py +63 -0
- data/vendor/pygments-main/pygments/lexers/nix.py +135 -0
- data/vendor/pygments-main/pygments/lexers/oberon.py +120 -0
- data/vendor/pygments-main/pygments/lexers/objective.py +503 -0
- data/vendor/pygments-main/pygments/lexers/ooc.py +84 -0
- data/vendor/pygments-main/pygments/lexers/other.py +40 -0
- data/vendor/pygments-main/pygments/lexers/parasail.py +78 -0
- data/vendor/pygments-main/pygments/lexers/parsers.py +799 -0
- data/vendor/pygments-main/pygments/lexers/pascal.py +643 -0
- data/vendor/pygments-main/pygments/lexers/pawn.py +202 -0
- data/vendor/pygments-main/pygments/lexers/perl.py +731 -0
- data/vendor/pygments-main/pygments/lexers/php.py +320 -0
- data/vendor/pygments-main/pygments/lexers/pointless.py +70 -0
- data/vendor/pygments-main/pygments/lexers/pony.py +93 -0
- data/vendor/pygments-main/pygments/lexers/praat.py +301 -0
- data/vendor/pygments-main/pygments/lexers/prolog.py +305 -0
- data/vendor/pygments-main/pygments/lexers/promql.py +182 -0
- data/vendor/pygments-main/pygments/lexers/python.py +1158 -0
- data/vendor/pygments-main/pygments/lexers/qvt.py +151 -0
- data/vendor/pygments-main/pygments/lexers/r.py +190 -0
- data/vendor/pygments-main/pygments/lexers/rdf.py +462 -0
- data/vendor/pygments-main/pygments/lexers/rebol.py +430 -0
- data/vendor/pygments-main/pygments/lexers/resource.py +84 -0
- data/vendor/pygments-main/pygments/lexers/ride.py +138 -0
- data/vendor/pygments-main/pygments/lexers/rnc.py +66 -0
- data/vendor/pygments-main/pygments/lexers/roboconf.py +81 -0
- data/vendor/pygments-main/pygments/lexers/robotframework.py +551 -0
- data/vendor/pygments-main/pygments/lexers/ruby.py +523 -0
- data/vendor/pygments-main/pygments/lexers/rust.py +223 -0
- data/vendor/pygments-main/pygments/lexers/sas.py +227 -0
- data/vendor/pygments-main/pygments/lexers/scdoc.py +82 -0
- data/vendor/pygments-main/pygments/lexers/scripting.py +1283 -0
- data/vendor/pygments-main/pygments/lexers/sgf.py +60 -0
- data/vendor/pygments-main/pygments/lexers/shell.py +909 -0
- data/vendor/pygments-main/pygments/lexers/sieve.py +68 -0
- data/vendor/pygments-main/pygments/lexers/slash.py +184 -0
- data/vendor/pygments-main/pygments/lexers/smalltalk.py +194 -0
- data/vendor/pygments-main/pygments/lexers/smv.py +78 -0
- data/vendor/pygments-main/pygments/lexers/snobol.py +82 -0
- data/vendor/pygments-main/pygments/lexers/solidity.py +91 -0
- data/vendor/pygments-main/pygments/lexers/special.py +106 -0
- data/vendor/pygments-main/pygments/lexers/sql.py +832 -0
- data/vendor/pygments-main/pygments/lexers/stata.py +170 -0
- data/vendor/pygments-main/pygments/lexers/supercollider.py +94 -0
- data/vendor/pygments-main/pygments/lexers/tcl.py +144 -0
- data/vendor/pygments-main/pygments/lexers/templates.py +2263 -0
- data/vendor/pygments-main/pygments/lexers/teraterm.py +334 -0
- data/vendor/pygments-main/pygments/lexers/testing.py +206 -0
- data/vendor/pygments-main/pygments/lexers/text.py +25 -0
- data/vendor/pygments-main/pygments/lexers/textedit.py +168 -0
- data/vendor/pygments-main/pygments/lexers/textfmts.py +429 -0
- data/vendor/pygments-main/pygments/lexers/theorem.py +476 -0
- data/vendor/pygments-main/pygments/lexers/tnt.py +262 -0
- data/vendor/pygments-main/pygments/lexers/trafficscript.py +53 -0
- data/vendor/pygments-main/pygments/lexers/typoscript.py +218 -0
- data/vendor/pygments-main/pygments/lexers/unicon.py +411 -0
- data/vendor/pygments-main/pygments/lexers/urbi.py +145 -0
- data/vendor/pygments-main/pygments/lexers/usd.py +89 -0
- data/vendor/pygments-main/pygments/lexers/varnish.py +189 -0
- data/vendor/pygments-main/pygments/lexers/verification.py +113 -0
- data/vendor/pygments-main/pygments/lexers/web.py +23 -0
- data/vendor/pygments-main/pygments/lexers/webidl.py +298 -0
- data/vendor/pygments-main/pygments/lexers/webmisc.py +991 -0
- data/vendor/pygments-main/pygments/lexers/whiley.py +115 -0
- data/vendor/pygments-main/pygments/lexers/x10.py +68 -0
- data/vendor/pygments-main/pygments/lexers/xorg.py +36 -0
- data/vendor/pygments-main/pygments/lexers/yang.py +103 -0
- data/vendor/pygments-main/pygments/lexers/zig.py +123 -0
- data/vendor/pygments-main/pygments/modeline.py +1 -2
- data/vendor/pygments-main/pygments/plugin.py +4 -3
- data/vendor/pygments-main/pygments/regexopt.py +1 -2
- data/vendor/pygments-main/pygments/scanner.py +2 -3
- data/vendor/pygments-main/pygments/sphinxext.py +2 -5
- data/vendor/pygments-main/pygments/style.py +61 -25
- data/vendor/pygments-main/pygments/styles/__init__.py +12 -5
- data/vendor/pygments-main/pygments/styles/abap.py +1 -2
- data/vendor/pygments-main/pygments/styles/algol.py +1 -2
- data/vendor/pygments-main/pygments/styles/algol_nu.py +1 -2
- data/vendor/pygments-main/pygments/styles/arduino.py +2 -3
- data/vendor/pygments-main/pygments/styles/autumn.py +1 -2
- data/vendor/pygments-main/pygments/styles/borland.py +1 -2
- data/vendor/pygments-main/pygments/styles/bw.py +1 -2
- data/vendor/pygments-main/pygments/styles/colorful.py +1 -2
- data/vendor/pygments-main/pygments/styles/default.py +1 -2
- data/vendor/pygments-main/pygments/styles/emacs.py +1 -2
- data/vendor/pygments-main/pygments/styles/friendly.py +1 -2
- data/vendor/pygments-main/pygments/styles/fruity.py +1 -2
- data/vendor/pygments-main/pygments/styles/igor.py +1 -2
- data/vendor/pygments-main/pygments/styles/inkpot.py +66 -0
- data/vendor/pygments-main/pygments/styles/lovelace.py +1 -2
- data/vendor/pygments-main/pygments/styles/manni.py +1 -2
- data/vendor/pygments-main/pygments/styles/material.py +118 -0
- data/vendor/pygments-main/pygments/styles/monokai.py +4 -4
- data/vendor/pygments-main/pygments/styles/murphy.py +1 -2
- data/vendor/pygments-main/pygments/styles/native.py +1 -2
- data/vendor/pygments-main/pygments/styles/paraiso_dark.py +1 -2
- data/vendor/pygments-main/pygments/styles/paraiso_light.py +1 -2
- data/vendor/pygments-main/pygments/styles/pastie.py +1 -2
- data/vendor/pygments-main/pygments/styles/perldoc.py +1 -2
- data/vendor/pygments-main/pygments/styles/rainbow_dash.py +1 -2
- data/vendor/pygments-main/pygments/styles/rrt.py +1 -2
- data/vendor/pygments-main/pygments/styles/sas.py +1 -2
- data/vendor/pygments-main/pygments/styles/solarized.py +136 -0
- data/vendor/pygments-main/pygments/styles/stata_dark.py +40 -0
- data/vendor/pygments-main/pygments/styles/{stata.py → stata_light.py} +14 -16
- data/vendor/pygments-main/pygments/styles/tango.py +1 -2
- data/vendor/pygments-main/pygments/styles/trac.py +1 -2
- data/vendor/pygments-main/pygments/styles/vim.py +1 -2
- data/vendor/pygments-main/pygments/styles/vs.py +1 -2
- data/vendor/pygments-main/pygments/styles/xcode.py +1 -2
- data/vendor/pygments-main/pygments/styles/zenburn.py +80 -0
- data/vendor/pygments-main/pygments/token.py +1 -2
- data/vendor/pygments-main/pygments/unistring.py +47 -109
- data/vendor/pygments-main/pygments/util.py +16 -96
- metadata +81 -139
- data/CHANGELOG.md +0 -111
- data/README.md +0 -121
- data/cache-lexers.rb +0 -8
- data/circle.yml +0 -20
- data/test/test_data.c +0 -2581
- data/test/test_data.py +0 -514
- data/test/test_data_generated +0 -2582
- data/vendor/custom_lexers/github.py +0 -565
- data/vendor/pygments-main/CHANGES +0 -1186
- data/vendor/pygments-main/MANIFEST.in +0 -6
- data/vendor/pygments-main/Makefile +0 -65
- data/vendor/pygments-main/README.rst +0 -39
- data/vendor/pygments-main/REVISION +0 -1
- data/vendor/pygments-main/TODO +0 -12
- data/vendor/pygments-main/doc/Makefile +0 -153
- data/vendor/pygments-main/doc/_static/favicon.ico +0 -0
- data/vendor/pygments-main/doc/_static/logo_new.png +0 -0
- data/vendor/pygments-main/doc/_static/logo_only.png +0 -0
- data/vendor/pygments-main/doc/_templates/docssidebar.html +0 -3
- data/vendor/pygments-main/doc/_templates/indexsidebar.html +0 -25
- data/vendor/pygments-main/doc/_themes/pygments14/layout.html +0 -98
- data/vendor/pygments-main/doc/_themes/pygments14/static/bodybg.png +0 -0
- data/vendor/pygments-main/doc/_themes/pygments14/static/docbg.png +0 -0
- data/vendor/pygments-main/doc/_themes/pygments14/static/listitem.png +0 -0
- data/vendor/pygments-main/doc/_themes/pygments14/static/logo.png +0 -0
- data/vendor/pygments-main/doc/_themes/pygments14/static/pocoo.png +0 -0
- data/vendor/pygments-main/doc/_themes/pygments14/static/pygments14.css_t +0 -401
- data/vendor/pygments-main/doc/_themes/pygments14/theme.conf +0 -15
- data/vendor/pygments-main/doc/conf.py +0 -241
- data/vendor/pygments-main/doc/docs/api.rst +0 -354
- data/vendor/pygments-main/doc/docs/authors.rst +0 -4
- data/vendor/pygments-main/doc/docs/changelog.rst +0 -1
- data/vendor/pygments-main/doc/docs/cmdline.rst +0 -166
- data/vendor/pygments-main/doc/docs/filterdevelopment.rst +0 -71
- data/vendor/pygments-main/doc/docs/filters.rst +0 -41
- data/vendor/pygments-main/doc/docs/formatterdevelopment.rst +0 -169
- data/vendor/pygments-main/doc/docs/formatters.rst +0 -48
- data/vendor/pygments-main/doc/docs/index.rst +0 -66
- data/vendor/pygments-main/doc/docs/integrate.rst +0 -40
- data/vendor/pygments-main/doc/docs/java.rst +0 -70
- data/vendor/pygments-main/doc/docs/lexerdevelopment.rst +0 -728
- data/vendor/pygments-main/doc/docs/lexers.rst +0 -69
- data/vendor/pygments-main/doc/docs/moinmoin.rst +0 -39
- data/vendor/pygments-main/doc/docs/plugins.rst +0 -93
- data/vendor/pygments-main/doc/docs/quickstart.rst +0 -205
- data/vendor/pygments-main/doc/docs/rstdirective.rst +0 -22
- data/vendor/pygments-main/doc/docs/styles.rst +0 -201
- data/vendor/pygments-main/doc/docs/tokens.rst +0 -372
- data/vendor/pygments-main/doc/docs/unicode.rst +0 -58
- data/vendor/pygments-main/doc/download.rst +0 -41
- data/vendor/pygments-main/doc/faq.rst +0 -139
- data/vendor/pygments-main/doc/index.rst +0 -54
- data/vendor/pygments-main/doc/languages.rst +0 -154
- data/vendor/pygments-main/doc/make.bat +0 -190
- data/vendor/pygments-main/doc/pygmentize.1 +0 -94
- data/vendor/pygments-main/external/autopygmentize +0 -101
- data/vendor/pygments-main/external/lasso-builtins-generator-9.lasso +0 -162
- data/vendor/pygments-main/external/markdown-processor.py +0 -67
- data/vendor/pygments-main/external/moin-parser.py +0 -112
- data/vendor/pygments-main/external/pygments.bashcomp +0 -38
- data/vendor/pygments-main/external/rst-directive.py +0 -82
- data/vendor/pygments-main/pygmentize +0 -8
- data/vendor/pygments-main/requirements.txt +0 -5
- data/vendor/pygments-main/scripts/check_sources.py +0 -211
- data/vendor/pygments-main/scripts/debug_lexer.py +0 -246
- data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +0 -33
- data/vendor/pygments-main/scripts/epydoc.css +0 -280
- data/vendor/pygments-main/scripts/get_vimkw.py +0 -74
- data/vendor/pygments-main/scripts/pylintrc +0 -301
- data/vendor/pygments-main/scripts/vim2pygments.py +0 -935
- data/vendor/pygments-main/setup.cfg +0 -10
- data/vendor/pygments-main/setup.py +0 -77
- data/vendor/pygments-main/tox.ini +0 -7
- data/vendor/simplejson/.gitignore +0 -10
- data/vendor/simplejson/.travis.yml +0 -5
- data/vendor/simplejson/CHANGES.txt +0 -291
- data/vendor/simplejson/LICENSE.txt +0 -19
- data/vendor/simplejson/MANIFEST.in +0 -5
- data/vendor/simplejson/README.rst +0 -19
- data/vendor/simplejson/conf.py +0 -179
- data/vendor/simplejson/index.rst +0 -628
- data/vendor/simplejson/scripts/make_docs.py +0 -18
- data/vendor/simplejson/setup.py +0 -104
- data/vendor/simplejson/simplejson/__init__.py +0 -510
- data/vendor/simplejson/simplejson/_speedups.c +0 -2745
- data/vendor/simplejson/simplejson/decoder.py +0 -425
- data/vendor/simplejson/simplejson/encoder.py +0 -567
- data/vendor/simplejson/simplejson/ordered_dict.py +0 -119
- data/vendor/simplejson/simplejson/scanner.py +0 -77
- data/vendor/simplejson/simplejson/tests/__init__.py +0 -67
- data/vendor/simplejson/simplejson/tests/test_bigint_as_string.py +0 -55
- data/vendor/simplejson/simplejson/tests/test_check_circular.py +0 -30
- data/vendor/simplejson/simplejson/tests/test_decimal.py +0 -66
- data/vendor/simplejson/simplejson/tests/test_decode.py +0 -83
- data/vendor/simplejson/simplejson/tests/test_default.py +0 -9
- data/vendor/simplejson/simplejson/tests/test_dump.py +0 -67
- data/vendor/simplejson/simplejson/tests/test_encode_basestring_ascii.py +0 -46
- data/vendor/simplejson/simplejson/tests/test_encode_for_html.py +0 -32
- data/vendor/simplejson/simplejson/tests/test_errors.py +0 -34
- data/vendor/simplejson/simplejson/tests/test_fail.py +0 -91
- data/vendor/simplejson/simplejson/tests/test_float.py +0 -19
- data/vendor/simplejson/simplejson/tests/test_indent.py +0 -86
- data/vendor/simplejson/simplejson/tests/test_item_sort_key.py +0 -20
- data/vendor/simplejson/simplejson/tests/test_namedtuple.py +0 -121
- data/vendor/simplejson/simplejson/tests/test_pass1.py +0 -76
- data/vendor/simplejson/simplejson/tests/test_pass2.py +0 -14
- data/vendor/simplejson/simplejson/tests/test_pass3.py +0 -20
- data/vendor/simplejson/simplejson/tests/test_recursion.py +0 -67
- data/vendor/simplejson/simplejson/tests/test_scanstring.py +0 -117
- data/vendor/simplejson/simplejson/tests/test_separators.py +0 -42
- data/vendor/simplejson/simplejson/tests/test_speedups.py +0 -20
- data/vendor/simplejson/simplejson/tests/test_tuple.py +0 -49
- data/vendor/simplejson/simplejson/tests/test_unicode.py +0 -109
- data/vendor/simplejson/simplejson/tool.py +0 -39
|
@@ -1,29 +1,28 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
1
|
"""
|
|
3
2
|
pygments.formatter
|
|
4
3
|
~~~~~~~~~~~~~~~~~~
|
|
5
4
|
|
|
6
5
|
Base formatter class.
|
|
7
6
|
|
|
8
|
-
:copyright: Copyright 2006-
|
|
7
|
+
:copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
|
|
9
8
|
:license: BSD, see LICENSE for details.
|
|
10
9
|
"""
|
|
11
10
|
|
|
12
11
|
import codecs
|
|
13
12
|
|
|
14
|
-
from pygments.util import get_bool_opt
|
|
13
|
+
from pygments.util import get_bool_opt
|
|
15
14
|
from pygments.styles import get_style_by_name
|
|
16
15
|
|
|
17
16
|
__all__ = ['Formatter']
|
|
18
17
|
|
|
19
18
|
|
|
20
19
|
def _lookup_style(style):
|
|
21
|
-
if isinstance(style,
|
|
20
|
+
if isinstance(style, str):
|
|
22
21
|
return get_style_by_name(style)
|
|
23
22
|
return style
|
|
24
23
|
|
|
25
24
|
|
|
26
|
-
class Formatter
|
|
25
|
+
class Formatter:
|
|
27
26
|
"""
|
|
28
27
|
Converts a token stream to text.
|
|
29
28
|
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
1
|
"""
|
|
3
2
|
pygments.formatters
|
|
4
3
|
~~~~~~~~~~~~~~~~~~~
|
|
5
4
|
|
|
6
5
|
Pygments formatters.
|
|
7
6
|
|
|
8
|
-
:copyright: Copyright 2006-
|
|
7
|
+
:copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
|
|
9
8
|
:license: BSD, see LICENSE for details.
|
|
10
9
|
"""
|
|
11
10
|
|
|
@@ -17,7 +16,7 @@ from os.path import basename
|
|
|
17
16
|
|
|
18
17
|
from pygments.formatters._mapping import FORMATTERS
|
|
19
18
|
from pygments.plugin import find_plugin_formatters
|
|
20
|
-
from pygments.util import ClassNotFound
|
|
19
|
+
from pygments.util import ClassNotFound
|
|
21
20
|
|
|
22
21
|
__all__ = ['get_formatter_by_name', 'get_formatter_for_filename',
|
|
23
22
|
'get_all_formatters', 'load_formatter_from_file'] + list(FORMATTERS)
|
|
@@ -45,7 +44,7 @@ def _load_formatters(module_name):
|
|
|
45
44
|
def get_all_formatters():
|
|
46
45
|
"""Return a generator for all formatter classes."""
|
|
47
46
|
# NB: this returns formatter classes, not info like get_all_lexers().
|
|
48
|
-
for info in
|
|
47
|
+
for info in FORMATTERS.values():
|
|
49
48
|
if info[1] not in _formatter_cache:
|
|
50
49
|
_load_formatters(info[0])
|
|
51
50
|
yield _formatter_cache[info[1]]
|
|
@@ -58,7 +57,7 @@ def find_formatter_class(alias):
|
|
|
58
57
|
|
|
59
58
|
Returns None if not found.
|
|
60
59
|
"""
|
|
61
|
-
for module_name, name, aliases, _, _ in
|
|
60
|
+
for module_name, name, aliases, _, _ in FORMATTERS.values():
|
|
62
61
|
if alias in aliases:
|
|
63
62
|
if name not in _formatter_cache:
|
|
64
63
|
_load_formatters(module_name)
|
|
@@ -98,7 +97,8 @@ def load_formatter_from_file(filename, formattername="CustomFormatter",
|
|
|
98
97
|
try:
|
|
99
98
|
# This empty dict will contain the namespace for the exec'd file
|
|
100
99
|
custom_namespace = {}
|
|
101
|
-
|
|
100
|
+
with open(filename, 'rb') as f:
|
|
101
|
+
exec(f.read(), custom_namespace)
|
|
102
102
|
# Retrieve the class `formattername` from that namespace
|
|
103
103
|
if formattername not in custom_namespace:
|
|
104
104
|
raise ClassNotFound('no valid %s class found in %s' %
|
|
@@ -106,9 +106,9 @@ def load_formatter_from_file(filename, formattername="CustomFormatter",
|
|
|
106
106
|
formatter_class = custom_namespace[formattername]
|
|
107
107
|
# And finally instantiate it with the options
|
|
108
108
|
return formatter_class(**options)
|
|
109
|
-
except
|
|
110
|
-
raise ClassNotFound('cannot read %s' % filename)
|
|
111
|
-
except ClassNotFound
|
|
109
|
+
except OSError as err:
|
|
110
|
+
raise ClassNotFound('cannot read %s: %s' % (filename, err))
|
|
111
|
+
except ClassNotFound:
|
|
112
112
|
raise
|
|
113
113
|
except Exception as err:
|
|
114
114
|
raise ClassNotFound('error when loading custom formatter: %s' % err)
|
|
@@ -120,7 +120,7 @@ def get_formatter_for_filename(fn, **options):
|
|
|
120
120
|
Raises ClassNotFound if not found.
|
|
121
121
|
"""
|
|
122
122
|
fn = basename(fn)
|
|
123
|
-
for modname, name, _, filenames, _ in
|
|
123
|
+
for modname, name, _, filenames, _ in FORMATTERS.values():
|
|
124
124
|
for filename in filenames:
|
|
125
125
|
if _fn_matches(fn, filename):
|
|
126
126
|
if name not in _formatter_cache:
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
1
|
"""
|
|
3
2
|
pygments.formatters._mapping
|
|
4
3
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
@@ -9,12 +8,10 @@
|
|
|
9
8
|
|
|
10
9
|
Do not alter the FORMATTERS dictionary by hand.
|
|
11
10
|
|
|
12
|
-
:copyright: Copyright 2006-
|
|
11
|
+
:copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
|
|
13
12
|
:license: BSD, see LICENSE for details.
|
|
14
13
|
"""
|
|
15
14
|
|
|
16
|
-
from __future__ import print_function
|
|
17
|
-
|
|
18
15
|
FORMATTERS = {
|
|
19
16
|
'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
17
|
'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.'),
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
1
|
"""
|
|
3
2
|
pygments.formatters.bbcode
|
|
4
3
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
5
4
|
|
|
6
5
|
BBcode formatter.
|
|
7
6
|
|
|
8
|
-
:copyright: Copyright 2006-
|
|
7
|
+
:copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
|
|
9
8
|
:license: BSD, see LICENSE for details.
|
|
10
9
|
"""
|
|
11
10
|
|
|
@@ -1,24 +1,22 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
1
|
"""
|
|
3
2
|
pygments.formatters.html
|
|
4
3
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
5
4
|
|
|
6
5
|
Formatter for HTML output.
|
|
7
6
|
|
|
8
|
-
:copyright: Copyright 2006-
|
|
7
|
+
:copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
|
|
9
8
|
:license: BSD, see LICENSE for details.
|
|
10
9
|
"""
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
import functools
|
|
14
12
|
import os
|
|
15
13
|
import sys
|
|
16
14
|
import os.path
|
|
15
|
+
from io import StringIO
|
|
17
16
|
|
|
18
17
|
from pygments.formatter import Formatter
|
|
19
18
|
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
|
|
19
|
+
from pygments.util import get_bool_opt, get_int_opt, get_list_opt
|
|
22
20
|
|
|
23
21
|
try:
|
|
24
22
|
import ctags
|
|
@@ -29,11 +27,11 @@ __all__ = ['HtmlFormatter']
|
|
|
29
27
|
|
|
30
28
|
|
|
31
29
|
_escape_html_table = {
|
|
32
|
-
ord('&'):
|
|
33
|
-
ord('<'):
|
|
34
|
-
ord('>'):
|
|
35
|
-
ord('"'):
|
|
36
|
-
ord("'"):
|
|
30
|
+
ord('&'): '&',
|
|
31
|
+
ord('<'): '<',
|
|
32
|
+
ord('>'): '>',
|
|
33
|
+
ord('"'): '"',
|
|
34
|
+
ord("'"): ''',
|
|
37
35
|
}
|
|
38
36
|
|
|
39
37
|
|
|
@@ -42,6 +40,13 @@ def escape_html(text, table=_escape_html_table):
|
|
|
42
40
|
return text.translate(table)
|
|
43
41
|
|
|
44
42
|
|
|
43
|
+
def webify(color):
|
|
44
|
+
if color.startswith('calc') or color.startswith('var'):
|
|
45
|
+
return color
|
|
46
|
+
else:
|
|
47
|
+
return '#' + color
|
|
48
|
+
|
|
49
|
+
|
|
45
50
|
def _get_ttype_class(ttype):
|
|
46
51
|
fname = STANDARD_TYPES.get(ttype)
|
|
47
52
|
if fname:
|
|
@@ -55,16 +60,22 @@ def _get_ttype_class(ttype):
|
|
|
55
60
|
|
|
56
61
|
|
|
57
62
|
CSSFILE_TEMPLATE = '''\
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
63
|
+
/*
|
|
64
|
+
generated by Pygments <https://pygments.org/>
|
|
65
|
+
Copyright 2006-2021 by the Pygments team.
|
|
66
|
+
Licensed under the BSD license, see LICENSE for details.
|
|
67
|
+
*/
|
|
61
68
|
%(styledefs)s
|
|
62
69
|
'''
|
|
63
70
|
|
|
64
71
|
DOC_HEADER = '''\
|
|
65
72
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
|
|
66
73
|
"http://www.w3.org/TR/html4/strict.dtd">
|
|
67
|
-
|
|
74
|
+
<!--
|
|
75
|
+
generated by Pygments <https://pygments.org/>
|
|
76
|
+
Copyright 2006-2021 by the Pygments team.
|
|
77
|
+
Licensed under the BSD license, see LICENSE for details.
|
|
78
|
+
-->
|
|
68
79
|
<html>
|
|
69
80
|
<head>
|
|
70
81
|
<title>%(title)s</title>
|
|
@@ -194,9 +205,10 @@ class HtmlFormatter(Formatter):
|
|
|
194
205
|
`cssfile` exists.
|
|
195
206
|
|
|
196
207
|
`noclasses`
|
|
197
|
-
If set to true, token ``<span>`` tags
|
|
198
|
-
inline styles. This is not recommended
|
|
199
|
-
it increases output size by quite a bit
|
|
208
|
+
If set to true, token ``<span>`` tags (as well as line number elements)
|
|
209
|
+
will not use CSS classes, but inline styles. This is not recommended
|
|
210
|
+
for larger pieces of code since it increases output size by quite a bit
|
|
211
|
+
(default: ``False``).
|
|
200
212
|
|
|
201
213
|
`classprefix`
|
|
202
214
|
Since the token types use relatively short class names, they may clash
|
|
@@ -322,11 +334,17 @@ class HtmlFormatter(Formatter):
|
|
|
322
334
|
.. versionadded:: 1.6
|
|
323
335
|
|
|
324
336
|
`filename`
|
|
325
|
-
A string used to generate a filename when rendering
|
|
337
|
+
A string used to generate a filename when rendering ``<pre>`` blocks,
|
|
326
338
|
for example if displaying source code.
|
|
327
339
|
|
|
328
340
|
.. versionadded:: 2.1
|
|
329
341
|
|
|
342
|
+
`wrapcode`
|
|
343
|
+
Wrap the code inside ``<pre>`` blocks using ``<code>``, as recommended
|
|
344
|
+
by the HTML5 specification.
|
|
345
|
+
|
|
346
|
+
.. versionadded:: 2.4
|
|
347
|
+
|
|
330
348
|
|
|
331
349
|
**Subclassing the HTML formatter**
|
|
332
350
|
|
|
@@ -395,6 +413,8 @@ class HtmlFormatter(Formatter):
|
|
|
395
413
|
self.tagsfile = self._decodeifneeded(options.get('tagsfile', ''))
|
|
396
414
|
self.tagurlformat = self._decodeifneeded(options.get('tagurlformat', ''))
|
|
397
415
|
self.filename = self._decodeifneeded(options.get('filename', ''))
|
|
416
|
+
self.wrapcode = get_bool_opt(options, 'wrapcode', False)
|
|
417
|
+
self.span_element_openers = {}
|
|
398
418
|
|
|
399
419
|
if self.tagsfile:
|
|
400
420
|
if not ctags:
|
|
@@ -417,7 +437,7 @@ class HtmlFormatter(Formatter):
|
|
|
417
437
|
self.lineseparator = options.get('lineseparator', '\n')
|
|
418
438
|
self.lineanchors = options.get('lineanchors', '')
|
|
419
439
|
self.linespans = options.get('linespans', '')
|
|
420
|
-
self.anchorlinenos = options
|
|
440
|
+
self.anchorlinenos = get_bool_opt(options, 'anchorlinenos', False)
|
|
421
441
|
self.hl_lines = set()
|
|
422
442
|
for lineno in get_list_opt(options, 'hl_lines', []):
|
|
423
443
|
try:
|
|
@@ -436,13 +456,20 @@ class HtmlFormatter(Formatter):
|
|
|
436
456
|
return ''
|
|
437
457
|
|
|
438
458
|
def _get_css_classes(self, ttype):
|
|
439
|
-
"""Return the
|
|
440
|
-
the classprefix option."""
|
|
459
|
+
"""Return the CSS classes of this token type prefixed with the classprefix option."""
|
|
441
460
|
cls = self._get_css_class(ttype)
|
|
442
461
|
while ttype not in STANDARD_TYPES:
|
|
443
462
|
ttype = ttype.parent
|
|
444
463
|
cls = self._get_css_class(ttype) + ' ' + cls
|
|
445
|
-
return cls
|
|
464
|
+
return cls or ''
|
|
465
|
+
|
|
466
|
+
def _get_css_inline_styles(self, ttype):
|
|
467
|
+
"""Return the inline CSS styles for this token type."""
|
|
468
|
+
cclass = self.ttype2class.get(ttype)
|
|
469
|
+
while cclass is None:
|
|
470
|
+
ttype = ttype.parent
|
|
471
|
+
cclass = self.ttype2class.get(ttype)
|
|
472
|
+
return cclass or ''
|
|
446
473
|
|
|
447
474
|
def _create_stylesheet(self):
|
|
448
475
|
t2c = self.ttype2class = {Token: ''}
|
|
@@ -451,7 +478,7 @@ class HtmlFormatter(Formatter):
|
|
|
451
478
|
name = self._get_css_class(ttype)
|
|
452
479
|
style = ''
|
|
453
480
|
if ndef['color']:
|
|
454
|
-
style += 'color:
|
|
481
|
+
style += 'color: %s; ' % webify(ndef['color'])
|
|
455
482
|
if ndef['bold']:
|
|
456
483
|
style += 'font-weight: bold; '
|
|
457
484
|
if ndef['italic']:
|
|
@@ -459,9 +486,9 @@ class HtmlFormatter(Formatter):
|
|
|
459
486
|
if ndef['underline']:
|
|
460
487
|
style += 'text-decoration: underline; '
|
|
461
488
|
if ndef['bgcolor']:
|
|
462
|
-
style += 'background-color:
|
|
489
|
+
style += 'background-color: %s; ' % webify(ndef['bgcolor'])
|
|
463
490
|
if ndef['border']:
|
|
464
|
-
style += 'border: 1px solid
|
|
491
|
+
style += 'border: 1px solid %s; ' % webify(ndef['border'])
|
|
465
492
|
if style:
|
|
466
493
|
t2c[ttype] = name
|
|
467
494
|
# save len(ttype) to enable ordering the styles by
|
|
@@ -474,9 +501,69 @@ class HtmlFormatter(Formatter):
|
|
|
474
501
|
highlighting style. ``arg`` can be a string or list of selectors to
|
|
475
502
|
insert before the token type classes.
|
|
476
503
|
"""
|
|
504
|
+
style_lines = []
|
|
505
|
+
|
|
506
|
+
style_lines.extend(self.get_linenos_style_defs())
|
|
507
|
+
style_lines.extend(self.get_background_style_defs(arg))
|
|
508
|
+
style_lines.extend(self.get_token_style_defs(arg))
|
|
509
|
+
|
|
510
|
+
return '\n'.join(style_lines)
|
|
511
|
+
|
|
512
|
+
def get_token_style_defs(self, arg=None):
|
|
513
|
+
prefix = self.get_css_prefix(arg)
|
|
514
|
+
|
|
515
|
+
styles = [
|
|
516
|
+
(level, ttype, cls, style)
|
|
517
|
+
for cls, (style, ttype, level) in self.class2style.items()
|
|
518
|
+
if cls and style
|
|
519
|
+
]
|
|
520
|
+
styles.sort()
|
|
521
|
+
|
|
522
|
+
lines = [
|
|
523
|
+
'%s { %s } /* %s */' % (prefix(cls), style, repr(ttype)[6:])
|
|
524
|
+
for (level, ttype, cls, style) in styles
|
|
525
|
+
]
|
|
526
|
+
|
|
527
|
+
return lines
|
|
528
|
+
|
|
529
|
+
def get_background_style_defs(self, arg=None):
|
|
530
|
+
prefix = self.get_css_prefix(arg)
|
|
531
|
+
bg_color = self.style.background_color
|
|
532
|
+
hl_color = self.style.highlight_color
|
|
533
|
+
|
|
534
|
+
lines = []
|
|
535
|
+
|
|
536
|
+
if arg and not self.nobackground and bg_color is not None:
|
|
537
|
+
text_style = ''
|
|
538
|
+
if Text in self.ttype2class:
|
|
539
|
+
text_style = ' ' + self.class2style[self.ttype2class[Text]][0]
|
|
540
|
+
lines.insert(
|
|
541
|
+
0, '%s{ background: %s;%s }' % (
|
|
542
|
+
prefix(''), bg_color, text_style
|
|
543
|
+
)
|
|
544
|
+
)
|
|
545
|
+
if hl_color is not None:
|
|
546
|
+
lines.insert(
|
|
547
|
+
0, '%s { background-color: %s }' % (prefix('hll'), hl_color)
|
|
548
|
+
)
|
|
549
|
+
|
|
550
|
+
return lines
|
|
551
|
+
|
|
552
|
+
def get_linenos_style_defs(self):
|
|
553
|
+
lines = [
|
|
554
|
+
'pre { %s }' % self._pre_style,
|
|
555
|
+
'td.linenos .normal { %s }' % self._linenos_style,
|
|
556
|
+
'span.linenos { %s }' % self._linenos_style,
|
|
557
|
+
'td.linenos .special { %s }' % self._linenos_special_style,
|
|
558
|
+
'span.linenos.special { %s }' % self._linenos_special_style,
|
|
559
|
+
]
|
|
560
|
+
|
|
561
|
+
return lines
|
|
562
|
+
|
|
563
|
+
def get_css_prefix(self, arg):
|
|
477
564
|
if arg is None:
|
|
478
565
|
arg = ('cssclass' in self.options and '.'+self.cssclass or '')
|
|
479
|
-
if isinstance(arg,
|
|
566
|
+
if isinstance(arg, str):
|
|
480
567
|
args = [arg]
|
|
481
568
|
else:
|
|
482
569
|
args = list(arg)
|
|
@@ -489,23 +576,25 @@ class HtmlFormatter(Formatter):
|
|
|
489
576
|
tmp.append((arg and arg + ' ' or '') + cls)
|
|
490
577
|
return ', '.join(tmp)
|
|
491
578
|
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
579
|
+
return prefix
|
|
580
|
+
|
|
581
|
+
@property
|
|
582
|
+
def _pre_style(self):
|
|
583
|
+
return 'line-height: 125%;'
|
|
584
|
+
|
|
585
|
+
@property
|
|
586
|
+
def _linenos_style(self):
|
|
587
|
+
return 'color: %s; background-color: %s; padding-left: 5px; padding-right: 5px;' % (
|
|
588
|
+
self.style.line_number_color,
|
|
589
|
+
self.style.line_number_background_color
|
|
590
|
+
)
|
|
591
|
+
|
|
592
|
+
@property
|
|
593
|
+
def _linenos_special_style(self):
|
|
594
|
+
return 'color: %s; background-color: %s; padding-left: 5px; padding-right: 5px;' % (
|
|
595
|
+
self.style.line_number_special_color,
|
|
596
|
+
self.style.line_number_special_background_color
|
|
597
|
+
)
|
|
509
598
|
|
|
510
599
|
def _decodeifneeded(self, value):
|
|
511
600
|
if isinstance(value, bytes):
|
|
@@ -535,11 +624,10 @@ class HtmlFormatter(Formatter):
|
|
|
535
624
|
# write CSS file only if noclobber_cssfile isn't given as an option.
|
|
536
625
|
try:
|
|
537
626
|
if not os.path.exists(cssfilename) or not self.noclobber_cssfile:
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
except IOError as err:
|
|
627
|
+
with open(cssfilename, "w") as cf:
|
|
628
|
+
cf.write(CSSFILE_TEMPLATE %
|
|
629
|
+
{'styledefs': self.get_style_defs('body')})
|
|
630
|
+
except OSError as err:
|
|
543
631
|
err.strerror = 'Error writing CSS file: ' + err.strerror
|
|
544
632
|
raise
|
|
545
633
|
|
|
@@ -553,8 +641,7 @@ class HtmlFormatter(Formatter):
|
|
|
553
641
|
styledefs=self.get_style_defs('body'),
|
|
554
642
|
encoding=self.encoding))
|
|
555
643
|
|
|
556
|
-
|
|
557
|
-
yield t, line
|
|
644
|
+
yield from inner
|
|
558
645
|
yield 0, DOC_FOOTER
|
|
559
646
|
|
|
560
647
|
def _wrap_tablelinenos(self, inner):
|
|
@@ -572,88 +659,91 @@ class HtmlFormatter(Formatter):
|
|
|
572
659
|
la = self.lineanchors
|
|
573
660
|
aln = self.anchorlinenos
|
|
574
661
|
nocls = self.noclasses
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
662
|
+
|
|
663
|
+
lines = []
|
|
664
|
+
|
|
665
|
+
for i in range(fl, fl+lncount):
|
|
666
|
+
print_line = i % st == 0
|
|
667
|
+
special_line = sp and i % sp == 0
|
|
668
|
+
|
|
669
|
+
if print_line:
|
|
670
|
+
line = '%*d' % (mw, i)
|
|
671
|
+
if aln:
|
|
672
|
+
line = '<a href="#%s-%d">%s</a>' % (la, i, line)
|
|
673
|
+
else:
|
|
674
|
+
line = ' ' * mw
|
|
675
|
+
|
|
676
|
+
if nocls:
|
|
677
|
+
if special_line:
|
|
678
|
+
style = ' style="%s"' % self._linenos_special_style
|
|
591
679
|
else:
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
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))
|
|
680
|
+
style = ' style="%s"' % self._linenos_style
|
|
681
|
+
else:
|
|
682
|
+
if special_line:
|
|
683
|
+
style = ' class="special"'
|
|
602
684
|
else:
|
|
603
|
-
|
|
604
|
-
|
|
685
|
+
style = ' class="normal"'
|
|
686
|
+
|
|
687
|
+
if style:
|
|
688
|
+
line = '<span%s>%s</span>' % (style, line)
|
|
689
|
+
|
|
690
|
+
lines.append(line)
|
|
691
|
+
|
|
692
|
+
ls = '\n'.join(lines)
|
|
605
693
|
|
|
606
694
|
# in case you wonder about the seemingly redundant <div> here: since the
|
|
607
695
|
# content in the other cell also is wrapped in a div, some browsers in
|
|
608
696
|
# some configurations seem to mess up the formatting...
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
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">')
|
|
697
|
+
yield 0, (
|
|
698
|
+
'<table class="%stable">' % self.cssclass +
|
|
699
|
+
'<tr><td class="linenos"><div class="linenodiv"><pre>' +
|
|
700
|
+
ls + '</pre></div></td><td class="code">'
|
|
701
|
+
)
|
|
619
702
|
yield 0, dummyoutfile.getvalue()
|
|
620
703
|
yield 0, '</td></tr></table>'
|
|
621
704
|
|
|
622
705
|
def _wrap_inlinelinenos(self, inner):
|
|
623
706
|
# need a list of lines since we need the width of a single number :(
|
|
624
|
-
|
|
707
|
+
inner_lines = list(inner)
|
|
625
708
|
sp = self.linenospecial
|
|
626
709
|
st = self.linenostep
|
|
627
710
|
num = self.linenostart
|
|
628
|
-
mw = len(str(len(
|
|
711
|
+
mw = len(str(len(inner_lines) + num - 1))
|
|
712
|
+
la = self.lineanchors
|
|
713
|
+
aln = self.anchorlinenos
|
|
714
|
+
nocls = self.noclasses
|
|
629
715
|
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
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
|
|
716
|
+
for _, inner_line in inner_lines:
|
|
717
|
+
print_line = num % st == 0
|
|
718
|
+
special_line = sp and num % sp == 0
|
|
719
|
+
|
|
720
|
+
if print_line:
|
|
721
|
+
line = '%*d' % (mw, num)
|
|
640
722
|
else:
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
723
|
+
line = ' ' * mw
|
|
724
|
+
|
|
725
|
+
if nocls:
|
|
726
|
+
if special_line:
|
|
727
|
+
style = ' style="%s"' % self._linenos_special_style
|
|
728
|
+
else:
|
|
729
|
+
style = ' style="%s"' % self._linenos_style
|
|
730
|
+
else:
|
|
731
|
+
if special_line:
|
|
732
|
+
style = ' class="linenos special"'
|
|
733
|
+
else:
|
|
734
|
+
style = ' class="linenos"'
|
|
735
|
+
|
|
736
|
+
if style:
|
|
737
|
+
linenos = '<span%s>%s</span>' % (style, line)
|
|
738
|
+
else:
|
|
739
|
+
linenos = line
|
|
740
|
+
|
|
741
|
+
if aln:
|
|
742
|
+
yield 1, ('<a href="#%s-%d">%s</a>' % (la, num, linenos) +
|
|
743
|
+
inner_line)
|
|
744
|
+
else:
|
|
745
|
+
yield 1, linenos + inner_line
|
|
746
|
+
num += 1
|
|
657
747
|
|
|
658
748
|
def _wrap_lineanchors(self, inner):
|
|
659
749
|
s = self.lineanchors
|
|
@@ -687,8 +777,7 @@ class HtmlFormatter(Formatter):
|
|
|
687
777
|
|
|
688
778
|
yield 0, ('<div' + (self.cssclass and ' class="%s"' % self.cssclass) +
|
|
689
779
|
(style and (' style="%s"' % style)) + '>')
|
|
690
|
-
|
|
691
|
-
yield tup
|
|
780
|
+
yield from inner
|
|
692
781
|
yield 0, '</div>\n'
|
|
693
782
|
|
|
694
783
|
def _wrap_pre(self, inner):
|
|
@@ -696,7 +785,7 @@ class HtmlFormatter(Formatter):
|
|
|
696
785
|
if self.prestyles:
|
|
697
786
|
style.append(self.prestyles)
|
|
698
787
|
if self.noclasses:
|
|
699
|
-
style.append(
|
|
788
|
+
style.append(self._pre_style)
|
|
700
789
|
style = '; '.join(style)
|
|
701
790
|
|
|
702
791
|
if self.filename:
|
|
@@ -705,10 +794,19 @@ class HtmlFormatter(Formatter):
|
|
|
705
794
|
# the empty span here is to keep leading empty lines from being
|
|
706
795
|
# ignored by HTML parsers
|
|
707
796
|
yield 0, ('<pre' + (style and ' style="%s"' % style) + '><span></span>')
|
|
708
|
-
|
|
709
|
-
yield tup
|
|
797
|
+
yield from inner
|
|
710
798
|
yield 0, '</pre>'
|
|
711
799
|
|
|
800
|
+
def _wrap_code(self, inner):
|
|
801
|
+
yield 0, '<code>'
|
|
802
|
+
yield from inner
|
|
803
|
+
yield 0, '</code>'
|
|
804
|
+
|
|
805
|
+
@functools.lru_cache(maxsize=100)
|
|
806
|
+
def _translate_parts(self, value):
|
|
807
|
+
"""HTML-escape a value and split it by newlines."""
|
|
808
|
+
return value.translate(_escape_html_table).split('\n')
|
|
809
|
+
|
|
712
810
|
def _format_lines(self, tokensource):
|
|
713
811
|
"""
|
|
714
812
|
Just format the tokens, without any wrapping tags.
|
|
@@ -716,26 +814,23 @@ class HtmlFormatter(Formatter):
|
|
|
716
814
|
"""
|
|
717
815
|
nocls = self.noclasses
|
|
718
816
|
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
817
|
tagsfile = self.tagsfile
|
|
724
818
|
|
|
725
819
|
lspan = ''
|
|
726
820
|
line = []
|
|
727
821
|
for ttype, value in tokensource:
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
822
|
+
try:
|
|
823
|
+
cspan = self.span_element_openers[ttype]
|
|
824
|
+
except KeyError:
|
|
825
|
+
if nocls:
|
|
826
|
+
css_style = self._get_css_inline_styles(ttype)
|
|
827
|
+
cspan = css_style and '<span style="%s">' % self.class2style[css_style][0] or ''
|
|
828
|
+
else:
|
|
829
|
+
css_class = self._get_css_classes(ttype)
|
|
830
|
+
cspan = css_class and '<span class="%s">' % css_class or ''
|
|
831
|
+
self.span_element_openers[ttype] = cspan
|
|
737
832
|
|
|
738
|
-
parts =
|
|
833
|
+
parts = self._translate_parts(value)
|
|
739
834
|
|
|
740
835
|
if tagsfile and ttype in Token.Name:
|
|
741
836
|
filename, linenumber = self._lookup_ctag(value)
|
|
@@ -815,7 +910,10 @@ class HtmlFormatter(Formatter):
|
|
|
815
910
|
individual lines, in custom generators. See docstring
|
|
816
911
|
for `format`. Can be overridden.
|
|
817
912
|
"""
|
|
818
|
-
|
|
913
|
+
if self.wrapcode:
|
|
914
|
+
return self._wrap_div(self._wrap_pre(self._wrap_code(source)))
|
|
915
|
+
else:
|
|
916
|
+
return self._wrap_div(self._wrap_pre(source))
|
|
819
917
|
|
|
820
918
|
def format_unencoded(self, tokensource, outfile):
|
|
821
919
|
"""
|
|
@@ -832,11 +930,16 @@ class HtmlFormatter(Formatter):
|
|
|
832
930
|
linewise, e.g. line number generators.
|
|
833
931
|
"""
|
|
834
932
|
source = self._format_lines(tokensource)
|
|
933
|
+
|
|
934
|
+
# As a special case, we wrap line numbers before line highlighting
|
|
935
|
+
# so the line numbers get wrapped in the highlighting tag.
|
|
936
|
+
if not self.nowrap and self.linenos == 2:
|
|
937
|
+
source = self._wrap_inlinelinenos(source)
|
|
938
|
+
|
|
835
939
|
if self.hl_lines:
|
|
836
940
|
source = self._highlight_lines(source)
|
|
941
|
+
|
|
837
942
|
if not self.nowrap:
|
|
838
|
-
if self.linenos == 2:
|
|
839
|
-
source = self._wrap_inlinelinenos(source)
|
|
840
943
|
if self.lineanchors:
|
|
841
944
|
source = self._wrap_lineanchors(source)
|
|
842
945
|
if self.linespans:
|