mortar-pygments.rb 0.5.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (472) hide show
  1. data/.gitignore +6 -0
  2. data/CHANGELOG.md +71 -0
  3. data/Gemfile +2 -0
  4. data/LICENSE +17 -0
  5. data/README.md +121 -0
  6. data/Rakefile +66 -0
  7. data/bench.rb +22 -0
  8. data/cache-lexers.rb +8 -0
  9. data/lexers +0 -0
  10. data/lib/pygments/lexer.rb +148 -0
  11. data/lib/pygments/mentos.py +351 -0
  12. data/lib/pygments/popen.rb +406 -0
  13. data/lib/pygments/version.rb +3 -0
  14. data/lib/pygments.rb +8 -0
  15. data/pygments.rb.gemspec +25 -0
  16. data/test/test_data.c +2581 -0
  17. data/test/test_data.py +514 -0
  18. data/test/test_data_generated +2582 -0
  19. data/test/test_pygments.rb +287 -0
  20. data/vendor/custom_lexers/github.py +565 -0
  21. data/vendor/pygments-main/AUTHORS +153 -0
  22. data/vendor/pygments-main/CHANGES +889 -0
  23. data/vendor/pygments-main/LICENSE +25 -0
  24. data/vendor/pygments-main/MANIFEST.in +6 -0
  25. data/vendor/pygments-main/Makefile +59 -0
  26. data/vendor/pygments-main/REVISION +1 -0
  27. data/vendor/pygments-main/TODO +15 -0
  28. data/vendor/pygments-main/docs/generate.py +472 -0
  29. data/vendor/pygments-main/docs/pygmentize.1 +94 -0
  30. data/vendor/pygments-main/docs/src/api.txt +270 -0
  31. data/vendor/pygments-main/docs/src/authors.txt +5 -0
  32. data/vendor/pygments-main/docs/src/changelog.txt +5 -0
  33. data/vendor/pygments-main/docs/src/cmdline.txt +147 -0
  34. data/vendor/pygments-main/docs/src/filterdevelopment.txt +70 -0
  35. data/vendor/pygments-main/docs/src/filters.txt +42 -0
  36. data/vendor/pygments-main/docs/src/formatterdevelopment.txt +169 -0
  37. data/vendor/pygments-main/docs/src/formatters.txt +48 -0
  38. data/vendor/pygments-main/docs/src/index.txt +69 -0
  39. data/vendor/pygments-main/docs/src/installation.txt +71 -0
  40. data/vendor/pygments-main/docs/src/integrate.txt +48 -0
  41. data/vendor/pygments-main/docs/src/java.txt +70 -0
  42. data/vendor/pygments-main/docs/src/lexerdevelopment.txt +603 -0
  43. data/vendor/pygments-main/docs/src/lexers.txt +67 -0
  44. data/vendor/pygments-main/docs/src/moinmoin.txt +39 -0
  45. data/vendor/pygments-main/docs/src/plugins.txt +93 -0
  46. data/vendor/pygments-main/docs/src/quickstart.txt +202 -0
  47. data/vendor/pygments-main/docs/src/rstdirective.txt +22 -0
  48. data/vendor/pygments-main/docs/src/styles.txt +143 -0
  49. data/vendor/pygments-main/docs/src/tokens.txt +349 -0
  50. data/vendor/pygments-main/docs/src/unicode.txt +49 -0
  51. data/vendor/pygments-main/external/autopygmentize +64 -0
  52. data/vendor/pygments-main/external/lasso-builtins-generator-9.lasso +144 -0
  53. data/vendor/pygments-main/external/markdown-processor.py +67 -0
  54. data/vendor/pygments-main/external/moin-parser.py +112 -0
  55. data/vendor/pygments-main/external/pygments.bashcomp +38 -0
  56. data/vendor/pygments-main/external/rst-directive-old.py +77 -0
  57. data/vendor/pygments-main/external/rst-directive.py +83 -0
  58. data/vendor/pygments-main/ez_setup.py +276 -0
  59. data/vendor/pygments-main/pygmentize +7 -0
  60. data/vendor/pygments-main/pygments/__init__.py +91 -0
  61. data/vendor/pygments-main/pygments/cmdline.py +441 -0
  62. data/vendor/pygments-main/pygments/console.py +74 -0
  63. data/vendor/pygments-main/pygments/filter.py +74 -0
  64. data/vendor/pygments-main/pygments/filters/__init__.py +356 -0
  65. data/vendor/pygments-main/pygments/formatter.py +95 -0
  66. data/vendor/pygments-main/pygments/formatters/__init__.py +68 -0
  67. data/vendor/pygments-main/pygments/formatters/_mapping.py +92 -0
  68. data/vendor/pygments-main/pygments/formatters/bbcode.py +109 -0
  69. data/vendor/pygments-main/pygments/formatters/html.py +821 -0
  70. data/vendor/pygments-main/pygments/formatters/img.py +553 -0
  71. data/vendor/pygments-main/pygments/formatters/latex.py +378 -0
  72. data/vendor/pygments-main/pygments/formatters/other.py +115 -0
  73. data/vendor/pygments-main/pygments/formatters/rtf.py +136 -0
  74. data/vendor/pygments-main/pygments/formatters/svg.py +154 -0
  75. data/vendor/pygments-main/pygments/formatters/terminal.py +112 -0
  76. data/vendor/pygments-main/pygments/formatters/terminal256.py +222 -0
  77. data/vendor/pygments-main/pygments/lexer.py +765 -0
  78. data/vendor/pygments-main/pygments/lexers/__init__.py +240 -0
  79. data/vendor/pygments-main/pygments/lexers/_asybuiltins.py +1645 -0
  80. data/vendor/pygments-main/pygments/lexers/_clbuiltins.py +232 -0
  81. data/vendor/pygments-main/pygments/lexers/_lassobuiltins.py +5172 -0
  82. data/vendor/pygments-main/pygments/lexers/_luabuiltins.py +249 -0
  83. data/vendor/pygments-main/pygments/lexers/_mapping.py +355 -0
  84. data/vendor/pygments-main/pygments/lexers/_openedgebuiltins.py +562 -0
  85. data/vendor/pygments-main/pygments/lexers/_phpbuiltins.py +3787 -0
  86. data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +233 -0
  87. data/vendor/pygments-main/pygments/lexers/_robotframeworklexer.py +557 -0
  88. data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +40 -0
  89. data/vendor/pygments-main/pygments/lexers/_sourcemodbuiltins.py +1072 -0
  90. data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +360 -0
  91. data/vendor/pygments-main/pygments/lexers/_vimbuiltins.py +13 -0
  92. data/vendor/pygments-main/pygments/lexers/agile.py +2290 -0
  93. data/vendor/pygments-main/pygments/lexers/asm.py +398 -0
  94. data/vendor/pygments-main/pygments/lexers/compiled.py +3723 -0
  95. data/vendor/pygments-main/pygments/lexers/dalvik.py +104 -0
  96. data/vendor/pygments-main/pygments/lexers/dotnet.py +671 -0
  97. data/vendor/pygments-main/pygments/lexers/foxpro.py +428 -0
  98. data/vendor/pygments-main/pygments/lexers/functional.py +2731 -0
  99. data/vendor/pygments-main/pygments/lexers/github.py +565 -0
  100. data/vendor/pygments-main/pygments/lexers/hdl.py +356 -0
  101. data/vendor/pygments-main/pygments/lexers/jvm.py +1112 -0
  102. data/vendor/pygments-main/pygments/lexers/math.py +1918 -0
  103. data/vendor/pygments-main/pygments/lexers/other.py +3778 -0
  104. data/vendor/pygments-main/pygments/lexers/parsers.py +778 -0
  105. data/vendor/pygments-main/pygments/lexers/shell.py +424 -0
  106. data/vendor/pygments-main/pygments/lexers/special.py +100 -0
  107. data/vendor/pygments-main/pygments/lexers/sql.py +609 -0
  108. data/vendor/pygments-main/pygments/lexers/templates.py +1742 -0
  109. data/vendor/pygments-main/pygments/lexers/text.py +1893 -0
  110. data/vendor/pygments-main/pygments/lexers/web.py +4045 -0
  111. data/vendor/pygments-main/pygments/modeline.py +40 -0
  112. data/vendor/pygments-main/pygments/plugin.py +74 -0
  113. data/vendor/pygments-main/pygments/scanner.py +104 -0
  114. data/vendor/pygments-main/pygments/style.py +117 -0
  115. data/vendor/pygments-main/pygments/styles/__init__.py +70 -0
  116. data/vendor/pygments-main/pygments/styles/autumn.py +65 -0
  117. data/vendor/pygments-main/pygments/styles/borland.py +51 -0
  118. data/vendor/pygments-main/pygments/styles/bw.py +49 -0
  119. data/vendor/pygments-main/pygments/styles/colorful.py +81 -0
  120. data/vendor/pygments-main/pygments/styles/default.py +73 -0
  121. data/vendor/pygments-main/pygments/styles/emacs.py +72 -0
  122. data/vendor/pygments-main/pygments/styles/friendly.py +72 -0
  123. data/vendor/pygments-main/pygments/styles/fruity.py +42 -0
  124. data/vendor/pygments-main/pygments/styles/manni.py +75 -0
  125. data/vendor/pygments-main/pygments/styles/monokai.py +106 -0
  126. data/vendor/pygments-main/pygments/styles/murphy.py +80 -0
  127. data/vendor/pygments-main/pygments/styles/native.py +65 -0
  128. data/vendor/pygments-main/pygments/styles/pastie.py +75 -0
  129. data/vendor/pygments-main/pygments/styles/perldoc.py +69 -0
  130. data/vendor/pygments-main/pygments/styles/rrt.py +33 -0
  131. data/vendor/pygments-main/pygments/styles/tango.py +141 -0
  132. data/vendor/pygments-main/pygments/styles/trac.py +63 -0
  133. data/vendor/pygments-main/pygments/styles/vim.py +63 -0
  134. data/vendor/pygments-main/pygments/styles/vs.py +38 -0
  135. data/vendor/pygments-main/pygments/token.py +195 -0
  136. data/vendor/pygments-main/pygments/unistring.py +140 -0
  137. data/vendor/pygments-main/pygments/util.py +277 -0
  138. data/vendor/pygments-main/scripts/check_sources.py +242 -0
  139. data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +32 -0
  140. data/vendor/pygments-main/scripts/epydoc.css +280 -0
  141. data/vendor/pygments-main/scripts/find_codetags.py +205 -0
  142. data/vendor/pygments-main/scripts/find_error.py +170 -0
  143. data/vendor/pygments-main/scripts/get_vimkw.py +43 -0
  144. data/vendor/pygments-main/scripts/pylintrc +301 -0
  145. data/vendor/pygments-main/scripts/reindent.py +291 -0
  146. data/vendor/pygments-main/scripts/vim2pygments.py +933 -0
  147. data/vendor/pygments-main/setup.cfg +7 -0
  148. data/vendor/pygments-main/setup.py +90 -0
  149. data/vendor/pygments-main/tests/dtds/HTML4-f.dtd +37 -0
  150. data/vendor/pygments-main/tests/dtds/HTML4-s.dtd +869 -0
  151. data/vendor/pygments-main/tests/dtds/HTML4.dcl +88 -0
  152. data/vendor/pygments-main/tests/dtds/HTML4.dtd +1092 -0
  153. data/vendor/pygments-main/tests/dtds/HTML4.soc +9 -0
  154. data/vendor/pygments-main/tests/dtds/HTMLlat1.ent +195 -0
  155. data/vendor/pygments-main/tests/dtds/HTMLspec.ent +77 -0
  156. data/vendor/pygments-main/tests/dtds/HTMLsym.ent +241 -0
  157. data/vendor/pygments-main/tests/examplefiles/ANTLRv3.g +608 -0
  158. data/vendor/pygments-main/tests/examplefiles/AcidStateAdvanced.hs +209 -0
  159. data/vendor/pygments-main/tests/examplefiles/AlternatingGroup.mu +102 -0
  160. data/vendor/pygments-main/tests/examplefiles/BOM.js +1 -0
  161. data/vendor/pygments-main/tests/examplefiles/CPDictionary.j +611 -0
  162. data/vendor/pygments-main/tests/examplefiles/Config.in.cache +1973 -0
  163. data/vendor/pygments-main/tests/examplefiles/Constants.mo +158 -0
  164. data/vendor/pygments-main/tests/examplefiles/DancingSudoku.lhs +411 -0
  165. data/vendor/pygments-main/tests/examplefiles/Deflate.fs +578 -0
  166. data/vendor/pygments-main/tests/examplefiles/Errors.scala +18 -0
  167. data/vendor/pygments-main/tests/examplefiles/File.hy +174 -0
  168. data/vendor/pygments-main/tests/examplefiles/Get-CommandDefinitionHtml.ps1 +66 -0
  169. data/vendor/pygments-main/tests/examplefiles/IPDispatchC.nc +104 -0
  170. data/vendor/pygments-main/tests/examplefiles/IPDispatchP.nc +671 -0
  171. data/vendor/pygments-main/tests/examplefiles/Intro.java +1660 -0
  172. data/vendor/pygments-main/tests/examplefiles/Makefile +1131 -0
  173. data/vendor/pygments-main/tests/examplefiles/Object.st +4394 -0
  174. data/vendor/pygments-main/tests/examplefiles/OrderedMap.hx +584 -0
  175. data/vendor/pygments-main/tests/examplefiles/RoleQ.pm6 +23 -0
  176. data/vendor/pygments-main/tests/examplefiles/SmallCheck.hs +378 -0
  177. data/vendor/pygments-main/tests/examplefiles/Sorting.mod +470 -0
  178. data/vendor/pygments-main/tests/examplefiles/Sudoku.lhs +382 -0
  179. data/vendor/pygments-main/tests/examplefiles/addressbook.proto +30 -0
  180. data/vendor/pygments-main/tests/examplefiles/antlr_throws +1 -0
  181. data/vendor/pygments-main/tests/examplefiles/apache2.conf +393 -0
  182. data/vendor/pygments-main/tests/examplefiles/as3_test.as +143 -0
  183. data/vendor/pygments-main/tests/examplefiles/as3_test2.as +46 -0
  184. data/vendor/pygments-main/tests/examplefiles/as3_test3.as +3 -0
  185. data/vendor/pygments-main/tests/examplefiles/aspx-cs_example +27 -0
  186. data/vendor/pygments-main/tests/examplefiles/autoit_submit.au3 +25 -0
  187. data/vendor/pygments-main/tests/examplefiles/badcase.java +2 -0
  188. data/vendor/pygments-main/tests/examplefiles/batchfile.bat +49 -0
  189. data/vendor/pygments-main/tests/examplefiles/bigtest.nsi +308 -0
  190. data/vendor/pygments-main/tests/examplefiles/boot-9.scm +1557 -0
  191. data/vendor/pygments-main/tests/examplefiles/ca65_example +284 -0
  192. data/vendor/pygments-main/tests/examplefiles/cbmbas_example +9 -0
  193. data/vendor/pygments-main/tests/examplefiles/cells.ps +515 -0
  194. data/vendor/pygments-main/tests/examplefiles/ceval.c +2604 -0
  195. data/vendor/pygments-main/tests/examplefiles/cheetah_example.html +13 -0
  196. data/vendor/pygments-main/tests/examplefiles/classes.dylan +125 -0
  197. data/vendor/pygments-main/tests/examplefiles/condensed_ruby.rb +10 -0
  198. data/vendor/pygments-main/tests/examplefiles/coq_RelationClasses +447 -0
  199. data/vendor/pygments-main/tests/examplefiles/database.pytb +20 -0
  200. data/vendor/pygments-main/tests/examplefiles/de.MoinMoin.po +2461 -0
  201. data/vendor/pygments-main/tests/examplefiles/demo.ahk +181 -0
  202. data/vendor/pygments-main/tests/examplefiles/demo.cfm +38 -0
  203. data/vendor/pygments-main/tests/examplefiles/django_sample.html+django +68 -0
  204. data/vendor/pygments-main/tests/examplefiles/dwarf.cw +17 -0
  205. data/vendor/pygments-main/tests/examplefiles/erl_session +10 -0
  206. data/vendor/pygments-main/tests/examplefiles/escape_semicolon.clj +1 -0
  207. data/vendor/pygments-main/tests/examplefiles/evil_regex.js +48 -0
  208. data/vendor/pygments-main/tests/examplefiles/example.Rd +78 -0
  209. data/vendor/pygments-main/tests/examplefiles/example.bug +54 -0
  210. data/vendor/pygments-main/tests/examplefiles/example.c +2080 -0
  211. data/vendor/pygments-main/tests/examplefiles/example.ceylon +52 -0
  212. data/vendor/pygments-main/tests/examplefiles/example.clay +33 -0
  213. data/vendor/pygments-main/tests/examplefiles/example.cls +15 -0
  214. data/vendor/pygments-main/tests/examplefiles/example.cob +3556 -0
  215. data/vendor/pygments-main/tests/examplefiles/example.cpp +2363 -0
  216. data/vendor/pygments-main/tests/examplefiles/example.gs +106 -0
  217. data/vendor/pygments-main/tests/examplefiles/example.gst +7 -0
  218. data/vendor/pygments-main/tests/examplefiles/example.hx +142 -0
  219. data/vendor/pygments-main/tests/examplefiles/example.jag +48 -0
  220. data/vendor/pygments-main/tests/examplefiles/example.kt +47 -0
  221. data/vendor/pygments-main/tests/examplefiles/example.lagda +19 -0
  222. data/vendor/pygments-main/tests/examplefiles/example.lua +250 -0
  223. data/vendor/pygments-main/tests/examplefiles/example.monkey +152 -0
  224. data/vendor/pygments-main/tests/examplefiles/example.moo +26 -0
  225. data/vendor/pygments-main/tests/examplefiles/example.moon +629 -0
  226. data/vendor/pygments-main/tests/examplefiles/example.msc +43 -0
  227. data/vendor/pygments-main/tests/examplefiles/example.nim +1010 -0
  228. data/vendor/pygments-main/tests/examplefiles/example.ns2 +69 -0
  229. data/vendor/pygments-main/tests/examplefiles/example.p +34 -0
  230. data/vendor/pygments-main/tests/examplefiles/example.pas +2708 -0
  231. data/vendor/pygments-main/tests/examplefiles/example.prg +161 -0
  232. data/vendor/pygments-main/tests/examplefiles/example.rb +1852 -0
  233. data/vendor/pygments-main/tests/examplefiles/example.reg +19 -0
  234. data/vendor/pygments-main/tests/examplefiles/example.rexx +50 -0
  235. data/vendor/pygments-main/tests/examplefiles/example.rhtml +561 -0
  236. data/vendor/pygments-main/tests/examplefiles/example.rkt +95 -0
  237. data/vendor/pygments-main/tests/examplefiles/example.rpf +4 -0
  238. data/vendor/pygments-main/tests/examplefiles/example.sh-session +19 -0
  239. data/vendor/pygments-main/tests/examplefiles/example.shell-session +45 -0
  240. data/vendor/pygments-main/tests/examplefiles/example.sml +156 -0
  241. data/vendor/pygments-main/tests/examplefiles/example.snobol +15 -0
  242. data/vendor/pygments-main/tests/examplefiles/example.stan +108 -0
  243. data/vendor/pygments-main/tests/examplefiles/example.tea +34 -0
  244. data/vendor/pygments-main/tests/examplefiles/example.ts +28 -0
  245. data/vendor/pygments-main/tests/examplefiles/example.u +548 -0
  246. data/vendor/pygments-main/tests/examplefiles/example.weechatlog +9 -0
  247. data/vendor/pygments-main/tests/examplefiles/example.xhtml +376 -0
  248. data/vendor/pygments-main/tests/examplefiles/example.xtend +34 -0
  249. data/vendor/pygments-main/tests/examplefiles/example.yaml +302 -0
  250. data/vendor/pygments-main/tests/examplefiles/example2.aspx +29 -0
  251. data/vendor/pygments-main/tests/examplefiles/example2.msc +79 -0
  252. data/vendor/pygments-main/tests/examplefiles/example_elixir.ex +363 -0
  253. data/vendor/pygments-main/tests/examplefiles/example_file.fy +128 -0
  254. data/vendor/pygments-main/tests/examplefiles/firefox.mak +586 -0
  255. data/vendor/pygments-main/tests/examplefiles/flipflop.sv +19 -0
  256. data/vendor/pygments-main/tests/examplefiles/foo.sce +6 -0
  257. data/vendor/pygments-main/tests/examplefiles/format.ml +1213 -0
  258. data/vendor/pygments-main/tests/examplefiles/fucked_up.rb +77 -0
  259. data/vendor/pygments-main/tests/examplefiles/function.mu +1 -0
  260. data/vendor/pygments-main/tests/examplefiles/functional.rst +1472 -0
  261. data/vendor/pygments-main/tests/examplefiles/garcia-wachs.kk +133 -0
  262. data/vendor/pygments-main/tests/examplefiles/genclass.clj +510 -0
  263. data/vendor/pygments-main/tests/examplefiles/genshi_example.xml+genshi +193 -0
  264. data/vendor/pygments-main/tests/examplefiles/genshitext_example.genshitext +33 -0
  265. data/vendor/pygments-main/tests/examplefiles/glsl.frag +7 -0
  266. data/vendor/pygments-main/tests/examplefiles/glsl.vert +13 -0
  267. data/vendor/pygments-main/tests/examplefiles/grammar-test.p6 +22 -0
  268. data/vendor/pygments-main/tests/examplefiles/hello.smali +40 -0
  269. data/vendor/pygments-main/tests/examplefiles/hello.sp +9 -0
  270. data/vendor/pygments-main/tests/examplefiles/html+php_faulty.php +1 -0
  271. data/vendor/pygments-main/tests/examplefiles/http_request_example +15 -0
  272. data/vendor/pygments-main/tests/examplefiles/http_response_example +29 -0
  273. data/vendor/pygments-main/tests/examplefiles/import.hs +4 -0
  274. data/vendor/pygments-main/tests/examplefiles/inet_pton6.dg +71 -0
  275. data/vendor/pygments-main/tests/examplefiles/intro.ik +24 -0
  276. data/vendor/pygments-main/tests/examplefiles/ints.php +10 -0
  277. data/vendor/pygments-main/tests/examplefiles/intsyn.fun +675 -0
  278. data/vendor/pygments-main/tests/examplefiles/intsyn.sig +286 -0
  279. data/vendor/pygments-main/tests/examplefiles/irb_heredoc +8 -0
  280. data/vendor/pygments-main/tests/examplefiles/irc.lsp +214 -0
  281. data/vendor/pygments-main/tests/examplefiles/java.properties +16 -0
  282. data/vendor/pygments-main/tests/examplefiles/jbst_example1.jbst +28 -0
  283. data/vendor/pygments-main/tests/examplefiles/jbst_example2.jbst +45 -0
  284. data/vendor/pygments-main/tests/examplefiles/jinjadesignerdoc.rst +713 -0
  285. data/vendor/pygments-main/tests/examplefiles/json.lasso +301 -0
  286. data/vendor/pygments-main/tests/examplefiles/json.lasso9 +213 -0
  287. data/vendor/pygments-main/tests/examplefiles/lighttpd_config.conf +13 -0
  288. data/vendor/pygments-main/tests/examplefiles/linecontinuation.py +47 -0
  289. data/vendor/pygments-main/tests/examplefiles/livescript-demo.ls +41 -0
  290. data/vendor/pygments-main/tests/examplefiles/logos_example.xm +28 -0
  291. data/vendor/pygments-main/tests/examplefiles/ltmain.sh +2849 -0
  292. data/vendor/pygments-main/tests/examplefiles/main.cmake +42 -0
  293. data/vendor/pygments-main/tests/examplefiles/markdown.lsp +679 -0
  294. data/vendor/pygments-main/tests/examplefiles/matlab_noreturn +3 -0
  295. data/vendor/pygments-main/tests/examplefiles/matlab_sample +30 -0
  296. data/vendor/pygments-main/tests/examplefiles/matlabsession_sample.txt +37 -0
  297. data/vendor/pygments-main/tests/examplefiles/metagrammar.treetop +455 -0
  298. data/vendor/pygments-main/tests/examplefiles/mg_sample.pro +73 -0
  299. data/vendor/pygments-main/tests/examplefiles/minehunt.qml +112 -0
  300. data/vendor/pygments-main/tests/examplefiles/minimal.ns2 +4 -0
  301. data/vendor/pygments-main/tests/examplefiles/moin_SyntaxReference.txt +340 -0
  302. data/vendor/pygments-main/tests/examplefiles/multiline_regexes.rb +38 -0
  303. data/vendor/pygments-main/tests/examplefiles/nanomsg.intr +95 -0
  304. data/vendor/pygments-main/tests/examplefiles/nasm_aoutso.asm +96 -0
  305. data/vendor/pygments-main/tests/examplefiles/nasm_objexe.asm +30 -0
  306. data/vendor/pygments-main/tests/examplefiles/nemerle_sample.n +87 -0
  307. data/vendor/pygments-main/tests/examplefiles/nginx_nginx.conf +118 -0
  308. data/vendor/pygments-main/tests/examplefiles/numbers.c +12 -0
  309. data/vendor/pygments-main/tests/examplefiles/objc_example.m +32 -0
  310. data/vendor/pygments-main/tests/examplefiles/objc_example2.m +24 -0
  311. data/vendor/pygments-main/tests/examplefiles/perl_misc +62 -0
  312. data/vendor/pygments-main/tests/examplefiles/perl_perl5db +998 -0
  313. data/vendor/pygments-main/tests/examplefiles/perl_regex-delims +120 -0
  314. data/vendor/pygments-main/tests/examplefiles/perlfunc.1 +856 -0
  315. data/vendor/pygments-main/tests/examplefiles/phpMyAdmin.spec +163 -0
  316. data/vendor/pygments-main/tests/examplefiles/phpcomplete.vim +567 -0
  317. data/vendor/pygments-main/tests/examplefiles/pleac.in.rb +1223 -0
  318. data/vendor/pygments-main/tests/examplefiles/postgresql_test.txt +47 -0
  319. data/vendor/pygments-main/tests/examplefiles/pppoe.applescript +10 -0
  320. data/vendor/pygments-main/tests/examplefiles/psql_session.txt +122 -0
  321. data/vendor/pygments-main/tests/examplefiles/py3_test.txt +2 -0
  322. data/vendor/pygments-main/tests/examplefiles/py3tb_test.py3tb +4 -0
  323. data/vendor/pygments-main/tests/examplefiles/pycon_test.pycon +14 -0
  324. data/vendor/pygments-main/tests/examplefiles/pytb_test2.pytb +2 -0
  325. data/vendor/pygments-main/tests/examplefiles/pytb_test3.pytb +4 -0
  326. data/vendor/pygments-main/tests/examplefiles/python25-bsd.mak +234 -0
  327. data/vendor/pygments-main/tests/examplefiles/qsort.prolog +13 -0
  328. data/vendor/pygments-main/tests/examplefiles/r-console-transcript.Rout +38 -0
  329. data/vendor/pygments-main/tests/examplefiles/ragel-cpp_rlscan +280 -0
  330. data/vendor/pygments-main/tests/examplefiles/ragel-cpp_snippet +2 -0
  331. data/vendor/pygments-main/tests/examplefiles/regex.js +22 -0
  332. data/vendor/pygments-main/tests/examplefiles/reversi.lsp +427 -0
  333. data/vendor/pygments-main/tests/examplefiles/robotframework.txt +39 -0
  334. data/vendor/pygments-main/tests/examplefiles/ruby_func_def.rb +11 -0
  335. data/vendor/pygments-main/tests/examplefiles/rust_example.rs +233 -0
  336. data/vendor/pygments-main/tests/examplefiles/scilab.sci +30 -0
  337. data/vendor/pygments-main/tests/examplefiles/session.dylan-console +9 -0
  338. data/vendor/pygments-main/tests/examplefiles/sibling.prolog +19 -0
  339. data/vendor/pygments-main/tests/examplefiles/simple.md +747 -0
  340. data/vendor/pygments-main/tests/examplefiles/smarty_example.html +209 -0
  341. data/vendor/pygments-main/tests/examplefiles/source.lgt +343 -0
  342. data/vendor/pygments-main/tests/examplefiles/sources.list +62 -0
  343. data/vendor/pygments-main/tests/examplefiles/sphere.pov +18 -0
  344. data/vendor/pygments-main/tests/examplefiles/sqlite3.sqlite3-console +27 -0
  345. data/vendor/pygments-main/tests/examplefiles/squid.conf +30 -0
  346. data/vendor/pygments-main/tests/examplefiles/string.jl +1031 -0
  347. data/vendor/pygments-main/tests/examplefiles/string_delimiters.d +21 -0
  348. data/vendor/pygments-main/tests/examplefiles/stripheredoc.sh +3 -0
  349. data/vendor/pygments-main/tests/examplefiles/swig_java.swg +1329 -0
  350. data/vendor/pygments-main/tests/examplefiles/swig_std_vector.i +225 -0
  351. data/vendor/pygments-main/tests/examplefiles/test.R +153 -0
  352. data/vendor/pygments-main/tests/examplefiles/test.adb +211 -0
  353. data/vendor/pygments-main/tests/examplefiles/test.agda +102 -0
  354. data/vendor/pygments-main/tests/examplefiles/test.asy +131 -0
  355. data/vendor/pygments-main/tests/examplefiles/test.awk +121 -0
  356. data/vendor/pygments-main/tests/examplefiles/test.bas +29 -0
  357. data/vendor/pygments-main/tests/examplefiles/test.bb +95 -0
  358. data/vendor/pygments-main/tests/examplefiles/test.bmx +145 -0
  359. data/vendor/pygments-main/tests/examplefiles/test.boo +39 -0
  360. data/vendor/pygments-main/tests/examplefiles/test.bro +250 -0
  361. data/vendor/pygments-main/tests/examplefiles/test.cs +374 -0
  362. data/vendor/pygments-main/tests/examplefiles/test.css +54 -0
  363. data/vendor/pygments-main/tests/examplefiles/test.cu +36 -0
  364. data/vendor/pygments-main/tests/examplefiles/test.d +135 -0
  365. data/vendor/pygments-main/tests/examplefiles/test.dart +23 -0
  366. data/vendor/pygments-main/tests/examplefiles/test.dtd +89 -0
  367. data/vendor/pygments-main/tests/examplefiles/test.ebnf +31 -0
  368. data/vendor/pygments-main/tests/examplefiles/test.ec +605 -0
  369. data/vendor/pygments-main/tests/examplefiles/test.ecl +58 -0
  370. data/vendor/pygments-main/tests/examplefiles/test.eh +315 -0
  371. data/vendor/pygments-main/tests/examplefiles/test.erl +169 -0
  372. data/vendor/pygments-main/tests/examplefiles/test.evoque +33 -0
  373. data/vendor/pygments-main/tests/examplefiles/test.fan +818 -0
  374. data/vendor/pygments-main/tests/examplefiles/test.flx +57 -0
  375. data/vendor/pygments-main/tests/examplefiles/test.gdc +13 -0
  376. data/vendor/pygments-main/tests/examplefiles/test.groovy +97 -0
  377. data/vendor/pygments-main/tests/examplefiles/test.html +339 -0
  378. data/vendor/pygments-main/tests/examplefiles/test.ini +10 -0
  379. data/vendor/pygments-main/tests/examplefiles/test.java +653 -0
  380. data/vendor/pygments-main/tests/examplefiles/test.jsp +24 -0
  381. data/vendor/pygments-main/tests/examplefiles/test.maql +45 -0
  382. data/vendor/pygments-main/tests/examplefiles/test.mod +374 -0
  383. data/vendor/pygments-main/tests/examplefiles/test.moo +51 -0
  384. data/vendor/pygments-main/tests/examplefiles/test.myt +166 -0
  385. data/vendor/pygments-main/tests/examplefiles/test.nim +93 -0
  386. data/vendor/pygments-main/tests/examplefiles/test.opa +10 -0
  387. data/vendor/pygments-main/tests/examplefiles/test.p6 +252 -0
  388. data/vendor/pygments-main/tests/examplefiles/test.pas +743 -0
  389. data/vendor/pygments-main/tests/examplefiles/test.php +505 -0
  390. data/vendor/pygments-main/tests/examplefiles/test.plot +333 -0
  391. data/vendor/pygments-main/tests/examplefiles/test.ps1 +108 -0
  392. data/vendor/pygments-main/tests/examplefiles/test.pypylog +1839 -0
  393. data/vendor/pygments-main/tests/examplefiles/test.r3 +94 -0
  394. data/vendor/pygments-main/tests/examplefiles/test.rb +177 -0
  395. data/vendor/pygments-main/tests/examplefiles/test.rhtml +43 -0
  396. data/vendor/pygments-main/tests/examplefiles/test.scaml +8 -0
  397. data/vendor/pygments-main/tests/examplefiles/test.ssp +12 -0
  398. data/vendor/pygments-main/tests/examplefiles/test.tcsh +830 -0
  399. data/vendor/pygments-main/tests/examplefiles/test.vb +407 -0
  400. data/vendor/pygments-main/tests/examplefiles/test.vhdl +161 -0
  401. data/vendor/pygments-main/tests/examplefiles/test.xqy +138 -0
  402. data/vendor/pygments-main/tests/examplefiles/test.xsl +23 -0
  403. data/vendor/pygments-main/tests/examplefiles/test2.pypylog +120 -0
  404. data/vendor/pygments-main/tests/examplefiles/truncated.pytb +15 -0
  405. data/vendor/pygments-main/tests/examplefiles/type.lisp +1218 -0
  406. data/vendor/pygments-main/tests/examplefiles/underscore.coffee +603 -0
  407. data/vendor/pygments-main/tests/examplefiles/unicode.applescript +5 -0
  408. data/vendor/pygments-main/tests/examplefiles/unicodedoc.py +11 -0
  409. data/vendor/pygments-main/tests/examplefiles/unix-io.lid +37 -0
  410. data/vendor/pygments-main/tests/examplefiles/webkit-transition.css +3 -0
  411. data/vendor/pygments-main/tests/examplefiles/while.pov +13 -0
  412. data/vendor/pygments-main/tests/examplefiles/wiki.factor +384 -0
  413. data/vendor/pygments-main/tests/examplefiles/xml_example +1897 -0
  414. data/vendor/pygments-main/tests/examplefiles/zmlrpc.f90 +798 -0
  415. data/vendor/pygments-main/tests/old_run.py +138 -0
  416. data/vendor/pygments-main/tests/run.py +49 -0
  417. data/vendor/pygments-main/tests/support/tags +36 -0
  418. data/vendor/pygments-main/tests/support.py +15 -0
  419. data/vendor/pygments-main/tests/test_basic_api.py +295 -0
  420. data/vendor/pygments-main/tests/test_clexer.py +31 -0
  421. data/vendor/pygments-main/tests/test_cmdline.py +105 -0
  422. data/vendor/pygments-main/tests/test_examplefiles.py +99 -0
  423. data/vendor/pygments-main/tests/test_html_formatter.py +178 -0
  424. data/vendor/pygments-main/tests/test_latex_formatter.py +55 -0
  425. data/vendor/pygments-main/tests/test_lexers_other.py +68 -0
  426. data/vendor/pygments-main/tests/test_perllexer.py +137 -0
  427. data/vendor/pygments-main/tests/test_regexlexer.py +47 -0
  428. data/vendor/pygments-main/tests/test_token.py +46 -0
  429. data/vendor/pygments-main/tests/test_using_api.py +40 -0
  430. data/vendor/pygments-main/tests/test_util.py +135 -0
  431. data/vendor/simplejson/.gitignore +10 -0
  432. data/vendor/simplejson/.travis.yml +5 -0
  433. data/vendor/simplejson/CHANGES.txt +291 -0
  434. data/vendor/simplejson/LICENSE.txt +19 -0
  435. data/vendor/simplejson/MANIFEST.in +5 -0
  436. data/vendor/simplejson/README.rst +19 -0
  437. data/vendor/simplejson/conf.py +179 -0
  438. data/vendor/simplejson/index.rst +628 -0
  439. data/vendor/simplejson/scripts/make_docs.py +18 -0
  440. data/vendor/simplejson/setup.py +104 -0
  441. data/vendor/simplejson/simplejson/__init__.py +510 -0
  442. data/vendor/simplejson/simplejson/_speedups.c +2745 -0
  443. data/vendor/simplejson/simplejson/decoder.py +425 -0
  444. data/vendor/simplejson/simplejson/encoder.py +567 -0
  445. data/vendor/simplejson/simplejson/ordered_dict.py +119 -0
  446. data/vendor/simplejson/simplejson/scanner.py +77 -0
  447. data/vendor/simplejson/simplejson/tests/__init__.py +67 -0
  448. data/vendor/simplejson/simplejson/tests/test_bigint_as_string.py +55 -0
  449. data/vendor/simplejson/simplejson/tests/test_check_circular.py +30 -0
  450. data/vendor/simplejson/simplejson/tests/test_decimal.py +66 -0
  451. data/vendor/simplejson/simplejson/tests/test_decode.py +83 -0
  452. data/vendor/simplejson/simplejson/tests/test_default.py +9 -0
  453. data/vendor/simplejson/simplejson/tests/test_dump.py +67 -0
  454. data/vendor/simplejson/simplejson/tests/test_encode_basestring_ascii.py +46 -0
  455. data/vendor/simplejson/simplejson/tests/test_encode_for_html.py +32 -0
  456. data/vendor/simplejson/simplejson/tests/test_errors.py +34 -0
  457. data/vendor/simplejson/simplejson/tests/test_fail.py +91 -0
  458. data/vendor/simplejson/simplejson/tests/test_float.py +19 -0
  459. data/vendor/simplejson/simplejson/tests/test_indent.py +86 -0
  460. data/vendor/simplejson/simplejson/tests/test_item_sort_key.py +20 -0
  461. data/vendor/simplejson/simplejson/tests/test_namedtuple.py +121 -0
  462. data/vendor/simplejson/simplejson/tests/test_pass1.py +76 -0
  463. data/vendor/simplejson/simplejson/tests/test_pass2.py +14 -0
  464. data/vendor/simplejson/simplejson/tests/test_pass3.py +20 -0
  465. data/vendor/simplejson/simplejson/tests/test_recursion.py +67 -0
  466. data/vendor/simplejson/simplejson/tests/test_scanstring.py +117 -0
  467. data/vendor/simplejson/simplejson/tests/test_separators.py +42 -0
  468. data/vendor/simplejson/simplejson/tests/test_speedups.py +20 -0
  469. data/vendor/simplejson/simplejson/tests/test_tuple.py +49 -0
  470. data/vendor/simplejson/simplejson/tests/test_unicode.py +109 -0
  471. data/vendor/simplejson/simplejson/tool.py +39 -0
  472. metadata +566 -0
@@ -0,0 +1,77 @@
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
@@ -0,0 +1,67 @@
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()
@@ -0,0 +1,55 @@
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)))
@@ -0,0 +1,30 @@
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)
@@ -0,0 +1,66 @@
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()
@@ -0,0 +1,83 @@
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\": {}}"))
@@ -0,0 +1,9 @@
1
+ from unittest import TestCase
2
+
3
+ import simplejson as json
4
+
5
+ class TestDefault(TestCase):
6
+ def test_default(self):
7
+ self.assertEquals(
8
+ json.dumps(type, default=repr),
9
+ json.dumps(repr(type)))
@@ -0,0 +1,67 @@
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]')
@@ -0,0 +1,46 @@
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}')
@@ -0,0 +1,32 @@
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)))
@@ -0,0 +1,34 @@
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
+
@@ -0,0 +1,91 @@
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 '[,]'")