pygments.rb 1.2.1 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.github/dependabot.yml +13 -0
- data/.github/workflows/ci.yml +40 -0
- data/.github/workflows/release.yml +24 -0
- data/.gitignore +4 -6
- data/.rubocop.yml +16 -0
- data/CHANGELOG.adoc +137 -0
- data/Gemfile +3 -1
- data/LICENSE +1 -1
- data/README.adoc +159 -0
- data/Rakefile +8 -32
- data/bench.rb +14 -8
- data/lib/pygments.rb +16 -14
- data/lib/pygments/lexer.rb +87 -65
- data/lib/pygments/mentos.py +23 -110
- data/lib/pygments/popen.rb +188 -284
- data/lib/pygments/version.rb +2 -2
- data/pygments.rb.gemspec +20 -13
- data/test/test_pygments.rb +50 -110
- data/vendor/pygments-main/{AUTHORS → Pygments-2.8.1.dist-info/AUTHORS} +26 -3
- data/vendor/pygments-main/Pygments-2.8.1.dist-info/INSTALLER +1 -0
- data/vendor/pygments-main/{LICENSE → Pygments-2.8.1.dist-info/LICENSE} +1 -1
- data/vendor/pygments-main/Pygments-2.8.1.dist-info/METADATA +48 -0
- data/vendor/pygments-main/Pygments-2.8.1.dist-info/RECORD +494 -0
- data/vendor/pygments-main/Pygments-2.8.1.dist-info/REQUESTED +0 -0
- data/vendor/pygments-main/Pygments-2.8.1.dist-info/WHEEL +5 -0
- data/vendor/pygments-main/Pygments-2.8.1.dist-info/entry_points.txt +3 -0
- data/vendor/pygments-main/Pygments-2.8.1.dist-info/top_level.txt +1 -0
- data/vendor/pygments-main/bin/pygmentize +8 -0
- data/vendor/pygments-main/pygments/__init__.py +6 -12
- data/vendor/pygments-main/pygments/__main__.py +17 -0
- data/vendor/pygments-main/pygments/cmdline.py +213 -184
- data/vendor/pygments-main/pygments/console.py +6 -10
- data/vendor/pygments-main/pygments/filter.py +4 -7
- data/vendor/pygments-main/pygments/filters/__init__.py +609 -22
- data/vendor/pygments-main/pygments/formatter.py +4 -5
- data/vendor/pygments-main/pygments/formatters/__init__.py +10 -10
- data/vendor/pygments-main/pygments/formatters/_mapping.py +1 -4
- data/vendor/pygments-main/pygments/formatters/bbcode.py +1 -2
- data/vendor/pygments-main/pygments/formatters/html.py +242 -139
- data/vendor/pygments-main/pygments/formatters/img.py +91 -50
- data/vendor/pygments-main/pygments/formatters/irc.py +39 -40
- data/vendor/pygments-main/pygments/formatters/latex.py +62 -33
- data/vendor/pygments-main/pygments/formatters/other.py +18 -17
- data/vendor/pygments-main/pygments/formatters/rtf.py +29 -30
- data/vendor/pygments-main/pygments/formatters/svg.py +40 -5
- data/vendor/pygments-main/pygments/formatters/terminal.py +25 -32
- data/vendor/pygments-main/pygments/formatters/terminal256.py +45 -14
- data/vendor/pygments-main/pygments/lexer.py +47 -44
- data/vendor/pygments-main/pygments/lexers/__init__.py +341 -0
- data/vendor/pygments-main/pygments/lexers/_asy_builtins.py +1644 -0
- data/vendor/pygments-main/pygments/lexers/_cl_builtins.py +231 -0
- data/vendor/pygments-main/pygments/lexers/_cocoa_builtins.py +75 -0
- data/vendor/pygments-main/pygments/lexers/_csound_builtins.py +1724 -0
- data/vendor/pygments-main/pygments/lexers/_lasso_builtins.py +5326 -0
- data/vendor/pygments-main/pygments/lexers/_lua_builtins.py +292 -0
- data/vendor/pygments-main/pygments/lexers/_mapping.py +554 -0
- data/vendor/pygments-main/pygments/lexers/_mql_builtins.py +1171 -0
- data/vendor/pygments-main/pygments/lexers/_mysql_builtins.py +1281 -0
- data/vendor/pygments-main/pygments/lexers/_openedge_builtins.py +2600 -0
- data/vendor/pygments-main/pygments/lexers/_php_builtins.py +4752 -0
- data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +677 -0
- data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +3093 -0
- data/vendor/pygments-main/pygments/lexers/_sourcemod_builtins.py +1160 -0
- data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +557 -0
- data/vendor/pygments-main/pygments/lexers/_stata_builtins.py +457 -0
- data/vendor/pygments-main/pygments/lexers/_tsql_builtins.py +1003 -0
- data/vendor/pygments-main/pygments/lexers/_usd_builtins.py +112 -0
- data/vendor/pygments-main/pygments/lexers/_vbscript_builtins.py +279 -0
- data/vendor/pygments-main/pygments/lexers/_vim_builtins.py +1938 -0
- data/vendor/pygments-main/pygments/lexers/actionscript.py +244 -0
- data/vendor/pygments-main/pygments/lexers/agile.py +23 -0
- data/vendor/pygments-main/pygments/lexers/algebra.py +239 -0
- data/vendor/pygments-main/pygments/lexers/ambient.py +75 -0
- data/vendor/pygments-main/pygments/lexers/amdgpu.py +48 -0
- data/vendor/pygments-main/pygments/lexers/ampl.py +86 -0
- data/vendor/pygments-main/pygments/lexers/apl.py +100 -0
- data/vendor/pygments-main/pygments/lexers/archetype.py +317 -0
- data/vendor/pygments-main/pygments/lexers/arrow.py +116 -0
- data/vendor/pygments-main/pygments/lexers/asm.py +1004 -0
- data/vendor/pygments-main/pygments/lexers/automation.py +379 -0
- data/vendor/pygments-main/pygments/lexers/bare.py +103 -0
- data/vendor/pygments-main/pygments/lexers/basic.py +661 -0
- data/vendor/pygments-main/pygments/lexers/bibtex.py +159 -0
- data/vendor/pygments-main/pygments/lexers/boa.py +101 -0
- data/vendor/pygments-main/pygments/lexers/business.py +626 -0
- data/vendor/pygments-main/pygments/lexers/c_cpp.py +342 -0
- data/vendor/pygments-main/pygments/lexers/c_like.py +565 -0
- data/vendor/pygments-main/pygments/lexers/capnproto.py +77 -0
- data/vendor/pygments-main/pygments/lexers/cddl.py +190 -0
- data/vendor/pygments-main/pygments/lexers/chapel.py +111 -0
- data/vendor/pygments-main/pygments/lexers/clean.py +178 -0
- data/vendor/pygments-main/pygments/lexers/compiled.py +33 -0
- data/vendor/pygments-main/pygments/lexers/configs.py +985 -0
- data/vendor/pygments-main/pygments/lexers/console.py +113 -0
- data/vendor/pygments-main/pygments/lexers/crystal.py +366 -0
- data/vendor/pygments-main/pygments/lexers/csound.py +466 -0
- data/vendor/pygments-main/pygments/lexers/css.py +694 -0
- data/vendor/pygments-main/pygments/lexers/d.py +255 -0
- data/vendor/pygments-main/pygments/lexers/dalvik.py +124 -0
- data/vendor/pygments-main/pygments/lexers/data.py +697 -0
- data/vendor/pygments-main/pygments/lexers/devicetree.py +108 -0
- data/vendor/pygments-main/pygments/lexers/diff.py +164 -0
- data/vendor/pygments-main/pygments/lexers/dotnet.py +706 -0
- data/vendor/pygments-main/pygments/lexers/dsls.py +959 -0
- data/vendor/pygments-main/pygments/lexers/dylan.py +286 -0
- data/vendor/pygments-main/pygments/lexers/ecl.py +137 -0
- data/vendor/pygments-main/pygments/lexers/eiffel.py +64 -0
- data/vendor/pygments-main/pygments/lexers/elm.py +120 -0
- data/vendor/pygments-main/pygments/lexers/email.py +150 -0
- data/vendor/pygments-main/pygments/lexers/erlang.py +529 -0
- data/vendor/pygments-main/pygments/lexers/esoteric.py +303 -0
- data/vendor/pygments-main/pygments/lexers/ezhil.py +76 -0
- data/vendor/pygments-main/pygments/lexers/factor.py +343 -0
- data/vendor/pygments-main/pygments/lexers/fantom.py +249 -0
- data/vendor/pygments-main/pygments/lexers/felix.py +272 -0
- data/vendor/pygments-main/pygments/lexers/floscript.py +82 -0
- data/vendor/pygments-main/pygments/lexers/forth.py +177 -0
- data/vendor/pygments-main/pygments/lexers/fortran.py +208 -0
- data/vendor/pygments-main/pygments/lexers/foxpro.py +427 -0
- data/vendor/pygments-main/pygments/lexers/freefem.py +897 -0
- data/vendor/pygments-main/pygments/lexers/functional.py +20 -0
- data/vendor/pygments-main/pygments/lexers/futhark.py +110 -0
- data/vendor/pygments-main/pygments/lexers/gdscript.py +345 -0
- data/vendor/pygments-main/pygments/lexers/go.py +100 -0
- data/vendor/pygments-main/pygments/lexers/grammar_notation.py +269 -0
- data/vendor/pygments-main/pygments/lexers/graph.py +84 -0
- data/vendor/pygments-main/pygments/lexers/graphics.py +799 -0
- data/vendor/pygments-main/pygments/lexers/graphviz.py +57 -0
- data/vendor/pygments-main/pygments/lexers/haskell.py +869 -0
- data/vendor/pygments-main/pygments/lexers/haxe.py +935 -0
- data/vendor/pygments-main/pygments/lexers/hdl.py +468 -0
- data/vendor/pygments-main/pygments/lexers/hexdump.py +102 -0
- data/vendor/pygments-main/pygments/lexers/html.py +613 -0
- data/vendor/pygments-main/pygments/lexers/idl.py +280 -0
- data/vendor/pygments-main/pygments/lexers/igor.py +419 -0
- data/vendor/pygments-main/pygments/lexers/inferno.py +95 -0
- data/vendor/pygments-main/pygments/lexers/installers.py +321 -0
- data/vendor/pygments-main/pygments/lexers/int_fiction.py +1367 -0
- data/vendor/pygments-main/pygments/lexers/iolang.py +62 -0
- data/vendor/pygments-main/pygments/lexers/j.py +145 -0
- data/vendor/pygments-main/pygments/lexers/javascript.py +1536 -0
- data/vendor/pygments-main/pygments/lexers/julia.py +330 -0
- data/vendor/pygments-main/pygments/lexers/jvm.py +1739 -0
- data/vendor/pygments-main/pygments/lexers/lisp.py +2698 -0
- data/vendor/pygments-main/pygments/lexers/make.py +205 -0
- data/vendor/pygments-main/pygments/lexers/markup.py +762 -0
- data/vendor/pygments-main/pygments/lexers/math.py +20 -0
- data/vendor/pygments-main/pygments/lexers/matlab.py +3280 -0
- data/vendor/pygments-main/pygments/lexers/mime.py +225 -0
- data/vendor/pygments-main/pygments/lexers/ml.py +957 -0
- data/vendor/pygments-main/pygments/lexers/modeling.py +365 -0
- data/vendor/pygments-main/pygments/lexers/modula2.py +1579 -0
- data/vendor/pygments-main/pygments/lexers/monte.py +203 -0
- data/vendor/pygments-main/pygments/lexers/mosel.py +447 -0
- data/vendor/pygments-main/pygments/lexers/ncl.py +893 -0
- data/vendor/pygments-main/pygments/lexers/nimrod.py +158 -0
- data/vendor/pygments-main/pygments/lexers/nit.py +63 -0
- data/vendor/pygments-main/pygments/lexers/nix.py +135 -0
- data/vendor/pygments-main/pygments/lexers/oberon.py +120 -0
- data/vendor/pygments-main/pygments/lexers/objective.py +503 -0
- data/vendor/pygments-main/pygments/lexers/ooc.py +84 -0
- data/vendor/pygments-main/pygments/lexers/other.py +40 -0
- data/vendor/pygments-main/pygments/lexers/parasail.py +78 -0
- data/vendor/pygments-main/pygments/lexers/parsers.py +799 -0
- data/vendor/pygments-main/pygments/lexers/pascal.py +643 -0
- data/vendor/pygments-main/pygments/lexers/pawn.py +202 -0
- data/vendor/pygments-main/pygments/lexers/perl.py +731 -0
- data/vendor/pygments-main/pygments/lexers/php.py +320 -0
- data/vendor/pygments-main/pygments/lexers/pointless.py +70 -0
- data/vendor/pygments-main/pygments/lexers/pony.py +93 -0
- data/vendor/pygments-main/pygments/lexers/praat.py +301 -0
- data/vendor/pygments-main/pygments/lexers/prolog.py +305 -0
- data/vendor/pygments-main/pygments/lexers/promql.py +182 -0
- data/vendor/pygments-main/pygments/lexers/python.py +1158 -0
- data/vendor/pygments-main/pygments/lexers/qvt.py +151 -0
- data/vendor/pygments-main/pygments/lexers/r.py +190 -0
- data/vendor/pygments-main/pygments/lexers/rdf.py +462 -0
- data/vendor/pygments-main/pygments/lexers/rebol.py +430 -0
- data/vendor/pygments-main/pygments/lexers/resource.py +84 -0
- data/vendor/pygments-main/pygments/lexers/ride.py +138 -0
- data/vendor/pygments-main/pygments/lexers/rnc.py +66 -0
- data/vendor/pygments-main/pygments/lexers/roboconf.py +81 -0
- data/vendor/pygments-main/pygments/lexers/robotframework.py +551 -0
- data/vendor/pygments-main/pygments/lexers/ruby.py +523 -0
- data/vendor/pygments-main/pygments/lexers/rust.py +223 -0
- data/vendor/pygments-main/pygments/lexers/sas.py +227 -0
- data/vendor/pygments-main/pygments/lexers/scdoc.py +82 -0
- data/vendor/pygments-main/pygments/lexers/scripting.py +1283 -0
- data/vendor/pygments-main/pygments/lexers/sgf.py +60 -0
- data/vendor/pygments-main/pygments/lexers/shell.py +909 -0
- data/vendor/pygments-main/pygments/lexers/sieve.py +68 -0
- data/vendor/pygments-main/pygments/lexers/slash.py +184 -0
- data/vendor/pygments-main/pygments/lexers/smalltalk.py +194 -0
- data/vendor/pygments-main/pygments/lexers/smv.py +78 -0
- data/vendor/pygments-main/pygments/lexers/snobol.py +82 -0
- data/vendor/pygments-main/pygments/lexers/solidity.py +91 -0
- data/vendor/pygments-main/pygments/lexers/special.py +106 -0
- data/vendor/pygments-main/pygments/lexers/sql.py +832 -0
- data/vendor/pygments-main/pygments/lexers/stata.py +170 -0
- data/vendor/pygments-main/pygments/lexers/supercollider.py +94 -0
- data/vendor/pygments-main/pygments/lexers/tcl.py +144 -0
- data/vendor/pygments-main/pygments/lexers/templates.py +2263 -0
- data/vendor/pygments-main/pygments/lexers/teraterm.py +334 -0
- data/vendor/pygments-main/pygments/lexers/testing.py +206 -0
- data/vendor/pygments-main/pygments/lexers/text.py +25 -0
- data/vendor/pygments-main/pygments/lexers/textedit.py +168 -0
- data/vendor/pygments-main/pygments/lexers/textfmts.py +429 -0
- data/vendor/pygments-main/pygments/lexers/theorem.py +476 -0
- data/vendor/pygments-main/pygments/lexers/tnt.py +262 -0
- data/vendor/pygments-main/pygments/lexers/trafficscript.py +53 -0
- data/vendor/pygments-main/pygments/lexers/typoscript.py +218 -0
- data/vendor/pygments-main/pygments/lexers/unicon.py +411 -0
- data/vendor/pygments-main/pygments/lexers/urbi.py +145 -0
- data/vendor/pygments-main/pygments/lexers/usd.py +89 -0
- data/vendor/pygments-main/pygments/lexers/varnish.py +189 -0
- data/vendor/pygments-main/pygments/lexers/verification.py +113 -0
- data/vendor/pygments-main/pygments/lexers/web.py +23 -0
- data/vendor/pygments-main/pygments/lexers/webidl.py +298 -0
- data/vendor/pygments-main/pygments/lexers/webmisc.py +991 -0
- data/vendor/pygments-main/pygments/lexers/whiley.py +115 -0
- data/vendor/pygments-main/pygments/lexers/x10.py +68 -0
- data/vendor/pygments-main/pygments/lexers/xorg.py +36 -0
- data/vendor/pygments-main/pygments/lexers/yang.py +103 -0
- data/vendor/pygments-main/pygments/lexers/zig.py +123 -0
- data/vendor/pygments-main/pygments/modeline.py +1 -2
- data/vendor/pygments-main/pygments/plugin.py +4 -3
- data/vendor/pygments-main/pygments/regexopt.py +1 -2
- data/vendor/pygments-main/pygments/scanner.py +2 -3
- data/vendor/pygments-main/pygments/sphinxext.py +2 -5
- data/vendor/pygments-main/pygments/style.py +61 -25
- data/vendor/pygments-main/pygments/styles/__init__.py +12 -5
- data/vendor/pygments-main/pygments/styles/abap.py +1 -2
- data/vendor/pygments-main/pygments/styles/algol.py +1 -2
- data/vendor/pygments-main/pygments/styles/algol_nu.py +1 -2
- data/vendor/pygments-main/pygments/styles/arduino.py +2 -3
- data/vendor/pygments-main/pygments/styles/autumn.py +1 -2
- data/vendor/pygments-main/pygments/styles/borland.py +1 -2
- data/vendor/pygments-main/pygments/styles/bw.py +1 -2
- data/vendor/pygments-main/pygments/styles/colorful.py +1 -2
- data/vendor/pygments-main/pygments/styles/default.py +1 -2
- data/vendor/pygments-main/pygments/styles/emacs.py +1 -2
- data/vendor/pygments-main/pygments/styles/friendly.py +1 -2
- data/vendor/pygments-main/pygments/styles/fruity.py +1 -2
- data/vendor/pygments-main/pygments/styles/igor.py +1 -2
- data/vendor/pygments-main/pygments/styles/inkpot.py +66 -0
- data/vendor/pygments-main/pygments/styles/lovelace.py +1 -2
- data/vendor/pygments-main/pygments/styles/manni.py +1 -2
- data/vendor/pygments-main/pygments/styles/material.py +118 -0
- data/vendor/pygments-main/pygments/styles/monokai.py +4 -4
- data/vendor/pygments-main/pygments/styles/murphy.py +1 -2
- data/vendor/pygments-main/pygments/styles/native.py +1 -2
- data/vendor/pygments-main/pygments/styles/paraiso_dark.py +1 -2
- data/vendor/pygments-main/pygments/styles/paraiso_light.py +1 -2
- data/vendor/pygments-main/pygments/styles/pastie.py +1 -2
- data/vendor/pygments-main/pygments/styles/perldoc.py +1 -2
- data/vendor/pygments-main/pygments/styles/rainbow_dash.py +1 -2
- data/vendor/pygments-main/pygments/styles/rrt.py +1 -2
- data/vendor/pygments-main/pygments/styles/sas.py +1 -2
- data/vendor/pygments-main/pygments/styles/solarized.py +136 -0
- data/vendor/pygments-main/pygments/styles/stata_dark.py +40 -0
- data/vendor/pygments-main/pygments/styles/{stata.py → stata_light.py} +14 -16
- data/vendor/pygments-main/pygments/styles/tango.py +1 -2
- data/vendor/pygments-main/pygments/styles/trac.py +1 -2
- data/vendor/pygments-main/pygments/styles/vim.py +1 -2
- data/vendor/pygments-main/pygments/styles/vs.py +1 -2
- data/vendor/pygments-main/pygments/styles/xcode.py +1 -2
- data/vendor/pygments-main/pygments/styles/zenburn.py +80 -0
- data/vendor/pygments-main/pygments/token.py +1 -2
- data/vendor/pygments-main/pygments/unistring.py +47 -109
- data/vendor/pygments-main/pygments/util.py +16 -96
- metadata +81 -139
- data/CHANGELOG.md +0 -111
- data/README.md +0 -121
- data/cache-lexers.rb +0 -8
- data/circle.yml +0 -20
- data/test/test_data.c +0 -2581
- data/test/test_data.py +0 -514
- data/test/test_data_generated +0 -2582
- data/vendor/custom_lexers/github.py +0 -565
- data/vendor/pygments-main/CHANGES +0 -1186
- data/vendor/pygments-main/MANIFEST.in +0 -6
- data/vendor/pygments-main/Makefile +0 -65
- data/vendor/pygments-main/README.rst +0 -39
- data/vendor/pygments-main/REVISION +0 -1
- data/vendor/pygments-main/TODO +0 -12
- data/vendor/pygments-main/doc/Makefile +0 -153
- data/vendor/pygments-main/doc/_static/favicon.ico +0 -0
- data/vendor/pygments-main/doc/_static/logo_new.png +0 -0
- data/vendor/pygments-main/doc/_static/logo_only.png +0 -0
- data/vendor/pygments-main/doc/_templates/docssidebar.html +0 -3
- data/vendor/pygments-main/doc/_templates/indexsidebar.html +0 -25
- data/vendor/pygments-main/doc/_themes/pygments14/layout.html +0 -98
- data/vendor/pygments-main/doc/_themes/pygments14/static/bodybg.png +0 -0
- data/vendor/pygments-main/doc/_themes/pygments14/static/docbg.png +0 -0
- data/vendor/pygments-main/doc/_themes/pygments14/static/listitem.png +0 -0
- data/vendor/pygments-main/doc/_themes/pygments14/static/logo.png +0 -0
- data/vendor/pygments-main/doc/_themes/pygments14/static/pocoo.png +0 -0
- data/vendor/pygments-main/doc/_themes/pygments14/static/pygments14.css_t +0 -401
- data/vendor/pygments-main/doc/_themes/pygments14/theme.conf +0 -15
- data/vendor/pygments-main/doc/conf.py +0 -241
- data/vendor/pygments-main/doc/docs/api.rst +0 -354
- data/vendor/pygments-main/doc/docs/authors.rst +0 -4
- data/vendor/pygments-main/doc/docs/changelog.rst +0 -1
- data/vendor/pygments-main/doc/docs/cmdline.rst +0 -166
- data/vendor/pygments-main/doc/docs/filterdevelopment.rst +0 -71
- data/vendor/pygments-main/doc/docs/filters.rst +0 -41
- data/vendor/pygments-main/doc/docs/formatterdevelopment.rst +0 -169
- data/vendor/pygments-main/doc/docs/formatters.rst +0 -48
- data/vendor/pygments-main/doc/docs/index.rst +0 -66
- data/vendor/pygments-main/doc/docs/integrate.rst +0 -40
- data/vendor/pygments-main/doc/docs/java.rst +0 -70
- data/vendor/pygments-main/doc/docs/lexerdevelopment.rst +0 -728
- data/vendor/pygments-main/doc/docs/lexers.rst +0 -69
- data/vendor/pygments-main/doc/docs/moinmoin.rst +0 -39
- data/vendor/pygments-main/doc/docs/plugins.rst +0 -93
- data/vendor/pygments-main/doc/docs/quickstart.rst +0 -205
- data/vendor/pygments-main/doc/docs/rstdirective.rst +0 -22
- data/vendor/pygments-main/doc/docs/styles.rst +0 -201
- data/vendor/pygments-main/doc/docs/tokens.rst +0 -372
- data/vendor/pygments-main/doc/docs/unicode.rst +0 -58
- data/vendor/pygments-main/doc/download.rst +0 -41
- data/vendor/pygments-main/doc/faq.rst +0 -139
- data/vendor/pygments-main/doc/index.rst +0 -54
- data/vendor/pygments-main/doc/languages.rst +0 -154
- data/vendor/pygments-main/doc/make.bat +0 -190
- data/vendor/pygments-main/doc/pygmentize.1 +0 -94
- data/vendor/pygments-main/external/autopygmentize +0 -101
- data/vendor/pygments-main/external/lasso-builtins-generator-9.lasso +0 -162
- data/vendor/pygments-main/external/markdown-processor.py +0 -67
- data/vendor/pygments-main/external/moin-parser.py +0 -112
- data/vendor/pygments-main/external/pygments.bashcomp +0 -38
- data/vendor/pygments-main/external/rst-directive.py +0 -82
- data/vendor/pygments-main/pygmentize +0 -8
- data/vendor/pygments-main/requirements.txt +0 -5
- data/vendor/pygments-main/scripts/check_sources.py +0 -211
- data/vendor/pygments-main/scripts/debug_lexer.py +0 -246
- data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +0 -33
- data/vendor/pygments-main/scripts/epydoc.css +0 -280
- data/vendor/pygments-main/scripts/get_vimkw.py +0 -74
- data/vendor/pygments-main/scripts/pylintrc +0 -301
- data/vendor/pygments-main/scripts/vim2pygments.py +0 -935
- data/vendor/pygments-main/setup.cfg +0 -10
- data/vendor/pygments-main/setup.py +0 -77
- data/vendor/pygments-main/tox.ini +0 -7
- data/vendor/simplejson/.gitignore +0 -10
- data/vendor/simplejson/.travis.yml +0 -5
- data/vendor/simplejson/CHANGES.txt +0 -291
- data/vendor/simplejson/LICENSE.txt +0 -19
- data/vendor/simplejson/MANIFEST.in +0 -5
- data/vendor/simplejson/README.rst +0 -19
- data/vendor/simplejson/conf.py +0 -179
- data/vendor/simplejson/index.rst +0 -628
- data/vendor/simplejson/scripts/make_docs.py +0 -18
- data/vendor/simplejson/setup.py +0 -104
- data/vendor/simplejson/simplejson/__init__.py +0 -510
- data/vendor/simplejson/simplejson/_speedups.c +0 -2745
- data/vendor/simplejson/simplejson/decoder.py +0 -425
- data/vendor/simplejson/simplejson/encoder.py +0 -567
- data/vendor/simplejson/simplejson/ordered_dict.py +0 -119
- data/vendor/simplejson/simplejson/scanner.py +0 -77
- data/vendor/simplejson/simplejson/tests/__init__.py +0 -67
- data/vendor/simplejson/simplejson/tests/test_bigint_as_string.py +0 -55
- data/vendor/simplejson/simplejson/tests/test_check_circular.py +0 -30
- data/vendor/simplejson/simplejson/tests/test_decimal.py +0 -66
- data/vendor/simplejson/simplejson/tests/test_decode.py +0 -83
- data/vendor/simplejson/simplejson/tests/test_default.py +0 -9
- data/vendor/simplejson/simplejson/tests/test_dump.py +0 -67
- data/vendor/simplejson/simplejson/tests/test_encode_basestring_ascii.py +0 -46
- data/vendor/simplejson/simplejson/tests/test_encode_for_html.py +0 -32
- data/vendor/simplejson/simplejson/tests/test_errors.py +0 -34
- data/vendor/simplejson/simplejson/tests/test_fail.py +0 -91
- data/vendor/simplejson/simplejson/tests/test_float.py +0 -19
- data/vendor/simplejson/simplejson/tests/test_indent.py +0 -86
- data/vendor/simplejson/simplejson/tests/test_item_sort_key.py +0 -20
- data/vendor/simplejson/simplejson/tests/test_namedtuple.py +0 -121
- data/vendor/simplejson/simplejson/tests/test_pass1.py +0 -76
- data/vendor/simplejson/simplejson/tests/test_pass2.py +0 -14
- data/vendor/simplejson/simplejson/tests/test_pass3.py +0 -20
- data/vendor/simplejson/simplejson/tests/test_recursion.py +0 -67
- data/vendor/simplejson/simplejson/tests/test_scanstring.py +0 -117
- data/vendor/simplejson/simplejson/tests/test_separators.py +0 -42
- data/vendor/simplejson/simplejson/tests/test_speedups.py +0 -20
- data/vendor/simplejson/simplejson/tests/test_tuple.py +0 -49
- data/vendor/simplejson/simplejson/tests/test_unicode.py +0 -109
- data/vendor/simplejson/simplejson/tool.py +0 -39
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"""
|
|
2
|
+
pygments.lexers.text
|
|
3
|
+
~~~~~~~~~~~~~~~~~~~~
|
|
4
|
+
|
|
5
|
+
Lexers for non-source code file types.
|
|
6
|
+
|
|
7
|
+
:copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
|
|
8
|
+
:license: BSD, see LICENSE for details.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from pygments.lexers.configs import ApacheConfLexer, NginxConfLexer, \
|
|
12
|
+
SquidConfLexer, LighttpdConfLexer, IniLexer, RegeditLexer, PropertiesLexer
|
|
13
|
+
from pygments.lexers.console import PyPyLogLexer
|
|
14
|
+
from pygments.lexers.textedit import VimLexer
|
|
15
|
+
from pygments.lexers.markup import BBCodeLexer, MoinWikiLexer, RstLexer, \
|
|
16
|
+
TexLexer, GroffLexer
|
|
17
|
+
from pygments.lexers.installers import DebianControlLexer, SourcesListLexer
|
|
18
|
+
from pygments.lexers.make import MakefileLexer, BaseMakefileLexer, CMakeLexer
|
|
19
|
+
from pygments.lexers.haxe import HxmlLexer
|
|
20
|
+
from pygments.lexers.sgf import SmartGameFormatLexer
|
|
21
|
+
from pygments.lexers.diff import DiffLexer, DarcsPatchLexer
|
|
22
|
+
from pygments.lexers.data import YamlLexer
|
|
23
|
+
from pygments.lexers.textfmts import IrcLogsLexer, GettextLexer, HttpLexer
|
|
24
|
+
|
|
25
|
+
__all__ = []
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"""
|
|
2
|
+
pygments.lexers.textedit
|
|
3
|
+
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
4
|
+
|
|
5
|
+
Lexers for languages related to text processing.
|
|
6
|
+
|
|
7
|
+
:copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
|
|
8
|
+
:license: BSD, see LICENSE for details.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
import re
|
|
12
|
+
from bisect import bisect
|
|
13
|
+
|
|
14
|
+
from pygments.lexer import RegexLexer, include, default, bygroups, using, this
|
|
15
|
+
from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
|
|
16
|
+
Number, Punctuation
|
|
17
|
+
|
|
18
|
+
from pygments.lexers.python import PythonLexer
|
|
19
|
+
|
|
20
|
+
__all__ = ['AwkLexer', 'VimLexer']
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class AwkLexer(RegexLexer):
|
|
24
|
+
"""
|
|
25
|
+
For Awk scripts.
|
|
26
|
+
|
|
27
|
+
.. versionadded:: 1.5
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
name = 'Awk'
|
|
31
|
+
aliases = ['awk', 'gawk', 'mawk', 'nawk']
|
|
32
|
+
filenames = ['*.awk']
|
|
33
|
+
mimetypes = ['application/x-awk']
|
|
34
|
+
|
|
35
|
+
tokens = {
|
|
36
|
+
'commentsandwhitespace': [
|
|
37
|
+
(r'\s+', Text),
|
|
38
|
+
(r'#.*$', Comment.Single)
|
|
39
|
+
],
|
|
40
|
+
'slashstartsregex': [
|
|
41
|
+
include('commentsandwhitespace'),
|
|
42
|
+
(r'/(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/'
|
|
43
|
+
r'\B', String.Regex, '#pop'),
|
|
44
|
+
(r'(?=/)', Text, ('#pop', 'badregex')),
|
|
45
|
+
default('#pop')
|
|
46
|
+
],
|
|
47
|
+
'badregex': [
|
|
48
|
+
(r'\n', Text, '#pop')
|
|
49
|
+
],
|
|
50
|
+
'root': [
|
|
51
|
+
(r'^(?=\s|/)', Text, 'slashstartsregex'),
|
|
52
|
+
include('commentsandwhitespace'),
|
|
53
|
+
(r'\+\+|--|\|\||&&|in\b|\$|!?~|'
|
|
54
|
+
r'(\*\*|[-<>+*%\^/!=|])=?', Operator, 'slashstartsregex'),
|
|
55
|
+
(r'[{(\[;,]', Punctuation, 'slashstartsregex'),
|
|
56
|
+
(r'[})\].]', Punctuation),
|
|
57
|
+
(r'(break|continue|do|while|exit|for|if|else|'
|
|
58
|
+
r'return)\b', Keyword, 'slashstartsregex'),
|
|
59
|
+
(r'function\b', Keyword.Declaration, 'slashstartsregex'),
|
|
60
|
+
(r'(atan2|cos|exp|int|log|rand|sin|sqrt|srand|gensub|gsub|index|'
|
|
61
|
+
r'length|match|split|sprintf|sub|substr|tolower|toupper|close|'
|
|
62
|
+
r'fflush|getline|next|nextfile|print|printf|strftime|systime|'
|
|
63
|
+
r'delete|system)\b', Keyword.Reserved),
|
|
64
|
+
(r'(ARGC|ARGIND|ARGV|BEGIN|CONVFMT|ENVIRON|END|ERRNO|FIELDWIDTHS|'
|
|
65
|
+
r'FILENAME|FNR|FS|IGNORECASE|NF|NR|OFMT|OFS|ORFS|RLENGTH|RS|'
|
|
66
|
+
r'RSTART|RT|SUBSEP)\b', Name.Builtin),
|
|
67
|
+
(r'[$a-zA-Z_]\w*', Name.Other),
|
|
68
|
+
(r'[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?', Number.Float),
|
|
69
|
+
(r'0x[0-9a-fA-F]+', Number.Hex),
|
|
70
|
+
(r'[0-9]+', Number.Integer),
|
|
71
|
+
(r'"(\\\\|\\[^\\]|[^"\\])*"', String.Double),
|
|
72
|
+
(r"'(\\\\|\\[^\\]|[^'\\])*'", String.Single),
|
|
73
|
+
]
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
class VimLexer(RegexLexer):
|
|
78
|
+
"""
|
|
79
|
+
Lexer for VimL script files.
|
|
80
|
+
|
|
81
|
+
.. versionadded:: 0.8
|
|
82
|
+
"""
|
|
83
|
+
name = 'VimL'
|
|
84
|
+
aliases = ['vim']
|
|
85
|
+
filenames = ['*.vim', '.vimrc', '.exrc', '.gvimrc',
|
|
86
|
+
'_vimrc', '_exrc', '_gvimrc', 'vimrc', 'gvimrc']
|
|
87
|
+
mimetypes = ['text/x-vim']
|
|
88
|
+
flags = re.MULTILINE
|
|
89
|
+
|
|
90
|
+
_python = r'py(?:t(?:h(?:o(?:n)?)?)?)?'
|
|
91
|
+
|
|
92
|
+
tokens = {
|
|
93
|
+
'root': [
|
|
94
|
+
(r'^([ \t:]*)(' + _python + r')([ \t]*)(<<)([ \t]*)(.*)((?:\n|.)*)(\6)',
|
|
95
|
+
bygroups(using(this), Keyword, Text, Operator, Text, Text,
|
|
96
|
+
using(PythonLexer), Text)),
|
|
97
|
+
(r'^([ \t:]*)(' + _python + r')([ \t])(.*)',
|
|
98
|
+
bygroups(using(this), Keyword, Text, using(PythonLexer))),
|
|
99
|
+
|
|
100
|
+
(r'^\s*".*', Comment),
|
|
101
|
+
|
|
102
|
+
(r'[ \t]+', Text),
|
|
103
|
+
# TODO: regexes can have other delims
|
|
104
|
+
(r'/[^/\\\n]*(?:\\[\s\S][^/\\\n]*)*/', String.Regex),
|
|
105
|
+
(r'"[^"\\\n]*(?:\\[\s\S][^"\\\n]*)*"', String.Double),
|
|
106
|
+
(r"'[^\n']*(?:''[^\n']*)*'", String.Single),
|
|
107
|
+
|
|
108
|
+
# Who decided that doublequote was a good comment character??
|
|
109
|
+
(r'(?<=\s)"[^\-:.%#=*].*', Comment),
|
|
110
|
+
(r'-?\d+', Number),
|
|
111
|
+
(r'#[0-9a-f]{6}', Number.Hex),
|
|
112
|
+
(r'^:', Punctuation),
|
|
113
|
+
(r'[()<>+=!|,~-]', Punctuation), # Inexact list. Looks decent.
|
|
114
|
+
(r'\b(let|if|else|endif|elseif|fun|function|endfunction)\b',
|
|
115
|
+
Keyword),
|
|
116
|
+
(r'\b(NONE|bold|italic|underline|dark|light)\b', Name.Builtin),
|
|
117
|
+
(r'\b\w+\b', Name.Other), # These are postprocessed below
|
|
118
|
+
(r'.', Text),
|
|
119
|
+
],
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
def __init__(self, **options):
|
|
123
|
+
from pygments.lexers._vim_builtins import command, option, auto
|
|
124
|
+
self._cmd = command
|
|
125
|
+
self._opt = option
|
|
126
|
+
self._aut = auto
|
|
127
|
+
|
|
128
|
+
RegexLexer.__init__(self, **options)
|
|
129
|
+
|
|
130
|
+
def is_in(self, w, mapping):
|
|
131
|
+
r"""
|
|
132
|
+
It's kind of difficult to decide if something might be a keyword
|
|
133
|
+
in VimL because it allows you to abbreviate them. In fact,
|
|
134
|
+
'ab[breviate]' is a good example. :ab, :abbre, or :abbreviate are
|
|
135
|
+
valid ways to call it so rather than making really awful regexps
|
|
136
|
+
like::
|
|
137
|
+
|
|
138
|
+
\bab(?:b(?:r(?:e(?:v(?:i(?:a(?:t(?:e)?)?)?)?)?)?)?)?\b
|
|
139
|
+
|
|
140
|
+
we match `\b\w+\b` and then call is_in() on those tokens. See
|
|
141
|
+
`scripts/get_vimkw.py` for how the lists are extracted.
|
|
142
|
+
"""
|
|
143
|
+
p = bisect(mapping, (w,))
|
|
144
|
+
if p > 0:
|
|
145
|
+
if mapping[p-1][0] == w[:len(mapping[p-1][0])] and \
|
|
146
|
+
mapping[p-1][1][:len(w)] == w:
|
|
147
|
+
return True
|
|
148
|
+
if p < len(mapping):
|
|
149
|
+
return mapping[p][0] == w[:len(mapping[p][0])] and \
|
|
150
|
+
mapping[p][1][:len(w)] == w
|
|
151
|
+
return False
|
|
152
|
+
|
|
153
|
+
def get_tokens_unprocessed(self, text):
|
|
154
|
+
# TODO: builtins are only subsequent tokens on lines
|
|
155
|
+
# and 'keywords' only happen at the beginning except
|
|
156
|
+
# for :au ones
|
|
157
|
+
for index, token, value in \
|
|
158
|
+
RegexLexer.get_tokens_unprocessed(self, text):
|
|
159
|
+
if token is Name.Other:
|
|
160
|
+
if self.is_in(value, self._cmd):
|
|
161
|
+
yield index, Keyword, value
|
|
162
|
+
elif self.is_in(value, self._opt) or \
|
|
163
|
+
self.is_in(value, self._aut):
|
|
164
|
+
yield index, Name.Builtin, value
|
|
165
|
+
else:
|
|
166
|
+
yield index, Text, value
|
|
167
|
+
else:
|
|
168
|
+
yield index, token, value
|
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
"""
|
|
2
|
+
pygments.lexers.textfmts
|
|
3
|
+
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
4
|
+
|
|
5
|
+
Lexers for various text formats.
|
|
6
|
+
|
|
7
|
+
:copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
|
|
8
|
+
:license: BSD, see LICENSE for details.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
import re
|
|
12
|
+
|
|
13
|
+
from pygments.lexers import guess_lexer, get_lexer_by_name
|
|
14
|
+
from pygments.lexer import RegexLexer, bygroups, default, include
|
|
15
|
+
from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
|
|
16
|
+
Number, Generic, Literal, Punctuation
|
|
17
|
+
from pygments.util import ClassNotFound
|
|
18
|
+
|
|
19
|
+
__all__ = ['IrcLogsLexer', 'TodotxtLexer', 'HttpLexer', 'GettextLexer',
|
|
20
|
+
'NotmuchLexer', 'KernelLogLexer']
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class IrcLogsLexer(RegexLexer):
|
|
24
|
+
"""
|
|
25
|
+
Lexer for IRC logs in *irssi*, *xchat* or *weechat* style.
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
name = 'IRC logs'
|
|
29
|
+
aliases = ['irc']
|
|
30
|
+
filenames = ['*.weechatlog']
|
|
31
|
+
mimetypes = ['text/x-irclog']
|
|
32
|
+
|
|
33
|
+
flags = re.VERBOSE | re.MULTILINE
|
|
34
|
+
timestamp = r"""
|
|
35
|
+
(
|
|
36
|
+
# irssi / xchat and others
|
|
37
|
+
(?: \[|\()? # Opening bracket or paren for the timestamp
|
|
38
|
+
(?: # Timestamp
|
|
39
|
+
(?: (?:\d{1,4} [-/])* # Date as - or /-separated groups of digits
|
|
40
|
+
(?:\d{1,4})
|
|
41
|
+
[T ])? # Date/time separator: T or space
|
|
42
|
+
(?: \d?\d [:.])* # Time as :/.-separated groups of 1 or 2 digits
|
|
43
|
+
(?: \d?\d)
|
|
44
|
+
)
|
|
45
|
+
(?: \]|\))?\s+ # Closing bracket or paren for the timestamp
|
|
46
|
+
|
|
|
47
|
+
# weechat
|
|
48
|
+
\d{4}\s\w{3}\s\d{2}\s # Date
|
|
49
|
+
\d{2}:\d{2}:\d{2}\s+ # Time + Whitespace
|
|
50
|
+
|
|
|
51
|
+
# xchat
|
|
52
|
+
\w{3}\s\d{2}\s # Date
|
|
53
|
+
\d{2}:\d{2}:\d{2}\s+ # Time + Whitespace
|
|
54
|
+
)?
|
|
55
|
+
"""
|
|
56
|
+
tokens = {
|
|
57
|
+
'root': [
|
|
58
|
+
# log start/end
|
|
59
|
+
(r'^\*\*\*\*(.*)\*\*\*\*$', Comment),
|
|
60
|
+
# hack
|
|
61
|
+
("^" + timestamp + r'(\s*<[^>]*>\s*)$', bygroups(Comment.Preproc, Name.Tag)),
|
|
62
|
+
# normal msgs
|
|
63
|
+
("^" + timestamp + r"""
|
|
64
|
+
(\s*<.*?>\s*) # Nick """,
|
|
65
|
+
bygroups(Comment.Preproc, Name.Tag), 'msg'),
|
|
66
|
+
# /me msgs
|
|
67
|
+
("^" + timestamp + r"""
|
|
68
|
+
(\s*[*]\s+) # Star
|
|
69
|
+
(\S+\s+.*?\n) # Nick + rest of message """,
|
|
70
|
+
bygroups(Comment.Preproc, Keyword, Generic.Inserted)),
|
|
71
|
+
# join/part msgs
|
|
72
|
+
("^" + timestamp + r"""
|
|
73
|
+
(\s*(?:\*{3}|<?-[!@=P]?->?)\s*) # Star(s) or symbols
|
|
74
|
+
(\S+\s+) # Nick + Space
|
|
75
|
+
(.*?\n) # Rest of message """,
|
|
76
|
+
bygroups(Comment.Preproc, Keyword, String, Comment)),
|
|
77
|
+
(r"^.*?\n", Text),
|
|
78
|
+
],
|
|
79
|
+
'msg': [
|
|
80
|
+
(r"\S+:(?!//)", Name.Attribute), # Prefix
|
|
81
|
+
(r".*\n", Text, '#pop'),
|
|
82
|
+
],
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
class GettextLexer(RegexLexer):
|
|
87
|
+
"""
|
|
88
|
+
Lexer for Gettext catalog files.
|
|
89
|
+
|
|
90
|
+
.. versionadded:: 0.9
|
|
91
|
+
"""
|
|
92
|
+
name = 'Gettext Catalog'
|
|
93
|
+
aliases = ['pot', 'po']
|
|
94
|
+
filenames = ['*.pot', '*.po']
|
|
95
|
+
mimetypes = ['application/x-gettext', 'text/x-gettext', 'text/gettext']
|
|
96
|
+
|
|
97
|
+
tokens = {
|
|
98
|
+
'root': [
|
|
99
|
+
(r'^#,\s.*?$', Keyword.Type),
|
|
100
|
+
(r'^#:\s.*?$', Keyword.Declaration),
|
|
101
|
+
# (r'^#$', Comment),
|
|
102
|
+
(r'^(#|#\.\s|#\|\s|#~\s|#\s).*$', Comment.Single),
|
|
103
|
+
(r'^(")([A-Za-z-]+:)(.*")$',
|
|
104
|
+
bygroups(String, Name.Property, String)),
|
|
105
|
+
(r'^".*"$', String),
|
|
106
|
+
(r'^(msgid|msgid_plural|msgstr|msgctxt)(\s+)(".*")$',
|
|
107
|
+
bygroups(Name.Variable, Text, String)),
|
|
108
|
+
(r'^(msgstr\[)(\d)(\])(\s+)(".*")$',
|
|
109
|
+
bygroups(Name.Variable, Number.Integer, Name.Variable, Text, String)),
|
|
110
|
+
]
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
class HttpLexer(RegexLexer):
|
|
115
|
+
"""
|
|
116
|
+
Lexer for HTTP sessions.
|
|
117
|
+
|
|
118
|
+
.. versionadded:: 1.5
|
|
119
|
+
"""
|
|
120
|
+
|
|
121
|
+
name = 'HTTP'
|
|
122
|
+
aliases = ['http']
|
|
123
|
+
|
|
124
|
+
flags = re.DOTALL
|
|
125
|
+
|
|
126
|
+
def get_tokens_unprocessed(self, text, stack=('root',)):
|
|
127
|
+
"""Reset the content-type state."""
|
|
128
|
+
self.content_type = None
|
|
129
|
+
return RegexLexer.get_tokens_unprocessed(self, text, stack)
|
|
130
|
+
|
|
131
|
+
def header_callback(self, match):
|
|
132
|
+
if match.group(1).lower() == 'content-type':
|
|
133
|
+
content_type = match.group(5).strip()
|
|
134
|
+
if ';' in content_type:
|
|
135
|
+
content_type = content_type[:content_type.find(';')].strip()
|
|
136
|
+
self.content_type = content_type
|
|
137
|
+
yield match.start(1), Name.Attribute, match.group(1)
|
|
138
|
+
yield match.start(2), Text, match.group(2)
|
|
139
|
+
yield match.start(3), Operator, match.group(3)
|
|
140
|
+
yield match.start(4), Text, match.group(4)
|
|
141
|
+
yield match.start(5), Literal, match.group(5)
|
|
142
|
+
yield match.start(6), Text, match.group(6)
|
|
143
|
+
|
|
144
|
+
def continuous_header_callback(self, match):
|
|
145
|
+
yield match.start(1), Text, match.group(1)
|
|
146
|
+
yield match.start(2), Literal, match.group(2)
|
|
147
|
+
yield match.start(3), Text, match.group(3)
|
|
148
|
+
|
|
149
|
+
def content_callback(self, match):
|
|
150
|
+
content_type = getattr(self, 'content_type', None)
|
|
151
|
+
content = match.group()
|
|
152
|
+
offset = match.start()
|
|
153
|
+
if content_type:
|
|
154
|
+
from pygments.lexers import get_lexer_for_mimetype
|
|
155
|
+
possible_lexer_mimetypes = [content_type]
|
|
156
|
+
if '+' in content_type:
|
|
157
|
+
# application/calendar+xml can be treated as application/xml
|
|
158
|
+
# if there's not a better match.
|
|
159
|
+
general_type = re.sub(r'^(.*)/.*\+(.*)$', r'\1/\2',
|
|
160
|
+
content_type)
|
|
161
|
+
possible_lexer_mimetypes.append(general_type)
|
|
162
|
+
|
|
163
|
+
for i in possible_lexer_mimetypes:
|
|
164
|
+
try:
|
|
165
|
+
lexer = get_lexer_for_mimetype(i)
|
|
166
|
+
except ClassNotFound:
|
|
167
|
+
pass
|
|
168
|
+
else:
|
|
169
|
+
for idx, token, value in lexer.get_tokens_unprocessed(content):
|
|
170
|
+
yield offset + idx, token, value
|
|
171
|
+
return
|
|
172
|
+
yield offset, Text, content
|
|
173
|
+
|
|
174
|
+
tokens = {
|
|
175
|
+
'root': [
|
|
176
|
+
(r'(GET|POST|PUT|DELETE|HEAD|OPTIONS|TRACE|PATCH)( +)([^ ]+)( +)'
|
|
177
|
+
r'(HTTP)(/)(1\.[01]|2(?:\.0)?|3)(\r?\n|\Z)',
|
|
178
|
+
bygroups(Name.Function, Text, Name.Namespace, Text,
|
|
179
|
+
Keyword.Reserved, Operator, Number, Text),
|
|
180
|
+
'headers'),
|
|
181
|
+
(r'(HTTP)(/)(1\.[01]|2(?:\.0)?|3)( +)(\d{3})(?:( +)([^\r\n]*))?(\r?\n|\Z)',
|
|
182
|
+
bygroups(Keyword.Reserved, Operator, Number, Text, Number, Text,
|
|
183
|
+
Name.Exception, Text),
|
|
184
|
+
'headers'),
|
|
185
|
+
],
|
|
186
|
+
'headers': [
|
|
187
|
+
(r'([^\s:]+)( *)(:)( *)([^\r\n]+)(\r?\n|\Z)', header_callback),
|
|
188
|
+
(r'([\t ]+)([^\r\n]+)(\r?\n|\Z)', continuous_header_callback),
|
|
189
|
+
(r'\r?\n', Text, 'content')
|
|
190
|
+
],
|
|
191
|
+
'content': [
|
|
192
|
+
(r'.+', content_callback)
|
|
193
|
+
]
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
def analyse_text(text):
|
|
197
|
+
return text.startswith(('GET /', 'POST /', 'PUT /', 'DELETE /', 'HEAD /',
|
|
198
|
+
'OPTIONS /', 'TRACE /', 'PATCH /'))
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
class TodotxtLexer(RegexLexer):
|
|
202
|
+
"""
|
|
203
|
+
Lexer for `Todo.txt <http://todotxt.com/>`_ todo list format.
|
|
204
|
+
|
|
205
|
+
.. versionadded:: 2.0
|
|
206
|
+
"""
|
|
207
|
+
|
|
208
|
+
name = 'Todotxt'
|
|
209
|
+
aliases = ['todotxt']
|
|
210
|
+
# *.todotxt is not a standard extension for Todo.txt files; including it
|
|
211
|
+
# makes testing easier, and also makes autodetecting file type easier.
|
|
212
|
+
filenames = ['todo.txt', '*.todotxt']
|
|
213
|
+
mimetypes = ['text/x-todo']
|
|
214
|
+
|
|
215
|
+
# Aliases mapping standard token types of Todo.txt format concepts
|
|
216
|
+
CompleteTaskText = Operator # Chosen to de-emphasize complete tasks
|
|
217
|
+
IncompleteTaskText = Text # Incomplete tasks should look like plain text
|
|
218
|
+
|
|
219
|
+
# Priority should have most emphasis to indicate importance of tasks
|
|
220
|
+
Priority = Generic.Heading
|
|
221
|
+
# Dates should have next most emphasis because time is important
|
|
222
|
+
Date = Generic.Subheading
|
|
223
|
+
|
|
224
|
+
# Project and context should have equal weight, and be in different colors
|
|
225
|
+
Project = Generic.Error
|
|
226
|
+
Context = String
|
|
227
|
+
|
|
228
|
+
# If tag functionality is added, it should have the same weight as Project
|
|
229
|
+
# and Context, and a different color. Generic.Traceback would work well.
|
|
230
|
+
|
|
231
|
+
# Regex patterns for building up rules; dates, priorities, projects, and
|
|
232
|
+
# contexts are all atomic
|
|
233
|
+
# TODO: Make date regex more ISO 8601 compliant
|
|
234
|
+
date_regex = r'\d{4,}-\d{2}-\d{2}'
|
|
235
|
+
priority_regex = r'\([A-Z]\)'
|
|
236
|
+
project_regex = r'\+\S+'
|
|
237
|
+
context_regex = r'@\S+'
|
|
238
|
+
|
|
239
|
+
# Compound regex expressions
|
|
240
|
+
complete_one_date_regex = r'(x )(' + date_regex + r')'
|
|
241
|
+
complete_two_date_regex = (complete_one_date_regex + r'( )(' +
|
|
242
|
+
date_regex + r')')
|
|
243
|
+
priority_date_regex = r'(' + priority_regex + r')( )(' + date_regex + r')'
|
|
244
|
+
|
|
245
|
+
tokens = {
|
|
246
|
+
# Should parse starting at beginning of line; each line is a task
|
|
247
|
+
'root': [
|
|
248
|
+
# Complete task entry points: two total:
|
|
249
|
+
# 1. Complete task with two dates
|
|
250
|
+
(complete_two_date_regex, bygroups(CompleteTaskText, Date,
|
|
251
|
+
CompleteTaskText, Date),
|
|
252
|
+
'complete'),
|
|
253
|
+
# 2. Complete task with one date
|
|
254
|
+
(complete_one_date_regex, bygroups(CompleteTaskText, Date),
|
|
255
|
+
'complete'),
|
|
256
|
+
|
|
257
|
+
# Incomplete task entry points: six total:
|
|
258
|
+
# 1. Priority plus date
|
|
259
|
+
(priority_date_regex, bygroups(Priority, IncompleteTaskText, Date),
|
|
260
|
+
'incomplete'),
|
|
261
|
+
# 2. Priority only
|
|
262
|
+
(priority_regex, Priority, 'incomplete'),
|
|
263
|
+
# 3. Leading date
|
|
264
|
+
(date_regex, Date, 'incomplete'),
|
|
265
|
+
# 4. Leading context
|
|
266
|
+
(context_regex, Context, 'incomplete'),
|
|
267
|
+
# 5. Leading project
|
|
268
|
+
(project_regex, Project, 'incomplete'),
|
|
269
|
+
# 6. Non-whitespace catch-all
|
|
270
|
+
(r'\S+', IncompleteTaskText, 'incomplete'),
|
|
271
|
+
],
|
|
272
|
+
|
|
273
|
+
# Parse a complete task
|
|
274
|
+
'complete': [
|
|
275
|
+
# Newline indicates end of task, should return to root
|
|
276
|
+
(r'\s*\n', CompleteTaskText, '#pop'),
|
|
277
|
+
# Tokenize contexts and projects
|
|
278
|
+
(context_regex, Context),
|
|
279
|
+
(project_regex, Project),
|
|
280
|
+
# Tokenize non-whitespace text
|
|
281
|
+
(r'\S+', CompleteTaskText),
|
|
282
|
+
# Tokenize whitespace not containing a newline
|
|
283
|
+
(r'\s+', CompleteTaskText),
|
|
284
|
+
],
|
|
285
|
+
|
|
286
|
+
# Parse an incomplete task
|
|
287
|
+
'incomplete': [
|
|
288
|
+
# Newline indicates end of task, should return to root
|
|
289
|
+
(r'\s*\n', IncompleteTaskText, '#pop'),
|
|
290
|
+
# Tokenize contexts and projects
|
|
291
|
+
(context_regex, Context),
|
|
292
|
+
(project_regex, Project),
|
|
293
|
+
# Tokenize non-whitespace text
|
|
294
|
+
(r'\S+', IncompleteTaskText),
|
|
295
|
+
# Tokenize whitespace not containing a newline
|
|
296
|
+
(r'\s+', IncompleteTaskText),
|
|
297
|
+
],
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
class NotmuchLexer(RegexLexer):
|
|
302
|
+
"""
|
|
303
|
+
For `Notmuch <https://notmuchmail.org/>`_ email text format.
|
|
304
|
+
|
|
305
|
+
.. versionadded:: 2.5
|
|
306
|
+
|
|
307
|
+
Additional options accepted:
|
|
308
|
+
|
|
309
|
+
`body_lexer`
|
|
310
|
+
If given, highlight the contents of the message body with the specified
|
|
311
|
+
lexer, else guess it according to the body content (default: ``None``).
|
|
312
|
+
"""
|
|
313
|
+
|
|
314
|
+
name = 'Notmuch'
|
|
315
|
+
aliases = ['notmuch']
|
|
316
|
+
|
|
317
|
+
def _highlight_code(self, match):
|
|
318
|
+
code = match.group(1)
|
|
319
|
+
|
|
320
|
+
try:
|
|
321
|
+
if self.body_lexer:
|
|
322
|
+
lexer = get_lexer_by_name(self.body_lexer)
|
|
323
|
+
else:
|
|
324
|
+
lexer = guess_lexer(code.strip())
|
|
325
|
+
except ClassNotFound:
|
|
326
|
+
lexer = get_lexer_by_name('text')
|
|
327
|
+
|
|
328
|
+
yield from lexer.get_tokens_unprocessed(code)
|
|
329
|
+
|
|
330
|
+
tokens = {
|
|
331
|
+
'root': [
|
|
332
|
+
(r'\fmessage\{\s*', Keyword, ('message', 'message-attr')),
|
|
333
|
+
],
|
|
334
|
+
'message-attr': [
|
|
335
|
+
(r'(\s*id:\s*)(\S+)', bygroups(Name.Attribute, String)),
|
|
336
|
+
(r'(\s*(?:depth|match|excluded):\s*)(\d+)',
|
|
337
|
+
bygroups(Name.Attribute, Number.Integer)),
|
|
338
|
+
(r'(\s*filename:\s*)(.+\n)',
|
|
339
|
+
bygroups(Name.Attribute, String)),
|
|
340
|
+
default('#pop'),
|
|
341
|
+
],
|
|
342
|
+
'message': [
|
|
343
|
+
(r'\fmessage\}\n', Keyword, '#pop'),
|
|
344
|
+
(r'\fheader\{\n', Keyword, 'header'),
|
|
345
|
+
(r'\fbody\{\n', Keyword, 'body'),
|
|
346
|
+
],
|
|
347
|
+
'header': [
|
|
348
|
+
(r'\fheader\}\n', Keyword, '#pop'),
|
|
349
|
+
(r'((?:Subject|From|To|Cc|Date):\s*)(.*\n)',
|
|
350
|
+
bygroups(Name.Attribute, String)),
|
|
351
|
+
(r'(.*)(\s*\(.*\))(\s*\(.*\)\n)',
|
|
352
|
+
bygroups(Generic.Strong, Literal, Name.Tag)),
|
|
353
|
+
],
|
|
354
|
+
'body': [
|
|
355
|
+
(r'\fpart\{\n', Keyword, 'part'),
|
|
356
|
+
(r'\f(part|attachment)\{\s*', Keyword, ('part', 'part-attr')),
|
|
357
|
+
(r'\fbody\}\n', Keyword, '#pop'),
|
|
358
|
+
],
|
|
359
|
+
'part-attr': [
|
|
360
|
+
(r'(ID:\s*)(\d+)', bygroups(Name.Attribute, Number.Integer)),
|
|
361
|
+
(r'(,\s*)((?:Filename|Content-id):\s*)([^,]+)',
|
|
362
|
+
bygroups(Punctuation, Name.Attribute, String)),
|
|
363
|
+
(r'(,\s*)(Content-type:\s*)(.+\n)',
|
|
364
|
+
bygroups(Punctuation, Name.Attribute, String)),
|
|
365
|
+
default('#pop'),
|
|
366
|
+
],
|
|
367
|
+
'part': [
|
|
368
|
+
(r'\f(?:part|attachment)\}\n', Keyword, '#pop'),
|
|
369
|
+
(r'\f(?:part|attachment)\{\s*', Keyword, ('#push', 'part-attr')),
|
|
370
|
+
(r'^Non-text part: .*\n', Comment),
|
|
371
|
+
(r'(?s)(.*?(?=\f(?:part|attachment)\}\n))', _highlight_code),
|
|
372
|
+
],
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
def analyse_text(text):
|
|
376
|
+
return 1.0 if text.startswith('\fmessage{') else 0.0
|
|
377
|
+
|
|
378
|
+
def __init__(self, **options):
|
|
379
|
+
self.body_lexer = options.get('body_lexer', None)
|
|
380
|
+
RegexLexer.__init__(self, **options)
|
|
381
|
+
|
|
382
|
+
|
|
383
|
+
class KernelLogLexer(RegexLexer):
|
|
384
|
+
"""
|
|
385
|
+
For Linux Kernel log ("dmesg") output.
|
|
386
|
+
|
|
387
|
+
.. versionadded:: 2.6
|
|
388
|
+
"""
|
|
389
|
+
name = 'Kernel log'
|
|
390
|
+
aliases = ['kmsg', 'dmesg']
|
|
391
|
+
filenames = ['*.kmsg', '*.dmesg']
|
|
392
|
+
|
|
393
|
+
tokens = {
|
|
394
|
+
'root': [
|
|
395
|
+
(r'^[^:]+:debug : (?=\[)', Text, 'debug'),
|
|
396
|
+
(r'^[^:]+:info : (?=\[)', Text, 'info'),
|
|
397
|
+
(r'^[^:]+:warn : (?=\[)', Text, 'warn'),
|
|
398
|
+
(r'^[^:]+:notice: (?=\[)', Text, 'warn'),
|
|
399
|
+
(r'^[^:]+:err : (?=\[)', Text, 'error'),
|
|
400
|
+
(r'^[^:]+:crit : (?=\[)', Text, 'error'),
|
|
401
|
+
(r'^(?=\[)', Text, 'unknown'),
|
|
402
|
+
],
|
|
403
|
+
'unknown': [
|
|
404
|
+
(r'^(?=.+(warning|notice|audit|deprecated))', Text, 'warn'),
|
|
405
|
+
(r'^(?=.+(error|critical|fail|Bug))', Text, 'error'),
|
|
406
|
+
default('info'),
|
|
407
|
+
],
|
|
408
|
+
'base': [
|
|
409
|
+
(r'\[[0-9. ]+\] ', Number),
|
|
410
|
+
(r'(?<=\] ).+?:', Keyword),
|
|
411
|
+
(r'\n', Text, '#pop'),
|
|
412
|
+
],
|
|
413
|
+
'debug': [
|
|
414
|
+
include('base'),
|
|
415
|
+
(r'.+\n', Comment, '#pop')
|
|
416
|
+
],
|
|
417
|
+
'info': [
|
|
418
|
+
include('base'),
|
|
419
|
+
(r'.+\n', Text, '#pop')
|
|
420
|
+
],
|
|
421
|
+
'warn': [
|
|
422
|
+
include('base'),
|
|
423
|
+
(r'.+\n', Generic.Strong, '#pop')
|
|
424
|
+
],
|
|
425
|
+
'error': [
|
|
426
|
+
include('base'),
|
|
427
|
+
(r'.+\n', Generic.Error, '#pop')
|
|
428
|
+
]
|
|
429
|
+
}
|