pygments.rb-jruby 0.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +6 -0
- data/CHANGELOG.md +71 -0
- data/Gemfile +2 -0
- data/LICENSE +17 -0
- data/README.md +118 -0
- data/Rakefile +66 -0
- data/bench.rb +22 -0
- data/cache-lexers.rb +8 -0
- data/lexers +0 -0
- data/lib/pygments.rb +8 -0
- data/lib/pygments/lexer.rb +148 -0
- data/lib/pygments/mentos.py +351 -0
- data/lib/pygments/popen.rb +404 -0
- data/lib/pygments/version.rb +3 -0
- data/pygments.rb.gemspec +24 -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 +354 -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 +559 -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.py +15 -0
- data/vendor/pygments-main/tests/support/tags +36 -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 +557 -0
@@ -0,0 +1,62 @@
|
|
1
|
+
## CD ROM
|
2
|
+
deb cdrom:[Xubuntu 6.06.1 _Dapper Drake_ - Release i386 (20060807)]/ dapper main restricted
|
3
|
+
|
4
|
+
deb http://archive.ubuntu.com/ubuntu/ dapper main restricted
|
5
|
+
deb-src http://archive.ubuntu.com/ubuntu/ dapper main restricted
|
6
|
+
|
7
|
+
deb http://foo.com/$(ARCH)/ main foo
|
8
|
+
|
9
|
+
## Major bug fix updates produced after the final release of the
|
10
|
+
## distribution.
|
11
|
+
deb http://archive.ubuntu.com/ubuntu/ dapper-updates main restricted
|
12
|
+
deb-src http://archive.ubuntu.com/ubuntu/ dapper-updates main restricted
|
13
|
+
|
14
|
+
## Uncomment the following two lines to add software from the 'universe'
|
15
|
+
## repository.
|
16
|
+
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
|
17
|
+
## team, and may not be under a free licence. Please satisfy yourself as to
|
18
|
+
## your rights to use the software. Also, please note that software in
|
19
|
+
## universe WILL NOT receive any review or updates from the Ubuntu security
|
20
|
+
## team.
|
21
|
+
deb http://archive.ubuntu.com/ubuntu/ dapper universe multiverse
|
22
|
+
deb-src http://archive.ubuntu.com/ubuntu/ dapper universe multiverse
|
23
|
+
|
24
|
+
## Uncomment the following two lines to add software from the 'backports'
|
25
|
+
## repository.
|
26
|
+
## N.B. software from this repository may not have been tested as
|
27
|
+
## extensively as that contained in the main release, although it includes
|
28
|
+
## newer versions of some applications which may provide useful features.
|
29
|
+
## Also, please note that software in backports WILL NOT receive any review
|
30
|
+
## or updates from the Ubuntu security team.
|
31
|
+
deb http://archive.ubuntu.com/ubuntu/ dapper-backports main restricted universe multiverse
|
32
|
+
deb-src http://archive.ubuntu.com/ubuntu/ dapper-backports main restricted universe multiverse
|
33
|
+
|
34
|
+
deb http://security.ubuntu.com/ubuntu dapper-security main restricted
|
35
|
+
deb-src http://security.ubuntu.com/ubuntu dapper-security main restricted
|
36
|
+
deb http://security.ubuntu.com/ubuntu dapper-security universe multiverse
|
37
|
+
deb-src http://security.ubuntu.com/ubuntu dapper-security universe multiverse
|
38
|
+
|
39
|
+
## dapper-commercial by canonical
|
40
|
+
## currently has realplay (realplayer 10) and opera (opera 9)
|
41
|
+
deb http://archive.canonical.com/ubuntu dapper-commercial main
|
42
|
+
|
43
|
+
## Bleeding edge wine repository for Dapper
|
44
|
+
## only uncomment it if you need it
|
45
|
+
## deb http://wine.budgetdedicated.com/apt dapper main
|
46
|
+
## deb-src http://wine.budgetdedicated.com/apt dapper main
|
47
|
+
|
48
|
+
## skype
|
49
|
+
## only uncomment it if you need it
|
50
|
+
## deb http://download.skype.com/linux/repos/debian/ stable non-free
|
51
|
+
|
52
|
+
deb http://de.archive.ubuntu.com/ubuntu/ edgy main restricted multiverse universe
|
53
|
+
|
54
|
+
deb http://de.archive.ubuntu.com/ubuntu/ edgy-updates main restricted multiverse universe
|
55
|
+
|
56
|
+
deb http://de.archive.ubuntu.com/ubuntu/ edgy-backports main restricted universe multiverse
|
57
|
+
|
58
|
+
deb http://security.ubuntu.com/ubuntu edgy-security main restricted universe multiverse
|
59
|
+
|
60
|
+
deb http://wine.budgetdedicated.com/apt edgy main
|
61
|
+
|
62
|
+
deb http://archive.czessi.net/ubuntu edgy main restricted universe multiverse i18n-de
|
@@ -0,0 +1,27 @@
|
|
1
|
+
SQLite version 3.4.2
|
2
|
+
Enter ".help" for instructions
|
3
|
+
sqlite> .schema
|
4
|
+
CREATE TABLE paste (paste_id integer, code text, parsed_code text, pub_date
|
5
|
+
varchar(24), language varchar(64), parent_id integer, url varchar(128));
|
6
|
+
CREATE TABLE vars (key varchar(24), value varchar(128));
|
7
|
+
sqlite> a '
|
8
|
+
...> '
|
9
|
+
...> ;
|
10
|
+
SQL error: near "a": syntax error
|
11
|
+
sqlite> %;
|
12
|
+
SQL error: near "%": syntax error
|
13
|
+
sqlite> select count(language), language from paste group by language order
|
14
|
+
...> by count(language) desc;
|
15
|
+
144|python
|
16
|
+
76|text
|
17
|
+
22|pycon
|
18
|
+
9|ruby
|
19
|
+
7|c
|
20
|
+
7|js
|
21
|
+
6|html+django
|
22
|
+
4|html
|
23
|
+
4|tex
|
24
|
+
2|html+php
|
25
|
+
1|cpp
|
26
|
+
1|scheme
|
27
|
+
sqlite>
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# Some multiline comments
|
2
|
+
|
3
|
+
acl manager proto cache_object
|
4
|
+
acl localhost src 127.0.0.1/32 ::1
|
5
|
+
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
|
6
|
+
acl SSL_ports port 443
|
7
|
+
acl Safe_ports port 80 # http
|
8
|
+
acl Safe_ports port 21 # ftp
|
9
|
+
acl Safe_ports port 443 # https
|
10
|
+
acl Safe_ports port 70 # gopher
|
11
|
+
acl Safe_ports port 210 # wais
|
12
|
+
acl Safe_ports port 1025-65535 # unregistered ports
|
13
|
+
acl Safe_ports port 280 # http-mgmt
|
14
|
+
acl Safe_ports port 488 # gss-http
|
15
|
+
acl Safe_ports port 591 # filemaker
|
16
|
+
acl Safe_ports port 777 # multiling http
|
17
|
+
acl CONNECT method CONNECT
|
18
|
+
http_access allow manager localhost
|
19
|
+
http_access deny manager
|
20
|
+
http_access deny !Safe_ports
|
21
|
+
http_access deny CONNECT !SSL_ports
|
22
|
+
http_access allow localhost
|
23
|
+
http_access deny all
|
24
|
+
http_port 3128
|
25
|
+
hierarchy_stoplist cgi-bin ?
|
26
|
+
coredump_dir /var/spool/squid3
|
27
|
+
refresh_pattern ^ftp: 1440 20% 10080
|
28
|
+
refresh_pattern ^gopher: 1440 0% 1440
|
29
|
+
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
|
30
|
+
refresh_pattern . 0 20% 4320
|
@@ -0,0 +1,1031 @@
|
|
1
|
+
## core string functions ##
|
2
|
+
|
3
|
+
length(s::String) = error("you must implement length(",typeof(s),")")
|
4
|
+
next(s::String, i::Int) = error("you must implement next(",typeof(s),",Int)")
|
5
|
+
next(s::DirectIndexString, i::Int) = (s[i],i+1)
|
6
|
+
next(s::String, i::Integer) = next(s,int(i))
|
7
|
+
|
8
|
+
## generic supplied functions ##
|
9
|
+
|
10
|
+
start(s::String) = 1
|
11
|
+
done(s::String,i) = (i > length(s))
|
12
|
+
isempty(s::String) = done(s,start(s))
|
13
|
+
ref(s::String, i::Int) = next(s,i)[1]
|
14
|
+
ref(s::String, i::Integer) = s[int(i)]
|
15
|
+
ref(s::String, x::Real) = s[iround(x)]
|
16
|
+
ref{T<:Integer}(s::String, r::Range1{T}) = s[int(first(r)):int(last(r))]
|
17
|
+
|
18
|
+
symbol(s::String) = symbol(cstring(s))
|
19
|
+
string(s::String) = s
|
20
|
+
|
21
|
+
print(s::String) = for c=s; print(c); end
|
22
|
+
print(x...) = for i=x; print(i); end
|
23
|
+
println(args...) = print(args..., '\n')
|
24
|
+
|
25
|
+
show(s::String) = print_quoted(s)
|
26
|
+
|
27
|
+
(*)(s::String...) = strcat(s...)
|
28
|
+
(^)(s::String, r::Integer) = repeat(s,r)
|
29
|
+
|
30
|
+
size(s::String) = (length(s),)
|
31
|
+
size(s::String, d::Integer) = d==1 ? length(s) :
|
32
|
+
error("in size: dimension ",d," out of range")
|
33
|
+
|
34
|
+
strlen(s::DirectIndexString) = length(s)
|
35
|
+
function strlen(s::String)
|
36
|
+
i = start(s)
|
37
|
+
if done(s,i)
|
38
|
+
return 0
|
39
|
+
end
|
40
|
+
n = 1
|
41
|
+
while true
|
42
|
+
c, j = next(s,i)
|
43
|
+
if done(s,j)
|
44
|
+
return n
|
45
|
+
end
|
46
|
+
n += 1
|
47
|
+
i = j
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
isvalid(s::DirectIndexString, i::Integer) = (start(s) <= i <= length(s))
|
52
|
+
function isvalid(s::String, i::Integer)
|
53
|
+
try
|
54
|
+
next(s,i)
|
55
|
+
true
|
56
|
+
catch
|
57
|
+
false
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
prevind(s::DirectIndexString, i::Integer) = i-1
|
62
|
+
thisind(s::DirectIndexString, i::Integer) = i
|
63
|
+
nextind(s::DirectIndexString, i::Integer) = i+1
|
64
|
+
|
65
|
+
prevind(s::String, i::Integer) = thisind(s,thisind(s,i)-1)
|
66
|
+
|
67
|
+
function thisind(s::String, i::Integer)
|
68
|
+
for j = i:-1:1
|
69
|
+
if isvalid(s,j)
|
70
|
+
return j
|
71
|
+
end
|
72
|
+
end
|
73
|
+
return 0 # out of range
|
74
|
+
end
|
75
|
+
|
76
|
+
function nextind(s::String, i::Integer)
|
77
|
+
for j = i+1:length(s)
|
78
|
+
if isvalid(s,j)
|
79
|
+
return j
|
80
|
+
end
|
81
|
+
end
|
82
|
+
length(s)+1 # out of range
|
83
|
+
end
|
84
|
+
|
85
|
+
ind2chr(s::DirectIndexString, i::Integer) = i
|
86
|
+
chr2ind(s::DirectIndexString, i::Integer) = i
|
87
|
+
|
88
|
+
function ind2chr(s::String, i::Integer)
|
89
|
+
s[i] # throws error if invalid
|
90
|
+
j = 1
|
91
|
+
k = start(s)
|
92
|
+
while true
|
93
|
+
c, l = next(s,k)
|
94
|
+
if i <= k
|
95
|
+
return j
|
96
|
+
end
|
97
|
+
j += 1
|
98
|
+
k = l
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
function chr2ind(s::String, i::Integer)
|
103
|
+
if i < 1
|
104
|
+
return i
|
105
|
+
end
|
106
|
+
j = 1
|
107
|
+
k = start(s)
|
108
|
+
while true
|
109
|
+
c, l = next(s,k)
|
110
|
+
if i == j
|
111
|
+
return k
|
112
|
+
end
|
113
|
+
j += 1
|
114
|
+
k = l
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
function strchr(s::String, c::Char, i::Integer)
|
119
|
+
i = nextind(s,i)
|
120
|
+
while !done(s,i)
|
121
|
+
d, j = next(s,i)
|
122
|
+
if c == d
|
123
|
+
return i
|
124
|
+
end
|
125
|
+
i = j
|
126
|
+
end
|
127
|
+
return 0
|
128
|
+
end
|
129
|
+
strchr(s::String, c::Char) = strchr(s, c, start(s))
|
130
|
+
contains(s::String, c::Char) = (strchr(s,c)!=0)
|
131
|
+
|
132
|
+
function chars(s::String)
|
133
|
+
cx = Array(Char,strlen(s))
|
134
|
+
i = 0
|
135
|
+
for c in s
|
136
|
+
cx[i += 1] = c
|
137
|
+
end
|
138
|
+
return cx
|
139
|
+
end
|
140
|
+
|
141
|
+
function cmp(a::String, b::String)
|
142
|
+
i = start(a)
|
143
|
+
j = start(b)
|
144
|
+
while !done(a,i) && !done(b,i)
|
145
|
+
c, i = next(a,i)
|
146
|
+
d, j = next(b,j)
|
147
|
+
if c != d
|
148
|
+
return c < d ? -1 : +1
|
149
|
+
end
|
150
|
+
end
|
151
|
+
done(a,i) && !done(b,j) ? -1 :
|
152
|
+
!done(a,i) && done(b,j) ? +1 : 0
|
153
|
+
end
|
154
|
+
|
155
|
+
isequal(a::String, b::String) = cmp(a,b) == 0
|
156
|
+
isless(a::String, b::String) = cmp(a,b) < 0
|
157
|
+
|
158
|
+
# faster comparisons for byte strings
|
159
|
+
|
160
|
+
cmp(a::ByteString, b::ByteString) = lexcmp(a.data, b.data)
|
161
|
+
isequal(a::ByteString, b::ByteString) = length(a)==length(b) && cmp(a,b)==0
|
162
|
+
|
163
|
+
## character column width function ##
|
164
|
+
|
165
|
+
charwidth(c::Char) = max(0,int(ccall(:wcwidth, Int32, (Char,), c)))
|
166
|
+
strwidth(s::String) = (w=0; for c in s; w += charwidth(c); end; w)
|
167
|
+
strwidth(s::ByteString) = ccall(:u8_strwidth, Int, (Ptr{Uint8},), s.data)
|
168
|
+
# TODO: implement and use u8_strnwidth that takes a length argument
|
169
|
+
|
170
|
+
## generic string uses only length and next ##
|
171
|
+
|
172
|
+
type GenericString <: String
|
173
|
+
string::String
|
174
|
+
end
|
175
|
+
|
176
|
+
length(s::GenericString) = length(s.string)
|
177
|
+
next(s::GenericString, i::Int) = next(s.string, i)
|
178
|
+
|
179
|
+
## plain old character arrays ##
|
180
|
+
|
181
|
+
type CharString <: String
|
182
|
+
chars::Array{Char,1}
|
183
|
+
|
184
|
+
CharString(a::Array{Char,1}) = new(a)
|
185
|
+
CharString(c::Char...) = new([ c[i] | i=1:length(c) ])
|
186
|
+
end
|
187
|
+
CharString(x...) = CharString(map(char,x)...)
|
188
|
+
|
189
|
+
next(s::CharString, i::Int) = (s.chars[i], i+1)
|
190
|
+
length(s::CharString) = length(s.chars)
|
191
|
+
strlen(s::CharString) = length(s)
|
192
|
+
|
193
|
+
string(c::Char) = CharString(c)
|
194
|
+
string(c::Char, x::Char...) = CharString(c, x...)
|
195
|
+
|
196
|
+
## substrings reference original strings ##
|
197
|
+
|
198
|
+
type SubString <: String
|
199
|
+
string::String
|
200
|
+
offset::Int
|
201
|
+
length::Int
|
202
|
+
|
203
|
+
SubString(s::String, i::Int, j::Int) = new(s, i-1, j-i+1)
|
204
|
+
SubString(s::SubString, i::Int, j::Int) =
|
205
|
+
new(s.string, i-1+s.offset, j-i+1)
|
206
|
+
end
|
207
|
+
SubString(s::String, i::Integer, j::Integer) = SubString(s, int(i), int(j))
|
208
|
+
|
209
|
+
function next(s::SubString, i::Int)
|
210
|
+
if i < 1 || i > s.length
|
211
|
+
error("string index out of bounds")
|
212
|
+
end
|
213
|
+
c, i = next(s.string, i+s.offset)
|
214
|
+
c, i-s.offset
|
215
|
+
end
|
216
|
+
|
217
|
+
length(s::SubString) = s.length
|
218
|
+
# TODO: strlen(s::SubString) = ??
|
219
|
+
# default implementation will work but it's slow
|
220
|
+
# can this be delegated efficiently somehow?
|
221
|
+
# that may require additional string interfaces
|
222
|
+
|
223
|
+
function ref(s::String, r::Range1{Int})
|
224
|
+
if first(r) < 1 || length(s) < last(r)
|
225
|
+
error("in substring slice: index out of range")
|
226
|
+
end
|
227
|
+
SubString(s, first(r), last(r))
|
228
|
+
end
|
229
|
+
|
230
|
+
## efficient representation of repeated strings ##
|
231
|
+
|
232
|
+
type RepString <: String
|
233
|
+
string::String
|
234
|
+
repeat::Integer
|
235
|
+
end
|
236
|
+
|
237
|
+
length(s::RepString) = length(s.string)*s.repeat
|
238
|
+
strlen(s::RepString) = strlen(s.string)*s.repeat
|
239
|
+
|
240
|
+
function next(s::RepString, i::Int)
|
241
|
+
if i < 1 || i > length(s)
|
242
|
+
error("string index out of bounds")
|
243
|
+
end
|
244
|
+
j = mod1(i,length(s.string))
|
245
|
+
c, k = next(s.string, j)
|
246
|
+
c, k-j+i
|
247
|
+
end
|
248
|
+
|
249
|
+
function repeat(s::String, r::Integer)
|
250
|
+
r < 0 ? error("can't repeat a string ",r," times") :
|
251
|
+
r == 0 ? "" :
|
252
|
+
r == 1 ? s :
|
253
|
+
RepString(s,r)
|
254
|
+
end
|
255
|
+
|
256
|
+
## reversed strings without data movement ##
|
257
|
+
|
258
|
+
type RevString <: String
|
259
|
+
string::String
|
260
|
+
end
|
261
|
+
|
262
|
+
length(s::RevString) = length(s.string)
|
263
|
+
strlen(s::RevString) = strlen(s.string)
|
264
|
+
|
265
|
+
start(s::RevString) = (n=length(s); n-thisind(s.string,n)+1)
|
266
|
+
function next(s::RevString, i::Int)
|
267
|
+
n = length(s); j = n-i+1
|
268
|
+
(s.string[j], n-thisind(s.string,j-1)+1)
|
269
|
+
end
|
270
|
+
|
271
|
+
reverse(s::String) = RevString(s)
|
272
|
+
reverse(s::RevString) = s.string
|
273
|
+
|
274
|
+
## ropes for efficient concatenation, etc. ##
|
275
|
+
|
276
|
+
# Idea: instead of this standard binary tree structure,
|
277
|
+
# how about we keep an array of substrings, with an
|
278
|
+
# offset array. We can do binary search on the offset
|
279
|
+
# array so we get O(log(n)) indexing time still, but we
|
280
|
+
# can compute the offsets lazily and avoid all the
|
281
|
+
# futzing around while the string is being constructed.
|
282
|
+
|
283
|
+
type RopeString <: String
|
284
|
+
head::String
|
285
|
+
tail::String
|
286
|
+
depth::Int32
|
287
|
+
length::Int
|
288
|
+
|
289
|
+
RopeString(h::RopeString, t::RopeString) =
|
290
|
+
depth(h.tail) + depth(t) < depth(h.head) ?
|
291
|
+
RopeString(h.head, RopeString(h.tail, t)) :
|
292
|
+
new(h, t, max(h.depth,t.depth)+1, length(h)+length(t))
|
293
|
+
|
294
|
+
RopeString(h::RopeString, t::String) =
|
295
|
+
depth(h.tail) < depth(h.head) ?
|
296
|
+
RopeString(h.head, RopeString(h.tail, t)) :
|
297
|
+
new(h, t, h.depth+1, length(h)+length(t))
|
298
|
+
|
299
|
+
RopeString(h::String, t::RopeString) =
|
300
|
+
depth(t.head) < depth(t.tail) ?
|
301
|
+
RopeString(RopeString(h, t.head), t.tail) :
|
302
|
+
new(h, t, t.depth+1, length(h)+length(t))
|
303
|
+
|
304
|
+
RopeString(h::String, t::String) =
|
305
|
+
new(h, t, 1, length(h)+length(t))
|
306
|
+
end
|
307
|
+
|
308
|
+
depth(s::String) = 0
|
309
|
+
depth(s::RopeString) = s.depth
|
310
|
+
|
311
|
+
function next(s::RopeString, i::Int)
|
312
|
+
if i <= length(s.head)
|
313
|
+
return next(s.head, i)
|
314
|
+
else
|
315
|
+
c, j = next(s.tail, i-length(s.head))
|
316
|
+
return c, j+length(s.head)
|
317
|
+
end
|
318
|
+
end
|
319
|
+
|
320
|
+
length(s::RopeString) = s.length
|
321
|
+
strlen(s::RopeString) = strlen(s.head) + strlen(s.tail)
|
322
|
+
|
323
|
+
strcat() = ""
|
324
|
+
strcat(s::String) = s
|
325
|
+
strcat(x...) = strcat(map(string,x)...)
|
326
|
+
strcat(s::String, t::String...) =
|
327
|
+
(t = strcat(t...); isempty(s) ? t : isempty(t) ? s : RopeString(s, t))
|
328
|
+
|
329
|
+
print(s::RopeString) = print(s.head, s.tail)
|
330
|
+
|
331
|
+
## transformed strings ##
|
332
|
+
|
333
|
+
type TransformedString <: String
|
334
|
+
transform::Function
|
335
|
+
string::String
|
336
|
+
end
|
337
|
+
|
338
|
+
length(s::TransformedString) = length(s.string)
|
339
|
+
strlen(s::TransformedString) = strlen(s.string)
|
340
|
+
|
341
|
+
function next(s::TransformedString, i::Int)
|
342
|
+
c, j = next(s.string,i)
|
343
|
+
c = s.transform(c, i)
|
344
|
+
return c, j
|
345
|
+
end
|
346
|
+
|
347
|
+
## uppercase and lowercase transformations ##
|
348
|
+
|
349
|
+
uppercase(c::Char) = ccall(:towupper, Char, (Char,), c)
|
350
|
+
lowercase(c::Char) = ccall(:towlower, Char, (Char,), c)
|
351
|
+
|
352
|
+
uppercase(s::String) = TransformedString((c,i)->uppercase(c), s)
|
353
|
+
lowercase(s::String) = TransformedString((c,i)->lowercase(c), s)
|
354
|
+
|
355
|
+
ucfirst(s::String) = TransformedString((c,i)->i==1 ? uppercase(c) : c, s)
|
356
|
+
lcfirst(s::String) = TransformedString((c,i)->i==1 ? lowercase(c) : c, s)
|
357
|
+
|
358
|
+
const uc = uppercase
|
359
|
+
const lc = lowercase
|
360
|
+
|
361
|
+
## string map ##
|
362
|
+
|
363
|
+
function map(f::Function, s::String)
|
364
|
+
out = memio(length(s))
|
365
|
+
for c in s
|
366
|
+
write(out, f(c)::Char)
|
367
|
+
end
|
368
|
+
takebuf_string(out)
|
369
|
+
end
|
370
|
+
|
371
|
+
## conversion of general objects to strings ##
|
372
|
+
|
373
|
+
string(x) = print_to_string(show, x)
|
374
|
+
cstring(x...) = print_to_string(print, x...)
|
375
|
+
|
376
|
+
function cstring(p::Ptr{Uint8})
|
377
|
+
p == C_NULL ? error("cannot convert NULL to string") :
|
378
|
+
ccall(:jl_cstr_to_string, Any, (Ptr{Uint8},), p)::ByteString
|
379
|
+
end
|
380
|
+
|
381
|
+
## string promotion rules ##
|
382
|
+
|
383
|
+
promote_rule(::Type{UTF8String} , ::Type{ASCIIString}) = UTF8String
|
384
|
+
promote_rule(::Type{UTF8String} , ::Type{CharString} ) = UTF8String
|
385
|
+
promote_rule(::Type{ASCIIString}, ::Type{CharString} ) = UTF8String
|
386
|
+
|
387
|
+
## printing literal quoted string data ##
|
388
|
+
|
389
|
+
# TODO: this is really the inverse of print_unbackslashed
|
390
|
+
|
391
|
+
function print_quoted_literal(s::String)
|
392
|
+
print('"')
|
393
|
+
for c = s; c == '"' ? print("\\\"") : print(c); end
|
394
|
+
print('"')
|
395
|
+
end
|
396
|
+
|
397
|
+
## string escaping & unescaping ##
|
398
|
+
|
399
|
+
escape_nul(s::String, i::Int) =
|
400
|
+
!done(s,i) && '0' <= next(s,i)[1] <= '7' ? L"\x00" : L"\0"
|
401
|
+
|
402
|
+
is_hex_digit(c::Char) = '0'<=c<='9' || 'a'<=c<='f' || 'A'<=c<='F'
|
403
|
+
need_full_hex(s::String, i::Int) = !done(s,i) && is_hex_digit(next(s,i)[1])
|
404
|
+
|
405
|
+
function print_escaped(s::String, esc::String)
|
406
|
+
i = start(s)
|
407
|
+
while !done(s,i)
|
408
|
+
c, j = next(s,i)
|
409
|
+
c == '\0' ? print(escape_nul(s,j)) :
|
410
|
+
c == '\e' ? print(L"\e") :
|
411
|
+
c == '\\' ? print("\\\\") :
|
412
|
+
contains(esc,c) ? print('\\', c) :
|
413
|
+
iswprint(c) ? print(c) :
|
414
|
+
7 <= c <= 13 ? print('\\', "abtnvfr"[c-6]) :
|
415
|
+
c <= '\x7f' ? print(L"\x", hex(c, 2)) :
|
416
|
+
c <= '\uffff' ? print(L"\u", hex(c, need_full_hex(s,j) ? 4 : 2)) :
|
417
|
+
print(L"\U", hex(c, need_full_hex(s,j) ? 8 : 4))
|
418
|
+
i = j
|
419
|
+
end
|
420
|
+
end
|
421
|
+
|
422
|
+
escape_string(s::String) = print_to_string(length(s), print_escaped, s, "\"")
|
423
|
+
print_quoted(s::String) = (print('"'); print_escaped(s, "\"\$"); print('"'))
|
424
|
+
#" # work around syntax highlighting problem
|
425
|
+
quote_string(s::String) = print_to_string(length(s)+2, print_quoted, s)
|
426
|
+
|
427
|
+
# bare minimum unescaping function unescapes only given characters
|
428
|
+
|
429
|
+
function print_unescaped_chars(s::String, esc::String)
|
430
|
+
if !contains(esc,'\\')
|
431
|
+
esc = strcat("\\", esc)
|
432
|
+
end
|
433
|
+
i = start(s)
|
434
|
+
while !done(s,i)
|
435
|
+
c, i = next(s,i)
|
436
|
+
if c == '\\' && !done(s,i) && contains(esc,s[i])
|
437
|
+
c, i = next(s,i)
|
438
|
+
end
|
439
|
+
print(c)
|
440
|
+
end
|
441
|
+
end
|
442
|
+
|
443
|
+
unescape_chars(s::String, esc::String) =
|
444
|
+
print_to_string(length(s), print_unescaped_chars, s, esc)
|
445
|
+
|
446
|
+
# general unescaping of traditional C and Unicode escape sequences
|
447
|
+
|
448
|
+
function print_unescaped(s::String)
|
449
|
+
i = start(s)
|
450
|
+
while !done(s,i)
|
451
|
+
c, i = next(s,i)
|
452
|
+
if !done(s,i) && c == '\\'
|
453
|
+
c, i = next(s,i)
|
454
|
+
if c == 'x' || c == 'u' || c == 'U'
|
455
|
+
n = k = 0
|
456
|
+
m = c == 'x' ? 2 :
|
457
|
+
c == 'u' ? 4 : 8
|
458
|
+
while (k+=1) <= m && !done(s,i)
|
459
|
+
c, j = next(s,i)
|
460
|
+
n = '0' <= c <= '9' ? n<<4 + c-'0' :
|
461
|
+
'a' <= c <= 'f' ? n<<4 + c-'a'+10 :
|
462
|
+
'A' <= c <= 'F' ? n<<4 + c-'A'+10 : break
|
463
|
+
i = j
|
464
|
+
end
|
465
|
+
if k == 1
|
466
|
+
error("\\x used with no following hex digits")
|
467
|
+
end
|
468
|
+
if m == 2 # \x escape sequence
|
469
|
+
write(uint8(n))
|
470
|
+
else
|
471
|
+
print(char(n))
|
472
|
+
end
|
473
|
+
elseif '0' <= c <= '7'
|
474
|
+
k = 1
|
475
|
+
n = c-'0'
|
476
|
+
while (k+=1) <= 3 && !done(s,i)
|
477
|
+
c, j = next(s,i)
|
478
|
+
n = '0' <= c <= '7' ? n<<3 + c-'0' : break
|
479
|
+
i = j
|
480
|
+
end
|
481
|
+
if n > 255
|
482
|
+
error("octal escape sequence out of range")
|
483
|
+
end
|
484
|
+
write(uint8(n))
|
485
|
+
else
|
486
|
+
print(c == 'a' ? '\a' :
|
487
|
+
c == 'b' ? '\b' :
|
488
|
+
c == 't' ? '\t' :
|
489
|
+
c == 'n' ? '\n' :
|
490
|
+
c == 'v' ? '\v' :
|
491
|
+
c == 'f' ? '\f' :
|
492
|
+
c == 'r' ? '\r' :
|
493
|
+
c == 'e' ? '\e' : c)
|
494
|
+
end
|
495
|
+
else
|
496
|
+
print(c)
|
497
|
+
end
|
498
|
+
end
|
499
|
+
end
|
500
|
+
|
501
|
+
unescape_string(s::String) = print_to_string(length(s), print_unescaped, s)
|
502
|
+
|
503
|
+
## checking UTF-8 & ACSII validity ##
|
504
|
+
|
505
|
+
byte_string_classify(s::ByteString) =
|
506
|
+
ccall(:u8_isvalid, Int32, (Ptr{Uint8}, Int), s.data, length(s))
|
507
|
+
# 0: neither valid ASCII nor UTF-8
|
508
|
+
# 1: valid ASCII
|
509
|
+
# 2: valid UTF-8
|
510
|
+
|
511
|
+
is_valid_ascii(s::ByteString) = byte_string_classify(s) == 1
|
512
|
+
is_valid_utf8 (s::ByteString) = byte_string_classify(s) != 0
|
513
|
+
|
514
|
+
check_ascii(s::ByteString) = is_valid_ascii(s) ? s : error("invalid ASCII sequence")
|
515
|
+
check_utf8 (s::ByteString) = is_valid_utf8(s) ? s : error("invalid UTF-8 sequence")
|
516
|
+
|
517
|
+
## string interpolation parsing ##
|
518
|
+
|
519
|
+
function _jl_interp_parse(s::String, unescape::Function, printer::Function)
|
520
|
+
sx = {}
|
521
|
+
i = j = start(s)
|
522
|
+
while !done(s,j)
|
523
|
+
c, k = next(s,j)
|
524
|
+
if c == '$'
|
525
|
+
if !isempty(s[i:j-1])
|
526
|
+
push(sx, unescape(s[i:j-1]))
|
527
|
+
end
|
528
|
+
ex, j = parseatom(s,k)
|
529
|
+
push(sx, ex)
|
530
|
+
i = j
|
531
|
+
elseif c == '\\' && !done(s,k)
|
532
|
+
if s[k] == '$'
|
533
|
+
if !isempty(s[i:j-1])
|
534
|
+
push(sx, unescape(s[i:j-1]))
|
535
|
+
end
|
536
|
+
i = k
|
537
|
+
end
|
538
|
+
c, j = next(s,k)
|
539
|
+
else
|
540
|
+
j = k
|
541
|
+
end
|
542
|
+
end
|
543
|
+
if !isempty(s[i:])
|
544
|
+
push(sx, unescape(s[i:j-1]))
|
545
|
+
end
|
546
|
+
length(sx) == 1 && isa(sx[1],ByteString) ? sx[1] :
|
547
|
+
expr(:call, :print_to_string, printer, sx...)
|
548
|
+
end
|
549
|
+
|
550
|
+
_jl_interp_parse(s::String, u::Function) = _jl_interp_parse(s, u, print)
|
551
|
+
_jl_interp_parse(s::String) = _jl_interp_parse(s, x->check_utf8(unescape_string(x)))
|
552
|
+
|
553
|
+
function _jl_interp_parse_bytes(s::String)
|
554
|
+
writer(x...) = for w=x; write(w); end
|
555
|
+
_jl_interp_parse(s, unescape_string, writer)
|
556
|
+
end
|
557
|
+
|
558
|
+
## core string macros ##
|
559
|
+
|
560
|
+
macro str(s); _jl_interp_parse(s); end
|
561
|
+
macro S_str(s); _jl_interp_parse(s); end
|
562
|
+
macro I_str(s); _jl_interp_parse(s, x->unescape_chars(x,"\"")); end
|
563
|
+
macro E_str(s); check_utf8(unescape_string(s)); end
|
564
|
+
macro B_str(s); _jl_interp_parse_bytes(s); end
|
565
|
+
macro b_str(s); ex = _jl_interp_parse_bytes(s); :(($ex).data); end
|
566
|
+
|
567
|
+
## shell-like command parsing ##
|
568
|
+
|
569
|
+
function _jl_shell_parse(s::String, interp::Bool)
|
570
|
+
|
571
|
+
in_single_quotes = false
|
572
|
+
in_double_quotes = false
|
573
|
+
|
574
|
+
args = {}
|
575
|
+
arg = {}
|
576
|
+
i = start(s)
|
577
|
+
j = i
|
578
|
+
|
579
|
+
function update_arg(x)
|
580
|
+
if !isa(x,String) || !isempty(x)
|
581
|
+
push(arg, x)
|
582
|
+
end
|
583
|
+
end
|
584
|
+
function append_arg()
|
585
|
+
if isempty(arg); arg = {"",}; end
|
586
|
+
push(args, arg)
|
587
|
+
arg = {}
|
588
|
+
end
|
589
|
+
|
590
|
+
while !done(s,j)
|
591
|
+
c, k = next(s,j)
|
592
|
+
if !in_single_quotes && !in_double_quotes && iswspace(c)
|
593
|
+
update_arg(s[i:j-1])
|
594
|
+
append_arg()
|
595
|
+
j = k
|
596
|
+
while !done(s,j)
|
597
|
+
c, k = next(s,j)
|
598
|
+
if !iswspace(c)
|
599
|
+
i = j
|
600
|
+
break
|
601
|
+
end
|
602
|
+
j = k
|
603
|
+
end
|
604
|
+
elseif interp && !in_single_quotes && c == '$'
|
605
|
+
update_arg(s[i:j-1]); i = k; j = k
|
606
|
+
if done(s,k)
|
607
|
+
error("\$ right before end of command")
|
608
|
+
end
|
609
|
+
if iswspace(s[k])
|
610
|
+
error("space not allowed right after \$")
|
611
|
+
end
|
612
|
+
ex, j = parseatom(s,j)
|
613
|
+
update_arg(ex); i = j
|
614
|
+
else
|
615
|
+
if !in_double_quotes && c == '\''
|
616
|
+
in_single_quotes = !in_single_quotes
|
617
|
+
update_arg(s[i:j-1]); i = k
|
618
|
+
elseif !in_single_quotes && c == '"'
|
619
|
+
in_double_quotes = !in_double_quotes
|
620
|
+
update_arg(s[i:j-1]); i = k
|
621
|
+
elseif c == '\\'
|
622
|
+
if in_double_quotes
|
623
|
+
if done(s,k)
|
624
|
+
error("unterminated double quote")
|
625
|
+
end
|
626
|
+
if s[k] == '"' || s[k] == '$'
|
627
|
+
update_arg(s[i:j-1]); i = k
|
628
|
+
c, k = next(s,k)
|
629
|
+
end
|
630
|
+
elseif !in_single_quotes
|
631
|
+
if done(s,k)
|
632
|
+
error("dangling backslash")
|
633
|
+
end
|
634
|
+
update_arg(s[i:j-1]); i = k
|
635
|
+
c, k = next(s,k)
|
636
|
+
end
|
637
|
+
end
|
638
|
+
j = k
|
639
|
+
end
|
640
|
+
end
|
641
|
+
|
642
|
+
if in_single_quotes; error("unterminated single quote"); end
|
643
|
+
if in_double_quotes; error("unterminated double quote"); end
|
644
|
+
|
645
|
+
update_arg(s[i:])
|
646
|
+
append_arg()
|
647
|
+
|
648
|
+
if !interp
|
649
|
+
return args
|
650
|
+
end
|
651
|
+
|
652
|
+
# construct an expression
|
653
|
+
exprs = {}
|
654
|
+
for arg in args
|
655
|
+
push(exprs, expr(:tuple, arg))
|
656
|
+
end
|
657
|
+
expr(:tuple,exprs)
|
658
|
+
end
|
659
|
+
_jl_shell_parse(s::String) = _jl_shell_parse(s,true)
|
660
|
+
|
661
|
+
function shell_split(s::String)
|
662
|
+
parsed = _jl_shell_parse(s,false)
|
663
|
+
args = String[]
|
664
|
+
for arg in parsed
|
665
|
+
push(args, strcat(arg...))
|
666
|
+
end
|
667
|
+
args
|
668
|
+
end
|
669
|
+
|
670
|
+
function print_shell_word(word::String)
|
671
|
+
if isempty(word)
|
672
|
+
print("''")
|
673
|
+
end
|
674
|
+
has_single = false
|
675
|
+
has_special = false
|
676
|
+
for c in word
|
677
|
+
if iswspace(c) || c=='\\' || c=='\'' || c=='"' || c=='$'
|
678
|
+
has_special = true
|
679
|
+
if c == '\''
|
680
|
+
has_single = true
|
681
|
+
end
|
682
|
+
end
|
683
|
+
end
|
684
|
+
if !has_special
|
685
|
+
print(word)
|
686
|
+
elseif !has_single
|
687
|
+
print('\'', word, '\'')
|
688
|
+
else
|
689
|
+
print('"')
|
690
|
+
for c in word
|
691
|
+
if c == '"' || c == '$'
|
692
|
+
print('\\')
|
693
|
+
end
|
694
|
+
print(c)
|
695
|
+
end
|
696
|
+
print('"')
|
697
|
+
end
|
698
|
+
end
|
699
|
+
|
700
|
+
function print_shell_escaped(cmd::String, args::String...)
|
701
|
+
print_shell_word(cmd)
|
702
|
+
for arg in args
|
703
|
+
print(' ')
|
704
|
+
print_shell_word(arg)
|
705
|
+
end
|
706
|
+
end
|
707
|
+
|
708
|
+
shell_escape(cmd::String, args::String...) =
|
709
|
+
print_to_string(print_shell_escaped, cmd, args...)
|
710
|
+
|
711
|
+
## interface to parser ##
|
712
|
+
|
713
|
+
function parse(s::String, pos, greedy)
|
714
|
+
# returns (expr, end_pos). expr is () in case of parse error.
|
715
|
+
ex, pos = ccall(:jl_parse_string, Any,
|
716
|
+
(Ptr{Uint8}, Int32, Int32),
|
717
|
+
cstring(s), pos-1, greedy ? 1:0)
|
718
|
+
if isa(ex,Expr) && is(ex.head,:error)
|
719
|
+
throw(ParseError(ex.args[1]))
|
720
|
+
end
|
721
|
+
if ex == (); throw(ParseError("end of input")); end
|
722
|
+
ex, pos+1 # C is zero-based, Julia is 1-based
|
723
|
+
end
|
724
|
+
|
725
|
+
parse(s::String) = parse(s, 1, true)
|
726
|
+
parse(s::String, pos) = parse(s, pos, true)
|
727
|
+
parseatom(s::String) = parse(s, 1, false)
|
728
|
+
parseatom(s::String, pos) = parse(s, pos, false)
|
729
|
+
|
730
|
+
## miscellaneous string functions ##
|
731
|
+
|
732
|
+
function lpad(s::String, n::Integer, p::String)
|
733
|
+
m = n - strlen(s)
|
734
|
+
if m <= 0; return s; end
|
735
|
+
l = strlen(p)
|
736
|
+
if l==1
|
737
|
+
return p^m * s
|
738
|
+
end
|
739
|
+
q = div(m,l)
|
740
|
+
r = m - q*l
|
741
|
+
cstring(p^q*p[1:chr2ind(p,r)]*s)
|
742
|
+
end
|
743
|
+
|
744
|
+
function rpad(s::String, n::Integer, p::String)
|
745
|
+
m = n - strlen(s)
|
746
|
+
if m <= 0; return s; end
|
747
|
+
l = strlen(p)
|
748
|
+
if l==1
|
749
|
+
return s * p^m
|
750
|
+
end
|
751
|
+
q = div(m,l)
|
752
|
+
r = m - q*l
|
753
|
+
cstring(s*p^q*p[1:chr2ind(p,r)])
|
754
|
+
end
|
755
|
+
|
756
|
+
lpad(s, n::Integer, p) = lpad(string(s), n, string(p))
|
757
|
+
rpad(s, n::Integer, p) = rpad(string(s), n, string(p))
|
758
|
+
|
759
|
+
lpad(s, n::Integer) = lpad(string(s), n, " ")
|
760
|
+
rpad(s, n::Integer) = rpad(string(s), n, " ")
|
761
|
+
|
762
|
+
function split(s::String, delims, include_empty::Bool)
|
763
|
+
i = 1
|
764
|
+
strs = String[]
|
765
|
+
len = length(s)
|
766
|
+
while true
|
767
|
+
tokstart = tokend = i
|
768
|
+
while !done(s,i)
|
769
|
+
(c,i) = next(s,i)
|
770
|
+
if contains(delims, c)
|
771
|
+
break
|
772
|
+
end
|
773
|
+
tokend = i
|
774
|
+
end
|
775
|
+
tok = s[tokstart:(tokend-1)]
|
776
|
+
if include_empty || !isempty(tok)
|
777
|
+
push(strs, tok)
|
778
|
+
end
|
779
|
+
if !((i <= len) || (i==len+1 && tokend!=i))
|
780
|
+
break
|
781
|
+
end
|
782
|
+
end
|
783
|
+
strs
|
784
|
+
end
|
785
|
+
|
786
|
+
split(s::String) = split(s, (' ','\t','\n','\v','\f','\r'), false)
|
787
|
+
split(s::String, x) = split(s, x, true)
|
788
|
+
split(s::String, x::Char, incl::Bool) = split(s, (x,), incl)
|
789
|
+
|
790
|
+
function print_joined(strings, delim, last)
|
791
|
+
i = start(strings)
|
792
|
+
if done(strings,i)
|
793
|
+
return
|
794
|
+
end
|
795
|
+
str, i = next(strings,i)
|
796
|
+
print(str)
|
797
|
+
while !done(strings,i)
|
798
|
+
str, i = next(strings,i)
|
799
|
+
print(done(strings,i) ? last : delim)
|
800
|
+
print(str)
|
801
|
+
end
|
802
|
+
end
|
803
|
+
|
804
|
+
function print_joined(strings, delim)
|
805
|
+
i = start(strings)
|
806
|
+
while !done(strings,i)
|
807
|
+
str, i = next(strings,i)
|
808
|
+
print(str)
|
809
|
+
if !done(strings,i)
|
810
|
+
print(delim)
|
811
|
+
end
|
812
|
+
end
|
813
|
+
end
|
814
|
+
print_joined(strings) = print_joined(strings, "")
|
815
|
+
|
816
|
+
join(args...) = print_to_string(print_joined, args...)
|
817
|
+
|
818
|
+
chop(s::String) = s[1:thisind(s,length(s))-1]
|
819
|
+
chomp(s::String) = (i=thisind(s,length(s)); s[i]=='\n' ? s[1:i-1] : s)
|
820
|
+
chomp(s::ByteString) = s.data[end]==0x0a ? s[1:end-1] : s
|
821
|
+
|
822
|
+
function lstrip(s::String)
|
823
|
+
i = start(s)
|
824
|
+
while !done(s,i)
|
825
|
+
c, j = next(s,i)
|
826
|
+
if !iswspace(c)
|
827
|
+
return s[i:end]
|
828
|
+
end
|
829
|
+
i = j
|
830
|
+
end
|
831
|
+
""
|
832
|
+
end
|
833
|
+
|
834
|
+
function rstrip(s::String)
|
835
|
+
r = reverse(s)
|
836
|
+
i = start(r)
|
837
|
+
while !done(r,i)
|
838
|
+
c, j = next(r,i)
|
839
|
+
if !iswspace(c)
|
840
|
+
return s[1:end-i+1]
|
841
|
+
end
|
842
|
+
i = j
|
843
|
+
end
|
844
|
+
""
|
845
|
+
end
|
846
|
+
|
847
|
+
strip(s::String) = lstrip(rstrip(s))
|
848
|
+
|
849
|
+
## string to integer functions ##
|
850
|
+
|
851
|
+
function parse_int{T<:Integer}(::Type{T}, s::String, base::Integer)
|
852
|
+
if !(2 <= base <= 36); error("invalid base: ",base); end
|
853
|
+
i = start(s)
|
854
|
+
if done(s,i)
|
855
|
+
error("premature end of integer (in ",show_to_string(s),")")
|
856
|
+
end
|
857
|
+
c,i = next(s,i)
|
858
|
+
sgn = one(T)
|
859
|
+
if T <: Signed && c == '-'
|
860
|
+
sgn = -sgn
|
861
|
+
if done(s,i)
|
862
|
+
error("premature end of integer (in ",show_to_string(s),")")
|
863
|
+
end
|
864
|
+
c,i = next(s,i)
|
865
|
+
end
|
866
|
+
base = convert(T,base)
|
867
|
+
n::T = 0
|
868
|
+
while true
|
869
|
+
d = '0' <= c <= '9' ? c-'0' :
|
870
|
+
'A' <= c <= 'Z' ? c-'A'+10 :
|
871
|
+
'a' <= c <= 'z' ? c-'a'+10 : typemax(Int)
|
872
|
+
if d >= base
|
873
|
+
error(show_to_string(c)," is not a valid digit (in ",show_to_string(s),")")
|
874
|
+
end
|
875
|
+
# TODO: overflow detection?
|
876
|
+
n = n*base + d
|
877
|
+
if done(s,i)
|
878
|
+
break
|
879
|
+
end
|
880
|
+
c,i = next(s,i)
|
881
|
+
end
|
882
|
+
return flipsign(n,sgn)
|
883
|
+
end
|
884
|
+
|
885
|
+
parse_int(s::String, base::Integer) = parse_int(Int,s,base)
|
886
|
+
parse_int(T::Type, s::String) = parse_int(T,s,10)
|
887
|
+
parse_int(s::String) = parse_int(Int,s,10)
|
888
|
+
|
889
|
+
parse_bin(T::Type, s::String) = parse_int(T,s,2)
|
890
|
+
parse_oct(T::Type, s::String) = parse_int(T,s,8)
|
891
|
+
parse_hex(T::Type, s::String) = parse_int(T,s,16)
|
892
|
+
|
893
|
+
parse_bin(s::String) = parse_int(Int,s,2)
|
894
|
+
parse_oct(s::String) = parse_int(Int,s,8)
|
895
|
+
parse_hex(s::String) = parse_int(Int,s,16)
|
896
|
+
|
897
|
+
integer (s::String) = int(s)
|
898
|
+
unsigned(s::String) = uint(s)
|
899
|
+
int (s::String) = parse_int(Int,s)
|
900
|
+
uint (s::String) = parse_int(Uint,s)
|
901
|
+
int8 (s::String) = parse_int(Int8,s)
|
902
|
+
uint8 (s::String) = parse_int(Uint8,s)
|
903
|
+
int16 (s::String) = parse_int(Int16,s)
|
904
|
+
uint16 (s::String) = parse_int(Uint16,s)
|
905
|
+
int32 (s::String) = parse_int(Int32,s)
|
906
|
+
uint32 (s::String) = parse_int(Uint32,s)
|
907
|
+
int64 (s::String) = parse_int(Int64,s)
|
908
|
+
uint64 (s::String) = parse_int(Uint64,s)
|
909
|
+
|
910
|
+
## integer to string functions ##
|
911
|
+
|
912
|
+
const _jl_dig_syms = "0123456789abcdefghijklmnopqrstuvwxyz".data
|
913
|
+
|
914
|
+
function int2str(n::Union(Int64,Uint64), b::Integer, l::Int)
|
915
|
+
if b < 2 || b > 36; error("int2str: invalid base ", b); end
|
916
|
+
neg = n < 0
|
917
|
+
n = unsigned(abs(n))
|
918
|
+
b = convert(typeof(n), b)
|
919
|
+
ndig = ndigits(n, b)
|
920
|
+
sz = max(convert(Int, ndig), l) + neg
|
921
|
+
data = Array(Uint8, sz)
|
922
|
+
i = sz
|
923
|
+
if ispow2(b)
|
924
|
+
digmask = b-1
|
925
|
+
shift = trailing_zeros(b)
|
926
|
+
while i > neg
|
927
|
+
ch = n & digmask
|
928
|
+
data[i] = _jl_dig_syms[int(ch)+1]
|
929
|
+
n >>= shift
|
930
|
+
i -= 1
|
931
|
+
end
|
932
|
+
else
|
933
|
+
while i > neg
|
934
|
+
ch = n % b
|
935
|
+
data[i] = _jl_dig_syms[int(ch)+1]
|
936
|
+
n = div(n,b)
|
937
|
+
i -= 1
|
938
|
+
end
|
939
|
+
end
|
940
|
+
if neg
|
941
|
+
data[1] = '-'
|
942
|
+
end
|
943
|
+
ASCIIString(data)
|
944
|
+
end
|
945
|
+
int2str(n::Integer, b::Integer) = int2str(n, b, 0)
|
946
|
+
int2str(n::Integer, b::Integer, l::Int) = int2str(int64(n), b, l)
|
947
|
+
|
948
|
+
string(x::Signed) = dec(int64(x))
|
949
|
+
cstring(x::Signed) = dec(int64(x))
|
950
|
+
|
951
|
+
## string to float functions ##
|
952
|
+
|
953
|
+
function float64_isvalid(s::String, out::Array{Float64,1})
|
954
|
+
s = cstring(s)
|
955
|
+
return (ccall(:jl_strtod, Int32, (Ptr{Uint8},Ptr{Float64}), s, out)==0)
|
956
|
+
end
|
957
|
+
|
958
|
+
function float32_isvalid(s::String, out::Array{Float32,1})
|
959
|
+
s = cstring(s)
|
960
|
+
return (ccall(:jl_strtof, Int32, (Ptr{Uint8},Ptr{Float32}), s, out)==0)
|
961
|
+
end
|
962
|
+
|
963
|
+
begin
|
964
|
+
local tmp::Array{Float64,1} = Array(Float64,1)
|
965
|
+
local tmpf::Array{Float32,1} = Array(Float32,1)
|
966
|
+
global float64, float32
|
967
|
+
function float64(s::String)
|
968
|
+
if !float64_isvalid(s, tmp)
|
969
|
+
throw(ArgumentError("float64(String): invalid number format"))
|
970
|
+
end
|
971
|
+
return tmp[1]
|
972
|
+
end
|
973
|
+
|
974
|
+
function float32(s::String)
|
975
|
+
if !float32_isvalid(s, tmpf)
|
976
|
+
throw(ArgumentError("float32(String): invalid number format"))
|
977
|
+
end
|
978
|
+
return tmpf[1]
|
979
|
+
end
|
980
|
+
end
|
981
|
+
|
982
|
+
float(x::String) = float64(x)
|
983
|
+
parse_float(x::String) = float64(x)
|
984
|
+
parse_float(::Type{Float64}, x::String) = float64(x)
|
985
|
+
parse_float(::Type{Float32}, x::String) = float32(x)
|
986
|
+
|
987
|
+
# copying a byte string (generally not needed due to "immutability")
|
988
|
+
|
989
|
+
strcpy{T<:ByteString}(s::T) = T(copy(s.data))
|
990
|
+
|
991
|
+
# lexicographically compare byte arrays (used by Latin-1 and UTF-8)
|
992
|
+
|
993
|
+
function lexcmp(a::Array{Uint8,1}, b::Array{Uint8,1})
|
994
|
+
c = ccall(:memcmp, Int32, (Ptr{Uint8}, Ptr{Uint8}, Uint),
|
995
|
+
a, b, min(length(a),length(b)))
|
996
|
+
c < 0 ? -1 : c > 0 ? +1 : cmp(length(a),length(b))
|
997
|
+
end
|
998
|
+
|
999
|
+
# find the index of the first occurrence of a byte value in a byte array
|
1000
|
+
|
1001
|
+
function memchr(a::Array{Uint8,1}, b::Integer)
|
1002
|
+
p = pointer(a)
|
1003
|
+
q = ccall(:memchr, Ptr{Uint8}, (Ptr{Uint8}, Int32, Uint), p, b, length(a))
|
1004
|
+
q == C_NULL ? 0 : q - p + 1
|
1005
|
+
end
|
1006
|
+
|
1007
|
+
# concatenate byte arrays into a single array
|
1008
|
+
|
1009
|
+
memcat() = Array(Uint8,0)
|
1010
|
+
memcat(a::Array{Uint8,1}) = copy(a)
|
1011
|
+
|
1012
|
+
function memcat(arrays::Array{Uint8,1}...)
|
1013
|
+
n = 0
|
1014
|
+
for a in arrays
|
1015
|
+
n += length(a)
|
1016
|
+
end
|
1017
|
+
arr = Array(Uint8, n)
|
1018
|
+
ptr = pointer(arr)
|
1019
|
+
offset = 0
|
1020
|
+
for a in arrays
|
1021
|
+
ccall(:memcpy, Ptr{Uint8}, (Ptr{Uint8}, Ptr{Uint8}, Uint),
|
1022
|
+
ptr+offset, a, length(a))
|
1023
|
+
offset += length(a)
|
1024
|
+
end
|
1025
|
+
return arr
|
1026
|
+
end
|
1027
|
+
|
1028
|
+
# concatenate the data fields of byte strings
|
1029
|
+
|
1030
|
+
memcat(s::ByteString) = memcat(s.data)
|
1031
|
+
memcat(sx::ByteString...) = memcat(map(s->s.data, sx)...)
|