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,406 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
require 'posix/spawn'
|
|
3
|
+
require 'yajl'
|
|
4
|
+
require 'timeout'
|
|
5
|
+
require 'logger'
|
|
6
|
+
require 'time'
|
|
7
|
+
|
|
8
|
+
# Error class
|
|
9
|
+
class MentosError < IOError
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Pygments provides access to the Pygments library via a pipe and a long-running
|
|
13
|
+
# Python process.
|
|
14
|
+
module Pygments
|
|
15
|
+
module Popen
|
|
16
|
+
include POSIX::Spawn
|
|
17
|
+
extend self
|
|
18
|
+
|
|
19
|
+
# Get things started by opening a pipe to mentos (the freshmaker), a
|
|
20
|
+
# Python process that talks to the Pygments library. We'll talk back and
|
|
21
|
+
# forth across this pipe.
|
|
22
|
+
def start(pygments_path = File.expand_path('../../../vendor/pygments-main/', __FILE__))
|
|
23
|
+
is_windows = RUBY_PLATFORM =~ /mswin|mingw/
|
|
24
|
+
begin
|
|
25
|
+
@log = Logger.new(ENV['MENTOS_LOG'] ||= is_windows ? 'NUL:' : '/dev/null')
|
|
26
|
+
@log.level = Logger::INFO
|
|
27
|
+
@log.datetime_format = "%Y-%m-%d %H:%M "
|
|
28
|
+
rescue
|
|
29
|
+
@log = Logger.new(is_windows ? 'NUL:' : '/dev/null')
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
ENV['PYGMENTS_PATH'] = pygments_path
|
|
33
|
+
|
|
34
|
+
# Make sure we kill off the child when we're done
|
|
35
|
+
at_exit { stop "Exiting" }
|
|
36
|
+
|
|
37
|
+
# A pipe to the mentos python process. #popen4 gives us
|
|
38
|
+
# the pid and three IO objects to write and read.
|
|
39
|
+
script = "#{python_binary} #{File.expand_path('../mentos.py', __FILE__)}"
|
|
40
|
+
@pid, @in, @out, @err = popen4(script)
|
|
41
|
+
@log.info "[#{Time.now.iso8601}] Starting pid #{@pid.to_s} with fd #{@out.to_i.to_s}."
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Detect a suitable Python binary to use. We can't just use `python2`
|
|
45
|
+
# because apparently some old versions of Debian only have `python` or
|
|
46
|
+
# something like that.
|
|
47
|
+
def python_binary
|
|
48
|
+
@python_binary ||= begin
|
|
49
|
+
`which python2`
|
|
50
|
+
$?.success? ? "python2" : "python"
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Stop the child process by issuing a kill -9.
|
|
55
|
+
#
|
|
56
|
+
# We then call waitpid() with the pid, which waits for that particular
|
|
57
|
+
# child and reaps it.
|
|
58
|
+
#
|
|
59
|
+
# kill() can set errno to ESRCH if, for some reason, the file
|
|
60
|
+
# is gone; regardless the final outcome of this method
|
|
61
|
+
# will be to set our @pid variable to nil.
|
|
62
|
+
#
|
|
63
|
+
# Technically, kill() can also fail with EPERM or EINVAL (wherein
|
|
64
|
+
# the signal isn't sent); but we have permissions, and
|
|
65
|
+
# we're not doing anything invalid here.
|
|
66
|
+
def stop(reason)
|
|
67
|
+
if @pid
|
|
68
|
+
begin
|
|
69
|
+
Process.kill('KILL', @pid)
|
|
70
|
+
Process.waitpid(@pid)
|
|
71
|
+
rescue Errno::ESRCH, Errno::ECHILD
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
@log.info "[#{Time.now.iso8601}] Killing pid: #{@pid.to_s}. Reason: #{reason}"
|
|
75
|
+
@pid = nil
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# Check for a @pid variable, and then hit `kill -0` with the pid to
|
|
79
|
+
# check if the pid is still in the process table. If this function
|
|
80
|
+
# gives us an ENOENT or ESRCH, we can also safely return false (no process
|
|
81
|
+
# to worry about). Defensively, if EPERM is raised, in a odd/rare
|
|
82
|
+
# dying process situation (e.g., mentos is checking on the pid of a dead
|
|
83
|
+
# process and the pid has already been re-used) we'll want to raise
|
|
84
|
+
# that as a more informative Mentos exception.
|
|
85
|
+
#
|
|
86
|
+
# Returns true if the child is alive.
|
|
87
|
+
def alive?
|
|
88
|
+
return true if @pid && Process.kill(0, @pid)
|
|
89
|
+
false
|
|
90
|
+
rescue Errno::ENOENT, Errno::ESRCH
|
|
91
|
+
false
|
|
92
|
+
rescue Errno::EPERM
|
|
93
|
+
raise MentosError, "EPERM checking if child process is alive."
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# Public: Get an array of available Pygments formatters
|
|
97
|
+
#
|
|
98
|
+
# Returns an array of formatters.
|
|
99
|
+
def formatters
|
|
100
|
+
mentos(:get_all_formatters).inject(Hash.new) do | hash, (name, desc, aliases) |
|
|
101
|
+
# Remove the long-winded and repetitive 'Formatter' suffix
|
|
102
|
+
name.sub!(/Formatter$/, '')
|
|
103
|
+
hash[name] = {
|
|
104
|
+
:name => name,
|
|
105
|
+
:description => desc,
|
|
106
|
+
:aliases => aliases
|
|
107
|
+
}
|
|
108
|
+
hash
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
# Public: Get all lexers from a serialized array. This avoids needing to spawn
|
|
114
|
+
# mentos when it's not really needed (e.g,. one-off jobs, loading the Rails env, etc).
|
|
115
|
+
#
|
|
116
|
+
# Should be preferred to #lexers!
|
|
117
|
+
#
|
|
118
|
+
# Returns an array of lexers
|
|
119
|
+
def lexers
|
|
120
|
+
begin
|
|
121
|
+
lexer_file = File.expand_path('../../../lexers', __FILE__)
|
|
122
|
+
raw = File.open(lexer_file, "r").read
|
|
123
|
+
Marshal.load(raw)
|
|
124
|
+
rescue Errno::ENOENT
|
|
125
|
+
raise MentosError, "Error loading lexer file. Was it created and vendored?"
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# Public: Get back all available lexers from mentos itself
|
|
130
|
+
#
|
|
131
|
+
# Returns an array of lexers
|
|
132
|
+
def lexers!
|
|
133
|
+
mentos(:get_all_lexers).inject(Hash.new) do |hash, lxr|
|
|
134
|
+
name = lxr[0]
|
|
135
|
+
hash[name] = {
|
|
136
|
+
:name => name,
|
|
137
|
+
:aliases => lxr[1],
|
|
138
|
+
:filenames => lxr[2],
|
|
139
|
+
:mimetypes => lxr[3]
|
|
140
|
+
}
|
|
141
|
+
hash["Augeas"] = {:name=>"Augeas", :aliases=>["augeas"], :filenames=>["*.aug"], :mimetypes=>[]}
|
|
142
|
+
hash["dasm16"] = {:name=>"dasm16", :aliases=>["DASM16"], :filenames=>["*.dasm16", "*.dasm"], :mimetypes=>['text/x-dasm16']}
|
|
143
|
+
hash["Puppet"] = {:name=>"Puppet", :aliases=>["puppet"], :filenames=>["*.pp"], :mimetypes=>[]}
|
|
144
|
+
hash["Slash"] = {:name=>"Slash", :aliases=>["slash"], :filenames=>["*.sl"], :mimetypes=>[]}
|
|
145
|
+
hash
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# Public: Return an array of all available filters
|
|
150
|
+
def filters
|
|
151
|
+
mentos(:get_all_filters)
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
# Public: Return an array of all available styles
|
|
155
|
+
def styles
|
|
156
|
+
mentos(:get_all_styles)
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
# Public: Return css for highlighted code
|
|
160
|
+
def css(klass='', opts={})
|
|
161
|
+
if klass.is_a?(Hash)
|
|
162
|
+
opts = klass
|
|
163
|
+
klass = ''
|
|
164
|
+
end
|
|
165
|
+
mentos(:css, ['html', klass], opts)
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
# Public: Return the name of a lexer.
|
|
169
|
+
def lexer_name_for(*args)
|
|
170
|
+
# Pop off the last arg if it's a hash, which becomes our opts
|
|
171
|
+
if args.last.is_a?(Hash)
|
|
172
|
+
opts = args.pop
|
|
173
|
+
else
|
|
174
|
+
opts = {}
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
if args.last.is_a?(String)
|
|
178
|
+
code = args.pop
|
|
179
|
+
else
|
|
180
|
+
code = nil
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
mentos(:lexer_name_for, args, opts, code)
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
# Public: Highlight code.
|
|
187
|
+
#
|
|
188
|
+
# Takes a first-position argument of the code to be highlighted, and a
|
|
189
|
+
# second-position hash of various arguments specifiying highlighting properties.
|
|
190
|
+
def highlight(code, opts={})
|
|
191
|
+
# If the caller didn't give us any code, we have nothing to do,
|
|
192
|
+
# so return right away.
|
|
193
|
+
return code if code.nil? || code.empty?
|
|
194
|
+
|
|
195
|
+
# Callers pass along options in the hash
|
|
196
|
+
opts[:options] ||= {}
|
|
197
|
+
|
|
198
|
+
# Default to utf-8 for the output encoding, if not given.
|
|
199
|
+
opts[:options][:outencoding] ||= 'utf-8'
|
|
200
|
+
|
|
201
|
+
# Get back the string from mentos and force encoding if we can
|
|
202
|
+
str = mentos(:highlight, nil, opts, code)
|
|
203
|
+
str.force_encoding(opts[:options][:outencoding]) if str.respond_to?(:force_encoding)
|
|
204
|
+
str
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
private
|
|
208
|
+
|
|
209
|
+
# Our 'rpc'-ish request to mentos. Requires a method name, and then optional
|
|
210
|
+
# args, kwargs, code.
|
|
211
|
+
def mentos(method, args=[], kwargs={}, original_code=nil)
|
|
212
|
+
# Open the pipe if necessary
|
|
213
|
+
start unless alive?
|
|
214
|
+
|
|
215
|
+
begin
|
|
216
|
+
# Timeout requests that take too long.
|
|
217
|
+
timeout_time = ENV["MENTOS_TIMEOUT"] || 8
|
|
218
|
+
|
|
219
|
+
Timeout::timeout(timeout_time) do
|
|
220
|
+
# For sanity checking on both sides of the pipe when highlighting, we prepend and
|
|
221
|
+
# append an id. mentos checks that these are 8 character ids and that they match.
|
|
222
|
+
# It then returns the id's back to Rubyland.
|
|
223
|
+
id = (0...8).map{65.+(rand(25)).chr}.join
|
|
224
|
+
code = add_ids(original_code, id) if original_code
|
|
225
|
+
|
|
226
|
+
# Add metadata to the header and generate it.
|
|
227
|
+
if code
|
|
228
|
+
bytesize = code.bytesize
|
|
229
|
+
else
|
|
230
|
+
bytesize = 0
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
kwargs.freeze
|
|
234
|
+
kwargs = kwargs.merge("fd" => @out.to_i, "id" => id, "bytes" => bytesize)
|
|
235
|
+
out_header = Yajl.dump(:method => method, :args => args, :kwargs => kwargs)
|
|
236
|
+
|
|
237
|
+
# Get the size of the header itself and write that.
|
|
238
|
+
bits = get_fixed_bits_from_header(out_header)
|
|
239
|
+
@in.write(bits)
|
|
240
|
+
|
|
241
|
+
# mentos is now waiting for the header, and, potentially, code.
|
|
242
|
+
write_data(out_header, code)
|
|
243
|
+
|
|
244
|
+
# mentos will now return data to us. First it sends the header.
|
|
245
|
+
header = get_header
|
|
246
|
+
|
|
247
|
+
# Now handle the header, any read any more data required.
|
|
248
|
+
res = handle_header_and_return(header, id)
|
|
249
|
+
|
|
250
|
+
# Finally, return what we got.
|
|
251
|
+
return_result(res, method)
|
|
252
|
+
end
|
|
253
|
+
rescue Timeout::Error
|
|
254
|
+
# If we timeout, we need to clear out the pipe and start over.
|
|
255
|
+
@log.error "[#{Time.now.iso8601}] Timeout on a mentos #{method} call"
|
|
256
|
+
stop "Timeout on mentos #{method} call."
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
rescue Errno::EPIPE, EOFError
|
|
260
|
+
stop "EPIPE"
|
|
261
|
+
raise MentosError, "EPIPE"
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
# Based on the header we receive, determine if we need
|
|
266
|
+
# to read more bytes, and read those bytes if necessary.
|
|
267
|
+
#
|
|
268
|
+
# Then, do a sanity check wih the ids.
|
|
269
|
+
#
|
|
270
|
+
# Returns a result — either highlighted text or metadata.
|
|
271
|
+
def handle_header_and_return(header, id)
|
|
272
|
+
if header
|
|
273
|
+
header = header_to_json(header)
|
|
274
|
+
bytes = header["bytes"]
|
|
275
|
+
|
|
276
|
+
# Read more bytes (the actual response body)
|
|
277
|
+
res = @out.read(bytes.to_i)
|
|
278
|
+
|
|
279
|
+
if header["method"] == "highlight"
|
|
280
|
+
# Make sure we have a result back; else consider this an error.
|
|
281
|
+
if res.nil?
|
|
282
|
+
@log.warn "[#{Time.now.iso8601}] No highlight result back from mentos."
|
|
283
|
+
stop "No highlight result back from mentos."
|
|
284
|
+
raise MentosError, "No highlight result back from mentos."
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
# Remove the newline from Python
|
|
288
|
+
res = res[0..-2]
|
|
289
|
+
@log.info "[#{Time.now.iso8601}] Highlight in process."
|
|
290
|
+
|
|
291
|
+
# Get the id's
|
|
292
|
+
start_id = res[0..7]
|
|
293
|
+
end_id = res[-8..-1]
|
|
294
|
+
|
|
295
|
+
# Sanity check.
|
|
296
|
+
if not (start_id == id and end_id == id)
|
|
297
|
+
@log.error "[#{Time.now.iso8601}] ID's did not match. Aborting."
|
|
298
|
+
stop "ID's did not match. Aborting."
|
|
299
|
+
raise MentosError, "ID's did not match. Aborting."
|
|
300
|
+
else
|
|
301
|
+
# We're good. Remove the padding
|
|
302
|
+
res = res[10..-11]
|
|
303
|
+
@log.info "[#{Time.now.iso8601}] Highlighting complete."
|
|
304
|
+
res
|
|
305
|
+
end
|
|
306
|
+
end
|
|
307
|
+
res
|
|
308
|
+
else
|
|
309
|
+
@log.error "[#{Time.now.iso8601}] No header data back."
|
|
310
|
+
stop "No header data back."
|
|
311
|
+
raise MentosError, "No header received back."
|
|
312
|
+
end
|
|
313
|
+
end
|
|
314
|
+
|
|
315
|
+
# With the code, prepend the id (with two spaces to avoid escaping weirdness if
|
|
316
|
+
# the following text starts with a slash (like terminal code), and append the
|
|
317
|
+
# id, with two padding also. This means we are sending over the 8 characters +
|
|
318
|
+
# code + 8 characters.
|
|
319
|
+
def add_ids(code, id)
|
|
320
|
+
code.freeze
|
|
321
|
+
code = id + " #{code} #{id}"
|
|
322
|
+
code
|
|
323
|
+
end
|
|
324
|
+
|
|
325
|
+
# Write data to mentos, the Python Process.
|
|
326
|
+
#
|
|
327
|
+
# Returns nothing.
|
|
328
|
+
def write_data(out_header, code=nil)
|
|
329
|
+
@in.write(out_header)
|
|
330
|
+
@log.info "[#{Time.now.iso8601}] Out header: #{out_header.to_s}"
|
|
331
|
+
@in.write(code) if code
|
|
332
|
+
end
|
|
333
|
+
|
|
334
|
+
# Sanity check for size (32-arity of 0's and 1's)
|
|
335
|
+
def size_check(size)
|
|
336
|
+
size_regex = /[0-1]{32}/
|
|
337
|
+
if size_regex.match(size)
|
|
338
|
+
true
|
|
339
|
+
else
|
|
340
|
+
false
|
|
341
|
+
end
|
|
342
|
+
end
|
|
343
|
+
|
|
344
|
+
# Read the header via the pipe.
|
|
345
|
+
#
|
|
346
|
+
# Returns a header.
|
|
347
|
+
def get_header
|
|
348
|
+
begin
|
|
349
|
+
size = @out.read(33)
|
|
350
|
+
size = size[0..-2]
|
|
351
|
+
|
|
352
|
+
# Sanity check the size
|
|
353
|
+
if not size_check(size)
|
|
354
|
+
@log.error "[#{Time.now.iso8601}] Size returned from mentos.py invalid."
|
|
355
|
+
stop "Size returned from mentos.py invalid."
|
|
356
|
+
raise MentosError, "Size returned from mentos.py invalid."
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
# Read the amount of bytes we should be expecting. We first
|
|
360
|
+
# convert the string of bits into an integer.
|
|
361
|
+
header_bytes = size.to_s.to_i(2) + 1
|
|
362
|
+
@log.info "[#{Time.now.iso8601}] Size in: #{size.to_s} (#{header_bytes.to_s})"
|
|
363
|
+
@out.read(header_bytes)
|
|
364
|
+
rescue
|
|
365
|
+
@log.error "[#{Time.now.iso8601}] Failed to get header."
|
|
366
|
+
stop "Failed to get header."
|
|
367
|
+
raise MentosError, "Failed to get header."
|
|
368
|
+
end
|
|
369
|
+
end
|
|
370
|
+
|
|
371
|
+
# Return the final result for the API. Return Ruby objects for the methods that
|
|
372
|
+
# want them, text otherwise.
|
|
373
|
+
def return_result(res, method)
|
|
374
|
+
unless method == :lexer_name_for || method == :highlight || method == :css
|
|
375
|
+
res = Yajl.load(res, :symbolize_keys => true)
|
|
376
|
+
end
|
|
377
|
+
res = res.rstrip if res.class == String
|
|
378
|
+
res
|
|
379
|
+
end
|
|
380
|
+
|
|
381
|
+
# Convert a text header into JSON for easy access.
|
|
382
|
+
def header_to_json(header)
|
|
383
|
+
@log.info "[#{Time.now.iso8601}] In header: #{header.to_s} "
|
|
384
|
+
header = Yajl.load(header)
|
|
385
|
+
|
|
386
|
+
if header["error"]
|
|
387
|
+
# Raise this as a Ruby exception of the MentosError class.
|
|
388
|
+
# Stop so we don't leave the pipe in an inconsistent state.
|
|
389
|
+
@log.error "[#{Time.now.iso8601}] Failed to convert header to JSON."
|
|
390
|
+
stop header["error"]
|
|
391
|
+
raise MentosError, header["error"]
|
|
392
|
+
else
|
|
393
|
+
header
|
|
394
|
+
end
|
|
395
|
+
end
|
|
396
|
+
|
|
397
|
+
def get_fixed_bits_from_header(out_header)
|
|
398
|
+
size = out_header.bytesize
|
|
399
|
+
|
|
400
|
+
# Fixed 32 bits to represent the int. We return a string
|
|
401
|
+
# represenation: e.g, "00000000000000000000000000011110"
|
|
402
|
+
Array.new(32) { |i| size[i] }.reverse!.join
|
|
403
|
+
end
|
|
404
|
+
end
|
|
405
|
+
end
|
|
406
|
+
|
data/lib/pygments.rb
ADDED
data/pygments.rb.gemspec
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require File.expand_path('../lib/pygments/version', __FILE__)
|
|
2
|
+
|
|
3
|
+
Gem::Specification.new do |s|
|
|
4
|
+
s.name = 'mortar-pygments.rb'
|
|
5
|
+
s.version = Pygments::VERSION
|
|
6
|
+
|
|
7
|
+
s.summary = 'pygments wrapper for ruby including Pig lexer'
|
|
8
|
+
s.description = 'pygments.rb exposes the pygments syntax highlighter to Ruby'
|
|
9
|
+
|
|
10
|
+
s.homepage = 'https://github.com/tmm1/pygments.rb'
|
|
11
|
+
s.has_rdoc = false
|
|
12
|
+
|
|
13
|
+
s.authors = ['Aman Gupta', 'Ted Nyman']
|
|
14
|
+
s.email = ['aman@tmm1.net']
|
|
15
|
+
s.license = 'MIT'
|
|
16
|
+
|
|
17
|
+
s.add_dependency 'yajl-ruby', '~> 1.1.0'
|
|
18
|
+
s.add_dependency 'posix-spawn', '~> 0.3.6'
|
|
19
|
+
s.add_development_dependency 'rake-compiler', '~> 0.7.6'
|
|
20
|
+
|
|
21
|
+
# s.extensions = ['ext/extconf.rb']
|
|
22
|
+
s.require_paths = ['lib']
|
|
23
|
+
|
|
24
|
+
s.files = `git ls-files`.split("\n")
|
|
25
|
+
end
|