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.
- checksums.yaml +5 -5
- data/.github/dependabot.yml +13 -0
- data/.github/workflows/ci.yml +28 -0
- data/.github/workflows/release.yml +24 -0
- data/.gitignore +5 -5
- data/CHANGELOG.adoc +128 -0
- data/Gemfile +3 -1
- data/LICENSE +1 -1
- data/README.adoc +160 -0
- data/Rakefile +13 -19
- data/bench.rb +8 -7
- data/cache-lexers.rb +3 -2
- data/lexers +0 -0
- data/lib/pygments.rb +10 -11
- data/lib/pygments/lexer.rb +5 -5
- data/lib/pygments/mentos.py +23 -110
- data/lib/pygments/popen.rb +148 -229
- data/lib/pygments/version.rb +2 -2
- data/pygments.rb.gemspec +12 -11
- data/test/test_pygments.rb +46 -104
- data/vendor/pygments-main/{AUTHORS → Pygments-2.7.3.dist-info/AUTHORS} +23 -3
- data/vendor/pygments-main/Pygments-2.7.3.dist-info/INSTALLER +1 -0
- data/vendor/pygments-main/{LICENSE → Pygments-2.7.3.dist-info/LICENSE} +1 -1
- data/vendor/pygments-main/Pygments-2.7.3.dist-info/METADATA +49 -0
- data/vendor/pygments-main/Pygments-2.7.3.dist-info/RECORD +482 -0
- data/vendor/pygments-main/Pygments-2.7.3.dist-info/REQUESTED +0 -0
- data/vendor/pygments-main/Pygments-2.7.3.dist-info/WHEEL +5 -0
- data/vendor/pygments-main/Pygments-2.7.3.dist-info/entry_points.txt +3 -0
- data/vendor/pygments-main/Pygments-2.7.3.dist-info/top_level.txt +1 -0
- data/vendor/pygments-main/bin/pygmentize +8 -0
- data/vendor/pygments-main/pygments/__init__.py +6 -11
- data/vendor/pygments-main/pygments/__main__.py +18 -0
- data/vendor/pygments-main/pygments/cmdline.py +94 -41
- data/vendor/pygments-main/pygments/console.py +6 -9
- data/vendor/pygments-main/pygments/filter.py +4 -6
- data/vendor/pygments-main/pygments/filters/__init__.py +609 -21
- data/vendor/pygments-main/pygments/formatter.py +4 -4
- data/vendor/pygments-main/pygments/formatters/__init__.py +42 -6
- data/vendor/pygments-main/pygments/formatters/_mapping.py +1 -3
- data/vendor/pygments-main/pygments/formatters/bbcode.py +1 -1
- data/vendor/pygments-main/pygments/formatters/html.py +223 -135
- data/vendor/pygments-main/pygments/formatters/img.py +102 -38
- data/vendor/pygments-main/pygments/formatters/irc.py +39 -39
- data/vendor/pygments-main/pygments/formatters/latex.py +56 -26
- data/vendor/pygments-main/pygments/formatters/other.py +12 -8
- data/vendor/pygments-main/pygments/formatters/rtf.py +29 -29
- data/vendor/pygments-main/pygments/formatters/svg.py +38 -4
- data/vendor/pygments-main/pygments/formatters/terminal.py +25 -31
- data/vendor/pygments-main/pygments/formatters/terminal256.py +22 -12
- data/vendor/pygments-main/pygments/lexer.py +41 -39
- data/vendor/pygments-main/pygments/lexers/__init__.py +62 -15
- data/vendor/pygments-main/pygments/lexers/_asy_builtins.py +5 -5
- data/vendor/pygments-main/pygments/lexers/_cl_builtins.py +15 -15
- data/vendor/pygments-main/pygments/lexers/_cocoa_builtins.py +11 -12
- data/vendor/pygments-main/pygments/lexers/_csound_builtins.py +1717 -1338
- data/vendor/pygments-main/pygments/lexers/_lasso_builtins.py +8 -1
- data/vendor/pygments-main/pygments/lexers/_lua_builtins.py +2 -4
- data/vendor/pygments-main/pygments/lexers/_mapping.py +79 -33
- data/vendor/pygments-main/pygments/lexers/_mql_builtins.py +2 -2
- data/vendor/pygments-main/pygments/lexers/_mysql_builtins.py +1282 -0
- data/vendor/pygments-main/pygments/lexers/_openedge_builtins.py +1 -1
- data/vendor/pygments-main/pygments/lexers/_php_builtins.py +17 -20
- data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +73 -16
- data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +2 -2
- data/vendor/pygments-main/pygments/lexers/_sourcemod_builtins.py +1 -3
- data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +151 -125
- data/vendor/pygments-main/pygments/lexers/_stata_builtins.py +6 -4
- data/vendor/pygments-main/pygments/lexers/_tsql_builtins.py +1 -1
- data/vendor/pygments-main/pygments/lexers/_usd_builtins.py +113 -0
- data/vendor/pygments-main/pygments/lexers/_vbscript_builtins.py +280 -0
- data/vendor/pygments-main/pygments/lexers/_vim_builtins.py +1 -1
- data/vendor/pygments-main/pygments/lexers/actionscript.py +8 -3
- data/vendor/pygments-main/pygments/lexers/agile.py +1 -1
- data/vendor/pygments-main/pygments/lexers/algebra.py +20 -1
- data/vendor/pygments-main/pygments/lexers/ambient.py +1 -1
- data/vendor/pygments-main/pygments/lexers/ampl.py +3 -3
- data/vendor/pygments-main/pygments/lexers/apl.py +15 -15
- data/vendor/pygments-main/pygments/lexers/archetype.py +3 -3
- data/vendor/pygments-main/pygments/lexers/arrow.py +117 -0
- data/vendor/pygments-main/pygments/lexers/asm.py +445 -70
- data/vendor/pygments-main/pygments/lexers/automation.py +3 -3
- data/vendor/pygments-main/pygments/lexers/bare.py +104 -0
- data/vendor/pygments-main/pygments/lexers/basic.py +166 -4
- data/vendor/pygments-main/pygments/lexers/bibtex.py +13 -9
- data/vendor/pygments-main/pygments/lexers/boa.py +102 -0
- data/vendor/pygments-main/pygments/lexers/business.py +69 -36
- data/vendor/pygments-main/pygments/lexers/c_cpp.py +137 -45
- data/vendor/pygments-main/pygments/lexers/c_like.py +68 -43
- data/vendor/pygments-main/pygments/lexers/capnproto.py +20 -21
- data/vendor/pygments-main/pygments/lexers/chapel.py +25 -14
- data/vendor/pygments-main/pygments/lexers/clean.py +135 -244
- data/vendor/pygments-main/pygments/lexers/compiled.py +1 -1
- data/vendor/pygments-main/pygments/lexers/configs.py +188 -37
- data/vendor/pygments-main/pygments/lexers/console.py +1 -1
- data/vendor/pygments-main/pygments/lexers/crystal.py +31 -23
- data/vendor/pygments-main/pygments/lexers/csound.py +288 -187
- data/vendor/pygments-main/pygments/lexers/css.py +18 -16
- data/vendor/pygments-main/pygments/lexers/d.py +10 -5
- data/vendor/pygments-main/pygments/lexers/dalvik.py +1 -1
- data/vendor/pygments-main/pygments/lexers/data.py +240 -97
- data/vendor/pygments-main/pygments/lexers/devicetree.py +109 -0
- data/vendor/pygments-main/pygments/lexers/diff.py +4 -4
- data/vendor/pygments-main/pygments/lexers/dotnet.py +40 -24
- data/vendor/pygments-main/pygments/lexers/dsls.py +147 -65
- data/vendor/pygments-main/pygments/lexers/dylan.py +16 -18
- data/vendor/pygments-main/pygments/lexers/ecl.py +16 -2
- data/vendor/pygments-main/pygments/lexers/eiffel.py +1 -1
- data/vendor/pygments-main/pygments/lexers/elm.py +5 -5
- data/vendor/pygments-main/pygments/lexers/email.py +151 -0
- data/vendor/pygments-main/pygments/lexers/erlang.py +29 -32
- data/vendor/pygments-main/pygments/lexers/esoteric.py +54 -25
- data/vendor/pygments-main/pygments/lexers/ezhil.py +24 -15
- data/vendor/pygments-main/pygments/lexers/factor.py +1 -1
- data/vendor/pygments-main/pygments/lexers/fantom.py +1 -1
- data/vendor/pygments-main/pygments/lexers/felix.py +1 -1
- data/vendor/pygments-main/pygments/lexers/floscript.py +83 -0
- data/vendor/pygments-main/pygments/lexers/forth.py +41 -40
- data/vendor/pygments-main/pygments/lexers/fortran.py +5 -4
- data/vendor/pygments-main/pygments/lexers/foxpro.py +2 -2
- data/vendor/pygments-main/pygments/lexers/freefem.py +898 -0
- data/vendor/pygments-main/pygments/lexers/functional.py +1 -1
- data/vendor/pygments-main/pygments/lexers/gdscript.py +346 -0
- data/vendor/pygments-main/pygments/lexers/go.py +1 -1
- data/vendor/pygments-main/pygments/lexers/grammar_notation.py +63 -6
- data/vendor/pygments-main/pygments/lexers/graph.py +14 -9
- data/vendor/pygments-main/pygments/lexers/graphics.py +272 -25
- data/vendor/pygments-main/pygments/lexers/haskell.py +52 -22
- data/vendor/pygments-main/pygments/lexers/haxe.py +6 -6
- data/vendor/pygments-main/pygments/lexers/hdl.py +176 -86
- data/vendor/pygments-main/pygments/lexers/hexdump.py +18 -12
- data/vendor/pygments-main/pygments/lexers/html.py +31 -19
- data/vendor/pygments-main/pygments/lexers/idl.py +20 -9
- data/vendor/pygments-main/pygments/lexers/igor.py +244 -112
- data/vendor/pygments-main/pygments/lexers/inferno.py +2 -2
- data/vendor/pygments-main/pygments/lexers/installers.py +1 -1
- data/vendor/pygments-main/pygments/lexers/int_fiction.py +40 -15
- data/vendor/pygments-main/pygments/lexers/iolang.py +2 -2
- data/vendor/pygments-main/pygments/lexers/j.py +3 -3
- data/vendor/pygments-main/pygments/lexers/javascript.py +100 -66
- data/vendor/pygments-main/pygments/lexers/julia.py +46 -48
- data/vendor/pygments-main/pygments/lexers/jvm.py +265 -165
- data/vendor/pygments-main/pygments/lexers/lisp.py +882 -804
- data/vendor/pygments-main/pygments/lexers/make.py +10 -6
- data/vendor/pygments-main/pygments/lexers/markup.py +213 -43
- data/vendor/pygments-main/pygments/lexers/math.py +1 -1
- data/vendor/pygments-main/pygments/lexers/matlab.py +98 -41
- data/vendor/pygments-main/pygments/lexers/mime.py +226 -0
- data/vendor/pygments-main/pygments/lexers/ml.py +198 -9
- data/vendor/pygments-main/pygments/lexers/modeling.py +26 -18
- data/vendor/pygments-main/pygments/lexers/modula2.py +25 -6
- data/vendor/pygments-main/pygments/lexers/monte.py +4 -3
- data/vendor/pygments-main/pygments/lexers/mosel.py +448 -0
- data/vendor/pygments-main/pygments/lexers/ncl.py +85 -244
- data/vendor/pygments-main/pygments/lexers/nimrod.py +4 -4
- data/vendor/pygments-main/pygments/lexers/nit.py +1 -1
- data/vendor/pygments-main/pygments/lexers/nix.py +1 -1
- data/vendor/pygments-main/pygments/lexers/oberon.py +17 -1
- data/vendor/pygments-main/pygments/lexers/objective.py +16 -16
- data/vendor/pygments-main/pygments/lexers/ooc.py +1 -1
- data/vendor/pygments-main/pygments/lexers/other.py +1 -1
- data/vendor/pygments-main/pygments/lexers/parasail.py +1 -1
- data/vendor/pygments-main/pygments/lexers/parsers.py +23 -58
- data/vendor/pygments-main/pygments/lexers/pascal.py +23 -23
- data/vendor/pygments-main/pygments/lexers/pawn.py +30 -24
- data/vendor/pygments-main/pygments/lexers/perl.py +276 -160
- data/vendor/pygments-main/pygments/lexers/php.py +64 -10
- data/vendor/pygments-main/pygments/lexers/pointless.py +71 -0
- data/vendor/pygments-main/pygments/lexers/pony.py +94 -0
- data/vendor/pygments-main/pygments/lexers/praat.py +38 -30
- data/vendor/pygments-main/pygments/lexers/prolog.py +36 -36
- data/vendor/pygments-main/pygments/lexers/promql.py +183 -0
- data/vendor/pygments-main/pygments/lexers/python.py +439 -226
- data/vendor/pygments-main/pygments/lexers/qvt.py +6 -6
- data/vendor/pygments-main/pygments/lexers/r.py +13 -275
- data/vendor/pygments-main/pygments/lexers/rdf.py +232 -39
- data/vendor/pygments-main/pygments/lexers/rebol.py +8 -8
- data/vendor/pygments-main/pygments/lexers/resource.py +2 -2
- data/vendor/pygments-main/pygments/lexers/ride.py +139 -0
- data/vendor/pygments-main/pygments/lexers/rnc.py +1 -1
- data/vendor/pygments-main/pygments/lexers/roboconf.py +1 -1
- data/vendor/pygments-main/pygments/lexers/robotframework.py +23 -31
- data/vendor/pygments-main/pygments/lexers/ruby.py +22 -24
- data/vendor/pygments-main/pygments/lexers/rust.py +86 -71
- data/vendor/pygments-main/pygments/lexers/sas.py +7 -7
- data/vendor/pygments-main/pygments/lexers/scdoc.py +83 -0
- data/vendor/pygments-main/pygments/lexers/scripting.py +75 -13
- data/vendor/pygments-main/pygments/lexers/sgf.py +61 -0
- data/vendor/pygments-main/pygments/lexers/shell.py +175 -51
- data/vendor/pygments-main/pygments/lexers/sieve.py +69 -0
- data/vendor/pygments-main/pygments/lexers/slash.py +185 -0
- data/vendor/pygments-main/pygments/lexers/smalltalk.py +2 -2
- data/vendor/pygments-main/pygments/lexers/smv.py +30 -26
- data/vendor/pygments-main/pygments/lexers/snobol.py +1 -1
- data/vendor/pygments-main/pygments/lexers/solidity.py +92 -0
- data/vendor/pygments-main/pygments/lexers/special.py +5 -3
- data/vendor/pygments-main/pygments/lexers/sql.py +333 -177
- data/vendor/pygments-main/pygments/lexers/stata.py +107 -42
- data/vendor/pygments-main/pygments/lexers/supercollider.py +6 -1
- data/vendor/pygments-main/pygments/lexers/tcl.py +1 -1
- data/vendor/pygments-main/pygments/lexers/templates.py +144 -132
- data/vendor/pygments-main/pygments/lexers/teraterm.py +335 -0
- data/vendor/pygments-main/pygments/lexers/testing.py +6 -6
- data/vendor/pygments-main/pygments/lexers/text.py +2 -1
- data/vendor/pygments-main/pygments/lexers/textedit.py +4 -4
- data/vendor/pygments-main/pygments/lexers/textfmts.py +146 -13
- data/vendor/pygments-main/pygments/lexers/theorem.py +69 -53
- data/vendor/pygments-main/pygments/lexers/tnt.py +263 -0
- data/vendor/pygments-main/pygments/lexers/trafficscript.py +1 -1
- data/vendor/pygments-main/pygments/lexers/typoscript.py +8 -14
- data/vendor/pygments-main/pygments/lexers/unicon.py +412 -0
- data/vendor/pygments-main/pygments/lexers/urbi.py +14 -1
- data/vendor/pygments-main/pygments/lexers/usd.py +90 -0
- data/vendor/pygments-main/pygments/lexers/varnish.py +5 -5
- data/vendor/pygments-main/pygments/lexers/verification.py +15 -12
- data/vendor/pygments-main/pygments/lexers/web.py +1 -1
- data/vendor/pygments-main/pygments/lexers/webidl.py +299 -0
- data/vendor/pygments-main/pygments/lexers/webmisc.py +50 -38
- data/vendor/pygments-main/pygments/lexers/whiley.py +11 -12
- data/vendor/pygments-main/pygments/lexers/x10.py +1 -1
- data/vendor/pygments-main/pygments/lexers/xorg.py +37 -0
- data/vendor/pygments-main/pygments/lexers/yang.py +104 -0
- data/vendor/pygments-main/pygments/lexers/zig.py +124 -0
- data/vendor/pygments-main/pygments/modeline.py +6 -5
- data/vendor/pygments-main/pygments/plugin.py +14 -18
- data/vendor/pygments-main/pygments/regexopt.py +1 -1
- data/vendor/pygments-main/pygments/scanner.py +2 -2
- data/vendor/pygments-main/pygments/sphinxext.py +2 -4
- data/vendor/pygments-main/pygments/style.py +61 -24
- data/vendor/pygments-main/pygments/styles/__init__.py +13 -5
- data/vendor/pygments-main/pygments/styles/abap.py +29 -0
- data/vendor/pygments-main/pygments/styles/algol.py +1 -1
- data/vendor/pygments-main/pygments/styles/algol_nu.py +1 -1
- data/vendor/pygments-main/pygments/styles/arduino.py +2 -2
- data/vendor/pygments-main/pygments/styles/autumn.py +1 -1
- data/vendor/pygments-main/pygments/styles/borland.py +1 -1
- data/vendor/pygments-main/pygments/styles/bw.py +1 -1
- data/vendor/pygments-main/pygments/styles/colorful.py +1 -1
- data/vendor/pygments-main/pygments/styles/default.py +1 -1
- data/vendor/pygments-main/pygments/styles/emacs.py +1 -1
- data/vendor/pygments-main/pygments/styles/friendly.py +1 -1
- data/vendor/pygments-main/pygments/styles/fruity.py +1 -1
- data/vendor/pygments-main/pygments/styles/igor.py +1 -1
- data/vendor/pygments-main/pygments/styles/inkpot.py +67 -0
- data/vendor/pygments-main/pygments/styles/lovelace.py +1 -1
- data/vendor/pygments-main/pygments/styles/manni.py +1 -1
- data/vendor/pygments-main/pygments/styles/monokai.py +4 -3
- data/vendor/pygments-main/pygments/styles/murphy.py +1 -1
- data/vendor/pygments-main/pygments/styles/native.py +1 -1
- data/vendor/pygments-main/pygments/styles/paraiso_dark.py +1 -1
- data/vendor/pygments-main/pygments/styles/paraiso_light.py +1 -1
- data/vendor/pygments-main/pygments/styles/pastie.py +1 -1
- data/vendor/pygments-main/pygments/styles/perldoc.py +1 -1
- data/vendor/pygments-main/pygments/styles/rainbow_dash.py +89 -0
- data/vendor/pygments-main/pygments/styles/rrt.py +1 -1
- data/vendor/pygments-main/pygments/styles/sas.py +3 -0
- data/vendor/pygments-main/pygments/styles/solarized.py +134 -0
- data/vendor/pygments-main/pygments/styles/stata_dark.py +41 -0
- data/vendor/pygments-main/pygments/styles/stata_light.py +39 -0
- data/vendor/pygments-main/pygments/styles/tango.py +1 -1
- data/vendor/pygments-main/pygments/styles/trac.py +1 -1
- data/vendor/pygments-main/pygments/styles/vim.py +1 -1
- data/vendor/pygments-main/pygments/styles/vs.py +1 -1
- data/vendor/pygments-main/pygments/styles/xcode.py +1 -1
- data/vendor/pygments-main/pygments/token.py +1 -1
- data/vendor/pygments-main/pygments/unistring.py +47 -108
- data/vendor/pygments-main/pygments/util.py +19 -95
- metadata +71 -137
- data/CHANGELOG.md +0 -98
- data/README.md +0 -121
- 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 -1163
- 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 -331
- 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 -149
- 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 -689
- 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 -84
- 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/pygments/lexers/github.py +0 -565
- data/vendor/pygments-main/pygments/styles/stata.py +0 -37
- 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/find_error.py +0 -1
- 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
|
@@ -5,25 +5,25 @@
|
|
|
5
5
|
|
|
6
6
|
Base formatter class.
|
|
7
7
|
|
|
8
|
-
:copyright: Copyright 2006-
|
|
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
|
|
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,
|
|
21
|
+
if isinstance(style, str):
|
|
22
22
|
return get_style_by_name(style)
|
|
23
23
|
return style
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
class Formatter
|
|
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-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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-
|
|
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,20 +5,19 @@
|
|
|
5
5
|
|
|
6
6
|
Formatter for HTML output.
|
|
7
7
|
|
|
8
|
-
:copyright: Copyright 2006-
|
|
8
|
+
:copyright: Copyright 2006-2020 by the Pygments team, see AUTHORS.
|
|
9
9
|
:license: BSD, see LICENSE for details.
|
|
10
10
|
"""
|
|
11
11
|
|
|
12
|
-
|
|
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('&'):
|
|
33
|
-
ord('<'):
|
|
34
|
-
ord('>'):
|
|
35
|
-
ord('"'):
|
|
36
|
-
ord("'"):
|
|
31
|
+
ord('&'): '&',
|
|
32
|
+
ord('<'): '<',
|
|
33
|
+
ord('>'): '>',
|
|
34
|
+
ord('"'): '"',
|
|
35
|
+
ord("'"): ''',
|
|
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
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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
|
|
198
|
-
inline styles. This is not recommended
|
|
199
|
-
it increases output size by quite a bit
|
|
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
|
|
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
|
|
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
|
-
"""
|
|
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:
|
|
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:
|
|
490
|
+
style += 'background-color: %s; ' % webify(ndef['bgcolor'])
|
|
463
491
|
if ndef['border']:
|
|
464
|
-
style += 'border: 1px solid
|
|
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,
|
|
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
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
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
|
-
|
|
539
|
-
|
|
540
|
-
|
|
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
|
-
|
|
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
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
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
|
-
|
|
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))
|
|
681
|
+
style = ' style="%s"' % self._linenos_style
|
|
682
|
+
else:
|
|
683
|
+
if special_line:
|
|
684
|
+
style = ' class="special"'
|
|
602
685
|
else:
|
|
603
|
-
|
|
604
|
-
|
|
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
|
-
|
|
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">')
|
|
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
|
-
|
|
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(
|
|
712
|
+
mw = len(str(len(inner_lines) + num - 1))
|
|
713
|
+
nocls = self.noclasses
|
|
629
714
|
|
|
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
|
|
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
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
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 =
|
|
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
|
-
|
|
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
|
"""
|