pygments.rb 0.6.3 → 1.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 +7 -0
- data/CHANGELOG.md +11 -0
- data/README.md +6 -6
- data/Rakefile +2 -1
- data/cache-lexers.rb +1 -1
- data/circle.yml +7 -0
- data/lib/pygments/lexer.rb +3 -3
- data/lib/pygments/popen.rb +67 -30
- data/lib/pygments/version.rb +1 -1
- data/pygments.rb.gemspec +2 -1
- data/test/test_pygments.rb +16 -16
- data/vendor/pygments-main/AUTHORS +54 -8
- data/vendor/pygments-main/CHANGES +247 -25
- data/vendor/pygments-main/LICENSE +1 -1
- data/vendor/pygments-main/Makefile +15 -6
- data/vendor/pygments-main/README.rst +39 -0
- data/vendor/pygments-main/REVISION +1 -1
- data/vendor/pygments-main/TODO +0 -3
- data/vendor/pygments-main/doc/_themes/pygments14/layout.html +1 -1
- data/vendor/pygments-main/doc/_themes/pygments14/static/pygments14.css_t +1 -1
- data/vendor/pygments-main/doc/conf.py +3 -11
- data/vendor/pygments-main/doc/docs/api.rst +15 -0
- data/vendor/pygments-main/doc/docs/cmdline.rst +6 -2
- data/vendor/pygments-main/doc/docs/filterdevelopment.rst +4 -3
- data/vendor/pygments-main/doc/docs/integrate.rst +11 -15
- data/vendor/pygments-main/doc/docs/java.rst +7 -7
- data/vendor/pygments-main/doc/docs/lexerdevelopment.rst +258 -171
- data/vendor/pygments-main/doc/docs/lexers.rst +2 -2
- data/vendor/pygments-main/doc/docs/styles.rst +58 -0
- data/vendor/pygments-main/doc/docs/tokens.rst +22 -2
- data/vendor/pygments-main/doc/docs/unicode.rst +15 -7
- data/vendor/pygments-main/doc/faq.rst +17 -21
- data/vendor/pygments-main/doc/index.rst +12 -11
- data/vendor/pygments-main/doc/languages.rst +10 -7
- data/vendor/pygments-main/external/autopygmentize +9 -6
- data/vendor/pygments-main/external/lasso-builtins-generator-9.lasso +70 -52
- data/vendor/pygments-main/external/markdown-processor.py +1 -1
- data/vendor/pygments-main/external/moin-parser.py +1 -1
- data/vendor/pygments-main/external/rst-directive.py +1 -1
- data/vendor/pygments-main/pygmentize +2 -1
- data/vendor/pygments-main/pygments/__init__.py +14 -15
- data/vendor/pygments-main/pygments/cmdline.py +188 -113
- data/vendor/pygments-main/pygments/console.py +13 -13
- data/vendor/pygments-main/pygments/filter.py +7 -7
- data/vendor/pygments-main/pygments/filters/__init__.py +24 -32
- data/vendor/pygments-main/pygments/formatter.py +5 -5
- data/vendor/pygments-main/pygments/formatters/__init__.py +92 -44
- data/vendor/pygments-main/pygments/formatters/_mapping.py +51 -69
- data/vendor/pygments-main/pygments/formatters/bbcode.py +1 -1
- data/vendor/pygments-main/pygments/formatters/html.py +63 -51
- data/vendor/pygments-main/pygments/formatters/img.py +25 -22
- data/vendor/pygments-main/pygments/formatters/irc.py +182 -0
- data/vendor/pygments-main/pygments/formatters/latex.py +34 -22
- data/vendor/pygments-main/pygments/formatters/other.py +5 -7
- data/vendor/pygments-main/pygments/formatters/rtf.py +28 -31
- data/vendor/pygments-main/pygments/formatters/svg.py +1 -2
- data/vendor/pygments-main/pygments/formatters/terminal.py +29 -45
- data/vendor/pygments-main/pygments/formatters/terminal256.py +118 -31
- data/vendor/pygments-main/pygments/lexer.py +120 -34
- data/vendor/pygments-main/pygments/lexers/__init__.py +85 -53
- data/vendor/pygments-main/pygments/lexers/{_asybuiltins.py → _asy_builtins.py} +7 -7
- data/vendor/pygments-main/pygments/lexers/{_clbuiltins.py → _cl_builtins.py} +17 -17
- data/vendor/pygments-main/pygments/lexers/_cocoa_builtins.py +72 -0
- data/vendor/pygments-main/pygments/lexers/_csound_builtins.py +1346 -0
- data/vendor/pygments-main/pygments/lexers/{_lassobuiltins.py → _lasso_builtins.py} +4699 -4561
- data/vendor/pygments-main/pygments/lexers/{_luabuiltins.py → _lua_builtins.py} +91 -51
- data/vendor/pygments-main/pygments/lexers/_mapping.py +342 -242
- data/vendor/pygments-main/pygments/lexers/_mql_builtins.py +1172 -0
- data/vendor/pygments-main/pygments/lexers/_openedge_builtins.py +2547 -0
- data/vendor/pygments-main/pygments/lexers/{_phpbuiltins.py → _php_builtins.py} +350 -353
- data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +600 -212
- data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +3084 -30
- data/vendor/pygments-main/pygments/lexers/_sourcemod_builtins.py +1163 -0
- data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +91 -13
- data/vendor/pygments-main/pygments/lexers/_stata_builtins.py +419 -0
- data/vendor/pygments-main/pygments/lexers/_tsql_builtins.py +1004 -0
- data/vendor/pygments-main/pygments/lexers/_vim_builtins.py +1939 -0
- data/vendor/pygments-main/pygments/lexers/actionscript.py +240 -0
- data/vendor/pygments-main/pygments/lexers/agile.py +14 -2542
- data/vendor/pygments-main/pygments/lexers/algebra.py +221 -0
- data/vendor/pygments-main/pygments/lexers/ambient.py +76 -0
- data/vendor/pygments-main/pygments/lexers/ampl.py +87 -0
- data/vendor/pygments-main/pygments/lexers/apl.py +101 -0
- data/vendor/pygments-main/pygments/lexers/archetype.py +318 -0
- data/vendor/pygments-main/pygments/lexers/asm.py +276 -81
- data/vendor/pygments-main/pygments/lexers/automation.py +374 -0
- data/vendor/pygments-main/pygments/lexers/basic.py +500 -0
- data/vendor/pygments-main/pygments/lexers/bibtex.py +156 -0
- data/vendor/pygments-main/pygments/lexers/business.py +594 -0
- data/vendor/pygments-main/pygments/lexers/c_cpp.py +252 -0
- data/vendor/pygments-main/pygments/lexers/c_like.py +541 -0
- data/vendor/pygments-main/pygments/lexers/capnproto.py +79 -0
- data/vendor/pygments-main/pygments/lexers/chapel.py +101 -0
- data/vendor/pygments-main/pygments/lexers/clean.py +288 -0
- data/vendor/pygments-main/pygments/lexers/compiled.py +24 -5182
- data/vendor/pygments-main/pygments/lexers/configs.py +833 -0
- data/vendor/pygments-main/pygments/lexers/console.py +114 -0
- data/vendor/pygments-main/pygments/lexers/crystal.py +384 -0
- data/vendor/pygments-main/pygments/lexers/csound.py +366 -0
- data/vendor/pygments-main/pygments/lexers/css.py +689 -0
- data/vendor/pygments-main/pygments/lexers/d.py +251 -0
- data/vendor/pygments-main/pygments/lexers/dalvik.py +6 -6
- data/vendor/pygments-main/pygments/lexers/data.py +555 -0
- data/vendor/pygments-main/pygments/lexers/diff.py +165 -0
- data/vendor/pygments-main/pygments/lexers/dotnet.py +96 -88
- data/vendor/pygments-main/pygments/lexers/dsls.py +878 -0
- data/vendor/pygments-main/pygments/lexers/dylan.py +289 -0
- data/vendor/pygments-main/pygments/lexers/ecl.py +125 -0
- data/vendor/pygments-main/pygments/lexers/eiffel.py +65 -0
- data/vendor/pygments-main/pygments/lexers/elm.py +121 -0
- data/vendor/pygments-main/pygments/lexers/erlang.py +533 -0
- data/vendor/pygments-main/pygments/lexers/esoteric.py +275 -0
- data/vendor/pygments-main/pygments/lexers/ezhil.py +68 -0
- data/vendor/pygments-main/pygments/lexers/factor.py +344 -0
- data/vendor/pygments-main/pygments/lexers/fantom.py +250 -0
- data/vendor/pygments-main/pygments/lexers/felix.py +273 -0
- data/vendor/pygments-main/pygments/lexers/forth.py +177 -0
- data/vendor/pygments-main/pygments/lexers/fortran.py +205 -0
- data/vendor/pygments-main/pygments/lexers/foxpro.py +1 -1
- data/vendor/pygments-main/pygments/lexers/functional.py +11 -3661
- data/vendor/pygments-main/pygments/lexers/go.py +101 -0
- data/vendor/pygments-main/pygments/lexers/grammar_notation.py +213 -0
- data/vendor/pygments-main/pygments/lexers/graph.py +7 -8
- data/vendor/pygments-main/pygments/lexers/graphics.py +553 -0
- data/vendor/pygments-main/pygments/lexers/haskell.py +840 -0
- data/vendor/pygments-main/pygments/lexers/haxe.py +936 -0
- data/vendor/pygments-main/pygments/lexers/hdl.py +172 -145
- data/vendor/pygments-main/pygments/lexers/hexdump.py +97 -0
- data/vendor/pygments-main/pygments/lexers/html.py +602 -0
- data/vendor/pygments-main/pygments/lexers/idl.py +270 -0
- data/vendor/pygments-main/pygments/lexers/igor.py +288 -0
- data/vendor/pygments-main/pygments/lexers/inferno.py +3 -3
- data/vendor/pygments-main/pygments/lexers/installers.py +322 -0
- data/vendor/pygments-main/pygments/lexers/int_fiction.py +1343 -0
- data/vendor/pygments-main/pygments/lexers/iolang.py +63 -0
- data/vendor/pygments-main/pygments/lexers/j.py +146 -0
- data/vendor/pygments-main/pygments/lexers/javascript.py +1506 -0
- data/vendor/pygments-main/pygments/lexers/julia.py +333 -0
- data/vendor/pygments-main/pygments/lexers/jvm.py +232 -186
- data/vendor/pygments-main/pygments/lexers/lisp.py +2621 -0
- data/vendor/pygments-main/pygments/lexers/make.py +202 -0
- data/vendor/pygments-main/pygments/lexers/markup.py +595 -0
- data/vendor/pygments-main/pygments/lexers/math.py +11 -2276
- data/vendor/pygments-main/pygments/lexers/matlab.py +663 -0
- data/vendor/pygments-main/pygments/lexers/ml.py +769 -0
- data/vendor/pygments-main/pygments/lexers/modeling.py +358 -0
- data/vendor/pygments-main/pygments/lexers/modula2.py +1561 -0
- data/vendor/pygments-main/pygments/lexers/monte.py +203 -0
- data/vendor/pygments-main/pygments/lexers/ncl.py +1053 -0
- data/vendor/pygments-main/pygments/lexers/nimrod.py +159 -0
- data/vendor/pygments-main/pygments/lexers/nit.py +64 -0
- data/vendor/pygments-main/pygments/lexers/nix.py +136 -0
- data/vendor/pygments-main/pygments/lexers/oberon.py +105 -0
- data/vendor/pygments-main/pygments/lexers/objective.py +504 -0
- data/vendor/pygments-main/pygments/lexers/ooc.py +85 -0
- data/vendor/pygments-main/pygments/lexers/other.py +30 -4481
- data/vendor/pygments-main/pygments/lexers/parasail.py +79 -0
- data/vendor/pygments-main/pygments/lexers/parsers.py +171 -114
- data/vendor/pygments-main/pygments/lexers/pascal.py +644 -0
- data/vendor/pygments-main/pygments/lexers/pawn.py +199 -0
- data/vendor/pygments-main/pygments/lexers/perl.py +616 -0
- data/vendor/pygments-main/pygments/lexers/php.py +267 -0
- data/vendor/pygments-main/pygments/lexers/praat.py +294 -0
- data/vendor/pygments-main/pygments/lexers/prolog.py +306 -0
- data/vendor/pygments-main/pygments/lexers/python.py +938 -0
- data/vendor/pygments-main/pygments/lexers/qvt.py +152 -0
- data/vendor/pygments-main/pygments/lexers/r.py +453 -0
- data/vendor/pygments-main/pygments/lexers/rdf.py +195 -24
- data/vendor/pygments-main/pygments/lexers/rebol.py +431 -0
- data/vendor/pygments-main/pygments/lexers/resource.py +85 -0
- data/vendor/pygments-main/pygments/lexers/rnc.py +67 -0
- data/vendor/pygments-main/pygments/lexers/roboconf.py +82 -0
- data/vendor/pygments-main/pygments/lexers/{_robotframeworklexer.py → robotframework.py} +20 -18
- data/vendor/pygments-main/pygments/lexers/ruby.py +519 -0
- data/vendor/pygments-main/pygments/lexers/rust.py +209 -0
- data/vendor/pygments-main/pygments/lexers/sas.py +228 -0
- data/vendor/pygments-main/pygments/lexers/scripting.py +1222 -0
- data/vendor/pygments-main/pygments/lexers/shell.py +478 -115
- data/vendor/pygments-main/pygments/lexers/smalltalk.py +195 -0
- data/vendor/pygments-main/pygments/lexers/smv.py +75 -0
- data/vendor/pygments-main/pygments/lexers/snobol.py +83 -0
- data/vendor/pygments-main/pygments/lexers/special.py +6 -2
- data/vendor/pygments-main/pygments/lexers/sql.py +209 -120
- data/vendor/pygments-main/pygments/lexers/stata.py +106 -0
- data/vendor/pygments-main/pygments/lexers/supercollider.py +90 -0
- data/vendor/pygments-main/pygments/lexers/tcl.py +145 -0
- data/vendor/pygments-main/pygments/lexers/templates.py +282 -90
- data/vendor/pygments-main/pygments/lexers/testing.py +207 -0
- data/vendor/pygments-main/pygments/lexers/text.py +15 -2045
- data/vendor/pygments-main/pygments/lexers/textedit.py +169 -0
- data/vendor/pygments-main/pygments/lexers/textfmts.py +297 -0
- data/vendor/pygments-main/pygments/lexers/theorem.py +458 -0
- data/vendor/pygments-main/pygments/lexers/trafficscript.py +54 -0
- data/vendor/pygments-main/pygments/lexers/typoscript.py +225 -0
- data/vendor/pygments-main/pygments/lexers/urbi.py +133 -0
- data/vendor/pygments-main/pygments/lexers/varnish.py +190 -0
- data/vendor/pygments-main/pygments/lexers/verification.py +111 -0
- data/vendor/pygments-main/pygments/lexers/web.py +13 -4499
- data/vendor/pygments-main/pygments/lexers/webmisc.py +979 -0
- data/vendor/pygments-main/pygments/lexers/whiley.py +117 -0
- data/vendor/pygments-main/pygments/lexers/x10.py +69 -0
- data/vendor/pygments-main/pygments/modeline.py +5 -2
- data/vendor/pygments-main/pygments/plugin.py +1 -1
- data/vendor/pygments-main/pygments/regexopt.py +92 -0
- data/vendor/pygments-main/pygments/scanner.py +3 -2
- data/vendor/pygments-main/pygments/sphinxext.py +11 -6
- data/vendor/pygments-main/pygments/style.py +41 -4
- data/vendor/pygments-main/pygments/styles/__init__.py +5 -1
- data/vendor/pygments-main/pygments/styles/algol.py +63 -0
- data/vendor/pygments-main/pygments/styles/algol_nu.py +63 -0
- data/vendor/pygments-main/pygments/styles/arduino.py +98 -0
- 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/lovelace.py +97 -0
- data/vendor/pygments-main/pygments/styles/manni.py +1 -1
- data/vendor/pygments-main/pygments/styles/monokai.py +1 -1
- 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 +2 -2
- data/vendor/pygments-main/pygments/styles/rrt.py +1 -1
- data/vendor/pygments-main/pygments/styles/sas.py +41 -0
- data/vendor/pygments-main/pygments/styles/stata.py +37 -0
- data/vendor/pygments-main/pygments/styles/tango.py +1 -1
- data/vendor/pygments-main/pygments/styles/trac.py +1 -1
- data/vendor/pygments-main/pygments/styles/vim.py +1 -1
- data/vendor/pygments-main/pygments/styles/vs.py +1 -1
- data/vendor/pygments-main/pygments/styles/xcode.py +1 -1
- data/vendor/pygments-main/pygments/token.py +31 -16
- data/vendor/pygments-main/pygments/unistring.py +141 -65
- data/vendor/pygments-main/pygments/util.py +129 -33
- data/vendor/pygments-main/requirements.txt +5 -0
- data/vendor/pygments-main/scripts/check_sources.py +25 -40
- data/vendor/pygments-main/scripts/debug_lexer.py +246 -0
- data/vendor/pygments-main/scripts/find_error.py +1 -0
- data/vendor/pygments-main/scripts/get_vimkw.py +35 -4
- data/vendor/pygments-main/setup.cfg +3 -0
- data/vendor/pygments-main/setup.py +17 -30
- data/vendor/pygments-main/tox.ini +7 -0
- metadata +159 -387
- data/vendor/pygments-main/ez_setup.py +0 -382
- data/vendor/pygments-main/pygments/lexers/_cocoabuiltins.py +0 -73
- data/vendor/pygments-main/pygments/lexers/_openedgebuiltins.py +0 -562
- data/vendor/pygments-main/pygments/lexers/_sourcemodbuiltins.py +0 -1077
- data/vendor/pygments-main/pygments/lexers/_vimbuiltins.py +0 -13
- data/vendor/pygments-main/pygments/lexers/qbasic.py +0 -157
- data/vendor/pygments-main/scripts/find_codetags.py +0 -213
- data/vendor/pygments-main/scripts/find_error.py +0 -173
- data/vendor/pygments-main/tests/dtds/HTML4-f.dtd +0 -37
- data/vendor/pygments-main/tests/dtds/HTML4-s.dtd +0 -869
- data/vendor/pygments-main/tests/dtds/HTML4.dcl +0 -88
- data/vendor/pygments-main/tests/dtds/HTML4.dtd +0 -1092
- data/vendor/pygments-main/tests/dtds/HTML4.soc +0 -9
- data/vendor/pygments-main/tests/dtds/HTMLlat1.ent +0 -195
- data/vendor/pygments-main/tests/dtds/HTMLspec.ent +0 -77
- data/vendor/pygments-main/tests/dtds/HTMLsym.ent +0 -241
- data/vendor/pygments-main/tests/examplefiles/99_bottles_of_beer.chpl +0 -118
- data/vendor/pygments-main/tests/examplefiles/AcidStateAdvanced.hs +0 -209
- data/vendor/pygments-main/tests/examplefiles/AlternatingGroup.mu +0 -102
- data/vendor/pygments-main/tests/examplefiles/BOM.js +0 -1
- data/vendor/pygments-main/tests/examplefiles/CPDictionary.j +0 -611
- data/vendor/pygments-main/tests/examplefiles/Config.in.cache +0 -1973
- data/vendor/pygments-main/tests/examplefiles/Constants.mo +0 -158
- data/vendor/pygments-main/tests/examplefiles/DancingSudoku.lhs +0 -411
- data/vendor/pygments-main/tests/examplefiles/Deflate.fs +0 -578
- data/vendor/pygments-main/tests/examplefiles/Error.pmod +0 -38
- data/vendor/pygments-main/tests/examplefiles/Errors.scala +0 -18
- data/vendor/pygments-main/tests/examplefiles/FakeFile.pike +0 -360
- data/vendor/pygments-main/tests/examplefiles/Get-CommandDefinitionHtml.ps1 +0 -66
- data/vendor/pygments-main/tests/examplefiles/IPDispatchC.nc +0 -104
- data/vendor/pygments-main/tests/examplefiles/IPDispatchP.nc +0 -671
- data/vendor/pygments-main/tests/examplefiles/Intro.java +0 -1660
- data/vendor/pygments-main/tests/examplefiles/Makefile +0 -1131
- data/vendor/pygments-main/tests/examplefiles/Object.st +0 -4394
- data/vendor/pygments-main/tests/examplefiles/OrderedMap.hx +0 -584
- data/vendor/pygments-main/tests/examplefiles/RoleQ.pm6 +0 -23
- data/vendor/pygments-main/tests/examplefiles/SmallCheck.hs +0 -378
- data/vendor/pygments-main/tests/examplefiles/Sorting.mod +0 -470
- data/vendor/pygments-main/tests/examplefiles/Sudoku.lhs +0 -382
- data/vendor/pygments-main/tests/examplefiles/addressbook.proto +0 -30
- data/vendor/pygments-main/tests/examplefiles/antlr_ANTLRv3.g +0 -608
- data/vendor/pygments-main/tests/examplefiles/antlr_throws +0 -1
- data/vendor/pygments-main/tests/examplefiles/apache2.conf +0 -393
- data/vendor/pygments-main/tests/examplefiles/as3_test.as +0 -143
- data/vendor/pygments-main/tests/examplefiles/as3_test2.as +0 -46
- data/vendor/pygments-main/tests/examplefiles/as3_test3.as +0 -3
- data/vendor/pygments-main/tests/examplefiles/aspx-cs_example +0 -27
- data/vendor/pygments-main/tests/examplefiles/autoit_submit.au3 +0 -25
- data/vendor/pygments-main/tests/examplefiles/badcase.java +0 -2
- data/vendor/pygments-main/tests/examplefiles/batchfile.bat +0 -49
- data/vendor/pygments-main/tests/examplefiles/bigtest.nsi +0 -308
- data/vendor/pygments-main/tests/examplefiles/boot-9.scm +0 -1557
- data/vendor/pygments-main/tests/examplefiles/ca65_example +0 -284
- data/vendor/pygments-main/tests/examplefiles/cbmbas_example +0 -9
- data/vendor/pygments-main/tests/examplefiles/cells.ps +0 -515
- data/vendor/pygments-main/tests/examplefiles/ceval.c +0 -2604
- data/vendor/pygments-main/tests/examplefiles/cheetah_example.html +0 -13
- data/vendor/pygments-main/tests/examplefiles/classes.dylan +0 -125
- data/vendor/pygments-main/tests/examplefiles/clojure-weird-keywords.clj +0 -5
- data/vendor/pygments-main/tests/examplefiles/condensed_ruby.rb +0 -10
- data/vendor/pygments-main/tests/examplefiles/coq_RelationClasses +0 -447
- data/vendor/pygments-main/tests/examplefiles/core.cljs +0 -52
- data/vendor/pygments-main/tests/examplefiles/database.pytb +0 -20
- data/vendor/pygments-main/tests/examplefiles/de.MoinMoin.po +0 -2461
- data/vendor/pygments-main/tests/examplefiles/demo.ahk +0 -181
- data/vendor/pygments-main/tests/examplefiles/demo.cfm +0 -50
- data/vendor/pygments-main/tests/examplefiles/demo.hbs +0 -12
- data/vendor/pygments-main/tests/examplefiles/django_sample.html+django +0 -68
- data/vendor/pygments-main/tests/examplefiles/dwarf.cw +0 -17
- data/vendor/pygments-main/tests/examplefiles/ember.handlebars +0 -33
- data/vendor/pygments-main/tests/examplefiles/erl_session +0 -10
- data/vendor/pygments-main/tests/examplefiles/escape_semicolon.clj +0 -1
- data/vendor/pygments-main/tests/examplefiles/evil_regex.js +0 -48
- data/vendor/pygments-main/tests/examplefiles/example.Rd +0 -78
- data/vendor/pygments-main/tests/examplefiles/example.als +0 -217
- data/vendor/pygments-main/tests/examplefiles/example.bug +0 -54
- data/vendor/pygments-main/tests/examplefiles/example.c +0 -2080
- data/vendor/pygments-main/tests/examplefiles/example.ceylon +0 -52
- data/vendor/pygments-main/tests/examplefiles/example.chai +0 -6
- data/vendor/pygments-main/tests/examplefiles/example.clay +0 -33
- data/vendor/pygments-main/tests/examplefiles/example.cls +0 -15
- data/vendor/pygments-main/tests/examplefiles/example.cob +0 -3556
- data/vendor/pygments-main/tests/examplefiles/example.coffee +0 -27
- data/vendor/pygments-main/tests/examplefiles/example.cpp +0 -2363
- data/vendor/pygments-main/tests/examplefiles/example.e +0 -124
- data/vendor/pygments-main/tests/examplefiles/example.f90 +0 -8
- data/vendor/pygments-main/tests/examplefiles/example.feature +0 -16
- data/vendor/pygments-main/tests/examplefiles/example.gd +0 -23
- data/vendor/pygments-main/tests/examplefiles/example.gi +0 -64
- data/vendor/pygments-main/tests/examplefiles/example.groovy +0 -2
- data/vendor/pygments-main/tests/examplefiles/example.gs +0 -106
- data/vendor/pygments-main/tests/examplefiles/example.gst +0 -7
- data/vendor/pygments-main/tests/examplefiles/example.hs +0 -27
- data/vendor/pygments-main/tests/examplefiles/example.hx +0 -185
- data/vendor/pygments-main/tests/examplefiles/example.i6t +0 -32
- data/vendor/pygments-main/tests/examplefiles/example.i7x +0 -45
- data/vendor/pygments-main/tests/examplefiles/example.inf +0 -374
- data/vendor/pygments-main/tests/examplefiles/example.j +0 -564
- data/vendor/pygments-main/tests/examplefiles/example.jag +0 -48
- data/vendor/pygments-main/tests/examplefiles/example.java +0 -16
- data/vendor/pygments-main/tests/examplefiles/example.kal +0 -75
- data/vendor/pygments-main/tests/examplefiles/example.kt +0 -47
- data/vendor/pygments-main/tests/examplefiles/example.lagda +0 -19
- data/vendor/pygments-main/tests/examplefiles/example.liquid +0 -42
- data/vendor/pygments-main/tests/examplefiles/example.lua +0 -250
- data/vendor/pygments-main/tests/examplefiles/example.ma +0 -8
- data/vendor/pygments-main/tests/examplefiles/example.monkey +0 -152
- data/vendor/pygments-main/tests/examplefiles/example.moo +0 -26
- data/vendor/pygments-main/tests/examplefiles/example.moon +0 -629
- data/vendor/pygments-main/tests/examplefiles/example.mq4 +0 -187
- data/vendor/pygments-main/tests/examplefiles/example.mqh +0 -123
- data/vendor/pygments-main/tests/examplefiles/example.msc +0 -43
- data/vendor/pygments-main/tests/examplefiles/example.ni +0 -57
- data/vendor/pygments-main/tests/examplefiles/example.nim +0 -1010
- data/vendor/pygments-main/tests/examplefiles/example.nix +0 -80
- data/vendor/pygments-main/tests/examplefiles/example.ns2 +0 -69
- data/vendor/pygments-main/tests/examplefiles/example.pas +0 -2708
- data/vendor/pygments-main/tests/examplefiles/example.pp +0 -8
- data/vendor/pygments-main/tests/examplefiles/example.prg +0 -161
- data/vendor/pygments-main/tests/examplefiles/example.rb +0 -1852
- data/vendor/pygments-main/tests/examplefiles/example.red +0 -257
- data/vendor/pygments-main/tests/examplefiles/example.reds +0 -150
- data/vendor/pygments-main/tests/examplefiles/example.reg +0 -19
- data/vendor/pygments-main/tests/examplefiles/example.rexx +0 -50
- data/vendor/pygments-main/tests/examplefiles/example.rhtml +0 -561
- data/vendor/pygments-main/tests/examplefiles/example.rkt +0 -743
- data/vendor/pygments-main/tests/examplefiles/example.rpf +0 -4
- data/vendor/pygments-main/tests/examplefiles/example.sh +0 -22
- data/vendor/pygments-main/tests/examplefiles/example.sh-session +0 -19
- data/vendor/pygments-main/tests/examplefiles/example.shell-session +0 -45
- data/vendor/pygments-main/tests/examplefiles/example.slim +0 -31
- data/vendor/pygments-main/tests/examplefiles/example.sls +0 -51
- data/vendor/pygments-main/tests/examplefiles/example.sml +0 -156
- data/vendor/pygments-main/tests/examplefiles/example.snobol +0 -15
- data/vendor/pygments-main/tests/examplefiles/example.stan +0 -110
- data/vendor/pygments-main/tests/examplefiles/example.tea +0 -34
- data/vendor/pygments-main/tests/examplefiles/example.todotxt +0 -9
- data/vendor/pygments-main/tests/examplefiles/example.ts +0 -28
- data/vendor/pygments-main/tests/examplefiles/example.u +0 -548
- data/vendor/pygments-main/tests/examplefiles/example.weechatlog +0 -9
- data/vendor/pygments-main/tests/examplefiles/example.xhtml +0 -376
- data/vendor/pygments-main/tests/examplefiles/example.xtend +0 -34
- data/vendor/pygments-main/tests/examplefiles/example.yaml +0 -302
- data/vendor/pygments-main/tests/examplefiles/example2.aspx +0 -29
- data/vendor/pygments-main/tests/examplefiles/example2.msc +0 -79
- data/vendor/pygments-main/tests/examplefiles/exampleScript.cfc +0 -241
- data/vendor/pygments-main/tests/examplefiles/exampleTag.cfc +0 -18
- data/vendor/pygments-main/tests/examplefiles/example_elixir.ex +0 -205
- data/vendor/pygments-main/tests/examplefiles/example_file.fy +0 -128
- data/vendor/pygments-main/tests/examplefiles/firefox.mak +0 -586
- data/vendor/pygments-main/tests/examplefiles/flipflop.sv +0 -19
- data/vendor/pygments-main/tests/examplefiles/foo.sce +0 -6
- data/vendor/pygments-main/tests/examplefiles/format.ml +0 -1213
- data/vendor/pygments-main/tests/examplefiles/fucked_up.rb +0 -77
- data/vendor/pygments-main/tests/examplefiles/function.mu +0 -1
- data/vendor/pygments-main/tests/examplefiles/functional.rst +0 -1472
- data/vendor/pygments-main/tests/examplefiles/garcia-wachs.kk +0 -133
- data/vendor/pygments-main/tests/examplefiles/genclass.clj +0 -510
- data/vendor/pygments-main/tests/examplefiles/genshi_example.xml+genshi +0 -193
- data/vendor/pygments-main/tests/examplefiles/genshitext_example.genshitext +0 -33
- data/vendor/pygments-main/tests/examplefiles/glsl.frag +0 -7
- data/vendor/pygments-main/tests/examplefiles/glsl.vert +0 -13
- data/vendor/pygments-main/tests/examplefiles/grammar-test.p6 +0 -22
- data/vendor/pygments-main/tests/examplefiles/hash_syntax.rb +0 -5
- data/vendor/pygments-main/tests/examplefiles/hello.at +0 -6
- data/vendor/pygments-main/tests/examplefiles/hello.golo +0 -5
- data/vendor/pygments-main/tests/examplefiles/hello.lsl +0 -12
- data/vendor/pygments-main/tests/examplefiles/hello.smali +0 -40
- data/vendor/pygments-main/tests/examplefiles/hello.sp +0 -9
- data/vendor/pygments-main/tests/examplefiles/html+php_faulty.php +0 -1
- data/vendor/pygments-main/tests/examplefiles/http_request_example +0 -15
- data/vendor/pygments-main/tests/examplefiles/http_response_example +0 -29
- data/vendor/pygments-main/tests/examplefiles/hybris_File.hy +0 -174
- data/vendor/pygments-main/tests/examplefiles/idl_sample.pro +0 -73
- data/vendor/pygments-main/tests/examplefiles/iex_example +0 -23
- data/vendor/pygments-main/tests/examplefiles/inet_pton6.dg +0 -71
- data/vendor/pygments-main/tests/examplefiles/intro.ik +0 -24
- data/vendor/pygments-main/tests/examplefiles/ints.php +0 -10
- data/vendor/pygments-main/tests/examplefiles/intsyn.fun +0 -675
- data/vendor/pygments-main/tests/examplefiles/intsyn.sig +0 -286
- data/vendor/pygments-main/tests/examplefiles/irb_heredoc +0 -8
- data/vendor/pygments-main/tests/examplefiles/irc.lsp +0 -214
- data/vendor/pygments-main/tests/examplefiles/java.properties +0 -16
- data/vendor/pygments-main/tests/examplefiles/jbst_example1.jbst +0 -28
- data/vendor/pygments-main/tests/examplefiles/jbst_example2.jbst +0 -45
- data/vendor/pygments-main/tests/examplefiles/jinjadesignerdoc.rst +0 -713
- data/vendor/pygments-main/tests/examplefiles/json.lasso +0 -301
- data/vendor/pygments-main/tests/examplefiles/json.lasso9 +0 -213
- data/vendor/pygments-main/tests/examplefiles/language.hy +0 -165
- data/vendor/pygments-main/tests/examplefiles/lighttpd_config.conf +0 -13
- data/vendor/pygments-main/tests/examplefiles/limbo.b +0 -456
- data/vendor/pygments-main/tests/examplefiles/linecontinuation.py +0 -47
- data/vendor/pygments-main/tests/examplefiles/livescript-demo.ls +0 -43
- data/vendor/pygments-main/tests/examplefiles/logos_example.xm +0 -28
- data/vendor/pygments-main/tests/examplefiles/ltmain.sh +0 -2849
- data/vendor/pygments-main/tests/examplefiles/main.cmake +0 -44
- data/vendor/pygments-main/tests/examplefiles/markdown.lsp +0 -679
- data/vendor/pygments-main/tests/examplefiles/matlab_noreturn +0 -3
- data/vendor/pygments-main/tests/examplefiles/matlab_sample +0 -30
- data/vendor/pygments-main/tests/examplefiles/matlabsession_sample.txt +0 -37
- data/vendor/pygments-main/tests/examplefiles/metagrammar.treetop +0 -455
- data/vendor/pygments-main/tests/examplefiles/minehunt.qml +0 -112
- data/vendor/pygments-main/tests/examplefiles/minimal.ns2 +0 -4
- data/vendor/pygments-main/tests/examplefiles/moin_SyntaxReference.txt +0 -340
- data/vendor/pygments-main/tests/examplefiles/multiline_regexes.rb +0 -38
- data/vendor/pygments-main/tests/examplefiles/nanomsg.intr +0 -95
- data/vendor/pygments-main/tests/examplefiles/nasm_aoutso.asm +0 -96
- data/vendor/pygments-main/tests/examplefiles/nasm_objexe.asm +0 -30
- data/vendor/pygments-main/tests/examplefiles/nemerle_sample.n +0 -87
- data/vendor/pygments-main/tests/examplefiles/nginx_nginx.conf +0 -118
- data/vendor/pygments-main/tests/examplefiles/numbers.c +0 -12
- data/vendor/pygments-main/tests/examplefiles/objc_example.m +0 -179
- data/vendor/pygments-main/tests/examplefiles/openedge_example +0 -34
- data/vendor/pygments-main/tests/examplefiles/pawn_example +0 -25
- data/vendor/pygments-main/tests/examplefiles/perl_misc +0 -62
- data/vendor/pygments-main/tests/examplefiles/perl_perl5db +0 -998
- data/vendor/pygments-main/tests/examplefiles/perl_regex-delims +0 -120
- data/vendor/pygments-main/tests/examplefiles/perlfunc.1 +0 -856
- data/vendor/pygments-main/tests/examplefiles/phpMyAdmin.spec +0 -163
- data/vendor/pygments-main/tests/examplefiles/phpcomplete.vim +0 -567
- data/vendor/pygments-main/tests/examplefiles/pleac.in.rb +0 -1223
- data/vendor/pygments-main/tests/examplefiles/postgresql_test.txt +0 -47
- data/vendor/pygments-main/tests/examplefiles/pppoe.applescript +0 -10
- data/vendor/pygments-main/tests/examplefiles/psql_session.txt +0 -122
- data/vendor/pygments-main/tests/examplefiles/py3_test.txt +0 -2
- data/vendor/pygments-main/tests/examplefiles/py3tb_test.py3tb +0 -4
- data/vendor/pygments-main/tests/examplefiles/pycon_test.pycon +0 -14
- data/vendor/pygments-main/tests/examplefiles/pytb_test2.pytb +0 -2
- data/vendor/pygments-main/tests/examplefiles/pytb_test3.pytb +0 -4
- data/vendor/pygments-main/tests/examplefiles/python25-bsd.mak +0 -234
- data/vendor/pygments-main/tests/examplefiles/qbasic_example +0 -2
- data/vendor/pygments-main/tests/examplefiles/qsort.prolog +0 -13
- data/vendor/pygments-main/tests/examplefiles/r-console-transcript.Rout +0 -38
- data/vendor/pygments-main/tests/examplefiles/r6rs-comments.scm +0 -23
- data/vendor/pygments-main/tests/examplefiles/ragel-cpp_rlscan +0 -280
- data/vendor/pygments-main/tests/examplefiles/ragel-cpp_snippet +0 -2
- data/vendor/pygments-main/tests/examplefiles/regex.js +0 -22
- data/vendor/pygments-main/tests/examplefiles/reversi.lsp +0 -427
- data/vendor/pygments-main/tests/examplefiles/robotframework_test.txt +0 -39
- data/vendor/pygments-main/tests/examplefiles/rql-queries.rql +0 -34
- data/vendor/pygments-main/tests/examplefiles/ruby_func_def.rb +0 -11
- data/vendor/pygments-main/tests/examplefiles/rust_example.rs +0 -233
- data/vendor/pygments-main/tests/examplefiles/scilab.sci +0 -30
- data/vendor/pygments-main/tests/examplefiles/scope.cirru +0 -43
- data/vendor/pygments-main/tests/examplefiles/session.dylan-console +0 -9
- data/vendor/pygments-main/tests/examplefiles/sibling.prolog +0 -19
- data/vendor/pygments-main/tests/examplefiles/simple.md +0 -747
- data/vendor/pygments-main/tests/examplefiles/smarty_example.html +0 -209
- data/vendor/pygments-main/tests/examplefiles/source.lgt +0 -343
- data/vendor/pygments-main/tests/examplefiles/sources.list +0 -62
- data/vendor/pygments-main/tests/examplefiles/sparql.rq +0 -23
- data/vendor/pygments-main/tests/examplefiles/sphere.pov +0 -18
- data/vendor/pygments-main/tests/examplefiles/sqlite3.sqlite3-console +0 -27
- data/vendor/pygments-main/tests/examplefiles/squid.conf +0 -30
- data/vendor/pygments-main/tests/examplefiles/string.jl +0 -1031
- data/vendor/pygments-main/tests/examplefiles/string_delimiters.d +0 -21
- data/vendor/pygments-main/tests/examplefiles/stripheredoc.sh +0 -3
- data/vendor/pygments-main/tests/examplefiles/swig_java.swg +0 -1329
- data/vendor/pygments-main/tests/examplefiles/swig_std_vector.i +0 -225
- data/vendor/pygments-main/tests/examplefiles/test.R +0 -185
- data/vendor/pygments-main/tests/examplefiles/test.adb +0 -211
- data/vendor/pygments-main/tests/examplefiles/test.agda +0 -102
- data/vendor/pygments-main/tests/examplefiles/test.apl +0 -26
- data/vendor/pygments-main/tests/examplefiles/test.asy +0 -131
- data/vendor/pygments-main/tests/examplefiles/test.awk +0 -121
- data/vendor/pygments-main/tests/examplefiles/test.bb +0 -95
- data/vendor/pygments-main/tests/examplefiles/test.bmx +0 -145
- data/vendor/pygments-main/tests/examplefiles/test.boo +0 -39
- data/vendor/pygments-main/tests/examplefiles/test.bro +0 -250
- data/vendor/pygments-main/tests/examplefiles/test.cs +0 -374
- data/vendor/pygments-main/tests/examplefiles/test.css +0 -54
- data/vendor/pygments-main/tests/examplefiles/test.cu +0 -36
- data/vendor/pygments-main/tests/examplefiles/test.cyp +0 -123
- data/vendor/pygments-main/tests/examplefiles/test.d +0 -135
- data/vendor/pygments-main/tests/examplefiles/test.dart +0 -23
- data/vendor/pygments-main/tests/examplefiles/test.dtd +0 -89
- data/vendor/pygments-main/tests/examplefiles/test.ebnf +0 -31
- data/vendor/pygments-main/tests/examplefiles/test.ec +0 -605
- data/vendor/pygments-main/tests/examplefiles/test.ecl +0 -58
- data/vendor/pygments-main/tests/examplefiles/test.eh +0 -315
- data/vendor/pygments-main/tests/examplefiles/test.erl +0 -169
- data/vendor/pygments-main/tests/examplefiles/test.evoque +0 -33
- data/vendor/pygments-main/tests/examplefiles/test.fan +0 -818
- data/vendor/pygments-main/tests/examplefiles/test.flx +0 -57
- data/vendor/pygments-main/tests/examplefiles/test.gdc +0 -13
- data/vendor/pygments-main/tests/examplefiles/test.groovy +0 -97
- data/vendor/pygments-main/tests/examplefiles/test.html +0 -339
- data/vendor/pygments-main/tests/examplefiles/test.idr +0 -93
- data/vendor/pygments-main/tests/examplefiles/test.ini +0 -10
- data/vendor/pygments-main/tests/examplefiles/test.java +0 -653
- data/vendor/pygments-main/tests/examplefiles/test.jsp +0 -24
- data/vendor/pygments-main/tests/examplefiles/test.maql +0 -45
- data/vendor/pygments-main/tests/examplefiles/test.mask +0 -41
- data/vendor/pygments-main/tests/examplefiles/test.mod +0 -374
- data/vendor/pygments-main/tests/examplefiles/test.moo +0 -51
- data/vendor/pygments-main/tests/examplefiles/test.myt +0 -166
- data/vendor/pygments-main/tests/examplefiles/test.nim +0 -93
- data/vendor/pygments-main/tests/examplefiles/test.opa +0 -10
- data/vendor/pygments-main/tests/examplefiles/test.p6 +0 -252
- data/vendor/pygments-main/tests/examplefiles/test.pan +0 -54
- data/vendor/pygments-main/tests/examplefiles/test.pas +0 -743
- data/vendor/pygments-main/tests/examplefiles/test.php +0 -507
- data/vendor/pygments-main/tests/examplefiles/test.pig +0 -148
- data/vendor/pygments-main/tests/examplefiles/test.plot +0 -333
- data/vendor/pygments-main/tests/examplefiles/test.ps1 +0 -108
- data/vendor/pygments-main/tests/examplefiles/test.pwn +0 -253
- data/vendor/pygments-main/tests/examplefiles/test.pypylog +0 -1839
- data/vendor/pygments-main/tests/examplefiles/test.r3 +0 -114
- data/vendor/pygments-main/tests/examplefiles/test.rb +0 -177
- data/vendor/pygments-main/tests/examplefiles/test.rhtml +0 -43
- data/vendor/pygments-main/tests/examplefiles/test.rsl +0 -111
- data/vendor/pygments-main/tests/examplefiles/test.scaml +0 -8
- data/vendor/pygments-main/tests/examplefiles/test.ssp +0 -12
- data/vendor/pygments-main/tests/examplefiles/test.swift +0 -65
- data/vendor/pygments-main/tests/examplefiles/test.tcsh +0 -830
- data/vendor/pygments-main/tests/examplefiles/test.vb +0 -407
- data/vendor/pygments-main/tests/examplefiles/test.vhdl +0 -161
- data/vendor/pygments-main/tests/examplefiles/test.xqy +0 -138
- data/vendor/pygments-main/tests/examplefiles/test.xsl +0 -23
- data/vendor/pygments-main/tests/examplefiles/test.zep +0 -33
- data/vendor/pygments-main/tests/examplefiles/test2.pypylog +0 -120
- data/vendor/pygments-main/tests/examplefiles/truncated.pytb +0 -15
- data/vendor/pygments-main/tests/examplefiles/type.lisp +0 -1218
- data/vendor/pygments-main/tests/examplefiles/underscore.coffee +0 -603
- data/vendor/pygments-main/tests/examplefiles/unicode.applescript +0 -5
- data/vendor/pygments-main/tests/examplefiles/unicode.go +0 -10
- data/vendor/pygments-main/tests/examplefiles/unicodedoc.py +0 -11
- data/vendor/pygments-main/tests/examplefiles/unix-io.lid +0 -37
- data/vendor/pygments-main/tests/examplefiles/vbnet_test.bas +0 -29
- data/vendor/pygments-main/tests/examplefiles/vctreestatus_hg +0 -4
- data/vendor/pygments-main/tests/examplefiles/vimrc +0 -21
- data/vendor/pygments-main/tests/examplefiles/webkit-transition.css +0 -3
- data/vendor/pygments-main/tests/examplefiles/while.pov +0 -13
- data/vendor/pygments-main/tests/examplefiles/wiki.factor +0 -384
- data/vendor/pygments-main/tests/examplefiles/xml_example +0 -1897
- data/vendor/pygments-main/tests/examplefiles/zmlrpc.f90 +0 -798
- data/vendor/pygments-main/tests/run.py +0 -44
- data/vendor/pygments-main/tests/string_asserts.py +0 -22
- data/vendor/pygments-main/tests/support.py +0 -15
- data/vendor/pygments-main/tests/support/tags +0 -36
- data/vendor/pygments-main/tests/test_basic_api.py +0 -309
- data/vendor/pygments-main/tests/test_cfm.py +0 -46
- data/vendor/pygments-main/tests/test_clexer.py +0 -236
- data/vendor/pygments-main/tests/test_cmdline.py +0 -106
- data/vendor/pygments-main/tests/test_examplefiles.py +0 -110
- data/vendor/pygments-main/tests/test_html_formatter.py +0 -180
- data/vendor/pygments-main/tests/test_latex_formatter.py +0 -57
- data/vendor/pygments-main/tests/test_lexers_other.py +0 -68
- data/vendor/pygments-main/tests/test_objectiveclexer.py +0 -81
- data/vendor/pygments-main/tests/test_perllexer.py +0 -137
- data/vendor/pygments-main/tests/test_qbasiclexer.py +0 -43
- data/vendor/pygments-main/tests/test_regexlexer.py +0 -54
- data/vendor/pygments-main/tests/test_rtf_formatter.py +0 -109
- data/vendor/pygments-main/tests/test_string_asserts.py +0 -39
- data/vendor/pygments-main/tests/test_token.py +0 -46
- data/vendor/pygments-main/tests/test_using_api.py +0 -40
- data/vendor/pygments-main/tests/test_util.py +0 -135
|
@@ -5,20 +5,26 @@
|
|
|
5
5
|
|
|
6
6
|
Base lexer classes.
|
|
7
7
|
|
|
8
|
-
:copyright: Copyright 2006-
|
|
8
|
+
:copyright: Copyright 2006-2015 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
|
+
import re
|
|
15
|
+
import sys
|
|
16
|
+
import time
|
|
12
17
|
|
|
13
18
|
from pygments.filter import apply_filters, Filter
|
|
14
19
|
from pygments.filters import get_filter_by_name
|
|
15
20
|
from pygments.token import Error, Text, Other, _TokenType
|
|
16
21
|
from pygments.util import get_bool_opt, get_int_opt, get_list_opt, \
|
|
17
|
-
|
|
18
|
-
|
|
22
|
+
make_analysator, text_type, add_metaclass, iteritems, Future, guess_decode
|
|
23
|
+
from pygments.regexopt import regex_opt
|
|
19
24
|
|
|
20
25
|
__all__ = ['Lexer', 'RegexLexer', 'ExtendedRegexLexer', 'DelegatingLexer',
|
|
21
|
-
'LexerContext', 'include', 'inherit', 'bygroups', 'using', 'this',
|
|
26
|
+
'LexerContext', 'include', 'inherit', 'bygroups', 'using', 'this',
|
|
27
|
+
'default', 'words']
|
|
22
28
|
|
|
23
29
|
|
|
24
30
|
_encoding_map = [(b'\xef\xbb\xbf', 'utf-8'),
|
|
@@ -36,10 +42,10 @@ class LexerMeta(type):
|
|
|
36
42
|
static methods which always return float values.
|
|
37
43
|
"""
|
|
38
44
|
|
|
39
|
-
def __new__(
|
|
45
|
+
def __new__(mcs, name, bases, d):
|
|
40
46
|
if 'analyse_text' in d:
|
|
41
47
|
d['analyse_text'] = make_analysator(d['analyse_text'])
|
|
42
|
-
return type.__new__(
|
|
48
|
+
return type.__new__(mcs, name, bases, d)
|
|
43
49
|
|
|
44
50
|
|
|
45
51
|
@add_metaclass(LexerMeta)
|
|
@@ -64,9 +70,11 @@ class Lexer(object):
|
|
|
64
70
|
``encoding``
|
|
65
71
|
If given, must be an encoding name. This encoding will be used to
|
|
66
72
|
convert the input string to Unicode, if it is not already a Unicode
|
|
67
|
-
string (default: ``'
|
|
68
|
-
Can also be ``'
|
|
69
|
-
|
|
73
|
+
string (default: ``'guess'``, which uses a simple UTF-8 / Locale /
|
|
74
|
+
Latin1 detection. Can also be ``'chardet'`` to use the chardet
|
|
75
|
+
library, if it is installed.
|
|
76
|
+
``inencoding``
|
|
77
|
+
Overrides the ``encoding`` if given.
|
|
70
78
|
"""
|
|
71
79
|
|
|
72
80
|
#: Name of the lexer
|
|
@@ -93,8 +101,8 @@ class Lexer(object):
|
|
|
93
101
|
self.stripall = get_bool_opt(options, 'stripall', False)
|
|
94
102
|
self.ensurenl = get_bool_opt(options, 'ensurenl', True)
|
|
95
103
|
self.tabsize = get_int_opt(options, 'tabsize', 0)
|
|
96
|
-
self.encoding = options.get('encoding', '
|
|
97
|
-
|
|
104
|
+
self.encoding = options.get('encoding', 'guess')
|
|
105
|
+
self.encoding = options.get('inencoding') or self.encoding
|
|
98
106
|
self.filters = []
|
|
99
107
|
for filter_ in get_list_opt(options, 'filters', ()):
|
|
100
108
|
self.add_filter(filter_)
|
|
@@ -139,12 +147,7 @@ class Lexer(object):
|
|
|
139
147
|
"""
|
|
140
148
|
if not isinstance(text, text_type):
|
|
141
149
|
if self.encoding == 'guess':
|
|
142
|
-
|
|
143
|
-
text = text.decode('utf-8')
|
|
144
|
-
if text.startswith(u'\ufeff'):
|
|
145
|
-
text = text[len(u'\ufeff'):]
|
|
146
|
-
except UnicodeDecodeError:
|
|
147
|
-
text = text.decode('latin1')
|
|
150
|
+
text, _ = guess_decode(text)
|
|
148
151
|
elif self.encoding == 'chardet':
|
|
149
152
|
try:
|
|
150
153
|
import chardet
|
|
@@ -160,7 +163,7 @@ class Lexer(object):
|
|
|
160
163
|
break
|
|
161
164
|
# no BOM found, so use chardet
|
|
162
165
|
if decoded is None:
|
|
163
|
-
enc = chardet.detect(text[:1024])
|
|
166
|
+
enc = chardet.detect(text[:1024]) # Guess using first 1KB
|
|
164
167
|
decoded = text.decode(enc.get('encoding') or 'utf-8',
|
|
165
168
|
'replace')
|
|
166
169
|
text = decoded
|
|
@@ -185,7 +188,7 @@ class Lexer(object):
|
|
|
185
188
|
text += '\n'
|
|
186
189
|
|
|
187
190
|
def streamer():
|
|
188
|
-
for
|
|
191
|
+
for _, t, v in self.get_tokens_unprocessed(text):
|
|
189
192
|
yield t, v
|
|
190
193
|
stream = streamer()
|
|
191
194
|
if not unfiltered:
|
|
@@ -237,12 +240,12 @@ class DelegatingLexer(Lexer):
|
|
|
237
240
|
self.root_lexer.get_tokens_unprocessed(buffered))
|
|
238
241
|
|
|
239
242
|
|
|
240
|
-
|
|
243
|
+
# ------------------------------------------------------------------------------
|
|
241
244
|
# RegexLexer and ExtendedRegexLexer
|
|
242
245
|
#
|
|
243
246
|
|
|
244
247
|
|
|
245
|
-
class include(str):
|
|
248
|
+
class include(str): # pylint: disable=invalid-name
|
|
246
249
|
"""
|
|
247
250
|
Indicates that a state should include rules from another state.
|
|
248
251
|
"""
|
|
@@ -256,10 +259,10 @@ class _inherit(object):
|
|
|
256
259
|
def __repr__(self):
|
|
257
260
|
return 'inherit'
|
|
258
261
|
|
|
259
|
-
inherit = _inherit()
|
|
262
|
+
inherit = _inherit() # pylint: disable=invalid-name
|
|
260
263
|
|
|
261
264
|
|
|
262
|
-
class combined(tuple):
|
|
265
|
+
class combined(tuple): # pylint: disable=invalid-name
|
|
263
266
|
"""
|
|
264
267
|
Indicates a state combined from multiple states.
|
|
265
268
|
"""
|
|
@@ -316,8 +319,8 @@ def bygroups(*args):
|
|
|
316
319
|
if data is not None:
|
|
317
320
|
if ctx:
|
|
318
321
|
ctx.pos = match.start(i + 1)
|
|
319
|
-
for item in action(lexer,
|
|
320
|
-
data), ctx):
|
|
322
|
+
for item in action(lexer,
|
|
323
|
+
_PseudoMatch(match.start(i + 1), data), ctx):
|
|
321
324
|
if item:
|
|
322
325
|
yield item
|
|
323
326
|
if ctx:
|
|
@@ -387,26 +390,46 @@ class default:
|
|
|
387
390
|
"""
|
|
388
391
|
Indicates a state or state action (e.g. #pop) to apply.
|
|
389
392
|
For example default('#pop') is equivalent to ('', Token, '#pop')
|
|
390
|
-
Note that state tuples may be used as well
|
|
393
|
+
Note that state tuples may be used as well.
|
|
394
|
+
|
|
395
|
+
.. versionadded:: 2.0
|
|
391
396
|
"""
|
|
392
397
|
def __init__(self, state):
|
|
393
398
|
self.state = state
|
|
394
399
|
|
|
395
400
|
|
|
401
|
+
class words(Future):
|
|
402
|
+
"""
|
|
403
|
+
Indicates a list of literal words that is transformed into an optimized
|
|
404
|
+
regex that matches any of the words.
|
|
405
|
+
|
|
406
|
+
.. versionadded:: 2.0
|
|
407
|
+
"""
|
|
408
|
+
def __init__(self, words, prefix='', suffix=''):
|
|
409
|
+
self.words = words
|
|
410
|
+
self.prefix = prefix
|
|
411
|
+
self.suffix = suffix
|
|
412
|
+
|
|
413
|
+
def get(self):
|
|
414
|
+
return regex_opt(self.words, prefix=self.prefix, suffix=self.suffix)
|
|
415
|
+
|
|
416
|
+
|
|
396
417
|
class RegexLexerMeta(LexerMeta):
|
|
397
418
|
"""
|
|
398
419
|
Metaclass for RegexLexer, creates the self._tokens attribute from
|
|
399
420
|
self.tokens on the first instantiation.
|
|
400
421
|
"""
|
|
401
422
|
|
|
402
|
-
def _process_regex(cls, regex, rflags):
|
|
423
|
+
def _process_regex(cls, regex, rflags, state):
|
|
403
424
|
"""Preprocess the regular expression component of a token definition."""
|
|
425
|
+
if isinstance(regex, Future):
|
|
426
|
+
regex = regex.get()
|
|
404
427
|
return re.compile(regex, rflags).match
|
|
405
428
|
|
|
406
429
|
def _process_token(cls, token):
|
|
407
430
|
"""Preprocess the token component of a token definition."""
|
|
408
431
|
assert type(token) is _TokenType or callable(token), \
|
|
409
|
-
|
|
432
|
+
'token type must be simple type or callable, not %r' % (token,)
|
|
410
433
|
return token
|
|
411
434
|
|
|
412
435
|
def _process_new_state(cls, new_state, unprocessed, processed):
|
|
@@ -439,7 +462,7 @@ class RegexLexerMeta(LexerMeta):
|
|
|
439
462
|
for istate in new_state:
|
|
440
463
|
assert (istate in unprocessed or
|
|
441
464
|
istate in ('#pop', '#push')), \
|
|
442
|
-
|
|
465
|
+
'unknown new state ' + istate
|
|
443
466
|
return new_state
|
|
444
467
|
else:
|
|
445
468
|
assert False, 'unknown new state def %r' % new_state
|
|
@@ -460,7 +483,9 @@ class RegexLexerMeta(LexerMeta):
|
|
|
460
483
|
str(tdef)))
|
|
461
484
|
continue
|
|
462
485
|
if isinstance(tdef, _inherit):
|
|
463
|
-
# processed already
|
|
486
|
+
# should be processed already, but may not in the case of:
|
|
487
|
+
# 1. the state has no counterpart in any parent
|
|
488
|
+
# 2. the state includes more than one 'inherit'
|
|
464
489
|
continue
|
|
465
490
|
if isinstance(tdef, default):
|
|
466
491
|
new_state = cls._process_new_state(tdef.state, unprocessed, processed)
|
|
@@ -470,7 +495,7 @@ class RegexLexerMeta(LexerMeta):
|
|
|
470
495
|
assert type(tdef) is tuple, "wrong rule def %r" % tdef
|
|
471
496
|
|
|
472
497
|
try:
|
|
473
|
-
rex = cls._process_regex(tdef[0], rflags)
|
|
498
|
+
rex = cls._process_regex(tdef[0], rflags, state)
|
|
474
499
|
except Exception as err:
|
|
475
500
|
raise ValueError("uncompilable regex %r in state %r of %r: %s" %
|
|
476
501
|
(tdef[0], state, cls, err))
|
|
@@ -508,12 +533,16 @@ class RegexLexerMeta(LexerMeta):
|
|
|
508
533
|
"""
|
|
509
534
|
tokens = {}
|
|
510
535
|
inheritable = {}
|
|
511
|
-
for c in
|
|
536
|
+
for c in cls.__mro__:
|
|
512
537
|
toks = c.__dict__.get('tokens', {})
|
|
513
538
|
|
|
514
539
|
for state, items in iteritems(toks):
|
|
515
540
|
curitems = tokens.get(state)
|
|
516
541
|
if curitems is None:
|
|
542
|
+
# N.b. because this is assigned by reference, sufficiently
|
|
543
|
+
# deep hierarchies are processed incrementally (e.g. for
|
|
544
|
+
# A(B), B(C), C(RegexLexer), B will be premodified so X(B)
|
|
545
|
+
# will not see any inherits in B).
|
|
517
546
|
tokens[state] = items
|
|
518
547
|
try:
|
|
519
548
|
inherit_ndx = items.index(inherit)
|
|
@@ -529,6 +558,8 @@ class RegexLexerMeta(LexerMeta):
|
|
|
529
558
|
# Replace the "inherit" value with the items
|
|
530
559
|
curitems[inherit_ndx:inherit_ndx+1] = items
|
|
531
560
|
try:
|
|
561
|
+
# N.b. this is the index in items (that is, the superclass
|
|
562
|
+
# copy), so offset required when storing below.
|
|
532
563
|
new_inh_ndx = items.index(inherit)
|
|
533
564
|
except ValueError:
|
|
534
565
|
pass
|
|
@@ -623,6 +654,8 @@ class RegexLexer(Lexer):
|
|
|
623
654
|
statetokens = tokendefs[statestack[-1]]
|
|
624
655
|
break
|
|
625
656
|
else:
|
|
657
|
+
# We are here only if all state tokens have been considered
|
|
658
|
+
# and there was not a match on any of them.
|
|
626
659
|
try:
|
|
627
660
|
if text[pos] == '\n':
|
|
628
661
|
# at EOL, reset state to "root"
|
|
@@ -645,7 +678,7 @@ class LexerContext(object):
|
|
|
645
678
|
def __init__(self, text, pos, stack=None, end=None):
|
|
646
679
|
self.text = text
|
|
647
680
|
self.pos = pos
|
|
648
|
-
self.end = end or len(text)
|
|
681
|
+
self.end = end or len(text) # end=0 not supported ;-)
|
|
649
682
|
self.stack = stack or ['root']
|
|
650
683
|
|
|
651
684
|
def __repr__(self):
|
|
@@ -783,3 +816,56 @@ def do_insertions(insertions, tokens):
|
|
|
783
816
|
except StopIteration:
|
|
784
817
|
insleft = False
|
|
785
818
|
break # not strictly necessary
|
|
819
|
+
|
|
820
|
+
|
|
821
|
+
class ProfilingRegexLexerMeta(RegexLexerMeta):
|
|
822
|
+
"""Metaclass for ProfilingRegexLexer, collects regex timing info."""
|
|
823
|
+
|
|
824
|
+
def _process_regex(cls, regex, rflags, state):
|
|
825
|
+
if isinstance(regex, words):
|
|
826
|
+
rex = regex_opt(regex.words, prefix=regex.prefix,
|
|
827
|
+
suffix=regex.suffix)
|
|
828
|
+
else:
|
|
829
|
+
rex = regex
|
|
830
|
+
compiled = re.compile(rex, rflags)
|
|
831
|
+
|
|
832
|
+
def match_func(text, pos, endpos=sys.maxsize):
|
|
833
|
+
info = cls._prof_data[-1].setdefault((state, rex), [0, 0.0])
|
|
834
|
+
t0 = time.time()
|
|
835
|
+
res = compiled.match(text, pos, endpos)
|
|
836
|
+
t1 = time.time()
|
|
837
|
+
info[0] += 1
|
|
838
|
+
info[1] += t1 - t0
|
|
839
|
+
return res
|
|
840
|
+
return match_func
|
|
841
|
+
|
|
842
|
+
|
|
843
|
+
@add_metaclass(ProfilingRegexLexerMeta)
|
|
844
|
+
class ProfilingRegexLexer(RegexLexer):
|
|
845
|
+
"""Drop-in replacement for RegexLexer that does profiling of its regexes."""
|
|
846
|
+
|
|
847
|
+
_prof_data = []
|
|
848
|
+
_prof_sort_index = 4 # defaults to time per call
|
|
849
|
+
|
|
850
|
+
def get_tokens_unprocessed(self, text, stack=('root',)):
|
|
851
|
+
# this needs to be a stack, since using(this) will produce nested calls
|
|
852
|
+
self.__class__._prof_data.append({})
|
|
853
|
+
for tok in RegexLexer.get_tokens_unprocessed(self, text, stack):
|
|
854
|
+
yield tok
|
|
855
|
+
rawdata = self.__class__._prof_data.pop()
|
|
856
|
+
data = sorted(((s, repr(r).strip('u\'').replace('\\\\', '\\')[:65],
|
|
857
|
+
n, 1000 * t, 1000 * t / n)
|
|
858
|
+
for ((s, r), (n, t)) in rawdata.items()),
|
|
859
|
+
key=lambda x: x[self._prof_sort_index],
|
|
860
|
+
reverse=True)
|
|
861
|
+
sum_total = sum(x[3] for x in data)
|
|
862
|
+
|
|
863
|
+
print()
|
|
864
|
+
print('Profiling result for %s lexing %d chars in %.3f ms' %
|
|
865
|
+
(self.__class__.__name__, len(text), sum_total))
|
|
866
|
+
print('=' * 110)
|
|
867
|
+
print('%-20s %-64s ncalls tottime percall' % ('state', 'regex'))
|
|
868
|
+
print('-' * 110)
|
|
869
|
+
for d in data:
|
|
870
|
+
print('%-20s %-65s %5d %8.4f %8.4f' % d)
|
|
871
|
+
print('=' * 110)
|
|
@@ -5,20 +5,20 @@
|
|
|
5
5
|
|
|
6
6
|
Pygments lexers.
|
|
7
7
|
|
|
8
|
-
:copyright: Copyright 2006-
|
|
8
|
+
:copyright: Copyright 2006-2015 by the Pygments team, see AUTHORS.
|
|
9
9
|
:license: BSD, see LICENSE for details.
|
|
10
10
|
"""
|
|
11
11
|
|
|
12
|
+
import re
|
|
12
13
|
import sys
|
|
13
14
|
import types
|
|
14
15
|
import fnmatch
|
|
15
|
-
import re
|
|
16
16
|
from os.path import basename
|
|
17
17
|
|
|
18
18
|
from pygments.lexers._mapping import LEXERS
|
|
19
19
|
from pygments.modeline import get_filetype_from_buffer
|
|
20
20
|
from pygments.plugin import find_plugin_lexers
|
|
21
|
-
from pygments.util import ClassNotFound, itervalues
|
|
21
|
+
from pygments.util import ClassNotFound, itervalues, guess_decode
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
__all__ = ['get_lexer_by_name', 'get_lexer_for_filename', 'find_lexer_class',
|
|
@@ -27,23 +27,17 @@ __all__ = ['get_lexer_by_name', 'get_lexer_for_filename', 'find_lexer_class',
|
|
|
27
27
|
_lexer_cache = {}
|
|
28
28
|
_pattern_cache = {}
|
|
29
29
|
|
|
30
|
+
|
|
30
31
|
def _fn_matches(fn, glob):
|
|
31
|
-
"""
|
|
32
|
-
Return whether the supplied file name fn matches pattern filename
|
|
33
|
-
"""
|
|
32
|
+
"""Return whether the supplied file name fn matches pattern filename."""
|
|
34
33
|
if glob not in _pattern_cache:
|
|
35
|
-
pattern = re.compile(fnmatch.translate(glob))
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
pattern = _pattern_cache[glob]
|
|
39
|
-
|
|
40
|
-
return pattern.match(fn)
|
|
34
|
+
pattern = _pattern_cache[glob] = re.compile(fnmatch.translate(glob))
|
|
35
|
+
return pattern.match(fn)
|
|
36
|
+
return _pattern_cache[glob].match(fn)
|
|
41
37
|
|
|
42
38
|
|
|
43
39
|
def _load_lexers(module_name):
|
|
44
|
-
"""
|
|
45
|
-
Load a lexer (and all others in the module too).
|
|
46
|
-
"""
|
|
40
|
+
"""Load a lexer (and all others in the module too)."""
|
|
47
41
|
mod = __import__(module_name, None, None, ['__all__'])
|
|
48
42
|
for lexer_name in mod.__all__:
|
|
49
43
|
cls = getattr(mod, lexer_name)
|
|
@@ -51,8 +45,7 @@ def _load_lexers(module_name):
|
|
|
51
45
|
|
|
52
46
|
|
|
53
47
|
def get_all_lexers():
|
|
54
|
-
"""
|
|
55
|
-
Return a generator of tuples in the form ``(name, aliases,
|
|
48
|
+
"""Return a generator of tuples in the form ``(name, aliases,
|
|
56
49
|
filenames, mimetypes)`` of all know lexers.
|
|
57
50
|
"""
|
|
58
51
|
for item in itervalues(LEXERS):
|
|
@@ -62,8 +55,9 @@ def get_all_lexers():
|
|
|
62
55
|
|
|
63
56
|
|
|
64
57
|
def find_lexer_class(name):
|
|
65
|
-
"""
|
|
66
|
-
|
|
58
|
+
"""Lookup a lexer class by name.
|
|
59
|
+
|
|
60
|
+
Return None if not found.
|
|
67
61
|
"""
|
|
68
62
|
if name in _lexer_cache:
|
|
69
63
|
return _lexer_cache[name]
|
|
@@ -78,9 +72,32 @@ def find_lexer_class(name):
|
|
|
78
72
|
return cls
|
|
79
73
|
|
|
80
74
|
|
|
81
|
-
def
|
|
75
|
+
def find_lexer_class_by_name(alias):
|
|
76
|
+
"""Lookup a lexer class by alias.
|
|
77
|
+
|
|
78
|
+
Like `get_lexer_by_name`, but does not instantiate the class.
|
|
79
|
+
|
|
80
|
+
.. versionadded:: 2.2
|
|
82
81
|
"""
|
|
83
|
-
|
|
82
|
+
if not _alias:
|
|
83
|
+
raise ClassNotFound('no lexer for alias %r found' % _alias)
|
|
84
|
+
# lookup builtin lexers
|
|
85
|
+
for module_name, name, aliases, _, _ in itervalues(LEXERS):
|
|
86
|
+
if _alias.lower() in aliases:
|
|
87
|
+
if name not in _lexer_cache:
|
|
88
|
+
_load_lexers(module_name)
|
|
89
|
+
return _lexer_cache[name]
|
|
90
|
+
# continue with lexers from setuptools entrypoints
|
|
91
|
+
for cls in find_plugin_lexers():
|
|
92
|
+
if _alias.lower() in cls.aliases:
|
|
93
|
+
return cls
|
|
94
|
+
raise ClassNotFound('no lexer for alias %r found' % _alias)
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def get_lexer_by_name(_alias, **options):
|
|
98
|
+
"""Get a lexer by an alias.
|
|
99
|
+
|
|
100
|
+
Raises ClassNotFound if not found.
|
|
84
101
|
"""
|
|
85
102
|
if not _alias:
|
|
86
103
|
raise ClassNotFound('no lexer for alias %r found' % _alias)
|
|
@@ -93,16 +110,18 @@ def get_lexer_by_name(_alias, **options):
|
|
|
93
110
|
return _lexer_cache[name](**options)
|
|
94
111
|
# continue with lexers from setuptools entrypoints
|
|
95
112
|
for cls in find_plugin_lexers():
|
|
96
|
-
if _alias in cls.aliases:
|
|
113
|
+
if _alias.lower() in cls.aliases:
|
|
97
114
|
return cls(**options)
|
|
98
115
|
raise ClassNotFound('no lexer for alias %r found' % _alias)
|
|
99
116
|
|
|
100
117
|
|
|
101
|
-
def
|
|
102
|
-
"""
|
|
103
|
-
|
|
104
|
-
pattern, use ``analyse_text()`` to
|
|
105
|
-
appropriate.
|
|
118
|
+
def find_lexer_class_for_filename(_fn, code=None):
|
|
119
|
+
"""Get a lexer for a filename.
|
|
120
|
+
|
|
121
|
+
If multiple lexers match the filename pattern, use ``analyse_text()`` to
|
|
122
|
+
figure out which one is more appropriate.
|
|
123
|
+
|
|
124
|
+
Returns None if not found.
|
|
106
125
|
"""
|
|
107
126
|
matches = []
|
|
108
127
|
fn = basename(_fn)
|
|
@@ -119,7 +138,7 @@ def get_lexer_for_filename(_fn, code=None, **options):
|
|
|
119
138
|
|
|
120
139
|
if sys.version_info > (3,) and isinstance(code, bytes):
|
|
121
140
|
# decode it, since all analyse_text functions expect unicode
|
|
122
|
-
code = code
|
|
141
|
+
code = guess_decode(code)
|
|
123
142
|
|
|
124
143
|
def get_rating(info):
|
|
125
144
|
cls, filename = info
|
|
@@ -135,14 +154,28 @@ def get_lexer_for_filename(_fn, code=None, **options):
|
|
|
135
154
|
|
|
136
155
|
if matches:
|
|
137
156
|
matches.sort(key=get_rating)
|
|
138
|
-
#print "Possible lexers, after sort:", matches
|
|
139
|
-
return matches[-1][0]
|
|
140
|
-
raise ClassNotFound('no lexer for filename %r found' % _fn)
|
|
157
|
+
# print "Possible lexers, after sort:", matches
|
|
158
|
+
return matches[-1][0]
|
|
141
159
|
|
|
142
160
|
|
|
143
|
-
def
|
|
161
|
+
def get_lexer_for_filename(_fn, code=None, **options):
|
|
162
|
+
"""Get a lexer for a filename.
|
|
163
|
+
|
|
164
|
+
If multiple lexers match the filename pattern, use ``analyse_text()`` to
|
|
165
|
+
figure out which one is more appropriate.
|
|
166
|
+
|
|
167
|
+
Raises ClassNotFound if not found.
|
|
144
168
|
"""
|
|
145
|
-
|
|
169
|
+
res = find_lexer_class_for_filename(_fn, code)
|
|
170
|
+
if not res:
|
|
171
|
+
raise ClassNotFound('no lexer for filename %r found' % _fn)
|
|
172
|
+
return res(**options)
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
def get_lexer_for_mimetype(_mime, **options):
|
|
176
|
+
"""Get a lexer for a mimetype.
|
|
177
|
+
|
|
178
|
+
Raises ClassNotFound if not found.
|
|
146
179
|
"""
|
|
147
180
|
for modname, name, _, _, mimetypes in itervalues(LEXERS):
|
|
148
181
|
if _mime in mimetypes:
|
|
@@ -155,17 +188,16 @@ def get_lexer_for_mimetype(_mime, **options):
|
|
|
155
188
|
raise ClassNotFound('no lexer for mimetype %r found' % _mime)
|
|
156
189
|
|
|
157
190
|
|
|
158
|
-
def _iter_lexerclasses():
|
|
159
|
-
"""
|
|
160
|
-
Return an iterator over all lexer classes.
|
|
161
|
-
"""
|
|
191
|
+
def _iter_lexerclasses(plugins=True):
|
|
192
|
+
"""Return an iterator over all lexer classes."""
|
|
162
193
|
for key in sorted(LEXERS):
|
|
163
194
|
module_name, name = LEXERS[key][:2]
|
|
164
195
|
if name not in _lexer_cache:
|
|
165
196
|
_load_lexers(module_name)
|
|
166
197
|
yield _lexer_cache[name]
|
|
167
|
-
|
|
168
|
-
|
|
198
|
+
if plugins:
|
|
199
|
+
for lexer in find_plugin_lexers():
|
|
200
|
+
yield lexer
|
|
169
201
|
|
|
170
202
|
|
|
171
203
|
def guess_lexer_for_filename(_fn, _text, **options):
|
|
@@ -185,16 +217,17 @@ def guess_lexer_for_filename(_fn, _text, **options):
|
|
|
185
217
|
<pygments.lexers.templates.CssPhpLexer object at 0xb7ba518c>
|
|
186
218
|
"""
|
|
187
219
|
fn = basename(_fn)
|
|
188
|
-
primary =
|
|
220
|
+
primary = {}
|
|
189
221
|
matching_lexers = set()
|
|
190
222
|
for lexer in _iter_lexerclasses():
|
|
191
223
|
for filename in lexer.filenames:
|
|
192
224
|
if _fn_matches(fn, filename):
|
|
193
225
|
matching_lexers.add(lexer)
|
|
194
|
-
primary =
|
|
226
|
+
primary[lexer] = True
|
|
195
227
|
for filename in lexer.alias_filenames:
|
|
196
228
|
if _fn_matches(fn, filename):
|
|
197
229
|
matching_lexers.add(lexer)
|
|
230
|
+
primary[lexer] = False
|
|
198
231
|
if not matching_lexers:
|
|
199
232
|
raise ClassNotFound('no lexer for filename %r found' % fn)
|
|
200
233
|
if len(matching_lexers) == 1:
|
|
@@ -206,21 +239,20 @@ def guess_lexer_for_filename(_fn, _text, **options):
|
|
|
206
239
|
return lexer(**options)
|
|
207
240
|
result.append((rv, lexer))
|
|
208
241
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
242
|
+
def type_sort(t):
|
|
243
|
+
# sort by:
|
|
244
|
+
# - analyse score
|
|
245
|
+
# - is primary filename pattern?
|
|
246
|
+
# - priority
|
|
247
|
+
# - last resort: class name
|
|
248
|
+
return (t[0], primary[t[1]], t[1].priority, t[1].__name__)
|
|
213
249
|
result.sort(key=type_sort)
|
|
214
250
|
|
|
215
|
-
if not result[-1][0] and primary is not None:
|
|
216
|
-
return primary(**options)
|
|
217
251
|
return result[-1][1](**options)
|
|
218
252
|
|
|
219
253
|
|
|
220
254
|
def guess_lexer(_text, **options):
|
|
221
|
-
"""
|
|
222
|
-
Guess a lexer by strong distinctions in the text (eg, shebang).
|
|
223
|
-
"""
|
|
255
|
+
"""Guess a lexer by strong distinctions in the text (eg, shebang)."""
|
|
224
256
|
|
|
225
257
|
# try to get a vim modeline first
|
|
226
258
|
ft = get_filetype_from_buffer(_text)
|
|
@@ -256,8 +288,8 @@ class _automodule(types.ModuleType):
|
|
|
256
288
|
raise AttributeError(name)
|
|
257
289
|
|
|
258
290
|
|
|
259
|
-
oldmod = sys.modules[
|
|
260
|
-
newmod = _automodule(
|
|
291
|
+
oldmod = sys.modules[__name__]
|
|
292
|
+
newmod = _automodule(__name__)
|
|
261
293
|
newmod.__dict__.update(oldmod.__dict__)
|
|
262
|
-
sys.modules[
|
|
294
|
+
sys.modules[__name__] = newmod
|
|
263
295
|
del newmod.newmod, newmod.oldmod, newmod.sys, newmod.types
|