pygments.rb 1.2.1 → 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 -6
- data/CHANGELOG.adoc +128 -0
- data/Gemfile +3 -1
- data/LICENSE +1 -1
- data/README.adoc +160 -0
- data/Rakefile +11 -21
- data/bench.rb +8 -7
- data/cache-lexers.rb +3 -2
- data/lexers +0 -0
- 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/lib/pygments.rb +10 -11
- data/pygments.rb.gemspec +12 -10
- data/test/test_pygments.rb +46 -104
- data/vendor/pygments-main/{AUTHORS → Pygments-2.7.3.dist-info/AUTHORS} +21 -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 +38 -29
- 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 +9 -8
- 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 +68 -41
- 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 +28 -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 +1 -1
- data/vendor/pygments-main/pygments/lexers/_lua_builtins.py +2 -4
- data/vendor/pygments-main/pygments/lexers/_mapping.py +74 -29
- 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 +440 -76
- data/vendor/pygments-main/pygments/lexers/automation.py +1 -1
- 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 +5 -5
- data/vendor/pygments-main/pygments/lexers/boa.py +102 -0
- data/vendor/pygments-main/pygments/lexers/business.py +17 -2
- data/vendor/pygments-main/pygments/lexers/c_cpp.py +137 -45
- data/vendor/pygments-main/pygments/lexers/c_like.py +67 -42
- data/vendor/pygments-main/pygments/lexers/capnproto.py +7 -7
- data/vendor/pygments-main/pygments/lexers/chapel.py +23 -13
- 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 +187 -36
- data/vendor/pygments-main/pygments/lexers/console.py +1 -1
- data/vendor/pygments-main/pygments/lexers/crystal.py +3 -4
- 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 +144 -62
- 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 +46 -19
- data/vendor/pygments-main/pygments/lexers/ezhil.py +21 -13
- 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 +62 -5
- 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 +48 -21
- 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 +1 -1
- data/vendor/pygments-main/pygments/lexers/html.py +31 -19
- data/vendor/pygments-main/pygments/lexers/idl.py +19 -8
- 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 +60 -45
- data/vendor/pygments-main/pygments/lexers/julia.py +44 -46
- 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 +1 -1
- data/vendor/pygments-main/pygments/lexers/mosel.py +448 -0
- data/vendor/pygments-main/pygments/lexers/ncl.py +1 -1
- 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 +22 -22
- data/vendor/pygments-main/pygments/lexers/pawn.py +30 -24
- data/vendor/pygments-main/pygments/lexers/perl.py +260 -148
- 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 -227
- 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 +76 -72
- data/vendor/pygments-main/pygments/lexers/sas.py +1 -1
- 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 +162 -42
- 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 +3 -3
- 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 -44
- 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 +102 -121
- 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 +4 -11
- 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 +3 -3
- data/vendor/pygments-main/pygments/lexers/verification.py +13 -10
- 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 +31 -28
- data/vendor/pygments-main/pygments/lexers/whiley.py +5 -5
- data/vendor/pygments-main/pygments/lexers/x10.py +1 -1
- data/vendor/pygments-main/pygments/lexers/xorg.py +5 -4
- 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 +1 -1
- data/vendor/pygments-main/pygments/plugin.py +4 -2
- 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 +10 -4
- data/vendor/pygments-main/pygments/styles/abap.py +1 -1
- 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 +1 -1
- data/vendor/pygments-main/pygments/styles/rrt.py +1 -1
- data/vendor/pygments-main/pygments/styles/sas.py +1 -1
- 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.py → stata_light.py} +14 -15
- 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 +15 -92
- metadata +68 -136
- data/CHANGELOG.md +0 -111
- 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 -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/pygments/lexers/github.py +0 -565
- 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
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
|
|
6
6
|
A formatter that generates RTF files.
|
|
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
|
from pygments.formatter import Formatter
|
|
13
|
-
from pygments.util import get_int_opt,
|
|
13
|
+
from pygments.util import get_int_opt, surrogatepair
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
__all__ = ['RtfFormatter']
|
|
@@ -35,7 +35,7 @@ class RtfFormatter(Formatter):
|
|
|
35
35
|
``'default'``).
|
|
36
36
|
|
|
37
37
|
`fontface`
|
|
38
|
-
The used font
|
|
38
|
+
The used font family, for example ``Bitstream Vera Sans``. Defaults to
|
|
39
39
|
some generic font which is supposed to have fixed width.
|
|
40
40
|
|
|
41
41
|
`fontsize`
|
|
@@ -65,14 +65,14 @@ class RtfFormatter(Formatter):
|
|
|
65
65
|
self.fontsize = get_int_opt(options, 'fontsize', 0)
|
|
66
66
|
|
|
67
67
|
def _escape(self, text):
|
|
68
|
-
return text.replace(
|
|
69
|
-
.replace(
|
|
70
|
-
.replace(
|
|
68
|
+
return text.replace('\\', '\\\\') \
|
|
69
|
+
.replace('{', '\\{') \
|
|
70
|
+
.replace('}', '\\}')
|
|
71
71
|
|
|
72
72
|
def _escape_text(self, text):
|
|
73
|
-
# empty strings, should give a small performance
|
|
73
|
+
# empty strings, should give a small performance improvement
|
|
74
74
|
if not text:
|
|
75
|
-
return
|
|
75
|
+
return ''
|
|
76
76
|
|
|
77
77
|
# escape text
|
|
78
78
|
text = self._escape(text)
|
|
@@ -85,21 +85,21 @@ class RtfFormatter(Formatter):
|
|
|
85
85
|
buf.append(str(c))
|
|
86
86
|
elif (2**7) <= cn < (2**16):
|
|
87
87
|
# single unicode escape sequence
|
|
88
|
-
buf.append(
|
|
88
|
+
buf.append('{\\u%d}' % cn)
|
|
89
89
|
elif (2**16) <= cn:
|
|
90
90
|
# RTF limits unicode to 16 bits.
|
|
91
91
|
# Force surrogate pairs
|
|
92
|
-
buf.append(
|
|
92
|
+
buf.append('{\\u%d}{\\u%d}' % surrogatepair(cn))
|
|
93
93
|
|
|
94
|
-
return
|
|
94
|
+
return ''.join(buf).replace('\n', '\\par\n')
|
|
95
95
|
|
|
96
96
|
def format_unencoded(self, tokensource, outfile):
|
|
97
97
|
# rtf 1.8 header
|
|
98
|
-
outfile.write(
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
98
|
+
outfile.write('{\\rtf1\\ansi\\uc0\\deff0'
|
|
99
|
+
'{\\fonttbl{\\f0\\fmodern\\fprq1\\fcharset0%s;}}'
|
|
100
|
+
'{\\colortbl;' % (self.fontface and
|
|
101
|
+
' ' + self._escape(self.fontface) or
|
|
102
|
+
''))
|
|
103
103
|
|
|
104
104
|
# convert colors and save them in a mapping to access them later.
|
|
105
105
|
color_mapping = {}
|
|
@@ -108,15 +108,15 @@ class RtfFormatter(Formatter):
|
|
|
108
108
|
for color in style['color'], style['bgcolor'], style['border']:
|
|
109
109
|
if color and color not in color_mapping:
|
|
110
110
|
color_mapping[color] = offset
|
|
111
|
-
outfile.write(
|
|
111
|
+
outfile.write('\\red%d\\green%d\\blue%d;' % (
|
|
112
112
|
int(color[0:2], 16),
|
|
113
113
|
int(color[2:4], 16),
|
|
114
114
|
int(color[4:6], 16)
|
|
115
115
|
))
|
|
116
116
|
offset += 1
|
|
117
|
-
outfile.write(
|
|
117
|
+
outfile.write('}\\f0 ')
|
|
118
118
|
if self.fontsize:
|
|
119
|
-
outfile.write(
|
|
119
|
+
outfile.write('\\fs%d' % self.fontsize)
|
|
120
120
|
|
|
121
121
|
# highlight stream
|
|
122
122
|
for ttype, value in tokensource:
|
|
@@ -125,23 +125,23 @@ class RtfFormatter(Formatter):
|
|
|
125
125
|
style = self.style.style_for_token(ttype)
|
|
126
126
|
buf = []
|
|
127
127
|
if style['bgcolor']:
|
|
128
|
-
buf.append(
|
|
128
|
+
buf.append('\\cb%d' % color_mapping[style['bgcolor']])
|
|
129
129
|
if style['color']:
|
|
130
|
-
buf.append(
|
|
130
|
+
buf.append('\\cf%d' % color_mapping[style['color']])
|
|
131
131
|
if style['bold']:
|
|
132
|
-
buf.append(
|
|
132
|
+
buf.append('\\b')
|
|
133
133
|
if style['italic']:
|
|
134
|
-
buf.append(
|
|
134
|
+
buf.append('\\i')
|
|
135
135
|
if style['underline']:
|
|
136
|
-
buf.append(
|
|
136
|
+
buf.append('\\ul')
|
|
137
137
|
if style['border']:
|
|
138
|
-
buf.append(
|
|
138
|
+
buf.append('\\chbrdr\\chcfpat%d' %
|
|
139
139
|
color_mapping[style['border']])
|
|
140
|
-
start =
|
|
140
|
+
start = ''.join(buf)
|
|
141
141
|
if start:
|
|
142
|
-
outfile.write(
|
|
142
|
+
outfile.write('{%s ' % start)
|
|
143
143
|
outfile.write(self._escape_text(value))
|
|
144
144
|
if start:
|
|
145
|
-
outfile.write(
|
|
145
|
+
outfile.write('}')
|
|
146
146
|
|
|
147
|
-
outfile.write(
|
|
147
|
+
outfile.write('}')
|
|
@@ -5,11 +5,12 @@
|
|
|
5
5
|
|
|
6
6
|
Formatter for SVG 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
12
|
from pygments.formatter import Formatter
|
|
13
|
+
from pygments.token import Comment
|
|
13
14
|
from pygments.util import get_bool_opt, get_int_opt
|
|
14
15
|
|
|
15
16
|
__all__ = ['SvgFormatter']
|
|
@@ -52,6 +53,19 @@ class SvgFormatter(Formatter):
|
|
|
52
53
|
The value to give the wrapping ``<g>`` element's ``font-size``
|
|
53
54
|
attribute, defaults to ``"14px"``.
|
|
54
55
|
|
|
56
|
+
`linenos`
|
|
57
|
+
If ``True``, add line numbers (default: ``False``).
|
|
58
|
+
|
|
59
|
+
`linenostart`
|
|
60
|
+
The line number for the first line (default: ``1``).
|
|
61
|
+
|
|
62
|
+
`linenostep`
|
|
63
|
+
If set to a number n > 1, only every nth line number is printed.
|
|
64
|
+
|
|
65
|
+
`linenowidth`
|
|
66
|
+
Maximum width devoted to line numbers (default: ``3*ystep``, sufficient
|
|
67
|
+
for up to 4-digit line numbers. Increase width for longer code blocks).
|
|
68
|
+
|
|
55
69
|
`xoffset`
|
|
56
70
|
Starting offset in X direction, defaults to ``0``.
|
|
57
71
|
|
|
@@ -92,6 +106,10 @@ class SvgFormatter(Formatter):
|
|
|
92
106
|
self.yoffset = get_int_opt(options, 'yoffset', int_fs)
|
|
93
107
|
self.ystep = get_int_opt(options, 'ystep', int_fs + 5)
|
|
94
108
|
self.spacehack = get_bool_opt(options, 'spacehack', True)
|
|
109
|
+
self.linenos = get_bool_opt(options,'linenos',False)
|
|
110
|
+
self.linenostart = get_int_opt(options,'linenostart',1)
|
|
111
|
+
self.linenostep = get_int_opt(options,'linenostep',1)
|
|
112
|
+
self.linenowidth = get_int_opt(options,'linenowidth', 3*self.ystep)
|
|
95
113
|
self._stylecache = {}
|
|
96
114
|
|
|
97
115
|
def format_unencoded(self, tokensource, outfile):
|
|
@@ -115,7 +133,19 @@ class SvgFormatter(Formatter):
|
|
|
115
133
|
outfile.write('<svg xmlns="http://www.w3.org/2000/svg">\n')
|
|
116
134
|
outfile.write('<g font-family="%s" font-size="%s">\n' %
|
|
117
135
|
(self.fontfamily, self.fontsize))
|
|
118
|
-
|
|
136
|
+
|
|
137
|
+
counter = self.linenostart
|
|
138
|
+
counter_step = self.linenostep
|
|
139
|
+
counter_style = self._get_style(Comment)
|
|
140
|
+
line_x = x
|
|
141
|
+
|
|
142
|
+
if self.linenos:
|
|
143
|
+
if counter % counter_step == 0:
|
|
144
|
+
outfile.write('<text x="%s" y="%s" %s text-anchor="end">%s</text>' % (x+self.linenowidth,y,counter_style,counter))
|
|
145
|
+
line_x += self.linenowidth + self.ystep
|
|
146
|
+
counter += 1
|
|
147
|
+
|
|
148
|
+
outfile.write('<text x="%s" y="%s" xml:space="preserve">' % (line_x, y))
|
|
119
149
|
for ttype, value in tokensource:
|
|
120
150
|
style = self._get_style(ttype)
|
|
121
151
|
tspan = style and '<tspan' + style + '>' or ''
|
|
@@ -127,8 +157,12 @@ class SvgFormatter(Formatter):
|
|
|
127
157
|
for part in parts[:-1]:
|
|
128
158
|
outfile.write(tspan + part + tspanend)
|
|
129
159
|
y += self.ystep
|
|
130
|
-
outfile.write('</text>\n
|
|
131
|
-
|
|
160
|
+
outfile.write('</text>\n')
|
|
161
|
+
if self.linenos and counter % counter_step == 0:
|
|
162
|
+
outfile.write('<text x="%s" y="%s" text-anchor="end" %s>%s</text>' % (x+self.linenowidth,y,counter_style,counter))
|
|
163
|
+
|
|
164
|
+
counter += 1
|
|
165
|
+
outfile.write('<text x="%s" y="%s" ' 'xml:space="preserve">' % (line_x,y))
|
|
132
166
|
outfile.write(tspan + parts[-1] + tspanend)
|
|
133
167
|
outfile.write('</text>')
|
|
134
168
|
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
Formatter for terminal output with ANSI sequences.
|
|
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
|
|
|
@@ -26,33 +26,33 @@ __all__ = ['TerminalFormatter']
|
|
|
26
26
|
TERMINAL_COLORS = {
|
|
27
27
|
Token: ('', ''),
|
|
28
28
|
|
|
29
|
-
Whitespace: ('
|
|
30
|
-
Comment: ('
|
|
31
|
-
Comment.Preproc: ('
|
|
32
|
-
Keyword: ('
|
|
33
|
-
Keyword.Type: ('
|
|
34
|
-
Operator.Word: ('
|
|
35
|
-
Name.Builtin: ('
|
|
36
|
-
Name.Function: ('
|
|
37
|
-
Name.Namespace: ('
|
|
38
|
-
Name.Class: ('
|
|
39
|
-
Name.Exception: ('
|
|
40
|
-
Name.Decorator: ('
|
|
41
|
-
Name.Variable: ('
|
|
42
|
-
Name.Constant: ('
|
|
43
|
-
Name.Attribute: ('
|
|
44
|
-
Name.Tag: ('
|
|
45
|
-
String: ('
|
|
46
|
-
Number: ('
|
|
47
|
-
|
|
48
|
-
Generic.Deleted: ('
|
|
49
|
-
Generic.Inserted: ('
|
|
29
|
+
Whitespace: ('gray', 'brightblack'),
|
|
30
|
+
Comment: ('gray', 'brightblack'),
|
|
31
|
+
Comment.Preproc: ('cyan', 'brightcyan'),
|
|
32
|
+
Keyword: ('blue', 'brightblue'),
|
|
33
|
+
Keyword.Type: ('cyan', 'brightcyan'),
|
|
34
|
+
Operator.Word: ('magenta', 'brightmagenta'),
|
|
35
|
+
Name.Builtin: ('cyan', 'brightcyan'),
|
|
36
|
+
Name.Function: ('green', 'brightgreen'),
|
|
37
|
+
Name.Namespace: ('_cyan_', '_brightcyan_'),
|
|
38
|
+
Name.Class: ('_green_', '_brightgreen_'),
|
|
39
|
+
Name.Exception: ('cyan', 'brightcyan'),
|
|
40
|
+
Name.Decorator: ('brightblack', 'gray'),
|
|
41
|
+
Name.Variable: ('red', 'brightred'),
|
|
42
|
+
Name.Constant: ('red', 'brightred'),
|
|
43
|
+
Name.Attribute: ('cyan', 'brightcyan'),
|
|
44
|
+
Name.Tag: ('brightblue', 'brightblue'),
|
|
45
|
+
String: ('yellow', 'yellow'),
|
|
46
|
+
Number: ('blue', 'brightblue'),
|
|
47
|
+
|
|
48
|
+
Generic.Deleted: ('brightred', 'brightred'),
|
|
49
|
+
Generic.Inserted: ('green', 'brightgreen'),
|
|
50
50
|
Generic.Heading: ('**', '**'),
|
|
51
|
-
Generic.Subheading: ('*
|
|
51
|
+
Generic.Subheading: ('*magenta*', '*brightmagenta*'),
|
|
52
52
|
Generic.Prompt: ('**', '**'),
|
|
53
|
-
Generic.Error: ('
|
|
53
|
+
Generic.Error: ('brightred', 'brightred'),
|
|
54
54
|
|
|
55
|
-
Error: ('
|
|
55
|
+
Error: ('_brightred_', '_brightred_'),
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
|
|
@@ -92,12 +92,6 @@ class TerminalFormatter(Formatter):
|
|
|
92
92
|
self._lineno = 0
|
|
93
93
|
|
|
94
94
|
def format(self, tokensource, outfile):
|
|
95
|
-
# hack: if the output is a terminal and has an encoding set,
|
|
96
|
-
# use that to avoid unicode encode problems
|
|
97
|
-
if not self.encoding and hasattr(outfile, "encoding") and \
|
|
98
|
-
hasattr(outfile, "isatty") and outfile.isatty() and \
|
|
99
|
-
sys.version_info < (3,):
|
|
100
|
-
self.encoding = outfile.encoding
|
|
101
95
|
return Formatter.format(self, tokensource, outfile)
|
|
102
96
|
|
|
103
97
|
def _write_lineno(self, outfile):
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
Formatter version 1.
|
|
13
13
|
|
|
14
|
-
:copyright: Copyright 2006-
|
|
14
|
+
:copyright: Copyright 2006-2020 by the Pygments team, see AUTHORS.
|
|
15
15
|
:license: BSD, see LICENSE for details.
|
|
16
16
|
"""
|
|
17
17
|
|
|
@@ -35,11 +35,12 @@ __all__ = ['Terminal256Formatter', 'TerminalTrueColorFormatter']
|
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
class EscapeSequence:
|
|
38
|
-
def __init__(self, fg=None, bg=None, bold=False, underline=False):
|
|
38
|
+
def __init__(self, fg=None, bg=None, bold=False, underline=False, italic=False):
|
|
39
39
|
self.fg = fg
|
|
40
40
|
self.bg = bg
|
|
41
41
|
self.bold = bold
|
|
42
42
|
self.underline = underline
|
|
43
|
+
self.italic = italic
|
|
43
44
|
|
|
44
45
|
def escape(self, attrs):
|
|
45
46
|
if len(attrs):
|
|
@@ -50,7 +51,7 @@ class EscapeSequence:
|
|
|
50
51
|
attrs = []
|
|
51
52
|
if self.fg is not None:
|
|
52
53
|
if self.fg in ansicolors:
|
|
53
|
-
esc = codes[self.fg
|
|
54
|
+
esc = codes[self.fg.replace('ansi','')]
|
|
54
55
|
if ';01m' in esc:
|
|
55
56
|
self.bold = True
|
|
56
57
|
# extract fg color code.
|
|
@@ -59,7 +60,7 @@ class EscapeSequence:
|
|
|
59
60
|
attrs.extend(("38", "5", "%i" % self.fg))
|
|
60
61
|
if self.bg is not None:
|
|
61
62
|
if self.bg in ansicolors:
|
|
62
|
-
esc = codes[self.bg
|
|
63
|
+
esc = codes[self.bg.replace('ansi','')]
|
|
63
64
|
# extract fg color code, add 10 for bg.
|
|
64
65
|
attrs.append(str(int(esc[2:4])+10))
|
|
65
66
|
else:
|
|
@@ -68,6 +69,8 @@ class EscapeSequence:
|
|
|
68
69
|
attrs.append("01")
|
|
69
70
|
if self.underline:
|
|
70
71
|
attrs.append("04")
|
|
72
|
+
if self.italic:
|
|
73
|
+
attrs.append("03")
|
|
71
74
|
return self.escape(attrs)
|
|
72
75
|
|
|
73
76
|
def true_color_string(self):
|
|
@@ -80,6 +83,8 @@ class EscapeSequence:
|
|
|
80
83
|
attrs.append("01")
|
|
81
84
|
if self.underline:
|
|
82
85
|
attrs.append("04")
|
|
86
|
+
if self.italic:
|
|
87
|
+
attrs.append("03")
|
|
83
88
|
return self.escape(attrs)
|
|
84
89
|
|
|
85
90
|
def reset_string(self):
|
|
@@ -88,7 +93,7 @@ class EscapeSequence:
|
|
|
88
93
|
attrs.append("39")
|
|
89
94
|
if self.bg is not None:
|
|
90
95
|
attrs.append("49")
|
|
91
|
-
if self.bold or self.underline:
|
|
96
|
+
if self.bold or self.underline or self.italic:
|
|
92
97
|
attrs.append("00")
|
|
93
98
|
return self.escape(attrs)
|
|
94
99
|
|
|
@@ -110,6 +115,12 @@ class Terminal256Formatter(Formatter):
|
|
|
110
115
|
`Terminal256Formatter` will map these to non extended foreground color.
|
|
111
116
|
See :ref:`AnsiTerminalStyle` for more information.
|
|
112
117
|
|
|
118
|
+
.. versionchanged:: 2.4
|
|
119
|
+
The ANSI color names have been updated with names that are easier to
|
|
120
|
+
understand and align with colornames of other projects and terminals.
|
|
121
|
+
See :ref:`this table <new-ansi-color-names>` for more information.
|
|
122
|
+
|
|
123
|
+
|
|
113
124
|
Options accepted:
|
|
114
125
|
|
|
115
126
|
`style`
|
|
@@ -129,6 +140,7 @@ class Terminal256Formatter(Formatter):
|
|
|
129
140
|
|
|
130
141
|
self.usebold = 'nobold' not in options
|
|
131
142
|
self.useunderline = 'nounderline' not in options
|
|
143
|
+
self.useitalic = 'noitalic' not in options
|
|
132
144
|
|
|
133
145
|
self._build_color_table() # build an RGB-to-256 color conversion table
|
|
134
146
|
self._setup_styles() # convert selected style's colors to term. colors
|
|
@@ -189,7 +201,7 @@ class Terminal256Formatter(Formatter):
|
|
|
189
201
|
def _color_index(self, color):
|
|
190
202
|
index = self.best_match.get(color, None)
|
|
191
203
|
if color in ansicolors:
|
|
192
|
-
# strip the
|
|
204
|
+
# strip the `ansi/#ansi` part and look up code
|
|
193
205
|
index = color
|
|
194
206
|
self.best_match[color] = index
|
|
195
207
|
if index is None:
|
|
@@ -221,16 +233,12 @@ class Terminal256Formatter(Formatter):
|
|
|
221
233
|
escape.bold = True
|
|
222
234
|
if self.useunderline and ndef['underline']:
|
|
223
235
|
escape.underline = True
|
|
236
|
+
if self.useitalic and ndef['italic']:
|
|
237
|
+
escape.italic = True
|
|
224
238
|
self.style_string[str(ttype)] = (escape.color_string(),
|
|
225
239
|
escape.reset_string())
|
|
226
240
|
|
|
227
241
|
def format(self, tokensource, outfile):
|
|
228
|
-
# hack: if the output is a terminal and has an encoding set,
|
|
229
|
-
# use that to avoid unicode encode problems
|
|
230
|
-
if not self.encoding and hasattr(outfile, "encoding") and \
|
|
231
|
-
hasattr(outfile, "isatty") and outfile.isatty() and \
|
|
232
|
-
sys.version_info < (3,):
|
|
233
|
-
self.encoding = outfile.encoding
|
|
234
242
|
return Formatter.format(self, tokensource, outfile)
|
|
235
243
|
|
|
236
244
|
def format_unencoded(self, tokensource, outfile):
|
|
@@ -305,5 +313,7 @@ class TerminalTrueColorFormatter(Terminal256Formatter):
|
|
|
305
313
|
escape.bold = True
|
|
306
314
|
if self.useunderline and ndef['underline']:
|
|
307
315
|
escape.underline = True
|
|
316
|
+
if self.useitalic and ndef['italic']:
|
|
317
|
+
escape.italic = True
|
|
308
318
|
self.style_string[str(ttype)] = (escape.true_color_string(),
|
|
309
319
|
escape.reset_string())
|
|
@@ -5,12 +5,10 @@
|
|
|
5
5
|
|
|
6
6
|
Base lexer classes.
|
|
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
|
-
from __future__ import print_function
|
|
13
|
-
|
|
14
12
|
import re
|
|
15
13
|
import sys
|
|
16
14
|
import time
|
|
@@ -19,7 +17,7 @@ from pygments.filter import apply_filters, Filter
|
|
|
19
17
|
from pygments.filters import get_filter_by_name
|
|
20
18
|
from pygments.token import Error, Text, Other, _TokenType
|
|
21
19
|
from pygments.util import get_bool_opt, get_int_opt, get_list_opt, \
|
|
22
|
-
make_analysator,
|
|
20
|
+
make_analysator, Future, guess_decode
|
|
23
21
|
from pygments.regexopt import regex_opt
|
|
24
22
|
|
|
25
23
|
__all__ = ['Lexer', 'RegexLexer', 'ExtendedRegexLexer', 'DelegatingLexer',
|
|
@@ -48,8 +46,7 @@ class LexerMeta(type):
|
|
|
48
46
|
return type.__new__(mcs, name, bases, d)
|
|
49
47
|
|
|
50
48
|
|
|
51
|
-
|
|
52
|
-
class Lexer(object):
|
|
49
|
+
class Lexer(metaclass=LexerMeta):
|
|
53
50
|
"""
|
|
54
51
|
Lexer for a specific language.
|
|
55
52
|
|
|
@@ -145,16 +142,16 @@ class Lexer(object):
|
|
|
145
142
|
Also preprocess the text, i.e. expand tabs and strip it if
|
|
146
143
|
wanted and applies registered filters.
|
|
147
144
|
"""
|
|
148
|
-
if not isinstance(text,
|
|
145
|
+
if not isinstance(text, str):
|
|
149
146
|
if self.encoding == 'guess':
|
|
150
147
|
text, _ = guess_decode(text)
|
|
151
148
|
elif self.encoding == 'chardet':
|
|
152
149
|
try:
|
|
153
150
|
import chardet
|
|
154
|
-
except ImportError:
|
|
151
|
+
except ImportError as e:
|
|
155
152
|
raise ImportError('To enable chardet encoding guessing, '
|
|
156
153
|
'please install the chardet library '
|
|
157
|
-
'from http://chardet.feedparser.org/')
|
|
154
|
+
'from http://chardet.feedparser.org/') from e
|
|
158
155
|
# check for BOM first
|
|
159
156
|
decoded = None
|
|
160
157
|
for bom, encoding in _encoding_map:
|
|
@@ -169,11 +166,11 @@ class Lexer(object):
|
|
|
169
166
|
text = decoded
|
|
170
167
|
else:
|
|
171
168
|
text = text.decode(self.encoding)
|
|
172
|
-
if text.startswith(
|
|
173
|
-
text = text[len(
|
|
169
|
+
if text.startswith('\ufeff'):
|
|
170
|
+
text = text[len('\ufeff'):]
|
|
174
171
|
else:
|
|
175
|
-
if text.startswith(
|
|
176
|
-
text = text[len(
|
|
172
|
+
if text.startswith('\ufeff'):
|
|
173
|
+
text = text[len('\ufeff'):]
|
|
177
174
|
|
|
178
175
|
# text now *is* a unicode string
|
|
179
176
|
text = text.replace('\r\n', '\n')
|
|
@@ -252,7 +249,7 @@ class include(str): # pylint: disable=invalid-name
|
|
|
252
249
|
pass
|
|
253
250
|
|
|
254
251
|
|
|
255
|
-
class _inherit
|
|
252
|
+
class _inherit:
|
|
256
253
|
"""
|
|
257
254
|
Indicates the a state should inherit from its superclass.
|
|
258
255
|
"""
|
|
@@ -275,7 +272,7 @@ class combined(tuple): # pylint: disable=invalid-name
|
|
|
275
272
|
pass
|
|
276
273
|
|
|
277
274
|
|
|
278
|
-
class _PseudoMatch
|
|
275
|
+
class _PseudoMatch:
|
|
279
276
|
"""
|
|
280
277
|
A pseudo match object constructed from a string.
|
|
281
278
|
"""
|
|
@@ -328,11 +325,12 @@ def bygroups(*args):
|
|
|
328
325
|
return callback
|
|
329
326
|
|
|
330
327
|
|
|
331
|
-
class _This
|
|
328
|
+
class _This:
|
|
332
329
|
"""
|
|
333
330
|
Special singleton used for indicating the caller class.
|
|
334
331
|
Used by ``using``.
|
|
335
332
|
"""
|
|
333
|
+
|
|
336
334
|
this = _This()
|
|
337
335
|
|
|
338
336
|
|
|
@@ -498,7 +496,7 @@ class RegexLexerMeta(LexerMeta):
|
|
|
498
496
|
rex = cls._process_regex(tdef[0], rflags, state)
|
|
499
497
|
except Exception as err:
|
|
500
498
|
raise ValueError("uncompilable regex %r in state %r of %r: %s" %
|
|
501
|
-
(tdef[0], state, cls, err))
|
|
499
|
+
(tdef[0], state, cls, err)) from err
|
|
502
500
|
|
|
503
501
|
token = cls._process_token(tdef[1])
|
|
504
502
|
|
|
@@ -536,7 +534,7 @@ class RegexLexerMeta(LexerMeta):
|
|
|
536
534
|
for c in cls.__mro__:
|
|
537
535
|
toks = c.__dict__.get('tokens', {})
|
|
538
536
|
|
|
539
|
-
for state, items in
|
|
537
|
+
for state, items in toks.items():
|
|
540
538
|
curitems = tokens.get(state)
|
|
541
539
|
if curitems is None:
|
|
542
540
|
# N.b. because this is assigned by reference, sufficiently
|
|
@@ -582,8 +580,7 @@ class RegexLexerMeta(LexerMeta):
|
|
|
582
580
|
return type.__call__(cls, *args, **kwds)
|
|
583
581
|
|
|
584
582
|
|
|
585
|
-
|
|
586
|
-
class RegexLexer(Lexer):
|
|
583
|
+
class RegexLexer(Lexer, metaclass=RegexLexerMeta):
|
|
587
584
|
"""
|
|
588
585
|
Base for simple stateful regular expression-based lexers.
|
|
589
586
|
Simplifies the lexing process so that you need only
|
|
@@ -631,22 +628,27 @@ class RegexLexer(Lexer):
|
|
|
631
628
|
if type(action) is _TokenType:
|
|
632
629
|
yield pos, action, m.group()
|
|
633
630
|
else:
|
|
634
|
-
|
|
635
|
-
yield item
|
|
631
|
+
yield from action(self, m)
|
|
636
632
|
pos = m.end()
|
|
637
633
|
if new_state is not None:
|
|
638
634
|
# state transition
|
|
639
635
|
if isinstance(new_state, tuple):
|
|
640
636
|
for state in new_state:
|
|
641
637
|
if state == '#pop':
|
|
642
|
-
statestack
|
|
638
|
+
if len(statestack) > 1:
|
|
639
|
+
statestack.pop()
|
|
643
640
|
elif state == '#push':
|
|
644
641
|
statestack.append(statestack[-1])
|
|
645
642
|
else:
|
|
646
643
|
statestack.append(state)
|
|
647
644
|
elif isinstance(new_state, int):
|
|
648
|
-
# pop
|
|
649
|
-
|
|
645
|
+
# pop, but keep at least one state on the stack
|
|
646
|
+
# (random code leading to unexpected pops should
|
|
647
|
+
# not allow exceptions)
|
|
648
|
+
if abs(new_state) >= len(statestack):
|
|
649
|
+
del statestack[1:]
|
|
650
|
+
else:
|
|
651
|
+
del statestack[new_state:]
|
|
650
652
|
elif new_state == '#push':
|
|
651
653
|
statestack.append(statestack[-1])
|
|
652
654
|
else:
|
|
@@ -661,7 +663,7 @@ class RegexLexer(Lexer):
|
|
|
661
663
|
# at EOL, reset state to "root"
|
|
662
664
|
statestack = ['root']
|
|
663
665
|
statetokens = tokendefs['root']
|
|
664
|
-
yield pos, Text,
|
|
666
|
+
yield pos, Text, '\n'
|
|
665
667
|
pos += 1
|
|
666
668
|
continue
|
|
667
669
|
yield pos, Error, text[pos]
|
|
@@ -670,7 +672,7 @@ class RegexLexer(Lexer):
|
|
|
670
672
|
break
|
|
671
673
|
|
|
672
674
|
|
|
673
|
-
class LexerContext
|
|
675
|
+
class LexerContext:
|
|
674
676
|
"""
|
|
675
677
|
A helper object that holds lexer position data.
|
|
676
678
|
"""
|
|
@@ -713,8 +715,7 @@ class ExtendedRegexLexer(RegexLexer):
|
|
|
713
715
|
yield ctx.pos, action, m.group()
|
|
714
716
|
ctx.pos = m.end()
|
|
715
717
|
else:
|
|
716
|
-
|
|
717
|
-
yield item
|
|
718
|
+
yield from action(self, m, ctx)
|
|
718
719
|
if not new_state:
|
|
719
720
|
# altered the state stack?
|
|
720
721
|
statetokens = tokendefs[ctx.stack[-1]]
|
|
@@ -724,14 +725,18 @@ class ExtendedRegexLexer(RegexLexer):
|
|
|
724
725
|
if isinstance(new_state, tuple):
|
|
725
726
|
for state in new_state:
|
|
726
727
|
if state == '#pop':
|
|
727
|
-
ctx.stack
|
|
728
|
+
if len(ctx.stack) > 1:
|
|
729
|
+
ctx.stack.pop()
|
|
728
730
|
elif state == '#push':
|
|
729
731
|
ctx.stack.append(ctx.stack[-1])
|
|
730
732
|
else:
|
|
731
733
|
ctx.stack.append(state)
|
|
732
734
|
elif isinstance(new_state, int):
|
|
733
|
-
#
|
|
734
|
-
|
|
735
|
+
# see RegexLexer for why this check is made
|
|
736
|
+
if abs(new_state) >= len(ctx.stack):
|
|
737
|
+
del ctx.state[1:]
|
|
738
|
+
else:
|
|
739
|
+
del ctx.stack[new_state:]
|
|
735
740
|
elif new_state == '#push':
|
|
736
741
|
ctx.stack.append(ctx.stack[-1])
|
|
737
742
|
else:
|
|
@@ -746,7 +751,7 @@ class ExtendedRegexLexer(RegexLexer):
|
|
|
746
751
|
# at EOL, reset state to "root"
|
|
747
752
|
ctx.stack = ['root']
|
|
748
753
|
statetokens = tokendefs['root']
|
|
749
|
-
yield ctx.pos, Text,
|
|
754
|
+
yield ctx.pos, Text, '\n'
|
|
750
755
|
ctx.pos += 1
|
|
751
756
|
continue
|
|
752
757
|
yield ctx.pos, Error, text[ctx.pos]
|
|
@@ -774,8 +779,7 @@ def do_insertions(insertions, tokens):
|
|
|
774
779
|
index, itokens = next(insertions)
|
|
775
780
|
except StopIteration:
|
|
776
781
|
# no insertions
|
|
777
|
-
|
|
778
|
-
yield item
|
|
782
|
+
yield from tokens
|
|
779
783
|
return
|
|
780
784
|
|
|
781
785
|
realpos = None
|
|
@@ -840,8 +844,7 @@ class ProfilingRegexLexerMeta(RegexLexerMeta):
|
|
|
840
844
|
return match_func
|
|
841
845
|
|
|
842
846
|
|
|
843
|
-
|
|
844
|
-
class ProfilingRegexLexer(RegexLexer):
|
|
847
|
+
class ProfilingRegexLexer(RegexLexer, metaclass=ProfilingRegexLexerMeta):
|
|
845
848
|
"""Drop-in replacement for RegexLexer that does profiling of its regexes."""
|
|
846
849
|
|
|
847
850
|
_prof_data = []
|
|
@@ -850,8 +853,7 @@ class ProfilingRegexLexer(RegexLexer):
|
|
|
850
853
|
def get_tokens_unprocessed(self, text, stack=('root',)):
|
|
851
854
|
# this needs to be a stack, since using(this) will produce nested calls
|
|
852
855
|
self.__class__._prof_data.append({})
|
|
853
|
-
|
|
854
|
-
yield tok
|
|
856
|
+
yield from RegexLexer.get_tokens_unprocessed(self, text, stack)
|
|
855
857
|
rawdata = self.__class__._prof_data.pop()
|
|
856
858
|
data = sorted(((s, repr(r).strip('u\'').replace('\\\\', '\\')[:65],
|
|
857
859
|
n, 1000 * t, 1000 * t / n)
|