pygments.rb 1.2.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.github/dependabot.yml +13 -0
- data/.github/workflows/ci.yml +28 -0
- data/.github/workflows/release.yml +24 -0
- data/.gitignore +5 -6
- data/CHANGELOG.adoc +128 -0
- data/Gemfile +3 -1
- data/LICENSE +1 -1
- data/README.adoc +160 -0
- data/Rakefile +11 -21
- data/bench.rb +8 -7
- data/cache-lexers.rb +3 -2
- data/lexers +0 -0
- data/lib/pygments/lexer.rb +5 -5
- data/lib/pygments/mentos.py +23 -110
- data/lib/pygments/popen.rb +148 -229
- data/lib/pygments/version.rb +2 -2
- data/lib/pygments.rb +10 -11
- data/pygments.rb.gemspec +12 -10
- data/test/test_pygments.rb +46 -104
- data/vendor/pygments-main/{AUTHORS → Pygments-2.7.3.dist-info/AUTHORS} +21 -3
- data/vendor/pygments-main/Pygments-2.7.3.dist-info/INSTALLER +1 -0
- data/vendor/pygments-main/{LICENSE → Pygments-2.7.3.dist-info/LICENSE} +1 -1
- data/vendor/pygments-main/Pygments-2.7.3.dist-info/METADATA +49 -0
- data/vendor/pygments-main/Pygments-2.7.3.dist-info/RECORD +482 -0
- data/vendor/pygments-main/Pygments-2.7.3.dist-info/REQUESTED +0 -0
- data/vendor/pygments-main/Pygments-2.7.3.dist-info/WHEEL +5 -0
- data/vendor/pygments-main/Pygments-2.7.3.dist-info/entry_points.txt +3 -0
- data/vendor/pygments-main/Pygments-2.7.3.dist-info/top_level.txt +1 -0
- data/vendor/pygments-main/bin/pygmentize +8 -0
- data/vendor/pygments-main/pygments/__init__.py +6 -11
- data/vendor/pygments-main/pygments/__main__.py +18 -0
- data/vendor/pygments-main/pygments/cmdline.py +38 -29
- data/vendor/pygments-main/pygments/console.py +6 -9
- data/vendor/pygments-main/pygments/filter.py +4 -6
- data/vendor/pygments-main/pygments/filters/__init__.py +609 -21
- data/vendor/pygments-main/pygments/formatter.py +4 -4
- data/vendor/pygments-main/pygments/formatters/__init__.py +9 -8
- data/vendor/pygments-main/pygments/formatters/_mapping.py +1 -3
- data/vendor/pygments-main/pygments/formatters/bbcode.py +1 -1
- data/vendor/pygments-main/pygments/formatters/html.py +223 -135
- data/vendor/pygments-main/pygments/formatters/img.py +68 -41
- data/vendor/pygments-main/pygments/formatters/irc.py +39 -39
- data/vendor/pygments-main/pygments/formatters/latex.py +56 -26
- data/vendor/pygments-main/pygments/formatters/other.py +12 -8
- data/vendor/pygments-main/pygments/formatters/rtf.py +29 -29
- data/vendor/pygments-main/pygments/formatters/svg.py +38 -4
- data/vendor/pygments-main/pygments/formatters/terminal.py +25 -31
- data/vendor/pygments-main/pygments/formatters/terminal256.py +22 -12
- data/vendor/pygments-main/pygments/lexer.py +41 -39
- data/vendor/pygments-main/pygments/lexers/__init__.py +28 -15
- data/vendor/pygments-main/pygments/lexers/_asy_builtins.py +5 -5
- data/vendor/pygments-main/pygments/lexers/_cl_builtins.py +15 -15
- data/vendor/pygments-main/pygments/lexers/_cocoa_builtins.py +11 -12
- data/vendor/pygments-main/pygments/lexers/_csound_builtins.py +1717 -1338
- data/vendor/pygments-main/pygments/lexers/_lasso_builtins.py +1 -1
- data/vendor/pygments-main/pygments/lexers/_lua_builtins.py +2 -4
- data/vendor/pygments-main/pygments/lexers/_mapping.py +74 -29
- data/vendor/pygments-main/pygments/lexers/_mql_builtins.py +2 -2
- data/vendor/pygments-main/pygments/lexers/_mysql_builtins.py +1282 -0
- data/vendor/pygments-main/pygments/lexers/_openedge_builtins.py +1 -1
- data/vendor/pygments-main/pygments/lexers/_php_builtins.py +17 -20
- data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +73 -16
- data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +2 -2
- data/vendor/pygments-main/pygments/lexers/_sourcemod_builtins.py +1 -3
- data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +151 -125
- data/vendor/pygments-main/pygments/lexers/_stata_builtins.py +6 -4
- data/vendor/pygments-main/pygments/lexers/_tsql_builtins.py +1 -1
- data/vendor/pygments-main/pygments/lexers/_usd_builtins.py +113 -0
- data/vendor/pygments-main/pygments/lexers/_vbscript_builtins.py +280 -0
- data/vendor/pygments-main/pygments/lexers/_vim_builtins.py +1 -1
- data/vendor/pygments-main/pygments/lexers/actionscript.py +8 -3
- data/vendor/pygments-main/pygments/lexers/agile.py +1 -1
- data/vendor/pygments-main/pygments/lexers/algebra.py +20 -1
- data/vendor/pygments-main/pygments/lexers/ambient.py +1 -1
- data/vendor/pygments-main/pygments/lexers/ampl.py +3 -3
- data/vendor/pygments-main/pygments/lexers/apl.py +15 -15
- data/vendor/pygments-main/pygments/lexers/archetype.py +3 -3
- data/vendor/pygments-main/pygments/lexers/arrow.py +117 -0
- data/vendor/pygments-main/pygments/lexers/asm.py +440 -76
- data/vendor/pygments-main/pygments/lexers/automation.py +1 -1
- data/vendor/pygments-main/pygments/lexers/bare.py +104 -0
- data/vendor/pygments-main/pygments/lexers/basic.py +166 -4
- data/vendor/pygments-main/pygments/lexers/bibtex.py +5 -5
- data/vendor/pygments-main/pygments/lexers/boa.py +102 -0
- data/vendor/pygments-main/pygments/lexers/business.py +17 -2
- data/vendor/pygments-main/pygments/lexers/c_cpp.py +137 -45
- data/vendor/pygments-main/pygments/lexers/c_like.py +67 -42
- data/vendor/pygments-main/pygments/lexers/capnproto.py +7 -7
- data/vendor/pygments-main/pygments/lexers/chapel.py +23 -13
- data/vendor/pygments-main/pygments/lexers/clean.py +135 -244
- data/vendor/pygments-main/pygments/lexers/compiled.py +1 -1
- data/vendor/pygments-main/pygments/lexers/configs.py +187 -36
- data/vendor/pygments-main/pygments/lexers/console.py +1 -1
- data/vendor/pygments-main/pygments/lexers/crystal.py +3 -4
- data/vendor/pygments-main/pygments/lexers/csound.py +288 -187
- data/vendor/pygments-main/pygments/lexers/css.py +18 -16
- data/vendor/pygments-main/pygments/lexers/d.py +10 -5
- data/vendor/pygments-main/pygments/lexers/dalvik.py +1 -1
- data/vendor/pygments-main/pygments/lexers/data.py +240 -97
- data/vendor/pygments-main/pygments/lexers/devicetree.py +109 -0
- data/vendor/pygments-main/pygments/lexers/diff.py +4 -4
- data/vendor/pygments-main/pygments/lexers/dotnet.py +40 -24
- data/vendor/pygments-main/pygments/lexers/dsls.py +144 -62
- data/vendor/pygments-main/pygments/lexers/dylan.py +16 -18
- data/vendor/pygments-main/pygments/lexers/ecl.py +16 -2
- data/vendor/pygments-main/pygments/lexers/eiffel.py +1 -1
- data/vendor/pygments-main/pygments/lexers/elm.py +5 -5
- data/vendor/pygments-main/pygments/lexers/email.py +151 -0
- data/vendor/pygments-main/pygments/lexers/erlang.py +29 -32
- data/vendor/pygments-main/pygments/lexers/esoteric.py +46 -19
- data/vendor/pygments-main/pygments/lexers/ezhil.py +21 -13
- data/vendor/pygments-main/pygments/lexers/factor.py +1 -1
- data/vendor/pygments-main/pygments/lexers/fantom.py +1 -1
- data/vendor/pygments-main/pygments/lexers/felix.py +1 -1
- data/vendor/pygments-main/pygments/lexers/floscript.py +83 -0
- data/vendor/pygments-main/pygments/lexers/forth.py +41 -40
- data/vendor/pygments-main/pygments/lexers/fortran.py +5 -4
- data/vendor/pygments-main/pygments/lexers/foxpro.py +2 -2
- data/vendor/pygments-main/pygments/lexers/freefem.py +898 -0
- data/vendor/pygments-main/pygments/lexers/functional.py +1 -1
- data/vendor/pygments-main/pygments/lexers/gdscript.py +346 -0
- data/vendor/pygments-main/pygments/lexers/go.py +1 -1
- data/vendor/pygments-main/pygments/lexers/grammar_notation.py +62 -5
- data/vendor/pygments-main/pygments/lexers/graph.py +14 -9
- data/vendor/pygments-main/pygments/lexers/graphics.py +272 -25
- data/vendor/pygments-main/pygments/lexers/haskell.py +48 -21
- data/vendor/pygments-main/pygments/lexers/haxe.py +6 -6
- data/vendor/pygments-main/pygments/lexers/hdl.py +176 -86
- data/vendor/pygments-main/pygments/lexers/hexdump.py +1 -1
- data/vendor/pygments-main/pygments/lexers/html.py +31 -19
- data/vendor/pygments-main/pygments/lexers/idl.py +19 -8
- data/vendor/pygments-main/pygments/lexers/igor.py +244 -112
- data/vendor/pygments-main/pygments/lexers/inferno.py +2 -2
- data/vendor/pygments-main/pygments/lexers/installers.py +1 -1
- data/vendor/pygments-main/pygments/lexers/int_fiction.py +40 -15
- data/vendor/pygments-main/pygments/lexers/iolang.py +2 -2
- data/vendor/pygments-main/pygments/lexers/j.py +3 -3
- data/vendor/pygments-main/pygments/lexers/javascript.py +60 -45
- data/vendor/pygments-main/pygments/lexers/julia.py +44 -46
- data/vendor/pygments-main/pygments/lexers/jvm.py +265 -165
- data/vendor/pygments-main/pygments/lexers/lisp.py +882 -804
- data/vendor/pygments-main/pygments/lexers/make.py +10 -6
- data/vendor/pygments-main/pygments/lexers/markup.py +213 -43
- data/vendor/pygments-main/pygments/lexers/math.py +1 -1
- data/vendor/pygments-main/pygments/lexers/matlab.py +98 -41
- data/vendor/pygments-main/pygments/lexers/mime.py +226 -0
- data/vendor/pygments-main/pygments/lexers/ml.py +198 -9
- data/vendor/pygments-main/pygments/lexers/modeling.py +26 -18
- data/vendor/pygments-main/pygments/lexers/modula2.py +25 -6
- data/vendor/pygments-main/pygments/lexers/monte.py +1 -1
- data/vendor/pygments-main/pygments/lexers/mosel.py +448 -0
- data/vendor/pygments-main/pygments/lexers/ncl.py +1 -1
- data/vendor/pygments-main/pygments/lexers/nimrod.py +4 -4
- data/vendor/pygments-main/pygments/lexers/nit.py +1 -1
- data/vendor/pygments-main/pygments/lexers/nix.py +1 -1
- data/vendor/pygments-main/pygments/lexers/oberon.py +17 -1
- data/vendor/pygments-main/pygments/lexers/objective.py +16 -16
- data/vendor/pygments-main/pygments/lexers/ooc.py +1 -1
- data/vendor/pygments-main/pygments/lexers/other.py +1 -1
- data/vendor/pygments-main/pygments/lexers/parasail.py +1 -1
- data/vendor/pygments-main/pygments/lexers/parsers.py +23 -58
- data/vendor/pygments-main/pygments/lexers/pascal.py +22 -22
- data/vendor/pygments-main/pygments/lexers/pawn.py +30 -24
- data/vendor/pygments-main/pygments/lexers/perl.py +260 -148
- data/vendor/pygments-main/pygments/lexers/php.py +64 -10
- data/vendor/pygments-main/pygments/lexers/pointless.py +71 -0
- data/vendor/pygments-main/pygments/lexers/pony.py +94 -0
- data/vendor/pygments-main/pygments/lexers/praat.py +38 -30
- data/vendor/pygments-main/pygments/lexers/prolog.py +36 -36
- data/vendor/pygments-main/pygments/lexers/promql.py +183 -0
- data/vendor/pygments-main/pygments/lexers/python.py +439 -227
- data/vendor/pygments-main/pygments/lexers/qvt.py +6 -6
- data/vendor/pygments-main/pygments/lexers/r.py +13 -275
- data/vendor/pygments-main/pygments/lexers/rdf.py +232 -39
- data/vendor/pygments-main/pygments/lexers/rebol.py +8 -8
- data/vendor/pygments-main/pygments/lexers/resource.py +2 -2
- data/vendor/pygments-main/pygments/lexers/ride.py +139 -0
- data/vendor/pygments-main/pygments/lexers/rnc.py +1 -1
- data/vendor/pygments-main/pygments/lexers/roboconf.py +1 -1
- data/vendor/pygments-main/pygments/lexers/robotframework.py +23 -31
- data/vendor/pygments-main/pygments/lexers/ruby.py +22 -24
- data/vendor/pygments-main/pygments/lexers/rust.py +76 -72
- data/vendor/pygments-main/pygments/lexers/sas.py +1 -1
- data/vendor/pygments-main/pygments/lexers/scdoc.py +83 -0
- data/vendor/pygments-main/pygments/lexers/scripting.py +75 -13
- data/vendor/pygments-main/pygments/lexers/sgf.py +61 -0
- data/vendor/pygments-main/pygments/lexers/shell.py +162 -42
- data/vendor/pygments-main/pygments/lexers/sieve.py +69 -0
- data/vendor/pygments-main/pygments/lexers/slash.py +185 -0
- data/vendor/pygments-main/pygments/lexers/smalltalk.py +2 -2
- data/vendor/pygments-main/pygments/lexers/smv.py +3 -3
- data/vendor/pygments-main/pygments/lexers/snobol.py +1 -1
- data/vendor/pygments-main/pygments/lexers/solidity.py +92 -0
- data/vendor/pygments-main/pygments/lexers/special.py +5 -3
- data/vendor/pygments-main/pygments/lexers/sql.py +333 -177
- data/vendor/pygments-main/pygments/lexers/stata.py +107 -44
- data/vendor/pygments-main/pygments/lexers/supercollider.py +6 -1
- data/vendor/pygments-main/pygments/lexers/tcl.py +1 -1
- data/vendor/pygments-main/pygments/lexers/templates.py +102 -121
- data/vendor/pygments-main/pygments/lexers/teraterm.py +335 -0
- data/vendor/pygments-main/pygments/lexers/testing.py +6 -6
- data/vendor/pygments-main/pygments/lexers/text.py +2 -1
- data/vendor/pygments-main/pygments/lexers/textedit.py +4 -4
- data/vendor/pygments-main/pygments/lexers/textfmts.py +146 -13
- data/vendor/pygments-main/pygments/lexers/theorem.py +69 -53
- data/vendor/pygments-main/pygments/lexers/tnt.py +263 -0
- data/vendor/pygments-main/pygments/lexers/trafficscript.py +1 -1
- data/vendor/pygments-main/pygments/lexers/typoscript.py +4 -11
- data/vendor/pygments-main/pygments/lexers/unicon.py +412 -0
- data/vendor/pygments-main/pygments/lexers/urbi.py +14 -1
- data/vendor/pygments-main/pygments/lexers/usd.py +90 -0
- data/vendor/pygments-main/pygments/lexers/varnish.py +3 -3
- data/vendor/pygments-main/pygments/lexers/verification.py +13 -10
- data/vendor/pygments-main/pygments/lexers/web.py +1 -1
- data/vendor/pygments-main/pygments/lexers/webidl.py +299 -0
- data/vendor/pygments-main/pygments/lexers/webmisc.py +31 -28
- data/vendor/pygments-main/pygments/lexers/whiley.py +5 -5
- data/vendor/pygments-main/pygments/lexers/x10.py +1 -1
- data/vendor/pygments-main/pygments/lexers/xorg.py +5 -4
- data/vendor/pygments-main/pygments/lexers/yang.py +104 -0
- data/vendor/pygments-main/pygments/lexers/zig.py +124 -0
- data/vendor/pygments-main/pygments/modeline.py +1 -1
- data/vendor/pygments-main/pygments/plugin.py +4 -2
- data/vendor/pygments-main/pygments/regexopt.py +1 -1
- data/vendor/pygments-main/pygments/scanner.py +2 -2
- data/vendor/pygments-main/pygments/sphinxext.py +2 -4
- data/vendor/pygments-main/pygments/style.py +61 -24
- data/vendor/pygments-main/pygments/styles/__init__.py +10 -4
- data/vendor/pygments-main/pygments/styles/abap.py +1 -1
- data/vendor/pygments-main/pygments/styles/algol.py +1 -1
- data/vendor/pygments-main/pygments/styles/algol_nu.py +1 -1
- data/vendor/pygments-main/pygments/styles/arduino.py +2 -2
- data/vendor/pygments-main/pygments/styles/autumn.py +1 -1
- data/vendor/pygments-main/pygments/styles/borland.py +1 -1
- data/vendor/pygments-main/pygments/styles/bw.py +1 -1
- data/vendor/pygments-main/pygments/styles/colorful.py +1 -1
- data/vendor/pygments-main/pygments/styles/default.py +1 -1
- data/vendor/pygments-main/pygments/styles/emacs.py +1 -1
- data/vendor/pygments-main/pygments/styles/friendly.py +1 -1
- data/vendor/pygments-main/pygments/styles/fruity.py +1 -1
- data/vendor/pygments-main/pygments/styles/igor.py +1 -1
- data/vendor/pygments-main/pygments/styles/inkpot.py +67 -0
- data/vendor/pygments-main/pygments/styles/lovelace.py +1 -1
- data/vendor/pygments-main/pygments/styles/manni.py +1 -1
- data/vendor/pygments-main/pygments/styles/monokai.py +4 -3
- data/vendor/pygments-main/pygments/styles/murphy.py +1 -1
- data/vendor/pygments-main/pygments/styles/native.py +1 -1
- data/vendor/pygments-main/pygments/styles/paraiso_dark.py +1 -1
- data/vendor/pygments-main/pygments/styles/paraiso_light.py +1 -1
- data/vendor/pygments-main/pygments/styles/pastie.py +1 -1
- data/vendor/pygments-main/pygments/styles/perldoc.py +1 -1
- data/vendor/pygments-main/pygments/styles/rainbow_dash.py +1 -1
- data/vendor/pygments-main/pygments/styles/rrt.py +1 -1
- data/vendor/pygments-main/pygments/styles/sas.py +1 -1
- data/vendor/pygments-main/pygments/styles/solarized.py +134 -0
- data/vendor/pygments-main/pygments/styles/stata_dark.py +41 -0
- data/vendor/pygments-main/pygments/styles/{stata.py → stata_light.py} +14 -15
- data/vendor/pygments-main/pygments/styles/tango.py +1 -1
- data/vendor/pygments-main/pygments/styles/trac.py +1 -1
- data/vendor/pygments-main/pygments/styles/vim.py +1 -1
- data/vendor/pygments-main/pygments/styles/vs.py +1 -1
- data/vendor/pygments-main/pygments/styles/xcode.py +1 -1
- data/vendor/pygments-main/pygments/token.py +1 -1
- data/vendor/pygments-main/pygments/unistring.py +47 -108
- data/vendor/pygments-main/pygments/util.py +15 -92
- metadata +68 -136
- data/CHANGELOG.md +0 -111
- data/README.md +0 -121
- data/circle.yml +0 -20
- data/test/test_data.c +0 -2581
- data/test/test_data.py +0 -514
- data/test/test_data_generated +0 -2582
- data/vendor/custom_lexers/github.py +0 -565
- data/vendor/pygments-main/CHANGES +0 -1186
- data/vendor/pygments-main/MANIFEST.in +0 -6
- data/vendor/pygments-main/Makefile +0 -65
- data/vendor/pygments-main/README.rst +0 -39
- data/vendor/pygments-main/REVISION +0 -1
- data/vendor/pygments-main/TODO +0 -12
- data/vendor/pygments-main/doc/Makefile +0 -153
- data/vendor/pygments-main/doc/_static/favicon.ico +0 -0
- data/vendor/pygments-main/doc/_static/logo_new.png +0 -0
- data/vendor/pygments-main/doc/_static/logo_only.png +0 -0
- data/vendor/pygments-main/doc/_templates/docssidebar.html +0 -3
- data/vendor/pygments-main/doc/_templates/indexsidebar.html +0 -25
- data/vendor/pygments-main/doc/_themes/pygments14/layout.html +0 -98
- data/vendor/pygments-main/doc/_themes/pygments14/static/bodybg.png +0 -0
- data/vendor/pygments-main/doc/_themes/pygments14/static/docbg.png +0 -0
- data/vendor/pygments-main/doc/_themes/pygments14/static/listitem.png +0 -0
- data/vendor/pygments-main/doc/_themes/pygments14/static/logo.png +0 -0
- data/vendor/pygments-main/doc/_themes/pygments14/static/pocoo.png +0 -0
- data/vendor/pygments-main/doc/_themes/pygments14/static/pygments14.css_t +0 -401
- data/vendor/pygments-main/doc/_themes/pygments14/theme.conf +0 -15
- data/vendor/pygments-main/doc/conf.py +0 -241
- data/vendor/pygments-main/doc/docs/api.rst +0 -354
- data/vendor/pygments-main/doc/docs/authors.rst +0 -4
- data/vendor/pygments-main/doc/docs/changelog.rst +0 -1
- data/vendor/pygments-main/doc/docs/cmdline.rst +0 -166
- data/vendor/pygments-main/doc/docs/filterdevelopment.rst +0 -71
- data/vendor/pygments-main/doc/docs/filters.rst +0 -41
- data/vendor/pygments-main/doc/docs/formatterdevelopment.rst +0 -169
- data/vendor/pygments-main/doc/docs/formatters.rst +0 -48
- data/vendor/pygments-main/doc/docs/index.rst +0 -66
- data/vendor/pygments-main/doc/docs/integrate.rst +0 -40
- data/vendor/pygments-main/doc/docs/java.rst +0 -70
- data/vendor/pygments-main/doc/docs/lexerdevelopment.rst +0 -728
- data/vendor/pygments-main/doc/docs/lexers.rst +0 -69
- data/vendor/pygments-main/doc/docs/moinmoin.rst +0 -39
- data/vendor/pygments-main/doc/docs/plugins.rst +0 -93
- data/vendor/pygments-main/doc/docs/quickstart.rst +0 -205
- data/vendor/pygments-main/doc/docs/rstdirective.rst +0 -22
- data/vendor/pygments-main/doc/docs/styles.rst +0 -201
- data/vendor/pygments-main/doc/docs/tokens.rst +0 -372
- data/vendor/pygments-main/doc/docs/unicode.rst +0 -58
- data/vendor/pygments-main/doc/download.rst +0 -41
- data/vendor/pygments-main/doc/faq.rst +0 -139
- data/vendor/pygments-main/doc/index.rst +0 -54
- data/vendor/pygments-main/doc/languages.rst +0 -154
- data/vendor/pygments-main/doc/make.bat +0 -190
- data/vendor/pygments-main/doc/pygmentize.1 +0 -94
- data/vendor/pygments-main/external/autopygmentize +0 -101
- data/vendor/pygments-main/external/lasso-builtins-generator-9.lasso +0 -162
- data/vendor/pygments-main/external/markdown-processor.py +0 -67
- data/vendor/pygments-main/external/moin-parser.py +0 -112
- data/vendor/pygments-main/external/pygments.bashcomp +0 -38
- data/vendor/pygments-main/external/rst-directive.py +0 -82
- data/vendor/pygments-main/pygmentize +0 -8
- data/vendor/pygments-main/pygments/lexers/github.py +0 -565
- data/vendor/pygments-main/requirements.txt +0 -5
- data/vendor/pygments-main/scripts/check_sources.py +0 -211
- data/vendor/pygments-main/scripts/debug_lexer.py +0 -246
- data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +0 -33
- data/vendor/pygments-main/scripts/epydoc.css +0 -280
- data/vendor/pygments-main/scripts/get_vimkw.py +0 -74
- data/vendor/pygments-main/scripts/pylintrc +0 -301
- data/vendor/pygments-main/scripts/vim2pygments.py +0 -935
- data/vendor/pygments-main/setup.cfg +0 -10
- data/vendor/pygments-main/setup.py +0 -77
- data/vendor/pygments-main/tox.ini +0 -7
- data/vendor/simplejson/.gitignore +0 -10
- data/vendor/simplejson/.travis.yml +0 -5
- data/vendor/simplejson/CHANGES.txt +0 -291
- data/vendor/simplejson/LICENSE.txt +0 -19
- data/vendor/simplejson/MANIFEST.in +0 -5
- data/vendor/simplejson/README.rst +0 -19
- data/vendor/simplejson/conf.py +0 -179
- data/vendor/simplejson/index.rst +0 -628
- data/vendor/simplejson/scripts/make_docs.py +0 -18
- data/vendor/simplejson/setup.py +0 -104
- data/vendor/simplejson/simplejson/__init__.py +0 -510
- data/vendor/simplejson/simplejson/_speedups.c +0 -2745
- data/vendor/simplejson/simplejson/decoder.py +0 -425
- data/vendor/simplejson/simplejson/encoder.py +0 -567
- data/vendor/simplejson/simplejson/ordered_dict.py +0 -119
- data/vendor/simplejson/simplejson/scanner.py +0 -77
- data/vendor/simplejson/simplejson/tests/__init__.py +0 -67
- data/vendor/simplejson/simplejson/tests/test_bigint_as_string.py +0 -55
- data/vendor/simplejson/simplejson/tests/test_check_circular.py +0 -30
- data/vendor/simplejson/simplejson/tests/test_decimal.py +0 -66
- data/vendor/simplejson/simplejson/tests/test_decode.py +0 -83
- data/vendor/simplejson/simplejson/tests/test_default.py +0 -9
- data/vendor/simplejson/simplejson/tests/test_dump.py +0 -67
- data/vendor/simplejson/simplejson/tests/test_encode_basestring_ascii.py +0 -46
- data/vendor/simplejson/simplejson/tests/test_encode_for_html.py +0 -32
- data/vendor/simplejson/simplejson/tests/test_errors.py +0 -34
- data/vendor/simplejson/simplejson/tests/test_fail.py +0 -91
- data/vendor/simplejson/simplejson/tests/test_float.py +0 -19
- data/vendor/simplejson/simplejson/tests/test_indent.py +0 -86
- data/vendor/simplejson/simplejson/tests/test_item_sort_key.py +0 -20
- data/vendor/simplejson/simplejson/tests/test_namedtuple.py +0 -121
- data/vendor/simplejson/simplejson/tests/test_pass1.py +0 -76
- data/vendor/simplejson/simplejson/tests/test_pass2.py +0 -14
- data/vendor/simplejson/simplejson/tests/test_pass3.py +0 -20
- data/vendor/simplejson/simplejson/tests/test_recursion.py +0 -67
- data/vendor/simplejson/simplejson/tests/test_scanstring.py +0 -117
- data/vendor/simplejson/simplejson/tests/test_separators.py +0 -42
- data/vendor/simplejson/simplejson/tests/test_speedups.py +0 -20
- data/vendor/simplejson/simplejson/tests/test_tuple.py +0 -49
- data/vendor/simplejson/simplejson/tests/test_unicode.py +0 -109
- data/vendor/simplejson/simplejson/tool.py +0 -39
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
"""JSON token scanner
|
|
2
|
-
"""
|
|
3
|
-
import re
|
|
4
|
-
def _import_c_make_scanner():
|
|
5
|
-
try:
|
|
6
|
-
from simplejson._speedups import make_scanner
|
|
7
|
-
return make_scanner
|
|
8
|
-
except ImportError:
|
|
9
|
-
return None
|
|
10
|
-
c_make_scanner = _import_c_make_scanner()
|
|
11
|
-
|
|
12
|
-
__all__ = ['make_scanner']
|
|
13
|
-
|
|
14
|
-
NUMBER_RE = re.compile(
|
|
15
|
-
r'(-?(?:0|[1-9]\d*))(\.\d+)?([eE][-+]?\d+)?',
|
|
16
|
-
(re.VERBOSE | re.MULTILINE | re.DOTALL))
|
|
17
|
-
|
|
18
|
-
def py_make_scanner(context):
|
|
19
|
-
parse_object = context.parse_object
|
|
20
|
-
parse_array = context.parse_array
|
|
21
|
-
parse_string = context.parse_string
|
|
22
|
-
match_number = NUMBER_RE.match
|
|
23
|
-
encoding = context.encoding
|
|
24
|
-
strict = context.strict
|
|
25
|
-
parse_float = context.parse_float
|
|
26
|
-
parse_int = context.parse_int
|
|
27
|
-
parse_constant = context.parse_constant
|
|
28
|
-
object_hook = context.object_hook
|
|
29
|
-
object_pairs_hook = context.object_pairs_hook
|
|
30
|
-
memo = context.memo
|
|
31
|
-
|
|
32
|
-
def _scan_once(string, idx):
|
|
33
|
-
try:
|
|
34
|
-
nextchar = string[idx]
|
|
35
|
-
except IndexError:
|
|
36
|
-
raise StopIteration
|
|
37
|
-
|
|
38
|
-
if nextchar == '"':
|
|
39
|
-
return parse_string(string, idx + 1, encoding, strict)
|
|
40
|
-
elif nextchar == '{':
|
|
41
|
-
return parse_object((string, idx + 1), encoding, strict,
|
|
42
|
-
_scan_once, object_hook, object_pairs_hook, memo)
|
|
43
|
-
elif nextchar == '[':
|
|
44
|
-
return parse_array((string, idx + 1), _scan_once)
|
|
45
|
-
elif nextchar == 'n' and string[idx:idx + 4] == 'null':
|
|
46
|
-
return None, idx + 4
|
|
47
|
-
elif nextchar == 't' and string[idx:idx + 4] == 'true':
|
|
48
|
-
return True, idx + 4
|
|
49
|
-
elif nextchar == 'f' and string[idx:idx + 5] == 'false':
|
|
50
|
-
return False, idx + 5
|
|
51
|
-
|
|
52
|
-
m = match_number(string, idx)
|
|
53
|
-
if m is not None:
|
|
54
|
-
integer, frac, exp = m.groups()
|
|
55
|
-
if frac or exp:
|
|
56
|
-
res = parse_float(integer + (frac or '') + (exp or ''))
|
|
57
|
-
else:
|
|
58
|
-
res = parse_int(integer)
|
|
59
|
-
return res, m.end()
|
|
60
|
-
elif nextchar == 'N' and string[idx:idx + 3] == 'NaN':
|
|
61
|
-
return parse_constant('NaN'), idx + 3
|
|
62
|
-
elif nextchar == 'I' and string[idx:idx + 8] == 'Infinity':
|
|
63
|
-
return parse_constant('Infinity'), idx + 8
|
|
64
|
-
elif nextchar == '-' and string[idx:idx + 9] == '-Infinity':
|
|
65
|
-
return parse_constant('-Infinity'), idx + 9
|
|
66
|
-
else:
|
|
67
|
-
raise StopIteration
|
|
68
|
-
|
|
69
|
-
def scan_once(string, idx):
|
|
70
|
-
try:
|
|
71
|
-
return _scan_once(string, idx)
|
|
72
|
-
finally:
|
|
73
|
-
memo.clear()
|
|
74
|
-
|
|
75
|
-
return scan_once
|
|
76
|
-
|
|
77
|
-
make_scanner = c_make_scanner or py_make_scanner
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import unittest
|
|
2
|
-
import doctest
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
class OptionalExtensionTestSuite(unittest.TestSuite):
|
|
6
|
-
def run(self, result):
|
|
7
|
-
import simplejson
|
|
8
|
-
run = unittest.TestSuite.run
|
|
9
|
-
run(self, result)
|
|
10
|
-
simplejson._toggle_speedups(False)
|
|
11
|
-
run(self, result)
|
|
12
|
-
simplejson._toggle_speedups(True)
|
|
13
|
-
return result
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
def additional_tests(suite=None):
|
|
17
|
-
import simplejson
|
|
18
|
-
import simplejson.encoder
|
|
19
|
-
import simplejson.decoder
|
|
20
|
-
if suite is None:
|
|
21
|
-
suite = unittest.TestSuite()
|
|
22
|
-
for mod in (simplejson, simplejson.encoder, simplejson.decoder):
|
|
23
|
-
suite.addTest(doctest.DocTestSuite(mod))
|
|
24
|
-
suite.addTest(doctest.DocFileSuite('../../index.rst'))
|
|
25
|
-
return suite
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
def all_tests_suite():
|
|
29
|
-
suite = unittest.TestLoader().loadTestsFromNames([
|
|
30
|
-
'simplejson.tests.test_bigint_as_string',
|
|
31
|
-
'simplejson.tests.test_check_circular',
|
|
32
|
-
'simplejson.tests.test_decode',
|
|
33
|
-
'simplejson.tests.test_default',
|
|
34
|
-
'simplejson.tests.test_dump',
|
|
35
|
-
'simplejson.tests.test_encode_basestring_ascii',
|
|
36
|
-
'simplejson.tests.test_encode_for_html',
|
|
37
|
-
'simplejson.tests.test_errors',
|
|
38
|
-
'simplejson.tests.test_fail',
|
|
39
|
-
'simplejson.tests.test_float',
|
|
40
|
-
'simplejson.tests.test_indent',
|
|
41
|
-
'simplejson.tests.test_pass1',
|
|
42
|
-
'simplejson.tests.test_pass2',
|
|
43
|
-
'simplejson.tests.test_pass3',
|
|
44
|
-
'simplejson.tests.test_recursion',
|
|
45
|
-
'simplejson.tests.test_scanstring',
|
|
46
|
-
'simplejson.tests.test_separators',
|
|
47
|
-
'simplejson.tests.test_speedups',
|
|
48
|
-
'simplejson.tests.test_unicode',
|
|
49
|
-
'simplejson.tests.test_decimal',
|
|
50
|
-
'simplejson.tests.test_tuple',
|
|
51
|
-
'simplejson.tests.test_namedtuple',
|
|
52
|
-
])
|
|
53
|
-
suite = additional_tests(suite)
|
|
54
|
-
return OptionalExtensionTestSuite([suite])
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
def main():
|
|
58
|
-
runner = unittest.TextTestRunner()
|
|
59
|
-
suite = all_tests_suite()
|
|
60
|
-
raise SystemExit(not runner.run(suite).wasSuccessful())
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
if __name__ == '__main__':
|
|
64
|
-
import os
|
|
65
|
-
import sys
|
|
66
|
-
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
|
|
67
|
-
main()
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
from unittest import TestCase
|
|
2
|
-
|
|
3
|
-
import simplejson as json
|
|
4
|
-
|
|
5
|
-
class TestBigintAsString(TestCase):
|
|
6
|
-
values = [(200, 200),
|
|
7
|
-
((2 ** 53) - 1, 9007199254740991),
|
|
8
|
-
((2 ** 53), '9007199254740992'),
|
|
9
|
-
((2 ** 53) + 1, '9007199254740993'),
|
|
10
|
-
(-100, -100),
|
|
11
|
-
((-2 ** 53), '-9007199254740992'),
|
|
12
|
-
((-2 ** 53) - 1, '-9007199254740993'),
|
|
13
|
-
((-2 ** 53) + 1, -9007199254740991)]
|
|
14
|
-
|
|
15
|
-
def test_ints(self):
|
|
16
|
-
for val, expect in self.values:
|
|
17
|
-
self.assertEquals(
|
|
18
|
-
val,
|
|
19
|
-
json.loads(json.dumps(val)))
|
|
20
|
-
self.assertEquals(
|
|
21
|
-
expect,
|
|
22
|
-
json.loads(json.dumps(val, bigint_as_string=True)))
|
|
23
|
-
|
|
24
|
-
def test_lists(self):
|
|
25
|
-
for val, expect in self.values:
|
|
26
|
-
val = [val, val]
|
|
27
|
-
expect = [expect, expect]
|
|
28
|
-
self.assertEquals(
|
|
29
|
-
val,
|
|
30
|
-
json.loads(json.dumps(val)))
|
|
31
|
-
self.assertEquals(
|
|
32
|
-
expect,
|
|
33
|
-
json.loads(json.dumps(val, bigint_as_string=True)))
|
|
34
|
-
|
|
35
|
-
def test_dicts(self):
|
|
36
|
-
for val, expect in self.values:
|
|
37
|
-
val = {'k': val}
|
|
38
|
-
expect = {'k': expect}
|
|
39
|
-
self.assertEquals(
|
|
40
|
-
val,
|
|
41
|
-
json.loads(json.dumps(val)))
|
|
42
|
-
self.assertEquals(
|
|
43
|
-
expect,
|
|
44
|
-
json.loads(json.dumps(val, bigint_as_string=True)))
|
|
45
|
-
|
|
46
|
-
def test_dict_keys(self):
|
|
47
|
-
for val, _ in self.values:
|
|
48
|
-
expect = {str(val): 'value'}
|
|
49
|
-
val = {val: 'value'}
|
|
50
|
-
self.assertEquals(
|
|
51
|
-
expect,
|
|
52
|
-
json.loads(json.dumps(val)))
|
|
53
|
-
self.assertEquals(
|
|
54
|
-
expect,
|
|
55
|
-
json.loads(json.dumps(val, bigint_as_string=True)))
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
from unittest import TestCase
|
|
2
|
-
import simplejson as json
|
|
3
|
-
|
|
4
|
-
def default_iterable(obj):
|
|
5
|
-
return list(obj)
|
|
6
|
-
|
|
7
|
-
class TestCheckCircular(TestCase):
|
|
8
|
-
def test_circular_dict(self):
|
|
9
|
-
dct = {}
|
|
10
|
-
dct['a'] = dct
|
|
11
|
-
self.assertRaises(ValueError, json.dumps, dct)
|
|
12
|
-
|
|
13
|
-
def test_circular_list(self):
|
|
14
|
-
lst = []
|
|
15
|
-
lst.append(lst)
|
|
16
|
-
self.assertRaises(ValueError, json.dumps, lst)
|
|
17
|
-
|
|
18
|
-
def test_circular_composite(self):
|
|
19
|
-
dct2 = {}
|
|
20
|
-
dct2['a'] = []
|
|
21
|
-
dct2['a'].append(dct2)
|
|
22
|
-
self.assertRaises(ValueError, json.dumps, dct2)
|
|
23
|
-
|
|
24
|
-
def test_circular_default(self):
|
|
25
|
-
json.dumps([set()], default=default_iterable)
|
|
26
|
-
self.assertRaises(TypeError, json.dumps, [set()])
|
|
27
|
-
|
|
28
|
-
def test_circular_off_default(self):
|
|
29
|
-
json.dumps([set()], default=default_iterable, check_circular=False)
|
|
30
|
-
self.assertRaises(TypeError, json.dumps, [set()], check_circular=False)
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import decimal
|
|
2
|
-
from decimal import Decimal
|
|
3
|
-
from unittest import TestCase
|
|
4
|
-
from StringIO import StringIO
|
|
5
|
-
|
|
6
|
-
import simplejson as json
|
|
7
|
-
|
|
8
|
-
class TestDecimal(TestCase):
|
|
9
|
-
NUMS = "1.0", "10.00", "1.1", "1234567890.1234567890", "500"
|
|
10
|
-
def dumps(self, obj, **kw):
|
|
11
|
-
sio = StringIO()
|
|
12
|
-
json.dump(obj, sio, **kw)
|
|
13
|
-
res = json.dumps(obj, **kw)
|
|
14
|
-
self.assertEquals(res, sio.getvalue())
|
|
15
|
-
return res
|
|
16
|
-
|
|
17
|
-
def loads(self, s, **kw):
|
|
18
|
-
sio = StringIO(s)
|
|
19
|
-
res = json.loads(s, **kw)
|
|
20
|
-
self.assertEquals(res, json.load(sio, **kw))
|
|
21
|
-
return res
|
|
22
|
-
|
|
23
|
-
def test_decimal_encode(self):
|
|
24
|
-
for d in map(Decimal, self.NUMS):
|
|
25
|
-
self.assertEquals(self.dumps(d, use_decimal=True), str(d))
|
|
26
|
-
|
|
27
|
-
def test_decimal_decode(self):
|
|
28
|
-
for s in self.NUMS:
|
|
29
|
-
self.assertEquals(self.loads(s, parse_float=Decimal), Decimal(s))
|
|
30
|
-
|
|
31
|
-
def test_decimal_roundtrip(self):
|
|
32
|
-
for d in map(Decimal, self.NUMS):
|
|
33
|
-
# The type might not be the same (int and Decimal) but they
|
|
34
|
-
# should still compare equal.
|
|
35
|
-
self.assertEquals(
|
|
36
|
-
self.loads(
|
|
37
|
-
self.dumps(d, use_decimal=True), parse_float=Decimal),
|
|
38
|
-
d)
|
|
39
|
-
self.assertEquals(
|
|
40
|
-
self.loads(
|
|
41
|
-
self.dumps([d], use_decimal=True), parse_float=Decimal),
|
|
42
|
-
[d])
|
|
43
|
-
|
|
44
|
-
def test_decimal_defaults(self):
|
|
45
|
-
d = Decimal('1.1')
|
|
46
|
-
# use_decimal=True is the default
|
|
47
|
-
self.assertRaises(TypeError, json.dumps, d, use_decimal=False)
|
|
48
|
-
self.assertEqual('1.1', json.dumps(d))
|
|
49
|
-
self.assertEqual('1.1', json.dumps(d, use_decimal=True))
|
|
50
|
-
self.assertRaises(TypeError, json.dump, d, StringIO(),
|
|
51
|
-
use_decimal=False)
|
|
52
|
-
sio = StringIO()
|
|
53
|
-
json.dump(d, sio)
|
|
54
|
-
self.assertEqual('1.1', sio.getvalue())
|
|
55
|
-
sio = StringIO()
|
|
56
|
-
json.dump(d, sio, use_decimal=True)
|
|
57
|
-
self.assertEqual('1.1', sio.getvalue())
|
|
58
|
-
|
|
59
|
-
def test_decimal_reload(self):
|
|
60
|
-
# Simulate a subinterpreter that reloads the Python modules but not
|
|
61
|
-
# the C code https://github.com/simplejson/simplejson/issues/34
|
|
62
|
-
global Decimal
|
|
63
|
-
Decimal = reload(decimal).Decimal
|
|
64
|
-
import simplejson.encoder
|
|
65
|
-
simplejson.encoder.Decimal = Decimal
|
|
66
|
-
self.test_decimal_roundtrip()
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import decimal
|
|
2
|
-
from unittest import TestCase
|
|
3
|
-
from StringIO import StringIO
|
|
4
|
-
|
|
5
|
-
import simplejson as json
|
|
6
|
-
from simplejson import OrderedDict
|
|
7
|
-
|
|
8
|
-
class TestDecode(TestCase):
|
|
9
|
-
if not hasattr(TestCase, 'assertIs'):
|
|
10
|
-
def assertIs(self, a, b):
|
|
11
|
-
self.assertTrue(a is b, '%r is %r' % (a, b))
|
|
12
|
-
|
|
13
|
-
def test_decimal(self):
|
|
14
|
-
rval = json.loads('1.1', parse_float=decimal.Decimal)
|
|
15
|
-
self.assertTrue(isinstance(rval, decimal.Decimal))
|
|
16
|
-
self.assertEquals(rval, decimal.Decimal('1.1'))
|
|
17
|
-
|
|
18
|
-
def test_float(self):
|
|
19
|
-
rval = json.loads('1', parse_int=float)
|
|
20
|
-
self.assertTrue(isinstance(rval, float))
|
|
21
|
-
self.assertEquals(rval, 1.0)
|
|
22
|
-
|
|
23
|
-
def test_decoder_optimizations(self):
|
|
24
|
-
# Several optimizations were made that skip over calls to
|
|
25
|
-
# the whitespace regex, so this test is designed to try and
|
|
26
|
-
# exercise the uncommon cases. The array cases are already covered.
|
|
27
|
-
rval = json.loads('{ "key" : "value" , "k":"v" }')
|
|
28
|
-
self.assertEquals(rval, {"key":"value", "k":"v"})
|
|
29
|
-
|
|
30
|
-
def test_empty_objects(self):
|
|
31
|
-
s = '{}'
|
|
32
|
-
self.assertEqual(json.loads(s), eval(s))
|
|
33
|
-
s = '[]'
|
|
34
|
-
self.assertEqual(json.loads(s), eval(s))
|
|
35
|
-
s = '""'
|
|
36
|
-
self.assertEqual(json.loads(s), eval(s))
|
|
37
|
-
|
|
38
|
-
def test_object_pairs_hook(self):
|
|
39
|
-
s = '{"xkd":1, "kcw":2, "art":3, "hxm":4, "qrt":5, "pad":6, "hoy":7}'
|
|
40
|
-
p = [("xkd", 1), ("kcw", 2), ("art", 3), ("hxm", 4),
|
|
41
|
-
("qrt", 5), ("pad", 6), ("hoy", 7)]
|
|
42
|
-
self.assertEqual(json.loads(s), eval(s))
|
|
43
|
-
self.assertEqual(json.loads(s, object_pairs_hook=lambda x: x), p)
|
|
44
|
-
self.assertEqual(json.load(StringIO(s),
|
|
45
|
-
object_pairs_hook=lambda x: x), p)
|
|
46
|
-
od = json.loads(s, object_pairs_hook=OrderedDict)
|
|
47
|
-
self.assertEqual(od, OrderedDict(p))
|
|
48
|
-
self.assertEqual(type(od), OrderedDict)
|
|
49
|
-
# the object_pairs_hook takes priority over the object_hook
|
|
50
|
-
self.assertEqual(json.loads(s,
|
|
51
|
-
object_pairs_hook=OrderedDict,
|
|
52
|
-
object_hook=lambda x: None),
|
|
53
|
-
OrderedDict(p))
|
|
54
|
-
|
|
55
|
-
def check_keys_reuse(self, source, loads):
|
|
56
|
-
rval = loads(source)
|
|
57
|
-
(a, b), (c, d) = sorted(rval[0]), sorted(rval[1])
|
|
58
|
-
self.assertIs(a, c)
|
|
59
|
-
self.assertIs(b, d)
|
|
60
|
-
|
|
61
|
-
def test_keys_reuse_str(self):
|
|
62
|
-
s = u'[{"a_key": 1, "b_\xe9": 2}, {"a_key": 3, "b_\xe9": 4}]'.encode('utf8')
|
|
63
|
-
self.check_keys_reuse(s, json.loads)
|
|
64
|
-
|
|
65
|
-
def test_keys_reuse_unicode(self):
|
|
66
|
-
s = u'[{"a_key": 1, "b_\xe9": 2}, {"a_key": 3, "b_\xe9": 4}]'
|
|
67
|
-
self.check_keys_reuse(s, json.loads)
|
|
68
|
-
|
|
69
|
-
def test_empty_strings(self):
|
|
70
|
-
self.assertEqual(json.loads('""'), "")
|
|
71
|
-
self.assertEqual(json.loads(u'""'), u"")
|
|
72
|
-
self.assertEqual(json.loads('[""]'), [""])
|
|
73
|
-
self.assertEqual(json.loads(u'[""]'), [u""])
|
|
74
|
-
|
|
75
|
-
def test_raw_decode(self):
|
|
76
|
-
cls = json.decoder.JSONDecoder
|
|
77
|
-
self.assertEqual(
|
|
78
|
-
({'a': {}}, 9),
|
|
79
|
-
cls().raw_decode("{\"a\": {}}"))
|
|
80
|
-
# http://code.google.com/p/simplejson/issues/detail?id=85
|
|
81
|
-
self.assertEqual(
|
|
82
|
-
({'a': {}}, 9),
|
|
83
|
-
cls(object_pairs_hook=dict).raw_decode("{\"a\": {}}"))
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
from unittest import TestCase
|
|
2
|
-
from cStringIO import StringIO
|
|
3
|
-
|
|
4
|
-
import simplejson as json
|
|
5
|
-
|
|
6
|
-
class TestDump(TestCase):
|
|
7
|
-
def test_dump(self):
|
|
8
|
-
sio = StringIO()
|
|
9
|
-
json.dump({}, sio)
|
|
10
|
-
self.assertEquals(sio.getvalue(), '{}')
|
|
11
|
-
|
|
12
|
-
def test_dumps(self):
|
|
13
|
-
self.assertEquals(json.dumps({}), '{}')
|
|
14
|
-
|
|
15
|
-
def test_encode_truefalse(self):
|
|
16
|
-
self.assertEquals(json.dumps(
|
|
17
|
-
{True: False, False: True}, sort_keys=True),
|
|
18
|
-
'{"false": true, "true": false}')
|
|
19
|
-
self.assertEquals(json.dumps(
|
|
20
|
-
{2: 3.0, 4.0: 5L, False: 1, 6L: True, "7": 0}, sort_keys=True),
|
|
21
|
-
'{"false": 1, "2": 3.0, "4.0": 5, "6": true, "7": 0}')
|
|
22
|
-
|
|
23
|
-
def test_ordered_dict(self):
|
|
24
|
-
# http://bugs.python.org/issue6105
|
|
25
|
-
items = [('one', 1), ('two', 2), ('three', 3), ('four', 4), ('five', 5)]
|
|
26
|
-
s = json.dumps(json.OrderedDict(items))
|
|
27
|
-
self.assertEqual(s, '{"one": 1, "two": 2, "three": 3, "four": 4, "five": 5}')
|
|
28
|
-
|
|
29
|
-
def test_indent_unknown_type_acceptance(self):
|
|
30
|
-
"""
|
|
31
|
-
A test against the regression mentioned at `github issue 29`_.
|
|
32
|
-
|
|
33
|
-
The indent parameter should accept any type which pretends to be
|
|
34
|
-
an instance of int or long when it comes to being multiplied by
|
|
35
|
-
strings, even if it is not actually an int or long, for
|
|
36
|
-
backwards compatibility.
|
|
37
|
-
|
|
38
|
-
.. _github issue 29:
|
|
39
|
-
http://github.com/simplejson/simplejson/issue/29
|
|
40
|
-
"""
|
|
41
|
-
|
|
42
|
-
class AwesomeInt(object):
|
|
43
|
-
"""An awesome reimplementation of integers"""
|
|
44
|
-
|
|
45
|
-
def __init__(self, *args, **kwargs):
|
|
46
|
-
if len(args) > 0:
|
|
47
|
-
# [construct from literals, objects, etc.]
|
|
48
|
-
# ...
|
|
49
|
-
|
|
50
|
-
# Finally, if args[0] is an integer, store it
|
|
51
|
-
if isinstance(args[0], int):
|
|
52
|
-
self._int = args[0]
|
|
53
|
-
|
|
54
|
-
# [various methods]
|
|
55
|
-
|
|
56
|
-
def __mul__(self, other):
|
|
57
|
-
# [various ways to multiply AwesomeInt objects]
|
|
58
|
-
# ... finally, if the right-hand operand is not awesome enough,
|
|
59
|
-
# try to do a normal integer multiplication
|
|
60
|
-
if hasattr(self, '_int'):
|
|
61
|
-
return self._int * other
|
|
62
|
-
else:
|
|
63
|
-
raise NotImplementedError("To do non-awesome things with"
|
|
64
|
-
" this object, please construct it from an integer!")
|
|
65
|
-
|
|
66
|
-
s = json.dumps(range(3), indent=AwesomeInt(3))
|
|
67
|
-
self.assertEqual(s, '[\n 0,\n 1,\n 2\n]')
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
from unittest import TestCase
|
|
2
|
-
|
|
3
|
-
import simplejson.encoder
|
|
4
|
-
|
|
5
|
-
CASES = [
|
|
6
|
-
(u'/\\"\ucafe\ubabe\uab98\ufcde\ubcda\uef4a\x08\x0c\n\r\t`1~!@#$%^&*()_+-=[]{}|;:\',./<>?', '"/\\\\\\"\\ucafe\\ubabe\\uab98\\ufcde\\ubcda\\uef4a\\b\\f\\n\\r\\t`1~!@#$%^&*()_+-=[]{}|;:\',./<>?"'),
|
|
7
|
-
(u'\u0123\u4567\u89ab\ucdef\uabcd\uef4a', '"\\u0123\\u4567\\u89ab\\ucdef\\uabcd\\uef4a"'),
|
|
8
|
-
(u'controls', '"controls"'),
|
|
9
|
-
(u'\x08\x0c\n\r\t', '"\\b\\f\\n\\r\\t"'),
|
|
10
|
-
(u'{"object with 1 member":["array with 1 element"]}', '"{\\"object with 1 member\\":[\\"array with 1 element\\"]}"'),
|
|
11
|
-
(u' s p a c e d ', '" s p a c e d "'),
|
|
12
|
-
(u'\U0001d120', '"\\ud834\\udd20"'),
|
|
13
|
-
(u'\u03b1\u03a9', '"\\u03b1\\u03a9"'),
|
|
14
|
-
('\xce\xb1\xce\xa9', '"\\u03b1\\u03a9"'),
|
|
15
|
-
(u'\u03b1\u03a9', '"\\u03b1\\u03a9"'),
|
|
16
|
-
('\xce\xb1\xce\xa9', '"\\u03b1\\u03a9"'),
|
|
17
|
-
(u'\u03b1\u03a9', '"\\u03b1\\u03a9"'),
|
|
18
|
-
(u'\u03b1\u03a9', '"\\u03b1\\u03a9"'),
|
|
19
|
-
(u"`1~!@#$%^&*()_+-={':[,]}|;.</>?", '"`1~!@#$%^&*()_+-={\':[,]}|;.</>?"'),
|
|
20
|
-
(u'\x08\x0c\n\r\t', '"\\b\\f\\n\\r\\t"'),
|
|
21
|
-
(u'\u0123\u4567\u89ab\ucdef\uabcd\uef4a', '"\\u0123\\u4567\\u89ab\\ucdef\\uabcd\\uef4a"'),
|
|
22
|
-
]
|
|
23
|
-
|
|
24
|
-
class TestEncodeBaseStringAscii(TestCase):
|
|
25
|
-
def test_py_encode_basestring_ascii(self):
|
|
26
|
-
self._test_encode_basestring_ascii(simplejson.encoder.py_encode_basestring_ascii)
|
|
27
|
-
|
|
28
|
-
def test_c_encode_basestring_ascii(self):
|
|
29
|
-
if not simplejson.encoder.c_encode_basestring_ascii:
|
|
30
|
-
return
|
|
31
|
-
self._test_encode_basestring_ascii(simplejson.encoder.c_encode_basestring_ascii)
|
|
32
|
-
|
|
33
|
-
def _test_encode_basestring_ascii(self, encode_basestring_ascii):
|
|
34
|
-
fname = encode_basestring_ascii.__name__
|
|
35
|
-
for input_string, expect in CASES:
|
|
36
|
-
result = encode_basestring_ascii(input_string)
|
|
37
|
-
#self.assertEquals(result, expect,
|
|
38
|
-
# '{0!r} != {1!r} for {2}({3!r})'.format(
|
|
39
|
-
# result, expect, fname, input_string))
|
|
40
|
-
self.assertEquals(result, expect,
|
|
41
|
-
'%r != %r for %s(%r)' % (result, expect, fname, input_string))
|
|
42
|
-
|
|
43
|
-
def test_sorted_dict(self):
|
|
44
|
-
items = [('one', 1), ('two', 2), ('three', 3), ('four', 4), ('five', 5)]
|
|
45
|
-
s = simplejson.dumps(dict(items), sort_keys=True)
|
|
46
|
-
self.assertEqual(s, '{"five": 5, "four": 4, "one": 1, "three": 3, "two": 2}')
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import unittest
|
|
2
|
-
|
|
3
|
-
import simplejson.decoder
|
|
4
|
-
import simplejson.encoder
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
class TestEncodeForHTML(unittest.TestCase):
|
|
8
|
-
|
|
9
|
-
def setUp(self):
|
|
10
|
-
self.decoder = simplejson.decoder.JSONDecoder()
|
|
11
|
-
self.encoder = simplejson.encoder.JSONEncoderForHTML()
|
|
12
|
-
|
|
13
|
-
def test_basic_encode(self):
|
|
14
|
-
self.assertEqual(r'"\u0026"', self.encoder.encode('&'))
|
|
15
|
-
self.assertEqual(r'"\u003c"', self.encoder.encode('<'))
|
|
16
|
-
self.assertEqual(r'"\u003e"', self.encoder.encode('>'))
|
|
17
|
-
|
|
18
|
-
def test_basic_roundtrip(self):
|
|
19
|
-
for char in '&<>':
|
|
20
|
-
self.assertEqual(
|
|
21
|
-
char, self.decoder.decode(
|
|
22
|
-
self.encoder.encode(char)))
|
|
23
|
-
|
|
24
|
-
def test_prevent_script_breakout(self):
|
|
25
|
-
bad_string = '</script><script>alert("gotcha")</script>'
|
|
26
|
-
self.assertEqual(
|
|
27
|
-
r'"\u003c/script\u003e\u003cscript\u003e'
|
|
28
|
-
r'alert(\"gotcha\")\u003c/script\u003e"',
|
|
29
|
-
self.encoder.encode(bad_string))
|
|
30
|
-
self.assertEqual(
|
|
31
|
-
bad_string, self.decoder.decode(
|
|
32
|
-
self.encoder.encode(bad_string)))
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
from unittest import TestCase
|
|
2
|
-
|
|
3
|
-
import simplejson as json
|
|
4
|
-
|
|
5
|
-
class TestErrors(TestCase):
|
|
6
|
-
def test_string_keys_error(self):
|
|
7
|
-
data = [{'a': 'A', 'b': (2, 4), 'c': 3.0, ('d',): 'D tuple'}]
|
|
8
|
-
self.assertRaises(TypeError, json.dumps, data)
|
|
9
|
-
|
|
10
|
-
def test_decode_error(self):
|
|
11
|
-
err = None
|
|
12
|
-
try:
|
|
13
|
-
json.loads('{}\na\nb')
|
|
14
|
-
except json.JSONDecodeError, e:
|
|
15
|
-
err = e
|
|
16
|
-
else:
|
|
17
|
-
self.fail('Expected JSONDecodeError')
|
|
18
|
-
self.assertEquals(err.lineno, 2)
|
|
19
|
-
self.assertEquals(err.colno, 1)
|
|
20
|
-
self.assertEquals(err.endlineno, 3)
|
|
21
|
-
self.assertEquals(err.endcolno, 2)
|
|
22
|
-
|
|
23
|
-
def test_scan_error(self):
|
|
24
|
-
err = None
|
|
25
|
-
for t in (str, unicode):
|
|
26
|
-
try:
|
|
27
|
-
json.loads(t('{"asdf": "'))
|
|
28
|
-
except json.JSONDecodeError, e:
|
|
29
|
-
err = e
|
|
30
|
-
else:
|
|
31
|
-
self.fail('Expected JSONDecodeError')
|
|
32
|
-
self.assertEquals(err.lineno, 1)
|
|
33
|
-
self.assertEquals(err.colno, 9)
|
|
34
|
-
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
from unittest import TestCase
|
|
2
|
-
|
|
3
|
-
import simplejson as json
|
|
4
|
-
|
|
5
|
-
# Fri Dec 30 18:57:26 2005
|
|
6
|
-
JSONDOCS = [
|
|
7
|
-
# http://json.org/JSON_checker/test/fail1.json
|
|
8
|
-
'"A JSON payload should be an object or array, not a string."',
|
|
9
|
-
# http://json.org/JSON_checker/test/fail2.json
|
|
10
|
-
'["Unclosed array"',
|
|
11
|
-
# http://json.org/JSON_checker/test/fail3.json
|
|
12
|
-
'{unquoted_key: "keys must be quoted}',
|
|
13
|
-
# http://json.org/JSON_checker/test/fail4.json
|
|
14
|
-
'["extra comma",]',
|
|
15
|
-
# http://json.org/JSON_checker/test/fail5.json
|
|
16
|
-
'["double extra comma",,]',
|
|
17
|
-
# http://json.org/JSON_checker/test/fail6.json
|
|
18
|
-
'[ , "<-- missing value"]',
|
|
19
|
-
# http://json.org/JSON_checker/test/fail7.json
|
|
20
|
-
'["Comma after the close"],',
|
|
21
|
-
# http://json.org/JSON_checker/test/fail8.json
|
|
22
|
-
'["Extra close"]]',
|
|
23
|
-
# http://json.org/JSON_checker/test/fail9.json
|
|
24
|
-
'{"Extra comma": true,}',
|
|
25
|
-
# http://json.org/JSON_checker/test/fail10.json
|
|
26
|
-
'{"Extra value after close": true} "misplaced quoted value"',
|
|
27
|
-
# http://json.org/JSON_checker/test/fail11.json
|
|
28
|
-
'{"Illegal expression": 1 + 2}',
|
|
29
|
-
# http://json.org/JSON_checker/test/fail12.json
|
|
30
|
-
'{"Illegal invocation": alert()}',
|
|
31
|
-
# http://json.org/JSON_checker/test/fail13.json
|
|
32
|
-
'{"Numbers cannot have leading zeroes": 013}',
|
|
33
|
-
# http://json.org/JSON_checker/test/fail14.json
|
|
34
|
-
'{"Numbers cannot be hex": 0x14}',
|
|
35
|
-
# http://json.org/JSON_checker/test/fail15.json
|
|
36
|
-
'["Illegal backslash escape: \\x15"]',
|
|
37
|
-
# http://json.org/JSON_checker/test/fail16.json
|
|
38
|
-
'["Illegal backslash escape: \\\'"]',
|
|
39
|
-
# http://json.org/JSON_checker/test/fail17.json
|
|
40
|
-
'["Illegal backslash escape: \\017"]',
|
|
41
|
-
# http://json.org/JSON_checker/test/fail18.json
|
|
42
|
-
'[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]',
|
|
43
|
-
# http://json.org/JSON_checker/test/fail19.json
|
|
44
|
-
'{"Missing colon" null}',
|
|
45
|
-
# http://json.org/JSON_checker/test/fail20.json
|
|
46
|
-
'{"Double colon":: null}',
|
|
47
|
-
# http://json.org/JSON_checker/test/fail21.json
|
|
48
|
-
'{"Comma instead of colon", null}',
|
|
49
|
-
# http://json.org/JSON_checker/test/fail22.json
|
|
50
|
-
'["Colon instead of comma": false]',
|
|
51
|
-
# http://json.org/JSON_checker/test/fail23.json
|
|
52
|
-
'["Bad value", truth]',
|
|
53
|
-
# http://json.org/JSON_checker/test/fail24.json
|
|
54
|
-
"['single quote']",
|
|
55
|
-
# http://code.google.com/p/simplejson/issues/detail?id=3
|
|
56
|
-
u'["A\u001FZ control characters in string"]',
|
|
57
|
-
]
|
|
58
|
-
|
|
59
|
-
SKIPS = {
|
|
60
|
-
1: "why not have a string payload?",
|
|
61
|
-
18: "spec doesn't specify any nesting limitations",
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
class TestFail(TestCase):
|
|
65
|
-
def test_failures(self):
|
|
66
|
-
for idx, doc in enumerate(JSONDOCS):
|
|
67
|
-
idx = idx + 1
|
|
68
|
-
if idx in SKIPS:
|
|
69
|
-
json.loads(doc)
|
|
70
|
-
continue
|
|
71
|
-
try:
|
|
72
|
-
json.loads(doc)
|
|
73
|
-
except json.JSONDecodeError:
|
|
74
|
-
pass
|
|
75
|
-
else:
|
|
76
|
-
#self.fail("Expected failure for fail{0}.json: {1!r}".format(idx, doc))
|
|
77
|
-
self.fail("Expected failure for fail%d.json: %r" % (idx, doc))
|
|
78
|
-
|
|
79
|
-
def test_array_decoder_issue46(self):
|
|
80
|
-
# http://code.google.com/p/simplejson/issues/detail?id=46
|
|
81
|
-
for doc in [u'[,]', '[,]']:
|
|
82
|
-
try:
|
|
83
|
-
json.loads(doc)
|
|
84
|
-
except json.JSONDecodeError, e:
|
|
85
|
-
self.assertEquals(e.pos, 1)
|
|
86
|
-
self.assertEquals(e.lineno, 1)
|
|
87
|
-
self.assertEquals(e.colno, 1)
|
|
88
|
-
except Exception, e:
|
|
89
|
-
self.fail("Unexpected exception raised %r %s" % (e, e))
|
|
90
|
-
else:
|
|
91
|
-
self.fail("Unexpected success parsing '[,]'")
|