mortar-pygments.rb 0.5.5
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.
- data/.gitignore +6 -0
- data/CHANGELOG.md +71 -0
- data/Gemfile +2 -0
- data/LICENSE +17 -0
- data/README.md +121 -0
- data/Rakefile +66 -0
- data/bench.rb +22 -0
- data/cache-lexers.rb +8 -0
- data/lexers +0 -0
- data/lib/pygments/lexer.rb +148 -0
- data/lib/pygments/mentos.py +351 -0
- data/lib/pygments/popen.rb +406 -0
- data/lib/pygments/version.rb +3 -0
- data/lib/pygments.rb +8 -0
- data/pygments.rb.gemspec +25 -0
- data/test/test_data.c +2581 -0
- data/test/test_data.py +514 -0
- data/test/test_data_generated +2582 -0
- data/test/test_pygments.rb +287 -0
- data/vendor/custom_lexers/github.py +565 -0
- data/vendor/pygments-main/AUTHORS +153 -0
- data/vendor/pygments-main/CHANGES +889 -0
- data/vendor/pygments-main/LICENSE +25 -0
- data/vendor/pygments-main/MANIFEST.in +6 -0
- data/vendor/pygments-main/Makefile +59 -0
- data/vendor/pygments-main/REVISION +1 -0
- data/vendor/pygments-main/TODO +15 -0
- data/vendor/pygments-main/docs/generate.py +472 -0
- data/vendor/pygments-main/docs/pygmentize.1 +94 -0
- data/vendor/pygments-main/docs/src/api.txt +270 -0
- data/vendor/pygments-main/docs/src/authors.txt +5 -0
- data/vendor/pygments-main/docs/src/changelog.txt +5 -0
- data/vendor/pygments-main/docs/src/cmdline.txt +147 -0
- data/vendor/pygments-main/docs/src/filterdevelopment.txt +70 -0
- data/vendor/pygments-main/docs/src/filters.txt +42 -0
- data/vendor/pygments-main/docs/src/formatterdevelopment.txt +169 -0
- data/vendor/pygments-main/docs/src/formatters.txt +48 -0
- data/vendor/pygments-main/docs/src/index.txt +69 -0
- data/vendor/pygments-main/docs/src/installation.txt +71 -0
- data/vendor/pygments-main/docs/src/integrate.txt +48 -0
- data/vendor/pygments-main/docs/src/java.txt +70 -0
- data/vendor/pygments-main/docs/src/lexerdevelopment.txt +603 -0
- data/vendor/pygments-main/docs/src/lexers.txt +67 -0
- data/vendor/pygments-main/docs/src/moinmoin.txt +39 -0
- data/vendor/pygments-main/docs/src/plugins.txt +93 -0
- data/vendor/pygments-main/docs/src/quickstart.txt +202 -0
- data/vendor/pygments-main/docs/src/rstdirective.txt +22 -0
- data/vendor/pygments-main/docs/src/styles.txt +143 -0
- data/vendor/pygments-main/docs/src/tokens.txt +349 -0
- data/vendor/pygments-main/docs/src/unicode.txt +49 -0
- data/vendor/pygments-main/external/autopygmentize +64 -0
- data/vendor/pygments-main/external/lasso-builtins-generator-9.lasso +144 -0
- data/vendor/pygments-main/external/markdown-processor.py +67 -0
- data/vendor/pygments-main/external/moin-parser.py +112 -0
- data/vendor/pygments-main/external/pygments.bashcomp +38 -0
- data/vendor/pygments-main/external/rst-directive-old.py +77 -0
- data/vendor/pygments-main/external/rst-directive.py +83 -0
- data/vendor/pygments-main/ez_setup.py +276 -0
- data/vendor/pygments-main/pygmentize +7 -0
- data/vendor/pygments-main/pygments/__init__.py +91 -0
- data/vendor/pygments-main/pygments/cmdline.py +441 -0
- data/vendor/pygments-main/pygments/console.py +74 -0
- data/vendor/pygments-main/pygments/filter.py +74 -0
- data/vendor/pygments-main/pygments/filters/__init__.py +356 -0
- data/vendor/pygments-main/pygments/formatter.py +95 -0
- data/vendor/pygments-main/pygments/formatters/__init__.py +68 -0
- data/vendor/pygments-main/pygments/formatters/_mapping.py +92 -0
- data/vendor/pygments-main/pygments/formatters/bbcode.py +109 -0
- data/vendor/pygments-main/pygments/formatters/html.py +821 -0
- data/vendor/pygments-main/pygments/formatters/img.py +553 -0
- data/vendor/pygments-main/pygments/formatters/latex.py +378 -0
- data/vendor/pygments-main/pygments/formatters/other.py +115 -0
- data/vendor/pygments-main/pygments/formatters/rtf.py +136 -0
- data/vendor/pygments-main/pygments/formatters/svg.py +154 -0
- data/vendor/pygments-main/pygments/formatters/terminal.py +112 -0
- data/vendor/pygments-main/pygments/formatters/terminal256.py +222 -0
- data/vendor/pygments-main/pygments/lexer.py +765 -0
- data/vendor/pygments-main/pygments/lexers/__init__.py +240 -0
- data/vendor/pygments-main/pygments/lexers/_asybuiltins.py +1645 -0
- data/vendor/pygments-main/pygments/lexers/_clbuiltins.py +232 -0
- data/vendor/pygments-main/pygments/lexers/_lassobuiltins.py +5172 -0
- data/vendor/pygments-main/pygments/lexers/_luabuiltins.py +249 -0
- data/vendor/pygments-main/pygments/lexers/_mapping.py +355 -0
- data/vendor/pygments-main/pygments/lexers/_openedgebuiltins.py +562 -0
- data/vendor/pygments-main/pygments/lexers/_phpbuiltins.py +3787 -0
- data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +233 -0
- data/vendor/pygments-main/pygments/lexers/_robotframeworklexer.py +557 -0
- data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +40 -0
- data/vendor/pygments-main/pygments/lexers/_sourcemodbuiltins.py +1072 -0
- data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +360 -0
- data/vendor/pygments-main/pygments/lexers/_vimbuiltins.py +13 -0
- data/vendor/pygments-main/pygments/lexers/agile.py +2290 -0
- data/vendor/pygments-main/pygments/lexers/asm.py +398 -0
- data/vendor/pygments-main/pygments/lexers/compiled.py +3723 -0
- data/vendor/pygments-main/pygments/lexers/dalvik.py +104 -0
- data/vendor/pygments-main/pygments/lexers/dotnet.py +671 -0
- data/vendor/pygments-main/pygments/lexers/foxpro.py +428 -0
- data/vendor/pygments-main/pygments/lexers/functional.py +2731 -0
- data/vendor/pygments-main/pygments/lexers/github.py +565 -0
- data/vendor/pygments-main/pygments/lexers/hdl.py +356 -0
- data/vendor/pygments-main/pygments/lexers/jvm.py +1112 -0
- data/vendor/pygments-main/pygments/lexers/math.py +1918 -0
- data/vendor/pygments-main/pygments/lexers/other.py +3778 -0
- data/vendor/pygments-main/pygments/lexers/parsers.py +778 -0
- data/vendor/pygments-main/pygments/lexers/shell.py +424 -0
- data/vendor/pygments-main/pygments/lexers/special.py +100 -0
- data/vendor/pygments-main/pygments/lexers/sql.py +609 -0
- data/vendor/pygments-main/pygments/lexers/templates.py +1742 -0
- data/vendor/pygments-main/pygments/lexers/text.py +1893 -0
- data/vendor/pygments-main/pygments/lexers/web.py +4045 -0
- data/vendor/pygments-main/pygments/modeline.py +40 -0
- data/vendor/pygments-main/pygments/plugin.py +74 -0
- data/vendor/pygments-main/pygments/scanner.py +104 -0
- data/vendor/pygments-main/pygments/style.py +117 -0
- data/vendor/pygments-main/pygments/styles/__init__.py +70 -0
- data/vendor/pygments-main/pygments/styles/autumn.py +65 -0
- data/vendor/pygments-main/pygments/styles/borland.py +51 -0
- data/vendor/pygments-main/pygments/styles/bw.py +49 -0
- data/vendor/pygments-main/pygments/styles/colorful.py +81 -0
- data/vendor/pygments-main/pygments/styles/default.py +73 -0
- data/vendor/pygments-main/pygments/styles/emacs.py +72 -0
- data/vendor/pygments-main/pygments/styles/friendly.py +72 -0
- data/vendor/pygments-main/pygments/styles/fruity.py +42 -0
- data/vendor/pygments-main/pygments/styles/manni.py +75 -0
- data/vendor/pygments-main/pygments/styles/monokai.py +106 -0
- data/vendor/pygments-main/pygments/styles/murphy.py +80 -0
- data/vendor/pygments-main/pygments/styles/native.py +65 -0
- data/vendor/pygments-main/pygments/styles/pastie.py +75 -0
- data/vendor/pygments-main/pygments/styles/perldoc.py +69 -0
- data/vendor/pygments-main/pygments/styles/rrt.py +33 -0
- data/vendor/pygments-main/pygments/styles/tango.py +141 -0
- data/vendor/pygments-main/pygments/styles/trac.py +63 -0
- data/vendor/pygments-main/pygments/styles/vim.py +63 -0
- data/vendor/pygments-main/pygments/styles/vs.py +38 -0
- data/vendor/pygments-main/pygments/token.py +195 -0
- data/vendor/pygments-main/pygments/unistring.py +140 -0
- data/vendor/pygments-main/pygments/util.py +277 -0
- data/vendor/pygments-main/scripts/check_sources.py +242 -0
- data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +32 -0
- data/vendor/pygments-main/scripts/epydoc.css +280 -0
- data/vendor/pygments-main/scripts/find_codetags.py +205 -0
- data/vendor/pygments-main/scripts/find_error.py +170 -0
- data/vendor/pygments-main/scripts/get_vimkw.py +43 -0
- data/vendor/pygments-main/scripts/pylintrc +301 -0
- data/vendor/pygments-main/scripts/reindent.py +291 -0
- data/vendor/pygments-main/scripts/vim2pygments.py +933 -0
- data/vendor/pygments-main/setup.cfg +7 -0
- data/vendor/pygments-main/setup.py +90 -0
- data/vendor/pygments-main/tests/dtds/HTML4-f.dtd +37 -0
- data/vendor/pygments-main/tests/dtds/HTML4-s.dtd +869 -0
- data/vendor/pygments-main/tests/dtds/HTML4.dcl +88 -0
- data/vendor/pygments-main/tests/dtds/HTML4.dtd +1092 -0
- data/vendor/pygments-main/tests/dtds/HTML4.soc +9 -0
- data/vendor/pygments-main/tests/dtds/HTMLlat1.ent +195 -0
- data/vendor/pygments-main/tests/dtds/HTMLspec.ent +77 -0
- data/vendor/pygments-main/tests/dtds/HTMLsym.ent +241 -0
- data/vendor/pygments-main/tests/examplefiles/ANTLRv3.g +608 -0
- data/vendor/pygments-main/tests/examplefiles/AcidStateAdvanced.hs +209 -0
- data/vendor/pygments-main/tests/examplefiles/AlternatingGroup.mu +102 -0
- data/vendor/pygments-main/tests/examplefiles/BOM.js +1 -0
- data/vendor/pygments-main/tests/examplefiles/CPDictionary.j +611 -0
- data/vendor/pygments-main/tests/examplefiles/Config.in.cache +1973 -0
- data/vendor/pygments-main/tests/examplefiles/Constants.mo +158 -0
- data/vendor/pygments-main/tests/examplefiles/DancingSudoku.lhs +411 -0
- data/vendor/pygments-main/tests/examplefiles/Deflate.fs +578 -0
- data/vendor/pygments-main/tests/examplefiles/Errors.scala +18 -0
- data/vendor/pygments-main/tests/examplefiles/File.hy +174 -0
- data/vendor/pygments-main/tests/examplefiles/Get-CommandDefinitionHtml.ps1 +66 -0
- data/vendor/pygments-main/tests/examplefiles/IPDispatchC.nc +104 -0
- data/vendor/pygments-main/tests/examplefiles/IPDispatchP.nc +671 -0
- data/vendor/pygments-main/tests/examplefiles/Intro.java +1660 -0
- data/vendor/pygments-main/tests/examplefiles/Makefile +1131 -0
- data/vendor/pygments-main/tests/examplefiles/Object.st +4394 -0
- data/vendor/pygments-main/tests/examplefiles/OrderedMap.hx +584 -0
- data/vendor/pygments-main/tests/examplefiles/RoleQ.pm6 +23 -0
- data/vendor/pygments-main/tests/examplefiles/SmallCheck.hs +378 -0
- data/vendor/pygments-main/tests/examplefiles/Sorting.mod +470 -0
- data/vendor/pygments-main/tests/examplefiles/Sudoku.lhs +382 -0
- data/vendor/pygments-main/tests/examplefiles/addressbook.proto +30 -0
- data/vendor/pygments-main/tests/examplefiles/antlr_throws +1 -0
- data/vendor/pygments-main/tests/examplefiles/apache2.conf +393 -0
- data/vendor/pygments-main/tests/examplefiles/as3_test.as +143 -0
- data/vendor/pygments-main/tests/examplefiles/as3_test2.as +46 -0
- data/vendor/pygments-main/tests/examplefiles/as3_test3.as +3 -0
- data/vendor/pygments-main/tests/examplefiles/aspx-cs_example +27 -0
- data/vendor/pygments-main/tests/examplefiles/autoit_submit.au3 +25 -0
- data/vendor/pygments-main/tests/examplefiles/badcase.java +2 -0
- data/vendor/pygments-main/tests/examplefiles/batchfile.bat +49 -0
- data/vendor/pygments-main/tests/examplefiles/bigtest.nsi +308 -0
- data/vendor/pygments-main/tests/examplefiles/boot-9.scm +1557 -0
- data/vendor/pygments-main/tests/examplefiles/ca65_example +284 -0
- data/vendor/pygments-main/tests/examplefiles/cbmbas_example +9 -0
- data/vendor/pygments-main/tests/examplefiles/cells.ps +515 -0
- data/vendor/pygments-main/tests/examplefiles/ceval.c +2604 -0
- data/vendor/pygments-main/tests/examplefiles/cheetah_example.html +13 -0
- data/vendor/pygments-main/tests/examplefiles/classes.dylan +125 -0
- data/vendor/pygments-main/tests/examplefiles/condensed_ruby.rb +10 -0
- data/vendor/pygments-main/tests/examplefiles/coq_RelationClasses +447 -0
- data/vendor/pygments-main/tests/examplefiles/database.pytb +20 -0
- data/vendor/pygments-main/tests/examplefiles/de.MoinMoin.po +2461 -0
- data/vendor/pygments-main/tests/examplefiles/demo.ahk +181 -0
- data/vendor/pygments-main/tests/examplefiles/demo.cfm +38 -0
- data/vendor/pygments-main/tests/examplefiles/django_sample.html+django +68 -0
- data/vendor/pygments-main/tests/examplefiles/dwarf.cw +17 -0
- data/vendor/pygments-main/tests/examplefiles/erl_session +10 -0
- data/vendor/pygments-main/tests/examplefiles/escape_semicolon.clj +1 -0
- data/vendor/pygments-main/tests/examplefiles/evil_regex.js +48 -0
- data/vendor/pygments-main/tests/examplefiles/example.Rd +78 -0
- data/vendor/pygments-main/tests/examplefiles/example.bug +54 -0
- data/vendor/pygments-main/tests/examplefiles/example.c +2080 -0
- data/vendor/pygments-main/tests/examplefiles/example.ceylon +52 -0
- data/vendor/pygments-main/tests/examplefiles/example.clay +33 -0
- data/vendor/pygments-main/tests/examplefiles/example.cls +15 -0
- data/vendor/pygments-main/tests/examplefiles/example.cob +3556 -0
- data/vendor/pygments-main/tests/examplefiles/example.cpp +2363 -0
- data/vendor/pygments-main/tests/examplefiles/example.gs +106 -0
- data/vendor/pygments-main/tests/examplefiles/example.gst +7 -0
- data/vendor/pygments-main/tests/examplefiles/example.hx +142 -0
- data/vendor/pygments-main/tests/examplefiles/example.jag +48 -0
- data/vendor/pygments-main/tests/examplefiles/example.kt +47 -0
- data/vendor/pygments-main/tests/examplefiles/example.lagda +19 -0
- data/vendor/pygments-main/tests/examplefiles/example.lua +250 -0
- data/vendor/pygments-main/tests/examplefiles/example.monkey +152 -0
- data/vendor/pygments-main/tests/examplefiles/example.moo +26 -0
- data/vendor/pygments-main/tests/examplefiles/example.moon +629 -0
- data/vendor/pygments-main/tests/examplefiles/example.msc +43 -0
- data/vendor/pygments-main/tests/examplefiles/example.nim +1010 -0
- data/vendor/pygments-main/tests/examplefiles/example.ns2 +69 -0
- data/vendor/pygments-main/tests/examplefiles/example.p +34 -0
- data/vendor/pygments-main/tests/examplefiles/example.pas +2708 -0
- data/vendor/pygments-main/tests/examplefiles/example.prg +161 -0
- data/vendor/pygments-main/tests/examplefiles/example.rb +1852 -0
- data/vendor/pygments-main/tests/examplefiles/example.reg +19 -0
- data/vendor/pygments-main/tests/examplefiles/example.rexx +50 -0
- data/vendor/pygments-main/tests/examplefiles/example.rhtml +561 -0
- data/vendor/pygments-main/tests/examplefiles/example.rkt +95 -0
- data/vendor/pygments-main/tests/examplefiles/example.rpf +4 -0
- data/vendor/pygments-main/tests/examplefiles/example.sh-session +19 -0
- data/vendor/pygments-main/tests/examplefiles/example.shell-session +45 -0
- data/vendor/pygments-main/tests/examplefiles/example.sml +156 -0
- data/vendor/pygments-main/tests/examplefiles/example.snobol +15 -0
- data/vendor/pygments-main/tests/examplefiles/example.stan +108 -0
- data/vendor/pygments-main/tests/examplefiles/example.tea +34 -0
- data/vendor/pygments-main/tests/examplefiles/example.ts +28 -0
- data/vendor/pygments-main/tests/examplefiles/example.u +548 -0
- data/vendor/pygments-main/tests/examplefiles/example.weechatlog +9 -0
- data/vendor/pygments-main/tests/examplefiles/example.xhtml +376 -0
- data/vendor/pygments-main/tests/examplefiles/example.xtend +34 -0
- data/vendor/pygments-main/tests/examplefiles/example.yaml +302 -0
- data/vendor/pygments-main/tests/examplefiles/example2.aspx +29 -0
- data/vendor/pygments-main/tests/examplefiles/example2.msc +79 -0
- data/vendor/pygments-main/tests/examplefiles/example_elixir.ex +363 -0
- data/vendor/pygments-main/tests/examplefiles/example_file.fy +128 -0
- data/vendor/pygments-main/tests/examplefiles/firefox.mak +586 -0
- data/vendor/pygments-main/tests/examplefiles/flipflop.sv +19 -0
- data/vendor/pygments-main/tests/examplefiles/foo.sce +6 -0
- data/vendor/pygments-main/tests/examplefiles/format.ml +1213 -0
- data/vendor/pygments-main/tests/examplefiles/fucked_up.rb +77 -0
- data/vendor/pygments-main/tests/examplefiles/function.mu +1 -0
- data/vendor/pygments-main/tests/examplefiles/functional.rst +1472 -0
- data/vendor/pygments-main/tests/examplefiles/garcia-wachs.kk +133 -0
- data/vendor/pygments-main/tests/examplefiles/genclass.clj +510 -0
- data/vendor/pygments-main/tests/examplefiles/genshi_example.xml+genshi +193 -0
- data/vendor/pygments-main/tests/examplefiles/genshitext_example.genshitext +33 -0
- data/vendor/pygments-main/tests/examplefiles/glsl.frag +7 -0
- data/vendor/pygments-main/tests/examplefiles/glsl.vert +13 -0
- data/vendor/pygments-main/tests/examplefiles/grammar-test.p6 +22 -0
- data/vendor/pygments-main/tests/examplefiles/hello.smali +40 -0
- data/vendor/pygments-main/tests/examplefiles/hello.sp +9 -0
- data/vendor/pygments-main/tests/examplefiles/html+php_faulty.php +1 -0
- data/vendor/pygments-main/tests/examplefiles/http_request_example +15 -0
- data/vendor/pygments-main/tests/examplefiles/http_response_example +29 -0
- data/vendor/pygments-main/tests/examplefiles/import.hs +4 -0
- data/vendor/pygments-main/tests/examplefiles/inet_pton6.dg +71 -0
- data/vendor/pygments-main/tests/examplefiles/intro.ik +24 -0
- data/vendor/pygments-main/tests/examplefiles/ints.php +10 -0
- data/vendor/pygments-main/tests/examplefiles/intsyn.fun +675 -0
- data/vendor/pygments-main/tests/examplefiles/intsyn.sig +286 -0
- data/vendor/pygments-main/tests/examplefiles/irb_heredoc +8 -0
- data/vendor/pygments-main/tests/examplefiles/irc.lsp +214 -0
- data/vendor/pygments-main/tests/examplefiles/java.properties +16 -0
- data/vendor/pygments-main/tests/examplefiles/jbst_example1.jbst +28 -0
- data/vendor/pygments-main/tests/examplefiles/jbst_example2.jbst +45 -0
- data/vendor/pygments-main/tests/examplefiles/jinjadesignerdoc.rst +713 -0
- data/vendor/pygments-main/tests/examplefiles/json.lasso +301 -0
- data/vendor/pygments-main/tests/examplefiles/json.lasso9 +213 -0
- data/vendor/pygments-main/tests/examplefiles/lighttpd_config.conf +13 -0
- data/vendor/pygments-main/tests/examplefiles/linecontinuation.py +47 -0
- data/vendor/pygments-main/tests/examplefiles/livescript-demo.ls +41 -0
- data/vendor/pygments-main/tests/examplefiles/logos_example.xm +28 -0
- data/vendor/pygments-main/tests/examplefiles/ltmain.sh +2849 -0
- data/vendor/pygments-main/tests/examplefiles/main.cmake +42 -0
- data/vendor/pygments-main/tests/examplefiles/markdown.lsp +679 -0
- data/vendor/pygments-main/tests/examplefiles/matlab_noreturn +3 -0
- data/vendor/pygments-main/tests/examplefiles/matlab_sample +30 -0
- data/vendor/pygments-main/tests/examplefiles/matlabsession_sample.txt +37 -0
- data/vendor/pygments-main/tests/examplefiles/metagrammar.treetop +455 -0
- data/vendor/pygments-main/tests/examplefiles/mg_sample.pro +73 -0
- data/vendor/pygments-main/tests/examplefiles/minehunt.qml +112 -0
- data/vendor/pygments-main/tests/examplefiles/minimal.ns2 +4 -0
- data/vendor/pygments-main/tests/examplefiles/moin_SyntaxReference.txt +340 -0
- data/vendor/pygments-main/tests/examplefiles/multiline_regexes.rb +38 -0
- data/vendor/pygments-main/tests/examplefiles/nanomsg.intr +95 -0
- data/vendor/pygments-main/tests/examplefiles/nasm_aoutso.asm +96 -0
- data/vendor/pygments-main/tests/examplefiles/nasm_objexe.asm +30 -0
- data/vendor/pygments-main/tests/examplefiles/nemerle_sample.n +87 -0
- data/vendor/pygments-main/tests/examplefiles/nginx_nginx.conf +118 -0
- data/vendor/pygments-main/tests/examplefiles/numbers.c +12 -0
- data/vendor/pygments-main/tests/examplefiles/objc_example.m +32 -0
- data/vendor/pygments-main/tests/examplefiles/objc_example2.m +24 -0
- data/vendor/pygments-main/tests/examplefiles/perl_misc +62 -0
- data/vendor/pygments-main/tests/examplefiles/perl_perl5db +998 -0
- data/vendor/pygments-main/tests/examplefiles/perl_regex-delims +120 -0
- data/vendor/pygments-main/tests/examplefiles/perlfunc.1 +856 -0
- data/vendor/pygments-main/tests/examplefiles/phpMyAdmin.spec +163 -0
- data/vendor/pygments-main/tests/examplefiles/phpcomplete.vim +567 -0
- data/vendor/pygments-main/tests/examplefiles/pleac.in.rb +1223 -0
- data/vendor/pygments-main/tests/examplefiles/postgresql_test.txt +47 -0
- data/vendor/pygments-main/tests/examplefiles/pppoe.applescript +10 -0
- data/vendor/pygments-main/tests/examplefiles/psql_session.txt +122 -0
- data/vendor/pygments-main/tests/examplefiles/py3_test.txt +2 -0
- data/vendor/pygments-main/tests/examplefiles/py3tb_test.py3tb +4 -0
- data/vendor/pygments-main/tests/examplefiles/pycon_test.pycon +14 -0
- data/vendor/pygments-main/tests/examplefiles/pytb_test2.pytb +2 -0
- data/vendor/pygments-main/tests/examplefiles/pytb_test3.pytb +4 -0
- data/vendor/pygments-main/tests/examplefiles/python25-bsd.mak +234 -0
- data/vendor/pygments-main/tests/examplefiles/qsort.prolog +13 -0
- data/vendor/pygments-main/tests/examplefiles/r-console-transcript.Rout +38 -0
- data/vendor/pygments-main/tests/examplefiles/ragel-cpp_rlscan +280 -0
- data/vendor/pygments-main/tests/examplefiles/ragel-cpp_snippet +2 -0
- data/vendor/pygments-main/tests/examplefiles/regex.js +22 -0
- data/vendor/pygments-main/tests/examplefiles/reversi.lsp +427 -0
- data/vendor/pygments-main/tests/examplefiles/robotframework.txt +39 -0
- data/vendor/pygments-main/tests/examplefiles/ruby_func_def.rb +11 -0
- data/vendor/pygments-main/tests/examplefiles/rust_example.rs +233 -0
- data/vendor/pygments-main/tests/examplefiles/scilab.sci +30 -0
- data/vendor/pygments-main/tests/examplefiles/session.dylan-console +9 -0
- data/vendor/pygments-main/tests/examplefiles/sibling.prolog +19 -0
- data/vendor/pygments-main/tests/examplefiles/simple.md +747 -0
- data/vendor/pygments-main/tests/examplefiles/smarty_example.html +209 -0
- data/vendor/pygments-main/tests/examplefiles/source.lgt +343 -0
- data/vendor/pygments-main/tests/examplefiles/sources.list +62 -0
- data/vendor/pygments-main/tests/examplefiles/sphere.pov +18 -0
- data/vendor/pygments-main/tests/examplefiles/sqlite3.sqlite3-console +27 -0
- data/vendor/pygments-main/tests/examplefiles/squid.conf +30 -0
- data/vendor/pygments-main/tests/examplefiles/string.jl +1031 -0
- data/vendor/pygments-main/tests/examplefiles/string_delimiters.d +21 -0
- data/vendor/pygments-main/tests/examplefiles/stripheredoc.sh +3 -0
- data/vendor/pygments-main/tests/examplefiles/swig_java.swg +1329 -0
- data/vendor/pygments-main/tests/examplefiles/swig_std_vector.i +225 -0
- data/vendor/pygments-main/tests/examplefiles/test.R +153 -0
- data/vendor/pygments-main/tests/examplefiles/test.adb +211 -0
- data/vendor/pygments-main/tests/examplefiles/test.agda +102 -0
- data/vendor/pygments-main/tests/examplefiles/test.asy +131 -0
- data/vendor/pygments-main/tests/examplefiles/test.awk +121 -0
- data/vendor/pygments-main/tests/examplefiles/test.bas +29 -0
- data/vendor/pygments-main/tests/examplefiles/test.bb +95 -0
- data/vendor/pygments-main/tests/examplefiles/test.bmx +145 -0
- data/vendor/pygments-main/tests/examplefiles/test.boo +39 -0
- data/vendor/pygments-main/tests/examplefiles/test.bro +250 -0
- data/vendor/pygments-main/tests/examplefiles/test.cs +374 -0
- data/vendor/pygments-main/tests/examplefiles/test.css +54 -0
- data/vendor/pygments-main/tests/examplefiles/test.cu +36 -0
- data/vendor/pygments-main/tests/examplefiles/test.d +135 -0
- data/vendor/pygments-main/tests/examplefiles/test.dart +23 -0
- data/vendor/pygments-main/tests/examplefiles/test.dtd +89 -0
- data/vendor/pygments-main/tests/examplefiles/test.ebnf +31 -0
- data/vendor/pygments-main/tests/examplefiles/test.ec +605 -0
- data/vendor/pygments-main/tests/examplefiles/test.ecl +58 -0
- data/vendor/pygments-main/tests/examplefiles/test.eh +315 -0
- data/vendor/pygments-main/tests/examplefiles/test.erl +169 -0
- data/vendor/pygments-main/tests/examplefiles/test.evoque +33 -0
- data/vendor/pygments-main/tests/examplefiles/test.fan +818 -0
- data/vendor/pygments-main/tests/examplefiles/test.flx +57 -0
- data/vendor/pygments-main/tests/examplefiles/test.gdc +13 -0
- data/vendor/pygments-main/tests/examplefiles/test.groovy +97 -0
- data/vendor/pygments-main/tests/examplefiles/test.html +339 -0
- data/vendor/pygments-main/tests/examplefiles/test.ini +10 -0
- data/vendor/pygments-main/tests/examplefiles/test.java +653 -0
- data/vendor/pygments-main/tests/examplefiles/test.jsp +24 -0
- data/vendor/pygments-main/tests/examplefiles/test.maql +45 -0
- data/vendor/pygments-main/tests/examplefiles/test.mod +374 -0
- data/vendor/pygments-main/tests/examplefiles/test.moo +51 -0
- data/vendor/pygments-main/tests/examplefiles/test.myt +166 -0
- data/vendor/pygments-main/tests/examplefiles/test.nim +93 -0
- data/vendor/pygments-main/tests/examplefiles/test.opa +10 -0
- data/vendor/pygments-main/tests/examplefiles/test.p6 +252 -0
- data/vendor/pygments-main/tests/examplefiles/test.pas +743 -0
- data/vendor/pygments-main/tests/examplefiles/test.php +505 -0
- data/vendor/pygments-main/tests/examplefiles/test.plot +333 -0
- data/vendor/pygments-main/tests/examplefiles/test.ps1 +108 -0
- data/vendor/pygments-main/tests/examplefiles/test.pypylog +1839 -0
- data/vendor/pygments-main/tests/examplefiles/test.r3 +94 -0
- data/vendor/pygments-main/tests/examplefiles/test.rb +177 -0
- data/vendor/pygments-main/tests/examplefiles/test.rhtml +43 -0
- data/vendor/pygments-main/tests/examplefiles/test.scaml +8 -0
- data/vendor/pygments-main/tests/examplefiles/test.ssp +12 -0
- data/vendor/pygments-main/tests/examplefiles/test.tcsh +830 -0
- data/vendor/pygments-main/tests/examplefiles/test.vb +407 -0
- data/vendor/pygments-main/tests/examplefiles/test.vhdl +161 -0
- data/vendor/pygments-main/tests/examplefiles/test.xqy +138 -0
- data/vendor/pygments-main/tests/examplefiles/test.xsl +23 -0
- data/vendor/pygments-main/tests/examplefiles/test2.pypylog +120 -0
- data/vendor/pygments-main/tests/examplefiles/truncated.pytb +15 -0
- data/vendor/pygments-main/tests/examplefiles/type.lisp +1218 -0
- data/vendor/pygments-main/tests/examplefiles/underscore.coffee +603 -0
- data/vendor/pygments-main/tests/examplefiles/unicode.applescript +5 -0
- data/vendor/pygments-main/tests/examplefiles/unicodedoc.py +11 -0
- data/vendor/pygments-main/tests/examplefiles/unix-io.lid +37 -0
- data/vendor/pygments-main/tests/examplefiles/webkit-transition.css +3 -0
- data/vendor/pygments-main/tests/examplefiles/while.pov +13 -0
- data/vendor/pygments-main/tests/examplefiles/wiki.factor +384 -0
- data/vendor/pygments-main/tests/examplefiles/xml_example +1897 -0
- data/vendor/pygments-main/tests/examplefiles/zmlrpc.f90 +798 -0
- data/vendor/pygments-main/tests/old_run.py +138 -0
- data/vendor/pygments-main/tests/run.py +49 -0
- data/vendor/pygments-main/tests/support/tags +36 -0
- data/vendor/pygments-main/tests/support.py +15 -0
- data/vendor/pygments-main/tests/test_basic_api.py +295 -0
- data/vendor/pygments-main/tests/test_clexer.py +31 -0
- data/vendor/pygments-main/tests/test_cmdline.py +105 -0
- data/vendor/pygments-main/tests/test_examplefiles.py +99 -0
- data/vendor/pygments-main/tests/test_html_formatter.py +178 -0
- data/vendor/pygments-main/tests/test_latex_formatter.py +55 -0
- data/vendor/pygments-main/tests/test_lexers_other.py +68 -0
- data/vendor/pygments-main/tests/test_perllexer.py +137 -0
- data/vendor/pygments-main/tests/test_regexlexer.py +47 -0
- data/vendor/pygments-main/tests/test_token.py +46 -0
- data/vendor/pygments-main/tests/test_using_api.py +40 -0
- data/vendor/pygments-main/tests/test_util.py +135 -0
- data/vendor/simplejson/.gitignore +10 -0
- data/vendor/simplejson/.travis.yml +5 -0
- data/vendor/simplejson/CHANGES.txt +291 -0
- data/vendor/simplejson/LICENSE.txt +19 -0
- data/vendor/simplejson/MANIFEST.in +5 -0
- data/vendor/simplejson/README.rst +19 -0
- data/vendor/simplejson/conf.py +179 -0
- data/vendor/simplejson/index.rst +628 -0
- data/vendor/simplejson/scripts/make_docs.py +18 -0
- data/vendor/simplejson/setup.py +104 -0
- data/vendor/simplejson/simplejson/__init__.py +510 -0
- data/vendor/simplejson/simplejson/_speedups.c +2745 -0
- data/vendor/simplejson/simplejson/decoder.py +425 -0
- data/vendor/simplejson/simplejson/encoder.py +567 -0
- data/vendor/simplejson/simplejson/ordered_dict.py +119 -0
- data/vendor/simplejson/simplejson/scanner.py +77 -0
- data/vendor/simplejson/simplejson/tests/__init__.py +67 -0
- data/vendor/simplejson/simplejson/tests/test_bigint_as_string.py +55 -0
- data/vendor/simplejson/simplejson/tests/test_check_circular.py +30 -0
- data/vendor/simplejson/simplejson/tests/test_decimal.py +66 -0
- data/vendor/simplejson/simplejson/tests/test_decode.py +83 -0
- data/vendor/simplejson/simplejson/tests/test_default.py +9 -0
- data/vendor/simplejson/simplejson/tests/test_dump.py +67 -0
- data/vendor/simplejson/simplejson/tests/test_encode_basestring_ascii.py +46 -0
- data/vendor/simplejson/simplejson/tests/test_encode_for_html.py +32 -0
- data/vendor/simplejson/simplejson/tests/test_errors.py +34 -0
- data/vendor/simplejson/simplejson/tests/test_fail.py +91 -0
- data/vendor/simplejson/simplejson/tests/test_float.py +19 -0
- data/vendor/simplejson/simplejson/tests/test_indent.py +86 -0
- data/vendor/simplejson/simplejson/tests/test_item_sort_key.py +20 -0
- data/vendor/simplejson/simplejson/tests/test_namedtuple.py +121 -0
- data/vendor/simplejson/simplejson/tests/test_pass1.py +76 -0
- data/vendor/simplejson/simplejson/tests/test_pass2.py +14 -0
- data/vendor/simplejson/simplejson/tests/test_pass3.py +20 -0
- data/vendor/simplejson/simplejson/tests/test_recursion.py +67 -0
- data/vendor/simplejson/simplejson/tests/test_scanstring.py +117 -0
- data/vendor/simplejson/simplejson/tests/test_separators.py +42 -0
- data/vendor/simplejson/simplejson/tests/test_speedups.py +20 -0
- data/vendor/simplejson/simplejson/tests/test_tuple.py +49 -0
- data/vendor/simplejson/simplejson/tests/test_unicode.py +109 -0
- data/vendor/simplejson/simplejson/tool.py +39 -0
- metadata +566 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
Pygments tests with example files
|
|
4
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
5
|
+
|
|
6
|
+
:copyright: Copyright 2006-2013 by the Pygments team, see AUTHORS.
|
|
7
|
+
:license: BSD, see LICENSE for details.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
import os
|
|
11
|
+
import pprint
|
|
12
|
+
import difflib
|
|
13
|
+
import cPickle as pickle
|
|
14
|
+
|
|
15
|
+
from pygments.lexers import get_lexer_for_filename, get_lexer_by_name
|
|
16
|
+
from pygments.token import Error
|
|
17
|
+
from pygments.util import ClassNotFound, b
|
|
18
|
+
|
|
19
|
+
STORE_OUTPUT = False
|
|
20
|
+
|
|
21
|
+
# generate methods
|
|
22
|
+
def test_example_files():
|
|
23
|
+
testdir = os.path.dirname(__file__)
|
|
24
|
+
outdir = os.path.join(testdir, 'examplefiles', 'output')
|
|
25
|
+
if STORE_OUTPUT and not os.path.isdir(outdir):
|
|
26
|
+
os.makedirs(outdir)
|
|
27
|
+
for fn in os.listdir(os.path.join(testdir, 'examplefiles')):
|
|
28
|
+
if fn.startswith('.') or fn.endswith('#'):
|
|
29
|
+
continue
|
|
30
|
+
|
|
31
|
+
absfn = os.path.join(testdir, 'examplefiles', fn)
|
|
32
|
+
if not os.path.isfile(absfn):
|
|
33
|
+
continue
|
|
34
|
+
outfn = os.path.join(outdir, fn)
|
|
35
|
+
|
|
36
|
+
try:
|
|
37
|
+
lx = get_lexer_for_filename(absfn)
|
|
38
|
+
except ClassNotFound:
|
|
39
|
+
if "_" not in fn:
|
|
40
|
+
raise AssertionError('file %r has no registered extension, '
|
|
41
|
+
'nor is of the form <lexer>_filename '
|
|
42
|
+
'for overriding, thus no lexer found.'
|
|
43
|
+
% fn)
|
|
44
|
+
try:
|
|
45
|
+
name, rest = fn.split("_", 1)
|
|
46
|
+
lx = get_lexer_by_name(name)
|
|
47
|
+
except ClassNotFound:
|
|
48
|
+
raise AssertionError('no lexer found for file %r' % fn)
|
|
49
|
+
yield check_lexer, lx, absfn, outfn
|
|
50
|
+
|
|
51
|
+
def check_lexer(lx, absfn, outfn):
|
|
52
|
+
fp = open(absfn, 'rb')
|
|
53
|
+
try:
|
|
54
|
+
text = fp.read()
|
|
55
|
+
finally:
|
|
56
|
+
fp.close()
|
|
57
|
+
text = text.replace(b('\r\n'), b('\n'))
|
|
58
|
+
text = text.strip(b('\n')) + b('\n')
|
|
59
|
+
try:
|
|
60
|
+
text = text.decode('utf-8')
|
|
61
|
+
if text.startswith(u'\ufeff'):
|
|
62
|
+
text = text[len(u'\ufeff'):]
|
|
63
|
+
except UnicodeError:
|
|
64
|
+
text = text.decode('latin1')
|
|
65
|
+
ntext = []
|
|
66
|
+
tokens = []
|
|
67
|
+
for type, val in lx.get_tokens(text):
|
|
68
|
+
ntext.append(val)
|
|
69
|
+
assert type != Error, \
|
|
70
|
+
'lexer %s generated error token for %s: %r at position %d' % \
|
|
71
|
+
(lx, absfn, val, len(u''.join(ntext)))
|
|
72
|
+
tokens.append((type, val))
|
|
73
|
+
if u''.join(ntext) != text:
|
|
74
|
+
print '\n'.join(difflib.unified_diff(u''.join(ntext).splitlines(),
|
|
75
|
+
text.splitlines()))
|
|
76
|
+
raise AssertionError('round trip failed for ' + absfn)
|
|
77
|
+
|
|
78
|
+
# check output against previous run if enabled
|
|
79
|
+
if STORE_OUTPUT:
|
|
80
|
+
# no previous output -- store it
|
|
81
|
+
if not os.path.isfile(outfn):
|
|
82
|
+
fp = open(outfn, 'wb')
|
|
83
|
+
try:
|
|
84
|
+
pickle.dump(tokens, fp)
|
|
85
|
+
finally:
|
|
86
|
+
fp.close()
|
|
87
|
+
return
|
|
88
|
+
# otherwise load it and compare
|
|
89
|
+
fp = open(outfn, 'rb')
|
|
90
|
+
try:
|
|
91
|
+
stored_tokens = pickle.load(fp)
|
|
92
|
+
finally:
|
|
93
|
+
fp.close()
|
|
94
|
+
if stored_tokens != tokens:
|
|
95
|
+
f1 = pprint.pformat(stored_tokens)
|
|
96
|
+
f2 = pprint.pformat(tokens)
|
|
97
|
+
print '\n'.join(difflib.unified_diff(f1.splitlines(),
|
|
98
|
+
f2.splitlines()))
|
|
99
|
+
assert False, absfn
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
Pygments HTML formatter tests
|
|
4
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
5
|
+
|
|
6
|
+
:copyright: Copyright 2006-2013 by the Pygments team, see AUTHORS.
|
|
7
|
+
:license: BSD, see LICENSE for details.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
import os
|
|
11
|
+
import re
|
|
12
|
+
import unittest
|
|
13
|
+
import StringIO
|
|
14
|
+
import tempfile
|
|
15
|
+
from os.path import join, dirname, isfile
|
|
16
|
+
|
|
17
|
+
from pygments.lexers import PythonLexer
|
|
18
|
+
from pygments.formatters import HtmlFormatter, NullFormatter
|
|
19
|
+
from pygments.formatters.html import escape_html
|
|
20
|
+
from pygments.util import uni_open
|
|
21
|
+
|
|
22
|
+
import support
|
|
23
|
+
|
|
24
|
+
TESTFILE, TESTDIR = support.location(__file__)
|
|
25
|
+
|
|
26
|
+
fp = uni_open(TESTFILE, encoding='utf-8')
|
|
27
|
+
try:
|
|
28
|
+
tokensource = list(PythonLexer().get_tokens(fp.read()))
|
|
29
|
+
finally:
|
|
30
|
+
fp.close()
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class HtmlFormatterTest(unittest.TestCase):
|
|
34
|
+
def test_correct_output(self):
|
|
35
|
+
hfmt = HtmlFormatter(nowrap=True)
|
|
36
|
+
houtfile = StringIO.StringIO()
|
|
37
|
+
hfmt.format(tokensource, houtfile)
|
|
38
|
+
|
|
39
|
+
nfmt = NullFormatter()
|
|
40
|
+
noutfile = StringIO.StringIO()
|
|
41
|
+
nfmt.format(tokensource, noutfile)
|
|
42
|
+
|
|
43
|
+
stripped_html = re.sub('<.*?>', '', houtfile.getvalue())
|
|
44
|
+
escaped_text = escape_html(noutfile.getvalue())
|
|
45
|
+
self.assertEqual(stripped_html, escaped_text)
|
|
46
|
+
|
|
47
|
+
def test_external_css(self):
|
|
48
|
+
# test correct behavior
|
|
49
|
+
# CSS should be in /tmp directory
|
|
50
|
+
fmt1 = HtmlFormatter(full=True, cssfile='fmt1.css', outencoding='utf-8')
|
|
51
|
+
# CSS should be in TESTDIR (TESTDIR is absolute)
|
|
52
|
+
fmt2 = HtmlFormatter(full=True, cssfile=join(TESTDIR, 'fmt2.css'),
|
|
53
|
+
outencoding='utf-8')
|
|
54
|
+
tfile = tempfile.NamedTemporaryFile(suffix='.html')
|
|
55
|
+
fmt1.format(tokensource, tfile)
|
|
56
|
+
try:
|
|
57
|
+
fmt2.format(tokensource, tfile)
|
|
58
|
+
self.assertTrue(isfile(join(TESTDIR, 'fmt2.css')))
|
|
59
|
+
except IOError:
|
|
60
|
+
# test directory not writable
|
|
61
|
+
pass
|
|
62
|
+
tfile.close()
|
|
63
|
+
|
|
64
|
+
self.assertTrue(isfile(join(dirname(tfile.name), 'fmt1.css')))
|
|
65
|
+
os.unlink(join(dirname(tfile.name), 'fmt1.css'))
|
|
66
|
+
try:
|
|
67
|
+
os.unlink(join(TESTDIR, 'fmt2.css'))
|
|
68
|
+
except OSError:
|
|
69
|
+
pass
|
|
70
|
+
|
|
71
|
+
def test_all_options(self):
|
|
72
|
+
for optdict in [dict(nowrap=True),
|
|
73
|
+
dict(linenos=True),
|
|
74
|
+
dict(linenos=True, full=True),
|
|
75
|
+
dict(linenos=True, full=True, noclasses=True)]:
|
|
76
|
+
|
|
77
|
+
outfile = StringIO.StringIO()
|
|
78
|
+
fmt = HtmlFormatter(**optdict)
|
|
79
|
+
fmt.format(tokensource, outfile)
|
|
80
|
+
|
|
81
|
+
def test_linenos(self):
|
|
82
|
+
optdict = dict(linenos=True)
|
|
83
|
+
outfile = StringIO.StringIO()
|
|
84
|
+
fmt = HtmlFormatter(**optdict)
|
|
85
|
+
fmt.format(tokensource, outfile)
|
|
86
|
+
html = outfile.getvalue()
|
|
87
|
+
self.assertTrue(re.search("<pre>\s+1\s+2\s+3", html))
|
|
88
|
+
|
|
89
|
+
def test_linenos_with_startnum(self):
|
|
90
|
+
optdict = dict(linenos=True, linenostart=5)
|
|
91
|
+
outfile = StringIO.StringIO()
|
|
92
|
+
fmt = HtmlFormatter(**optdict)
|
|
93
|
+
fmt.format(tokensource, outfile)
|
|
94
|
+
html = outfile.getvalue()
|
|
95
|
+
self.assertTrue(re.search("<pre>\s+5\s+6\s+7", html))
|
|
96
|
+
|
|
97
|
+
def test_lineanchors(self):
|
|
98
|
+
optdict = dict(lineanchors="foo")
|
|
99
|
+
outfile = StringIO.StringIO()
|
|
100
|
+
fmt = HtmlFormatter(**optdict)
|
|
101
|
+
fmt.format(tokensource, outfile)
|
|
102
|
+
html = outfile.getvalue()
|
|
103
|
+
self.assertTrue(re.search("<pre><a name=\"foo-1\">", html))
|
|
104
|
+
|
|
105
|
+
def test_lineanchors_with_startnum(self):
|
|
106
|
+
optdict = dict(lineanchors="foo", linenostart=5)
|
|
107
|
+
outfile = StringIO.StringIO()
|
|
108
|
+
fmt = HtmlFormatter(**optdict)
|
|
109
|
+
fmt.format(tokensource, outfile)
|
|
110
|
+
html = outfile.getvalue()
|
|
111
|
+
self.assertTrue(re.search("<pre><a name=\"foo-5\">", html))
|
|
112
|
+
|
|
113
|
+
def test_valid_output(self):
|
|
114
|
+
# test all available wrappers
|
|
115
|
+
fmt = HtmlFormatter(full=True, linenos=True, noclasses=True,
|
|
116
|
+
outencoding='utf-8')
|
|
117
|
+
|
|
118
|
+
handle, pathname = tempfile.mkstemp('.html')
|
|
119
|
+
tfile = os.fdopen(handle, 'w+b')
|
|
120
|
+
fmt.format(tokensource, tfile)
|
|
121
|
+
tfile.close()
|
|
122
|
+
catname = os.path.join(TESTDIR, 'dtds', 'HTML4.soc')
|
|
123
|
+
try:
|
|
124
|
+
import subprocess
|
|
125
|
+
po = subprocess.Popen(['nsgmls', '-s', '-c', catname, pathname],
|
|
126
|
+
stdout=subprocess.PIPE)
|
|
127
|
+
ret = po.wait()
|
|
128
|
+
output = po.stdout.read()
|
|
129
|
+
po.stdout.close()
|
|
130
|
+
except OSError:
|
|
131
|
+
# nsgmls not available
|
|
132
|
+
pass
|
|
133
|
+
else:
|
|
134
|
+
if ret:
|
|
135
|
+
print output
|
|
136
|
+
self.assertFalse(ret, 'nsgmls run reported errors')
|
|
137
|
+
|
|
138
|
+
os.unlink(pathname)
|
|
139
|
+
|
|
140
|
+
def test_get_style_defs(self):
|
|
141
|
+
fmt = HtmlFormatter()
|
|
142
|
+
sd = fmt.get_style_defs()
|
|
143
|
+
self.assertTrue(sd.startswith('.'))
|
|
144
|
+
|
|
145
|
+
fmt = HtmlFormatter(cssclass='foo')
|
|
146
|
+
sd = fmt.get_style_defs()
|
|
147
|
+
self.assertTrue(sd.startswith('.foo'))
|
|
148
|
+
sd = fmt.get_style_defs('.bar')
|
|
149
|
+
self.assertTrue(sd.startswith('.bar'))
|
|
150
|
+
sd = fmt.get_style_defs(['.bar', '.baz'])
|
|
151
|
+
fl = sd.splitlines()[0]
|
|
152
|
+
self.assertTrue('.bar' in fl and '.baz' in fl)
|
|
153
|
+
|
|
154
|
+
def test_unicode_options(self):
|
|
155
|
+
fmt = HtmlFormatter(title=u'Föö',
|
|
156
|
+
cssclass=u'bär',
|
|
157
|
+
cssstyles=u'div:before { content: \'bäz\' }',
|
|
158
|
+
encoding='utf-8')
|
|
159
|
+
handle, pathname = tempfile.mkstemp('.html')
|
|
160
|
+
tfile = os.fdopen(handle, 'w+b')
|
|
161
|
+
fmt.format(tokensource, tfile)
|
|
162
|
+
tfile.close()
|
|
163
|
+
|
|
164
|
+
def test_ctags(self):
|
|
165
|
+
try:
|
|
166
|
+
import ctags
|
|
167
|
+
except ImportError:
|
|
168
|
+
# we can't check without the ctags module, but at least check the exception
|
|
169
|
+
self.assertRaises(RuntimeError, HtmlFormatter, tagsfile='support/tags')
|
|
170
|
+
else:
|
|
171
|
+
# this tagfile says that test_ctags() is on line 165, even if it isn't
|
|
172
|
+
# anymore in the actual source
|
|
173
|
+
fmt = HtmlFormatter(tagsfile='support/tags', lineanchors='L',
|
|
174
|
+
tagurlformat='%(fname)s%(fext)s')
|
|
175
|
+
outfile = StringIO.StringIO()
|
|
176
|
+
fmt.format(tokensource, outfile)
|
|
177
|
+
self.assertTrue('<a href="test_html_formatter.py#L-165">test_ctags</a>'
|
|
178
|
+
in outfile.getvalue())
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
Pygments LaTeX formatter tests
|
|
4
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
5
|
+
|
|
6
|
+
:copyright: Copyright 2006-2013 by the Pygments team, see AUTHORS.
|
|
7
|
+
:license: BSD, see LICENSE for details.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
import os
|
|
11
|
+
import unittest
|
|
12
|
+
import tempfile
|
|
13
|
+
|
|
14
|
+
from pygments.formatters import LatexFormatter
|
|
15
|
+
from pygments.lexers import PythonLexer
|
|
16
|
+
|
|
17
|
+
import support
|
|
18
|
+
|
|
19
|
+
TESTFILE, TESTDIR = support.location(__file__)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class LatexFormatterTest(unittest.TestCase):
|
|
23
|
+
|
|
24
|
+
def test_valid_output(self):
|
|
25
|
+
fp = open(TESTFILE)
|
|
26
|
+
try:
|
|
27
|
+
tokensource = list(PythonLexer().get_tokens(fp.read()))
|
|
28
|
+
finally:
|
|
29
|
+
fp.close()
|
|
30
|
+
fmt = LatexFormatter(full=True, encoding='latin1')
|
|
31
|
+
|
|
32
|
+
handle, pathname = tempfile.mkstemp('.tex')
|
|
33
|
+
# place all output files in /tmp too
|
|
34
|
+
old_wd = os.getcwd()
|
|
35
|
+
os.chdir(os.path.dirname(pathname))
|
|
36
|
+
tfile = os.fdopen(handle, 'wb')
|
|
37
|
+
fmt.format(tokensource, tfile)
|
|
38
|
+
tfile.close()
|
|
39
|
+
try:
|
|
40
|
+
import subprocess
|
|
41
|
+
po = subprocess.Popen(['latex', '-interaction=nonstopmode',
|
|
42
|
+
pathname], stdout=subprocess.PIPE)
|
|
43
|
+
ret = po.wait()
|
|
44
|
+
output = po.stdout.read()
|
|
45
|
+
po.stdout.close()
|
|
46
|
+
except OSError:
|
|
47
|
+
# latex not available
|
|
48
|
+
pass
|
|
49
|
+
else:
|
|
50
|
+
if ret:
|
|
51
|
+
print output
|
|
52
|
+
self.assertFalse(ret, 'latex run reported errors')
|
|
53
|
+
|
|
54
|
+
os.unlink(pathname)
|
|
55
|
+
os.chdir(old_wd)
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
Tests for other lexers
|
|
4
|
+
~~~~~~~~~~~~~~~~~~~~~~
|
|
5
|
+
|
|
6
|
+
:copyright: Copyright 2006-2013 by the Pygments team, see AUTHORS.
|
|
7
|
+
:license: BSD, see LICENSE for details.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
import glob
|
|
11
|
+
import os
|
|
12
|
+
import unittest
|
|
13
|
+
|
|
14
|
+
from pygments.lexers import guess_lexer
|
|
15
|
+
from pygments.lexers.other import RexxLexer
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def _exampleFilePath(filename):
|
|
19
|
+
return os.path.join(os.path.dirname(__file__), 'examplefiles', filename)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class AnalyseTextTest(unittest.TestCase):
|
|
23
|
+
def _testCanRecognizeAndGuessExampleFiles(self, lexer):
|
|
24
|
+
assert lexer is not None
|
|
25
|
+
|
|
26
|
+
for pattern in lexer.filenames:
|
|
27
|
+
exampleFilesPattern = _exampleFilePath(pattern)
|
|
28
|
+
for exampleFilePath in glob.glob(exampleFilesPattern):
|
|
29
|
+
exampleFile = open(exampleFilePath, 'rb')
|
|
30
|
+
try:
|
|
31
|
+
text = exampleFile.read()
|
|
32
|
+
probability = lexer.analyse_text(text)
|
|
33
|
+
self.assertTrue(probability > 0,
|
|
34
|
+
'%s must recognize %r' % (
|
|
35
|
+
lexer.name, exampleFilePath))
|
|
36
|
+
guessedLexer = guess_lexer(text)
|
|
37
|
+
self.assertEqual(guessedLexer.name, lexer.name)
|
|
38
|
+
finally:
|
|
39
|
+
exampleFile.close()
|
|
40
|
+
|
|
41
|
+
def testCanRecognizeAndGuessExampleFiles(self):
|
|
42
|
+
self._testCanRecognizeAndGuessExampleFiles(RexxLexer)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class RexxLexerTest(unittest.TestCase):
|
|
46
|
+
def testCanGuessFromText(self):
|
|
47
|
+
self.assertAlmostEqual(0.01,
|
|
48
|
+
RexxLexer.analyse_text('/* */'))
|
|
49
|
+
self.assertAlmostEqual(1.0,
|
|
50
|
+
RexxLexer.analyse_text('''/* Rexx */
|
|
51
|
+
say "hello world"'''))
|
|
52
|
+
self.assertLess(0.5,
|
|
53
|
+
RexxLexer.analyse_text('/* */\n'
|
|
54
|
+
'hello:pRoceduRe\n'
|
|
55
|
+
' say "hello world"'))
|
|
56
|
+
self.assertLess(0.2,
|
|
57
|
+
RexxLexer.analyse_text('''/* */
|
|
58
|
+
if 1 > 0 then do
|
|
59
|
+
say "ok"
|
|
60
|
+
end
|
|
61
|
+
else do
|
|
62
|
+
say "huh?"
|
|
63
|
+
end'''))
|
|
64
|
+
self.assertLess(0.2,
|
|
65
|
+
RexxLexer.analyse_text('''/* */
|
|
66
|
+
greeting = "hello world!"
|
|
67
|
+
parse value greeting "hello" name "!"
|
|
68
|
+
say name'''))
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
Pygments regex lexer tests
|
|
4
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
5
|
+
|
|
6
|
+
:copyright: Copyright 2006-2013 by the Pygments team, see AUTHORS.
|
|
7
|
+
:license: BSD, see LICENSE for details.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
import time
|
|
11
|
+
import unittest
|
|
12
|
+
|
|
13
|
+
from pygments.token import String
|
|
14
|
+
from pygments.lexers.agile import PerlLexer
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class RunawayRegexTest(unittest.TestCase):
|
|
18
|
+
# A previous version of the Perl lexer would spend a great deal of
|
|
19
|
+
# time backtracking when given particular strings. These tests show that
|
|
20
|
+
# the runaway backtracking doesn't happen any more (at least for the given
|
|
21
|
+
# cases).
|
|
22
|
+
|
|
23
|
+
lexer = PerlLexer()
|
|
24
|
+
|
|
25
|
+
### Test helpers.
|
|
26
|
+
|
|
27
|
+
def assert_single_token(self, s, token):
|
|
28
|
+
"""Show that a given string generates only one token."""
|
|
29
|
+
tokens = list(self.lexer.get_tokens_unprocessed(s))
|
|
30
|
+
self.assertEqual(len(tokens), 1, tokens)
|
|
31
|
+
self.assertEqual(s, tokens[0][2])
|
|
32
|
+
self.assertEqual(token, tokens[0][1])
|
|
33
|
+
|
|
34
|
+
def assert_tokens(self, strings, expected_tokens):
|
|
35
|
+
"""Show that a given string generates the expected tokens."""
|
|
36
|
+
tokens = list(self.lexer.get_tokens_unprocessed(''.join(strings)))
|
|
37
|
+
self.assertEqual(len(tokens), len(expected_tokens), tokens)
|
|
38
|
+
for index, s in enumerate(strings):
|
|
39
|
+
self.assertEqual(s, tokens[index][2])
|
|
40
|
+
self.assertEqual(expected_tokens[index], tokens[index][1])
|
|
41
|
+
|
|
42
|
+
def assert_fast_tokenization(self, s):
|
|
43
|
+
"""Show that a given string is tokenized quickly."""
|
|
44
|
+
start = time.time()
|
|
45
|
+
tokens = list(self.lexer.get_tokens_unprocessed(s))
|
|
46
|
+
end = time.time()
|
|
47
|
+
# Isn't 10 seconds kind of a long time? Yes, but we don't want false
|
|
48
|
+
# positives when the tests are starved for CPU time.
|
|
49
|
+
if end-start > 10:
|
|
50
|
+
self.fail('tokenization took too long')
|
|
51
|
+
return tokens
|
|
52
|
+
|
|
53
|
+
### Strings.
|
|
54
|
+
|
|
55
|
+
def test_single_quote_strings(self):
|
|
56
|
+
self.assert_single_token(r"'foo\tbar\\\'baz'", String)
|
|
57
|
+
self.assert_fast_tokenization("'" + '\\'*999)
|
|
58
|
+
|
|
59
|
+
def test_double_quote_strings(self):
|
|
60
|
+
self.assert_single_token(r'"foo\tbar\\\"baz"', String)
|
|
61
|
+
self.assert_fast_tokenization('"' + '\\'*999)
|
|
62
|
+
|
|
63
|
+
def test_backtick_strings(self):
|
|
64
|
+
self.assert_single_token(r'`foo\tbar\\\`baz`', String.Backtick)
|
|
65
|
+
self.assert_fast_tokenization('`' + '\\'*999)
|
|
66
|
+
|
|
67
|
+
### Regex matches with various delimiters.
|
|
68
|
+
|
|
69
|
+
def test_match(self):
|
|
70
|
+
self.assert_single_token(r'/aa\tbb/', String.Regex)
|
|
71
|
+
self.assert_fast_tokenization('/' + '\\'*999)
|
|
72
|
+
|
|
73
|
+
def test_match_with_slash(self):
|
|
74
|
+
self.assert_tokens(['m', '/\n\\t\\\\/'], [String.Regex, String.Regex])
|
|
75
|
+
self.assert_fast_tokenization('m/xxx\n' + '\\'*999)
|
|
76
|
+
|
|
77
|
+
def test_match_with_bang(self):
|
|
78
|
+
self.assert_tokens(['m', r'!aa\t\!bb!'], [String.Regex, String.Regex])
|
|
79
|
+
self.assert_fast_tokenization('m!' + '\\'*999)
|
|
80
|
+
|
|
81
|
+
def test_match_with_brace(self):
|
|
82
|
+
self.assert_tokens(['m', r'{aa\t\}bb}'], [String.Regex, String.Regex])
|
|
83
|
+
self.assert_fast_tokenization('m{' + '\\'*999)
|
|
84
|
+
|
|
85
|
+
def test_match_with_angle_brackets(self):
|
|
86
|
+
self.assert_tokens(['m', r'<aa\t\>bb>'], [String.Regex, String.Regex])
|
|
87
|
+
self.assert_fast_tokenization('m<' + '\\'*999)
|
|
88
|
+
|
|
89
|
+
def test_match_with_parenthesis(self):
|
|
90
|
+
self.assert_tokens(['m', r'(aa\t\)bb)'], [String.Regex, String.Regex])
|
|
91
|
+
self.assert_fast_tokenization('m(' + '\\'*999)
|
|
92
|
+
|
|
93
|
+
def test_match_with_at_sign(self):
|
|
94
|
+
self.assert_tokens(['m', r'@aa\t\@bb@'], [String.Regex, String.Regex])
|
|
95
|
+
self.assert_fast_tokenization('m@' + '\\'*999)
|
|
96
|
+
|
|
97
|
+
def test_match_with_percent_sign(self):
|
|
98
|
+
self.assert_tokens(['m', r'%aa\t\%bb%'], [String.Regex, String.Regex])
|
|
99
|
+
self.assert_fast_tokenization('m%' + '\\'*999)
|
|
100
|
+
|
|
101
|
+
def test_match_with_dollar_sign(self):
|
|
102
|
+
self.assert_tokens(['m', r'$aa\t\$bb$'], [String.Regex, String.Regex])
|
|
103
|
+
self.assert_fast_tokenization('m$' + '\\'*999)
|
|
104
|
+
|
|
105
|
+
### Regex substitutions with various delimeters.
|
|
106
|
+
|
|
107
|
+
def test_substitution_with_slash(self):
|
|
108
|
+
self.assert_single_token('s/aaa/bbb/g', String.Regex)
|
|
109
|
+
self.assert_fast_tokenization('s/foo/' + '\\'*999)
|
|
110
|
+
|
|
111
|
+
def test_substitution_with_at_sign(self):
|
|
112
|
+
self.assert_single_token(r's@aaa@bbb@g', String.Regex)
|
|
113
|
+
self.assert_fast_tokenization('s@foo@' + '\\'*999)
|
|
114
|
+
|
|
115
|
+
def test_substitution_with_percent_sign(self):
|
|
116
|
+
self.assert_single_token(r's%aaa%bbb%g', String.Regex)
|
|
117
|
+
self.assert_fast_tokenization('s%foo%' + '\\'*999)
|
|
118
|
+
|
|
119
|
+
def test_substitution_with_brace(self):
|
|
120
|
+
self.assert_single_token(r's{aaa}', String.Regex)
|
|
121
|
+
self.assert_fast_tokenization('s{' + '\\'*999)
|
|
122
|
+
|
|
123
|
+
def test_substitution_with_angle_bracket(self):
|
|
124
|
+
self.assert_single_token(r's<aaa>', String.Regex)
|
|
125
|
+
self.assert_fast_tokenization('s<' + '\\'*999)
|
|
126
|
+
|
|
127
|
+
def test_substitution_with_angle_bracket(self):
|
|
128
|
+
self.assert_single_token(r's<aaa>', String.Regex)
|
|
129
|
+
self.assert_fast_tokenization('s<' + '\\'*999)
|
|
130
|
+
|
|
131
|
+
def test_substitution_with_square_bracket(self):
|
|
132
|
+
self.assert_single_token(r's[aaa]', String.Regex)
|
|
133
|
+
self.assert_fast_tokenization('s[' + '\\'*999)
|
|
134
|
+
|
|
135
|
+
def test_substitution_with_parenthesis(self):
|
|
136
|
+
self.assert_single_token(r's(aaa)', String.Regex)
|
|
137
|
+
self.assert_fast_tokenization('s(' + '\\'*999)
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
Pygments regex lexer tests
|
|
4
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
5
|
+
|
|
6
|
+
:copyright: Copyright 2006-2013 by the Pygments team, see AUTHORS.
|
|
7
|
+
:license: BSD, see LICENSE for details.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
import unittest
|
|
11
|
+
|
|
12
|
+
from pygments.token import Text
|
|
13
|
+
from pygments.lexer import RegexLexer
|
|
14
|
+
from pygments.lexer import bygroups
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class TestLexer(RegexLexer):
|
|
18
|
+
"""Test tuple state transitions including #pop."""
|
|
19
|
+
tokens = {
|
|
20
|
+
'root': [
|
|
21
|
+
('a', Text.Root, 'rag'),
|
|
22
|
+
('e', Text.Root),
|
|
23
|
+
],
|
|
24
|
+
'beer': [
|
|
25
|
+
('d', Text.Beer, ('#pop', '#pop')),
|
|
26
|
+
],
|
|
27
|
+
'rag': [
|
|
28
|
+
('b', Text.Rag, '#push'),
|
|
29
|
+
('c', Text.Rag, ('#pop', 'beer')),
|
|
30
|
+
],
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class TupleTransTest(unittest.TestCase):
|
|
35
|
+
def test(self):
|
|
36
|
+
lx = TestLexer()
|
|
37
|
+
toks = list(lx.get_tokens_unprocessed('abcde'))
|
|
38
|
+
self.assertEqual(toks,
|
|
39
|
+
[(0, Text.Root, 'a'), (1, Text.Rag, 'b'), (2, Text.Rag, 'c'),
|
|
40
|
+
(3, Text.Beer, 'd'), (4, Text.Root, 'e')])
|
|
41
|
+
|
|
42
|
+
def test_multiline(self):
|
|
43
|
+
lx = TestLexer()
|
|
44
|
+
toks = list(lx.get_tokens_unprocessed('a\ne'))
|
|
45
|
+
self.assertEqual(toks,
|
|
46
|
+
[(0, Text.Root, 'a'), (1, Text, u'\n'),
|
|
47
|
+
(2, Text.Root, 'e')])
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
Test suite for the token module
|
|
4
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
5
|
+
|
|
6
|
+
:copyright: Copyright 2006-2013 by the Pygments team, see AUTHORS.
|
|
7
|
+
:license: BSD, see LICENSE for details.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
import unittest
|
|
11
|
+
|
|
12
|
+
from pygments import token
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class TokenTest(unittest.TestCase):
|
|
16
|
+
|
|
17
|
+
def test_tokentype(self):
|
|
18
|
+
e = self.assertEqual
|
|
19
|
+
|
|
20
|
+
t = token.String
|
|
21
|
+
|
|
22
|
+
e(t.split(), [token.Token, token.Literal, token.String])
|
|
23
|
+
|
|
24
|
+
e(t.__class__, token._TokenType)
|
|
25
|
+
|
|
26
|
+
def test_functions(self):
|
|
27
|
+
self.assertTrue(token.is_token_subtype(token.String, token.String))
|
|
28
|
+
self.assertTrue(token.is_token_subtype(token.String, token.Literal))
|
|
29
|
+
self.assertFalse(token.is_token_subtype(token.Literal, token.String))
|
|
30
|
+
|
|
31
|
+
self.assertTrue(token.string_to_tokentype(token.String) is token.String)
|
|
32
|
+
self.assertTrue(token.string_to_tokentype('') is token.Token)
|
|
33
|
+
self.assertTrue(token.string_to_tokentype('String') is token.String)
|
|
34
|
+
|
|
35
|
+
def test_sanity_check(self):
|
|
36
|
+
stp = token.STANDARD_TYPES.copy()
|
|
37
|
+
stp[token.Token] = '---' # Token and Text do conflict, that is okay
|
|
38
|
+
t = {}
|
|
39
|
+
for k, v in stp.iteritems():
|
|
40
|
+
t.setdefault(v, []).append(k)
|
|
41
|
+
if len(t) == len(stp):
|
|
42
|
+
return # Okay
|
|
43
|
+
|
|
44
|
+
for k, v in t.iteritems():
|
|
45
|
+
if len(v) > 1:
|
|
46
|
+
self.fail("%r has more than one key: %r" % (k, v))
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
Pygments tests for using()
|
|
4
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
5
|
+
|
|
6
|
+
:copyright: Copyright 2006-2013 by the Pygments team, see AUTHORS.
|
|
7
|
+
:license: BSD, see LICENSE for details.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
import unittest
|
|
11
|
+
|
|
12
|
+
from pygments.lexer import using, bygroups, this, RegexLexer
|
|
13
|
+
from pygments.token import String, Text, Keyword
|
|
14
|
+
|
|
15
|
+
class TestLexer(RegexLexer):
|
|
16
|
+
tokens = {
|
|
17
|
+
'root': [
|
|
18
|
+
(r'#.*',
|
|
19
|
+
using(this, state='invalid')),
|
|
20
|
+
(r'(")(.+?)(")',
|
|
21
|
+
bygroups(String, using(this, state='string'), String)),
|
|
22
|
+
(r'[^"]+', Text),
|
|
23
|
+
],
|
|
24
|
+
'string': [
|
|
25
|
+
(r'.+', Keyword),
|
|
26
|
+
],
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class UsingStateTest(unittest.TestCase):
|
|
31
|
+
def test_basic(self):
|
|
32
|
+
expected = [(Text, 'a'), (String, '"'), (Keyword, 'bcd'),
|
|
33
|
+
(String, '"'), (Text, 'e\n')]
|
|
34
|
+
t = list(TestLexer().get_tokens('a"bcd"e'))
|
|
35
|
+
self.assertEqual(t, expected)
|
|
36
|
+
|
|
37
|
+
def test_error(self):
|
|
38
|
+
def gen():
|
|
39
|
+
return list(TestLexer().get_tokens('#a'))
|
|
40
|
+
self.assertRaises(KeyError, gen)
|