gitlab-pygments.rb 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (399) hide show
  1. data/.gitignore +6 -0
  2. data/Gemfile +2 -0
  3. data/README.md +91 -0
  4. data/Rakefile +78 -0
  5. data/bench.rb +22 -0
  6. data/cache-lexers.rb +8 -0
  7. data/lexers +0 -0
  8. data/lib/pygments/lexer.rb +148 -0
  9. data/lib/pygments/mentos.py +344 -0
  10. data/lib/pygments/popen.rb +389 -0
  11. data/lib/pygments/version.rb +3 -0
  12. data/lib/pygments.rb +8 -0
  13. data/pygments.rb.gemspec +24 -0
  14. data/test/test_data.c +2581 -0
  15. data/test/test_data.py +514 -0
  16. data/test/test_data_generated +2582 -0
  17. data/test/test_pygments.rb +276 -0
  18. data/vendor/custom_formatters/gitlab.py +171 -0
  19. data/vendor/custom_lexers/github.py +362 -0
  20. data/vendor/pygments-main/AUTHORS +115 -0
  21. data/vendor/pygments-main/CHANGES +762 -0
  22. data/vendor/pygments-main/LICENSE +25 -0
  23. data/vendor/pygments-main/MANIFEST.in +6 -0
  24. data/vendor/pygments-main/Makefile +59 -0
  25. data/vendor/pygments-main/REVISION +1 -0
  26. data/vendor/pygments-main/TODO +15 -0
  27. data/vendor/pygments-main/docs/generate.py +472 -0
  28. data/vendor/pygments-main/docs/pygmentize.1 +94 -0
  29. data/vendor/pygments-main/docs/src/api.txt +270 -0
  30. data/vendor/pygments-main/docs/src/authors.txt +5 -0
  31. data/vendor/pygments-main/docs/src/changelog.txt +5 -0
  32. data/vendor/pygments-main/docs/src/cmdline.txt +147 -0
  33. data/vendor/pygments-main/docs/src/filterdevelopment.txt +70 -0
  34. data/vendor/pygments-main/docs/src/filters.txt +42 -0
  35. data/vendor/pygments-main/docs/src/formatterdevelopment.txt +169 -0
  36. data/vendor/pygments-main/docs/src/formatters.txt +48 -0
  37. data/vendor/pygments-main/docs/src/index.txt +69 -0
  38. data/vendor/pygments-main/docs/src/installation.txt +71 -0
  39. data/vendor/pygments-main/docs/src/integrate.txt +43 -0
  40. data/vendor/pygments-main/docs/src/lexerdevelopment.txt +551 -0
  41. data/vendor/pygments-main/docs/src/lexers.txt +67 -0
  42. data/vendor/pygments-main/docs/src/moinmoin.txt +39 -0
  43. data/vendor/pygments-main/docs/src/plugins.txt +93 -0
  44. data/vendor/pygments-main/docs/src/quickstart.txt +202 -0
  45. data/vendor/pygments-main/docs/src/rstdirective.txt +22 -0
  46. data/vendor/pygments-main/docs/src/styles.txt +143 -0
  47. data/vendor/pygments-main/docs/src/tokens.txt +349 -0
  48. data/vendor/pygments-main/docs/src/unicode.txt +49 -0
  49. data/vendor/pygments-main/external/markdown-processor.py +67 -0
  50. data/vendor/pygments-main/external/moin-parser.py +112 -0
  51. data/vendor/pygments-main/external/pygments.bashcomp +38 -0
  52. data/vendor/pygments-main/external/rst-directive-old.py +77 -0
  53. data/vendor/pygments-main/external/rst-directive.py +83 -0
  54. data/vendor/pygments-main/ez_setup.py +276 -0
  55. data/vendor/pygments-main/pygmentize +7 -0
  56. data/vendor/pygments-main/pygments/__init__.py +91 -0
  57. data/vendor/pygments-main/pygments/cmdline.py +433 -0
  58. data/vendor/pygments-main/pygments/console.py +74 -0
  59. data/vendor/pygments-main/pygments/filter.py +74 -0
  60. data/vendor/pygments-main/pygments/filters/__init__.py +357 -0
  61. data/vendor/pygments-main/pygments/formatter.py +92 -0
  62. data/vendor/pygments-main/pygments/formatters/__init__.py +68 -0
  63. data/vendor/pygments-main/pygments/formatters/_mapping.py +94 -0
  64. data/vendor/pygments-main/pygments/formatters/bbcode.py +109 -0
  65. data/vendor/pygments-main/pygments/formatters/gitlab.py +171 -0
  66. data/vendor/pygments-main/pygments/formatters/html.py +750 -0
  67. data/vendor/pygments-main/pygments/formatters/img.py +553 -0
  68. data/vendor/pygments-main/pygments/formatters/latex.py +378 -0
  69. data/vendor/pygments-main/pygments/formatters/other.py +117 -0
  70. data/vendor/pygments-main/pygments/formatters/rtf.py +136 -0
  71. data/vendor/pygments-main/pygments/formatters/svg.py +154 -0
  72. data/vendor/pygments-main/pygments/formatters/terminal.py +112 -0
  73. data/vendor/pygments-main/pygments/formatters/terminal256.py +222 -0
  74. data/vendor/pygments-main/pygments/lexer.py +697 -0
  75. data/vendor/pygments-main/pygments/lexers/__init__.py +229 -0
  76. data/vendor/pygments-main/pygments/lexers/_asybuiltins.py +1645 -0
  77. data/vendor/pygments-main/pygments/lexers/_clbuiltins.py +232 -0
  78. data/vendor/pygments-main/pygments/lexers/_luabuiltins.py +249 -0
  79. data/vendor/pygments-main/pygments/lexers/_mapping.py +298 -0
  80. data/vendor/pygments-main/pygments/lexers/_phpbuiltins.py +3787 -0
  81. data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +232 -0
  82. data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +29 -0
  83. data/vendor/pygments-main/pygments/lexers/_vimbuiltins.py +3 -0
  84. data/vendor/pygments-main/pygments/lexers/agile.py +1803 -0
  85. data/vendor/pygments-main/pygments/lexers/asm.py +360 -0
  86. data/vendor/pygments-main/pygments/lexers/compiled.py +2891 -0
  87. data/vendor/pygments-main/pygments/lexers/dotnet.py +636 -0
  88. data/vendor/pygments-main/pygments/lexers/functional.py +1832 -0
  89. data/vendor/pygments-main/pygments/lexers/github.py +362 -0
  90. data/vendor/pygments-main/pygments/lexers/hdl.py +356 -0
  91. data/vendor/pygments-main/pygments/lexers/jvm.py +847 -0
  92. data/vendor/pygments-main/pygments/lexers/math.py +1072 -0
  93. data/vendor/pygments-main/pygments/lexers/other.py +3339 -0
  94. data/vendor/pygments-main/pygments/lexers/parsers.py +695 -0
  95. data/vendor/pygments-main/pygments/lexers/shell.py +361 -0
  96. data/vendor/pygments-main/pygments/lexers/special.py +100 -0
  97. data/vendor/pygments-main/pygments/lexers/sql.py +559 -0
  98. data/vendor/pygments-main/pygments/lexers/templates.py +1631 -0
  99. data/vendor/pygments-main/pygments/lexers/text.py +1753 -0
  100. data/vendor/pygments-main/pygments/lexers/web.py +2864 -0
  101. data/vendor/pygments-main/pygments/plugin.py +74 -0
  102. data/vendor/pygments-main/pygments/scanner.py +104 -0
  103. data/vendor/pygments-main/pygments/style.py +117 -0
  104. data/vendor/pygments-main/pygments/styles/__init__.py +70 -0
  105. data/vendor/pygments-main/pygments/styles/autumn.py +65 -0
  106. data/vendor/pygments-main/pygments/styles/borland.py +51 -0
  107. data/vendor/pygments-main/pygments/styles/bw.py +49 -0
  108. data/vendor/pygments-main/pygments/styles/colorful.py +81 -0
  109. data/vendor/pygments-main/pygments/styles/default.py +73 -0
  110. data/vendor/pygments-main/pygments/styles/emacs.py +72 -0
  111. data/vendor/pygments-main/pygments/styles/friendly.py +72 -0
  112. data/vendor/pygments-main/pygments/styles/fruity.py +42 -0
  113. data/vendor/pygments-main/pygments/styles/manni.py +75 -0
  114. data/vendor/pygments-main/pygments/styles/monokai.py +106 -0
  115. data/vendor/pygments-main/pygments/styles/murphy.py +80 -0
  116. data/vendor/pygments-main/pygments/styles/native.py +65 -0
  117. data/vendor/pygments-main/pygments/styles/pastie.py +75 -0
  118. data/vendor/pygments-main/pygments/styles/perldoc.py +69 -0
  119. data/vendor/pygments-main/pygments/styles/rrt.py +33 -0
  120. data/vendor/pygments-main/pygments/styles/tango.py +141 -0
  121. data/vendor/pygments-main/pygments/styles/trac.py +63 -0
  122. data/vendor/pygments-main/pygments/styles/vim.py +63 -0
  123. data/vendor/pygments-main/pygments/styles/vs.py +38 -0
  124. data/vendor/pygments-main/pygments/token.py +195 -0
  125. data/vendor/pygments-main/pygments/unistring.py +130 -0
  126. data/vendor/pygments-main/pygments/util.py +232 -0
  127. data/vendor/pygments-main/scripts/check_sources.py +242 -0
  128. data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +30 -0
  129. data/vendor/pygments-main/scripts/epydoc.css +280 -0
  130. data/vendor/pygments-main/scripts/find_codetags.py +205 -0
  131. data/vendor/pygments-main/scripts/find_error.py +171 -0
  132. data/vendor/pygments-main/scripts/get_vimkw.py +43 -0
  133. data/vendor/pygments-main/scripts/pylintrc +301 -0
  134. data/vendor/pygments-main/scripts/reindent.py +291 -0
  135. data/vendor/pygments-main/scripts/vim2pygments.py +933 -0
  136. data/vendor/pygments-main/setup.cfg +6 -0
  137. data/vendor/pygments-main/setup.py +88 -0
  138. data/vendor/pygments-main/tests/dtds/HTML4-f.dtd +37 -0
  139. data/vendor/pygments-main/tests/dtds/HTML4-s.dtd +869 -0
  140. data/vendor/pygments-main/tests/dtds/HTML4.dcl +88 -0
  141. data/vendor/pygments-main/tests/dtds/HTML4.dtd +1092 -0
  142. data/vendor/pygments-main/tests/dtds/HTML4.soc +9 -0
  143. data/vendor/pygments-main/tests/dtds/HTMLlat1.ent +195 -0
  144. data/vendor/pygments-main/tests/dtds/HTMLspec.ent +77 -0
  145. data/vendor/pygments-main/tests/dtds/HTMLsym.ent +241 -0
  146. data/vendor/pygments-main/tests/examplefiles/ANTLRv3.g +608 -0
  147. data/vendor/pygments-main/tests/examplefiles/AcidStateAdvanced.hs +209 -0
  148. data/vendor/pygments-main/tests/examplefiles/AlternatingGroup.mu +102 -0
  149. data/vendor/pygments-main/tests/examplefiles/CPDictionary.j +611 -0
  150. data/vendor/pygments-main/tests/examplefiles/Constants.mo +158 -0
  151. data/vendor/pygments-main/tests/examplefiles/DancingSudoku.lhs +411 -0
  152. data/vendor/pygments-main/tests/examplefiles/Errors.scala +18 -0
  153. data/vendor/pygments-main/tests/examplefiles/File.hy +174 -0
  154. data/vendor/pygments-main/tests/examplefiles/Intro.java +1660 -0
  155. data/vendor/pygments-main/tests/examplefiles/Makefile +1131 -0
  156. data/vendor/pygments-main/tests/examplefiles/Object.st +4394 -0
  157. data/vendor/pygments-main/tests/examplefiles/OrderedMap.hx +584 -0
  158. data/vendor/pygments-main/tests/examplefiles/SmallCheck.hs +378 -0
  159. data/vendor/pygments-main/tests/examplefiles/Sorting.mod +470 -0
  160. data/vendor/pygments-main/tests/examplefiles/Sudoku.lhs +382 -0
  161. data/vendor/pygments-main/tests/examplefiles/addressbook.proto +30 -0
  162. data/vendor/pygments-main/tests/examplefiles/antlr_throws +1 -0
  163. data/vendor/pygments-main/tests/examplefiles/apache2.conf +393 -0
  164. data/vendor/pygments-main/tests/examplefiles/as3_test.as +143 -0
  165. data/vendor/pygments-main/tests/examplefiles/as3_test2.as +46 -0
  166. data/vendor/pygments-main/tests/examplefiles/as3_test3.as +3 -0
  167. data/vendor/pygments-main/tests/examplefiles/aspx-cs_example +27 -0
  168. data/vendor/pygments-main/tests/examplefiles/badcase.java +2 -0
  169. data/vendor/pygments-main/tests/examplefiles/batchfile.bat +49 -0
  170. data/vendor/pygments-main/tests/examplefiles/boot-9.scm +1557 -0
  171. data/vendor/pygments-main/tests/examplefiles/cells.ps +515 -0
  172. data/vendor/pygments-main/tests/examplefiles/ceval.c +2604 -0
  173. data/vendor/pygments-main/tests/examplefiles/cheetah_example.html +13 -0
  174. data/vendor/pygments-main/tests/examplefiles/classes.dylan +40 -0
  175. data/vendor/pygments-main/tests/examplefiles/condensed_ruby.rb +10 -0
  176. data/vendor/pygments-main/tests/examplefiles/coq_RelationClasses +447 -0
  177. data/vendor/pygments-main/tests/examplefiles/database.pytb +20 -0
  178. data/vendor/pygments-main/tests/examplefiles/de.MoinMoin.po +2461 -0
  179. data/vendor/pygments-main/tests/examplefiles/demo.ahk +181 -0
  180. data/vendor/pygments-main/tests/examplefiles/demo.cfm +38 -0
  181. data/vendor/pygments-main/tests/examplefiles/django_sample.html+django +68 -0
  182. data/vendor/pygments-main/tests/examplefiles/dwarf.cw +17 -0
  183. data/vendor/pygments-main/tests/examplefiles/erl_session +10 -0
  184. data/vendor/pygments-main/tests/examplefiles/escape_semicolon.clj +1 -0
  185. data/vendor/pygments-main/tests/examplefiles/evil_regex.js +48 -0
  186. data/vendor/pygments-main/tests/examplefiles/example.c +2080 -0
  187. data/vendor/pygments-main/tests/examplefiles/example.cls +15 -0
  188. data/vendor/pygments-main/tests/examplefiles/example.cpp +2363 -0
  189. data/vendor/pygments-main/tests/examplefiles/example.gs +106 -0
  190. data/vendor/pygments-main/tests/examplefiles/example.gst +7 -0
  191. data/vendor/pygments-main/tests/examplefiles/example.kt +47 -0
  192. data/vendor/pygments-main/tests/examplefiles/example.lua +250 -0
  193. data/vendor/pygments-main/tests/examplefiles/example.moo +26 -0
  194. data/vendor/pygments-main/tests/examplefiles/example.moon +629 -0
  195. data/vendor/pygments-main/tests/examplefiles/example.nim +1010 -0
  196. data/vendor/pygments-main/tests/examplefiles/example.ns2 +69 -0
  197. data/vendor/pygments-main/tests/examplefiles/example.p +34 -0
  198. data/vendor/pygments-main/tests/examplefiles/example.pas +2708 -0
  199. data/vendor/pygments-main/tests/examplefiles/example.rb +1852 -0
  200. data/vendor/pygments-main/tests/examplefiles/example.rhtml +561 -0
  201. data/vendor/pygments-main/tests/examplefiles/example.sh-session +19 -0
  202. data/vendor/pygments-main/tests/examplefiles/example.sml +156 -0
  203. data/vendor/pygments-main/tests/examplefiles/example.snobol +15 -0
  204. data/vendor/pygments-main/tests/examplefiles/example.tea +34 -0
  205. data/vendor/pygments-main/tests/examplefiles/example.u +548 -0
  206. data/vendor/pygments-main/tests/examplefiles/example.weechatlog +9 -0
  207. data/vendor/pygments-main/tests/examplefiles/example.xhtml +376 -0
  208. data/vendor/pygments-main/tests/examplefiles/example.yaml +302 -0
  209. data/vendor/pygments-main/tests/examplefiles/example2.aspx +29 -0
  210. data/vendor/pygments-main/tests/examplefiles/example_elixir.ex +363 -0
  211. data/vendor/pygments-main/tests/examplefiles/example_file.fy +128 -0
  212. data/vendor/pygments-main/tests/examplefiles/firefox.mak +586 -0
  213. data/vendor/pygments-main/tests/examplefiles/flipflop.sv +19 -0
  214. data/vendor/pygments-main/tests/examplefiles/foo.sce +6 -0
  215. data/vendor/pygments-main/tests/examplefiles/format.ml +1213 -0
  216. data/vendor/pygments-main/tests/examplefiles/fucked_up.rb +77 -0
  217. data/vendor/pygments-main/tests/examplefiles/function.mu +1 -0
  218. data/vendor/pygments-main/tests/examplefiles/functional.rst +1472 -0
  219. data/vendor/pygments-main/tests/examplefiles/genclass.clj +510 -0
  220. data/vendor/pygments-main/tests/examplefiles/genshi_example.xml+genshi +193 -0
  221. data/vendor/pygments-main/tests/examplefiles/genshitext_example.genshitext +33 -0
  222. data/vendor/pygments-main/tests/examplefiles/glsl.frag +7 -0
  223. data/vendor/pygments-main/tests/examplefiles/glsl.vert +13 -0
  224. data/vendor/pygments-main/tests/examplefiles/html+php_faulty.php +1 -0
  225. data/vendor/pygments-main/tests/examplefiles/http_request_example +14 -0
  226. data/vendor/pygments-main/tests/examplefiles/http_response_example +27 -0
  227. data/vendor/pygments-main/tests/examplefiles/import.hs +4 -0
  228. data/vendor/pygments-main/tests/examplefiles/intro.ik +24 -0
  229. data/vendor/pygments-main/tests/examplefiles/ints.php +10 -0
  230. data/vendor/pygments-main/tests/examplefiles/intsyn.fun +675 -0
  231. data/vendor/pygments-main/tests/examplefiles/intsyn.sig +286 -0
  232. data/vendor/pygments-main/tests/examplefiles/irb_heredoc +8 -0
  233. data/vendor/pygments-main/tests/examplefiles/irc.lsp +214 -0
  234. data/vendor/pygments-main/tests/examplefiles/java.properties +16 -0
  235. data/vendor/pygments-main/tests/examplefiles/jbst_example1.jbst +28 -0
  236. data/vendor/pygments-main/tests/examplefiles/jbst_example2.jbst +45 -0
  237. data/vendor/pygments-main/tests/examplefiles/jinjadesignerdoc.rst +713 -0
  238. data/vendor/pygments-main/tests/examplefiles/lighttpd_config.conf +13 -0
  239. data/vendor/pygments-main/tests/examplefiles/linecontinuation.py +47 -0
  240. data/vendor/pygments-main/tests/examplefiles/ltmain.sh +2849 -0
  241. data/vendor/pygments-main/tests/examplefiles/main.cmake +42 -0
  242. data/vendor/pygments-main/tests/examplefiles/markdown.lsp +679 -0
  243. data/vendor/pygments-main/tests/examplefiles/matlab_noreturn +3 -0
  244. data/vendor/pygments-main/tests/examplefiles/matlab_sample +27 -0
  245. data/vendor/pygments-main/tests/examplefiles/matlabsession_sample.txt +37 -0
  246. data/vendor/pygments-main/tests/examplefiles/minimal.ns2 +4 -0
  247. data/vendor/pygments-main/tests/examplefiles/moin_SyntaxReference.txt +340 -0
  248. data/vendor/pygments-main/tests/examplefiles/multiline_regexes.rb +38 -0
  249. data/vendor/pygments-main/tests/examplefiles/nasm_aoutso.asm +96 -0
  250. data/vendor/pygments-main/tests/examplefiles/nasm_objexe.asm +30 -0
  251. data/vendor/pygments-main/tests/examplefiles/nemerle_sample.n +87 -0
  252. data/vendor/pygments-main/tests/examplefiles/nginx_nginx.conf +118 -0
  253. data/vendor/pygments-main/tests/examplefiles/numbers.c +12 -0
  254. data/vendor/pygments-main/tests/examplefiles/objc_example.m +25 -0
  255. data/vendor/pygments-main/tests/examplefiles/objc_example2.m +24 -0
  256. data/vendor/pygments-main/tests/examplefiles/perl_misc +62 -0
  257. data/vendor/pygments-main/tests/examplefiles/perl_perl5db +998 -0
  258. data/vendor/pygments-main/tests/examplefiles/perl_regex-delims +120 -0
  259. data/vendor/pygments-main/tests/examplefiles/perlfunc.1 +856 -0
  260. data/vendor/pygments-main/tests/examplefiles/phpcomplete.vim +567 -0
  261. data/vendor/pygments-main/tests/examplefiles/pleac.in.rb +1223 -0
  262. data/vendor/pygments-main/tests/examplefiles/postgresql_test.txt +47 -0
  263. data/vendor/pygments-main/tests/examplefiles/pppoe.applescript +10 -0
  264. data/vendor/pygments-main/tests/examplefiles/psql_session.txt +122 -0
  265. data/vendor/pygments-main/tests/examplefiles/py3_test.txt +2 -0
  266. data/vendor/pygments-main/tests/examplefiles/pycon_test.pycon +14 -0
  267. data/vendor/pygments-main/tests/examplefiles/pytb_test2.pytb +2 -0
  268. data/vendor/pygments-main/tests/examplefiles/python25-bsd.mak +234 -0
  269. data/vendor/pygments-main/tests/examplefiles/qsort.prolog +13 -0
  270. data/vendor/pygments-main/tests/examplefiles/r-console-transcript.Rout +38 -0
  271. data/vendor/pygments-main/tests/examplefiles/ragel-cpp_rlscan +280 -0
  272. data/vendor/pygments-main/tests/examplefiles/ragel-cpp_snippet +2 -0
  273. data/vendor/pygments-main/tests/examplefiles/regex.js +22 -0
  274. data/vendor/pygments-main/tests/examplefiles/reversi.lsp +427 -0
  275. data/vendor/pygments-main/tests/examplefiles/ruby_func_def.rb +11 -0
  276. data/vendor/pygments-main/tests/examplefiles/scilab.sci +30 -0
  277. data/vendor/pygments-main/tests/examplefiles/sibling.prolog +19 -0
  278. data/vendor/pygments-main/tests/examplefiles/simple.md +747 -0
  279. data/vendor/pygments-main/tests/examplefiles/smarty_example.html +209 -0
  280. data/vendor/pygments-main/tests/examplefiles/source.lgt +343 -0
  281. data/vendor/pygments-main/tests/examplefiles/sources.list +62 -0
  282. data/vendor/pygments-main/tests/examplefiles/sphere.pov +18 -0
  283. data/vendor/pygments-main/tests/examplefiles/sqlite3.sqlite3-console +27 -0
  284. data/vendor/pygments-main/tests/examplefiles/squid.conf +30 -0
  285. data/vendor/pygments-main/tests/examplefiles/string.jl +1031 -0
  286. data/vendor/pygments-main/tests/examplefiles/string_delimiters.d +21 -0
  287. data/vendor/pygments-main/tests/examplefiles/stripheredoc.sh +3 -0
  288. data/vendor/pygments-main/tests/examplefiles/test.R +119 -0
  289. data/vendor/pygments-main/tests/examplefiles/test.adb +211 -0
  290. data/vendor/pygments-main/tests/examplefiles/test.asy +131 -0
  291. data/vendor/pygments-main/tests/examplefiles/test.awk +121 -0
  292. data/vendor/pygments-main/tests/examplefiles/test.bas +29 -0
  293. data/vendor/pygments-main/tests/examplefiles/test.bmx +145 -0
  294. data/vendor/pygments-main/tests/examplefiles/test.boo +39 -0
  295. data/vendor/pygments-main/tests/examplefiles/test.bro +250 -0
  296. data/vendor/pygments-main/tests/examplefiles/test.cs +374 -0
  297. data/vendor/pygments-main/tests/examplefiles/test.css +54 -0
  298. data/vendor/pygments-main/tests/examplefiles/test.d +135 -0
  299. data/vendor/pygments-main/tests/examplefiles/test.dart +23 -0
  300. data/vendor/pygments-main/tests/examplefiles/test.dtd +89 -0
  301. data/vendor/pygments-main/tests/examplefiles/test.ec +605 -0
  302. data/vendor/pygments-main/tests/examplefiles/test.ecl +58 -0
  303. data/vendor/pygments-main/tests/examplefiles/test.eh +315 -0
  304. data/vendor/pygments-main/tests/examplefiles/test.erl +169 -0
  305. data/vendor/pygments-main/tests/examplefiles/test.evoque +33 -0
  306. data/vendor/pygments-main/tests/examplefiles/test.fan +818 -0
  307. data/vendor/pygments-main/tests/examplefiles/test.flx +57 -0
  308. data/vendor/pygments-main/tests/examplefiles/test.gdc +13 -0
  309. data/vendor/pygments-main/tests/examplefiles/test.groovy +97 -0
  310. data/vendor/pygments-main/tests/examplefiles/test.html +339 -0
  311. data/vendor/pygments-main/tests/examplefiles/test.ini +10 -0
  312. data/vendor/pygments-main/tests/examplefiles/test.java +653 -0
  313. data/vendor/pygments-main/tests/examplefiles/test.jsp +24 -0
  314. data/vendor/pygments-main/tests/examplefiles/test.maql +45 -0
  315. data/vendor/pygments-main/tests/examplefiles/test.mod +374 -0
  316. data/vendor/pygments-main/tests/examplefiles/test.moo +51 -0
  317. data/vendor/pygments-main/tests/examplefiles/test.myt +166 -0
  318. data/vendor/pygments-main/tests/examplefiles/test.nim +93 -0
  319. data/vendor/pygments-main/tests/examplefiles/test.pas +743 -0
  320. data/vendor/pygments-main/tests/examplefiles/test.php +505 -0
  321. data/vendor/pygments-main/tests/examplefiles/test.plot +333 -0
  322. data/vendor/pygments-main/tests/examplefiles/test.ps1 +108 -0
  323. data/vendor/pygments-main/tests/examplefiles/test.pypylog +1839 -0
  324. data/vendor/pygments-main/tests/examplefiles/test.r3 +94 -0
  325. data/vendor/pygments-main/tests/examplefiles/test.rb +177 -0
  326. data/vendor/pygments-main/tests/examplefiles/test.rhtml +43 -0
  327. data/vendor/pygments-main/tests/examplefiles/test.scaml +8 -0
  328. data/vendor/pygments-main/tests/examplefiles/test.ssp +12 -0
  329. data/vendor/pygments-main/tests/examplefiles/test.tcsh +830 -0
  330. data/vendor/pygments-main/tests/examplefiles/test.vb +407 -0
  331. data/vendor/pygments-main/tests/examplefiles/test.vhdl +161 -0
  332. data/vendor/pygments-main/tests/examplefiles/test.xqy +138 -0
  333. data/vendor/pygments-main/tests/examplefiles/test.xsl +23 -0
  334. data/vendor/pygments-main/tests/examplefiles/truncated.pytb +15 -0
  335. data/vendor/pygments-main/tests/examplefiles/type.lisp +1202 -0
  336. data/vendor/pygments-main/tests/examplefiles/underscore.coffee +603 -0
  337. data/vendor/pygments-main/tests/examplefiles/unicode.applescript +5 -0
  338. data/vendor/pygments-main/tests/examplefiles/unicodedoc.py +11 -0
  339. data/vendor/pygments-main/tests/examplefiles/webkit-transition.css +3 -0
  340. data/vendor/pygments-main/tests/examplefiles/while.pov +13 -0
  341. data/vendor/pygments-main/tests/examplefiles/wiki.factor +384 -0
  342. data/vendor/pygments-main/tests/examplefiles/xml_example +1897 -0
  343. data/vendor/pygments-main/tests/examplefiles/zmlrpc.f90 +798 -0
  344. data/vendor/pygments-main/tests/old_run.py +138 -0
  345. data/vendor/pygments-main/tests/run.py +48 -0
  346. data/vendor/pygments-main/tests/support.py +15 -0
  347. data/vendor/pygments-main/tests/test_basic_api.py +294 -0
  348. data/vendor/pygments-main/tests/test_clexer.py +31 -0
  349. data/vendor/pygments-main/tests/test_cmdline.py +105 -0
  350. data/vendor/pygments-main/tests/test_examplefiles.py +97 -0
  351. data/vendor/pygments-main/tests/test_html_formatter.py +162 -0
  352. data/vendor/pygments-main/tests/test_latex_formatter.py +55 -0
  353. data/vendor/pygments-main/tests/test_perllexer.py +137 -0
  354. data/vendor/pygments-main/tests/test_regexlexer.py +47 -0
  355. data/vendor/pygments-main/tests/test_token.py +46 -0
  356. data/vendor/pygments-main/tests/test_using_api.py +40 -0
  357. data/vendor/pygments-main/tests/test_util.py +116 -0
  358. data/vendor/simplejson/.gitignore +10 -0
  359. data/vendor/simplejson/.travis.yml +5 -0
  360. data/vendor/simplejson/CHANGES.txt +291 -0
  361. data/vendor/simplejson/LICENSE.txt +19 -0
  362. data/vendor/simplejson/MANIFEST.in +5 -0
  363. data/vendor/simplejson/README.rst +19 -0
  364. data/vendor/simplejson/conf.py +179 -0
  365. data/vendor/simplejson/index.rst +628 -0
  366. data/vendor/simplejson/scripts/make_docs.py +18 -0
  367. data/vendor/simplejson/setup.py +104 -0
  368. data/vendor/simplejson/simplejson/__init__.py +510 -0
  369. data/vendor/simplejson/simplejson/_speedups.c +2745 -0
  370. data/vendor/simplejson/simplejson/decoder.py +425 -0
  371. data/vendor/simplejson/simplejson/encoder.py +567 -0
  372. data/vendor/simplejson/simplejson/ordered_dict.py +119 -0
  373. data/vendor/simplejson/simplejson/scanner.py +77 -0
  374. data/vendor/simplejson/simplejson/tests/__init__.py +67 -0
  375. data/vendor/simplejson/simplejson/tests/test_bigint_as_string.py +55 -0
  376. data/vendor/simplejson/simplejson/tests/test_check_circular.py +30 -0
  377. data/vendor/simplejson/simplejson/tests/test_decimal.py +66 -0
  378. data/vendor/simplejson/simplejson/tests/test_decode.py +83 -0
  379. data/vendor/simplejson/simplejson/tests/test_default.py +9 -0
  380. data/vendor/simplejson/simplejson/tests/test_dump.py +67 -0
  381. data/vendor/simplejson/simplejson/tests/test_encode_basestring_ascii.py +46 -0
  382. data/vendor/simplejson/simplejson/tests/test_encode_for_html.py +32 -0
  383. data/vendor/simplejson/simplejson/tests/test_errors.py +34 -0
  384. data/vendor/simplejson/simplejson/tests/test_fail.py +91 -0
  385. data/vendor/simplejson/simplejson/tests/test_float.py +19 -0
  386. data/vendor/simplejson/simplejson/tests/test_indent.py +86 -0
  387. data/vendor/simplejson/simplejson/tests/test_item_sort_key.py +20 -0
  388. data/vendor/simplejson/simplejson/tests/test_namedtuple.py +121 -0
  389. data/vendor/simplejson/simplejson/tests/test_pass1.py +76 -0
  390. data/vendor/simplejson/simplejson/tests/test_pass2.py +14 -0
  391. data/vendor/simplejson/simplejson/tests/test_pass3.py +20 -0
  392. data/vendor/simplejson/simplejson/tests/test_recursion.py +67 -0
  393. data/vendor/simplejson/simplejson/tests/test_scanstring.py +117 -0
  394. data/vendor/simplejson/simplejson/tests/test_separators.py +42 -0
  395. data/vendor/simplejson/simplejson/tests/test_speedups.py +20 -0
  396. data/vendor/simplejson/simplejson/tests/test_tuple.py +49 -0
  397. data/vendor/simplejson/simplejson/tests/test_unicode.py +109 -0
  398. data/vendor/simplejson/simplejson/tool.py +39 -0
  399. metadata +492 -0
@@ -0,0 +1,209 @@
1
+ {-# LANGUAGE DeriveDataTypeable, FlexibleContexts, GeneralizedNewtypeDeriving
2
+ , MultiParamTypeClasses, OverloadedStrings, ScopedTypeVariables, TemplateHaskell
3
+ , TypeFamilies, FlexibleInstances #-}
4
+ module Main where
5
+ import Control.Applicative (Applicative, Alternative, (<$>))
6
+ import Control.Exception.Lifted (bracket)
7
+ import Control.Monad.Trans.Control (MonadBaseControl)
8
+ import Control.Monad (MonadPlus, mplus)
9
+ import Control.Monad.Reader (MonadReader, ReaderT(..), ask)
10
+ import Control.Monad.Trans (MonadIO(..))
11
+ import Data.Acid ( AcidState(..), EventState(..), EventResult(..)
12
+ , Query(..), QueryEvent(..), Update(..), UpdateEvent(..)
13
+ , IsAcidic(..), makeAcidic, openLocalState
14
+ )
15
+ import Data.Acid.Local ( createCheckpointAndClose
16
+ , openLocalStateFrom
17
+ )
18
+ import Data.Acid.Advanced (query', update')
19
+ import Data.Maybe (fromMaybe)
20
+ import Data.SafeCopy (SafeCopy, base, deriveSafeCopy)
21
+ import Data.Data (Data, Typeable)
22
+ import Data.Lens ((%=), (!=))
23
+ import Data.Lens.Template (makeLens)
24
+ import Data.Text.Lazy (Text)
25
+ import Happstack.Server ( Happstack, HasRqData, Method(GET, POST), Request(rqMethod)
26
+ , Response
27
+ , ServerPartT(..), WebMonad, FilterMonad, ServerMonad
28
+ , askRq, decodeBody, dir, defaultBodyPolicy, lookText
29
+ , mapServerPartT, nullConf, nullDir, ok, simpleHTTP
30
+ , toResponse
31
+ )
32
+ import Prelude hiding (head, id)
33
+ import System.FilePath ((</>))
34
+ import Text.Blaze ((!))
35
+ import Text.Blaze.Html4.Strict (body, head, html, input, form, label, p, title, toHtml)
36
+ import Text.Blaze.Html4.Strict.Attributes (action, enctype, for, id, method, name, type_, value)
37
+ class HasAcidState m st where
38
+ getAcidState :: m (AcidState st)
39
+ query :: forall event m.
40
+ ( Functor m
41
+ , MonadIO m
42
+ , QueryEvent event
43
+ , HasAcidState m (EventState event)
44
+ ) =>
45
+ event
46
+ -> m (EventResult event)
47
+ query event =
48
+ do as <- getAcidState
49
+ query' (as :: AcidState (EventState event)) event
50
+ update :: forall event m.
51
+ ( Functor m
52
+ , MonadIO m
53
+ , UpdateEvent event
54
+ , HasAcidState m (EventState event)
55
+ ) =>
56
+ event
57
+ -> m (EventResult event)
58
+ update event =
59
+ do as <- getAcidState
60
+ update' (as :: AcidState (EventState event)) event
61
+ -- | bracket the opening and close of the `AcidState` handle.
62
+
63
+ -- automatically creates a checkpoint on close
64
+ withLocalState :: (MonadBaseControl IO m, MonadIO m, IsAcidic st, Typeable st) =>
65
+ Maybe FilePath -- ^ path to state directory
66
+ -> st -- ^ initial state value
67
+ -> (AcidState st -> m a) -- ^ function which uses the `AcidState` handle
68
+ -> m a
69
+ withLocalState mPath initialState =
70
+ bracket (liftIO $ (maybe openLocalState openLocalStateFrom mPath) initialState)
71
+ (liftIO . createCheckpointAndClose)
72
+ -- State that stores a hit count
73
+
74
+ data CountState = CountState { _count :: Integer }
75
+ deriving (Eq, Ord, Data, Typeable, Show)
76
+
77
+ $(deriveSafeCopy 0 'base ''CountState)
78
+ $(makeLens ''CountState)
79
+
80
+ initialCountState :: CountState
81
+ initialCountState = CountState { _count = 0 }
82
+
83
+ incCount :: Update CountState Integer
84
+ incCount = count %= succ
85
+
86
+ $(makeAcidic ''CountState ['incCount])
87
+ -- State that stores a greeting
88
+ data GreetingState = GreetingState { _greeting :: Text }
89
+ deriving (Eq, Ord, Data, Typeable, Show)
90
+
91
+ $(deriveSafeCopy 0 'base ''GreetingState)
92
+ $(makeLens ''GreetingState)
93
+
94
+ initialGreetingState :: GreetingState
95
+ initialGreetingState = GreetingState { _greeting = "Hello" }
96
+
97
+ getGreeting :: Query GreetingState Text
98
+ getGreeting = _greeting <$> ask
99
+
100
+ setGreeting :: Text -> Update GreetingState Text
101
+ setGreeting txt = greeting != txt
102
+
103
+ $(makeAcidic ''GreetingState ['getGreeting, 'setGreeting])
104
+ data Acid = Acid { acidCountState :: AcidState CountState
105
+ , acidGreetingState :: AcidState GreetingState
106
+ }
107
+
108
+ withAcid :: Maybe FilePath -> (Acid -> IO a) -> IO a
109
+ withAcid mBasePath action =
110
+ let basePath = fromMaybe "_state" mBasePath
111
+ in withLocalState (Just $ basePath </> "count") initialCountState $ \c ->
112
+ withLocalState (Just $ basePath </> "greeting") initialGreetingState $ \g ->
113
+ action (Acid c g)
114
+ newtype App a = App { unApp :: ServerPartT (ReaderT Acid IO) a }
115
+ deriving ( Functor, Alternative, Applicative, Monad, MonadPlus, MonadIO
116
+ , HasRqData, ServerMonad ,WebMonad Response, FilterMonad Response
117
+ , Happstack, MonadReader Acid)
118
+
119
+ runApp :: Acid -> App a -> ServerPartT IO a
120
+ runApp acid (App sp) = mapServerPartT (flip runReaderT acid) sp
121
+ instance HasAcidState App CountState where
122
+ getAcidState = acidCountState <$> ask
123
+
124
+ instance HasAcidState App GreetingState where
125
+ getAcidState = acidGreetingState <$> ask
126
+ page :: App Response
127
+ page =
128
+ do nullDir
129
+ g <- greet
130
+ c <- update IncCount -- ^ a CountState event
131
+ ok $ toResponse $
132
+ html $ do
133
+ head $ do
134
+ title "acid-state demo"
135
+ body $ do
136
+ form ! action "/" ! method "POST" ! enctype "multipart/form-data" $ do
137
+ label "new message: " ! for "msg"
138
+ input ! type_ "text" ! id "msg" ! name "greeting"
139
+ input ! type_ "submit" ! value "update message"
140
+ p $ toHtml g
141
+ p $ do "This page has been loaded "
142
+ toHtml c
143
+ " time(s)."
144
+ where
145
+ greet =
146
+ do m <- rqMethod <$> askRq
147
+ case m of
148
+ POST ->
149
+ do decodeBody (defaultBodyPolicy "/tmp/" 0 1000 1000)
150
+ newGreeting <- lookText "greeting"
151
+ update (SetGreeting newGreeting) -- ^ a GreetingState event
152
+ return newGreeting
153
+ GET ->
154
+ do query GetGreeting -- ^ a GreetingState event
155
+ main :: IO ()
156
+ main =
157
+ withAcid Nothing $ \acid ->
158
+ simpleHTTP nullConf $ runApp acid page
159
+ newtype FooState = FooState { foo :: Text }
160
+ deriving (Eq, Ord, Data, Typeable, SafeCopy)
161
+
162
+ initialFooState :: FooState
163
+ initialFooState = FooState { foo = "foo" }
164
+
165
+ askFoo :: Query FooState Text
166
+ askFoo = foo <$> ask
167
+
168
+ $(makeAcidic ''FooState ['askFoo])
169
+ fooPlugin :: (Happstack m, HasAcidState m FooState) => m Response
170
+ fooPlugin =
171
+ dir "foo" $ do
172
+ txt <- query AskFoo
173
+ ok $ toResponse txt
174
+ data Acid' = Acid' { acidCountState' :: AcidState CountState
175
+ , acidGreetingState' :: AcidState GreetingState
176
+ , acidFooState' :: AcidState FooState
177
+ }
178
+ withAcid' :: Maybe FilePath -> (Acid' -> IO a) -> IO a
179
+ withAcid' mBasePath action =
180
+ let basePath = fromMaybe "_state" mBasePath
181
+ in withLocalState (Just $ basePath </> "count") initialCountState $ \c ->
182
+ withLocalState (Just $ basePath </> "greeting") initialGreetingState $ \g ->
183
+ withLocalState (Just $ basePath </> "foo") initialFooState $ \f ->
184
+ action (Acid' c g f)
185
+ newtype App' a = App' { unApp' :: ServerPartT (ReaderT Acid' IO) a }
186
+ deriving ( Functor, Alternative, Applicative, Monad, MonadPlus, MonadIO
187
+ , HasRqData, ServerMonad ,WebMonad Response, FilterMonad Response
188
+ , Happstack, MonadReader Acid')
189
+
190
+ instance HasAcidState App' FooState where
191
+ getAcidState = acidFooState' <$> ask
192
+ fooAppPlugin :: App' Response
193
+ fooAppPlugin = fooPlugin
194
+ fooReaderPlugin :: ReaderT (AcidState FooState) (ServerPartT IO) Response
195
+ fooReaderPlugin = fooPlugin
196
+ instance HasAcidState (ReaderT (AcidState FooState) (ServerPartT IO)) FooState where
197
+ getAcidState = ask
198
+ withFooPlugin :: (MonadIO m, MonadBaseControl IO m) =>
199
+ FilePath -- ^ path to state directory
200
+ -> (ServerPartT IO Response -> m a) -- ^ function that uses fooPlugin
201
+ -> m a
202
+ withFooPlugin basePath f =
203
+ do withLocalState (Just $ basePath </> "foo") initialFooState $ \fooState ->
204
+ f $ runReaderT fooReaderPlugin fooState
205
+ main' :: IO ()
206
+ main' =
207
+ withFooPlugin "_state" $ \fooPlugin' ->
208
+ withAcid Nothing $ \acid ->
209
+ simpleHTTP nullConf $ fooPlugin' `mplus` runApp acid page
@@ -0,0 +1,102 @@
1
+ /*++ $Id: AlternatingGroup.mu,v 1.4 2003/09/08 15:00:47 nthiery Exp $
2
+
3
+ Dom::AlternatingGroup(n) -- the Alternating Group of {1..n}
4
+
5
+ n - integer >= 1
6
+
7
+ Elements are represented as in Dom::PermutationGroup(n)
8
+
9
+ Author: Nicolas M. Thi�ry <nthiery@users.sourceforge.net>
10
+ License: LGPL
11
+ Created: August 8th, 1999
12
+ Last update: $Date: 2003/09/08 15:00:47 $
13
+ ++*/
14
+
15
+ domain Dom::AlternatingGroup(n: Type::PosInt)
16
+ inherits Dom::PermutationGroup(n,toBeDefined);
17
+ category Cat::PermutationGroup;
18
+ axiom Ax::canonicalRep;
19
+
20
+ /*--
21
+ size
22
+
23
+ Size of the group.
24
+ --*/
25
+
26
+ size := fact(n)/2;
27
+
28
+ /*--
29
+ generators
30
+
31
+ A list of generators of the group
32
+
33
+ The first 3-cycle (1,2,3), and a maximal even cycle (1,...,n) or
34
+ (2,...,n) depending on the parity of n
35
+
36
+ --*/
37
+
38
+ generators :=
39
+ if n<=2 then generators:=[dom([[1]])];
40
+ elif n=3 then generators:=[dom([[1,2,3]])];
41
+ elif n mod 2=0 then generators:=[dom([[1,2,3]]), dom([[$2..n]])];
42
+ else generators:=[dom([[1,2,3]]), dom([[$1..n]])];
43
+ end_if;
44
+
45
+ /*--
46
+ allElements
47
+
48
+ List of all the elements of the group
49
+ --*/
50
+
51
+ allElements :=
52
+ proc()
53
+ option remember;
54
+ local p;
55
+ begin
56
+ [new(dom,p) $ p in select(combinat::permutations(n),
57
+ p->bool(combinat::permutations::sign(p)=1))];
58
+ end_proc;
59
+
60
+ /*--
61
+ cycleTypes:
62
+
63
+ Count the elements of the group by cycle type.
64
+ (Cf Cat::PermutationGroupModule).
65
+
66
+ Same algorithm as for Dom::SymmetricGroup, but only even permutations
67
+ are considered. This is done by disregarding partitions p such
68
+ that n-length(p) is odd.
69
+ --*/
70
+
71
+ cycleTypes :=
72
+ proc()
73
+ option remember;
74
+ local t, p, gen;
75
+ begin
76
+ userinfo(3, "cycleTypes: starting computation");
77
+ t:=table();
78
+
79
+ gen := combinat::partitions::generator(n);
80
+ while (p:=gen()) <> FAIL do
81
+ userinfo(5, "working on partition", p);
82
+ if(n-nops(p) mod 2=0) then
83
+ // Compute the size of the conjugacy class of Sn indexed by p
84
+ // and the cycle type of a permutation in this conjugacy class
85
+ t[combinat::partitions::toExp(p,n)]
86
+ := combinat::partitions::conjugacyClassSize(p);
87
+ end_if;
88
+ end_while;
89
+ t;
90
+ end_proc;
91
+
92
+ begin
93
+ if testargs() then
94
+ if args(0) <> 1 then error("wrong no of args"); end_if;
95
+ if not testtype(n,DOM_INT) then
96
+ error("argument must be integer")
97
+ end_if;
98
+ if n < 1 then
99
+ error("argument must be positive")
100
+ end_if;
101
+ end_if;
102
+ end_domain:
@@ -0,0 +1,611 @@
1
+ /*
2
+ * CPDictionary.j
3
+ * Foundation
4
+ *
5
+ * Created by Francisco Tolmasky.
6
+ * Copyright 2008, 280 North, Inc.
7
+ *
8
+ * This library is free software; you can redistribute it and/or
9
+ * modify it under the terms of the GNU Lesser General Public
10
+ * License as published by the Free Software Foundation; either
11
+ * version 2.1 of the License, or (at your option) any later version.
12
+ *
13
+ * This library is distributed in the hope that it will be useful,
14
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
+ * Lesser General Public License for more details.
17
+ *
18
+ * You should have received a copy of the GNU Lesser General Public
19
+ * License along with this library; if not, write to the Free Software
20
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
+ */
22
+
23
+ //@import "CPRange.j"
24
+ @import "CPObject.j"
25
+ @import "CPEnumerator.j"
26
+ @import "CPException.j"
27
+
28
+ /* @ignore */
29
+ @implementation _CPDictionaryValueEnumerator : CPEnumerator
30
+ {
31
+ CPEnumerator _keyEnumerator;
32
+ CPDictionary _dictionary;
33
+ }
34
+
35
+ - (id)initWithDictionary:(CPDictionary)aDictionary
36
+ {
37
+ self = [super init];
38
+
39
+ if (self)
40
+ {
41
+ _keyEnumerator = [aDictionary keyEnumerator];
42
+ _dictionary = aDictionary;
43
+ }
44
+
45
+ return self;
46
+ }
47
+
48
+ - (id)nextObject
49
+ {
50
+ var key = [_keyEnumerator nextObject];
51
+
52
+ if (!key)
53
+ return nil;
54
+
55
+ return [_dictionary objectForKey:key];
56
+ }
57
+
58
+ @end
59
+
60
+ /*!
61
+ @class CPDictionary
62
+ @ingroup foundation
63
+ @brief A mutable key-value pair collection.
64
+
65
+ A dictionary is the standard way of passing around key-value pairs in
66
+ the Cappuccino framework. It is similar to the
67
+ <a href="http://java.sun.com/javase/6/docs/api/index.html">Java map interface</a>,
68
+ except all keys are CPStrings and values can be any
69
+ Cappuccino or JavaScript object.
70
+
71
+ If you are familiar with dictionaries in Cocoa, you'll notice that
72
+ there is no CPMutableDictionary class. The regular CPDictionary
73
+ has \c -setObject:forKey: and \c -removeObjectForKey: methods.
74
+ In Cappuccino there is no distinction between immutable and mutable classes.
75
+ They are all mutable.
76
+ */
77
+ @implementation CPDictionary : CPObject
78
+ {
79
+ }
80
+
81
+ /*
82
+ @ignore
83
+ */
84
+ + (id)alloc
85
+ {
86
+ return new objj_dictionary();
87
+ }
88
+
89
+ /*!
90
+ Returns a new empty CPDictionary.
91
+ */
92
+ + (id)dictionary
93
+ {
94
+ return [[self alloc] init];
95
+ }
96
+
97
+ /*!
98
+ Returns a new dictionary, initialized with the contents of \c aDictionary.
99
+ @param aDictionary the dictionary to copy key-value pairs from
100
+ @return the new CPDictionary
101
+ */
102
+ + (id)dictionaryWithDictionary:(CPDictionary)aDictionary
103
+ {
104
+ return [[self alloc] initWithDictionary:aDictionary];
105
+ }
106
+
107
+ /*!
108
+ Creates a new dictionary with single key-value pair.
109
+ @param anObject the object for the paring
110
+ @param aKey the key for the pairing
111
+ @return the new CPDictionary
112
+ */
113
+ + (id)dictionaryWithObject:(id)anObject forKey:(id)aKey
114
+ {
115
+ return [[self alloc] initWithObjects:[anObject] forKeys:[aKey]];
116
+ }
117
+
118
+ /*!
119
+ Creates a dictionary with multiple key-value pairs.
120
+ @param objects the objects to place in the dictionary
121
+ @param keys the keys for each of the objects
122
+ @throws CPInvalidArgumentException if the number of objects and keys is different
123
+ @return the new CPDictionary
124
+ */
125
+ + (id)dictionaryWithObjects:(CPArray)objects forKeys:(CPArray)keys
126
+ {
127
+ return [[self alloc] initWithObjects:objects forKeys:keys];
128
+ }
129
+
130
+ /*!
131
+ Creates a dictionary with multiple key-value pairs.
132
+ @param JavaScript object
133
+ @return the new CPDictionary
134
+ */
135
+ + (id)dictionaryWithJSObject:(JSObject)object
136
+ {
137
+ return [self dictionaryWithJSObject:object recursively:NO];
138
+ }
139
+
140
+ /*!
141
+ Creates a dictionary with multiple key-value pairs, recursively.
142
+ @param JavaScript object
143
+ @return the new CPDictionary
144
+ */
145
+ + (id)dictionaryWithJSObject:(JSObject)object recursively:(BOOL)recursively
146
+ {
147
+ var dictionary = [[self alloc] init];
148
+
149
+ for (var key in object)
150
+ {
151
+ var value = object[key];
152
+
153
+ if (recursively && value.constructor === Object)
154
+ value = [CPDictionary dictionaryWithJSObject:value recursively:YES];
155
+
156
+ [dictionary setObject:value forKey:key];
157
+ }
158
+
159
+ return dictionary;
160
+ }
161
+
162
+ /*!
163
+ Creates and returns a dictionary constructed by a given pairs of keys and values.
164
+ @param firstObject first object value
165
+ @param ... key for the first object and ongoing value-key pairs for more objects.
166
+ @throws CPInvalidArgumentException if the number of objects and keys is different
167
+ @return the new CPDictionary
168
+
169
+ Assuming that there's no object retaining in Cappuccino, you can create
170
+ dictionaries same way as with alloc and initWithObjectsAndKeys:
171
+ var dict = [CPDictionary dictionaryWithObjectsAndKeys:
172
+ @"value1", @"key1",
173
+ @"value2", @"key2"];
174
+
175
+ Note, that there's no final nil like in Objective-C/Cocoa.
176
+
177
+ @see [CPDictionary initWithObjectsAndKeys:]
178
+ */
179
+ + (id)dictionaryWithObjectsAndKeys:(id)firstObject, ...
180
+ {
181
+ arguments[0] = [self alloc];
182
+ arguments[1] = @selector(initWithObjectsAndKeys:);
183
+
184
+ return objj_msgSend.apply(this, arguments);
185
+ }
186
+
187
+ /*!
188
+ Initializes the dictionary with the contents of another dictionary.
189
+ @param aDictionary the dictionary to copy key-value pairs from
190
+ @return the initialized dictionary
191
+ */
192
+ - (id)initWithDictionary:(CPDictionary)aDictionary
193
+ {
194
+ var key = "",
195
+ dictionary = [[CPDictionary alloc] init];
196
+
197
+ for (key in aDictionary._buckets)
198
+ [dictionary setObject:[aDictionary objectForKey:key] forKey:key];
199
+
200
+ return dictionary;
201
+ }
202
+
203
+ /*!
204
+ Initializes the dictionary from the arrays of keys and objects.
205
+ @param objects the objects to put in the dictionary
206
+ @param keyArray the keys for the objects to put in the dictionary
207
+ @throws CPInvalidArgumentException if the number of objects and keys is different
208
+ @return the initialized dictionary
209
+ */
210
+ - (id)initWithObjects:(CPArray)objects forKeys:(CPArray)keyArray
211
+ {
212
+ self = [super init];
213
+
214
+ if ([objects count] != [keyArray count])
215
+ [CPException raise:CPInvalidArgumentException reason:"Counts are different.("+[objects count]+"!="+[keyArray count]+")"];
216
+
217
+ if (self)
218
+ {
219
+ var i = [keyArray count];
220
+
221
+ while (i--)
222
+ [self setObject:objects[i] forKey:keyArray[i]];
223
+ }
224
+
225
+ return self;
226
+ }
227
+
228
+ /*!
229
+ Creates and returns a dictionary constructed by a given pairs of keys and values.
230
+ @param firstObject first object value
231
+ @param ... key for the first object and ongoing value-key pairs for more objects.
232
+ @throws CPInvalidArgumentException if the number of objects and keys is different
233
+ @return the new CPDictionary
234
+
235
+ You can create dictionaries this way:
236
+ var dict = [[CPDictionary alloc] initWithObjectsAndKeys:
237
+ @"value1", @"key1",
238
+ @"value2", @"key2"];
239
+
240
+ Note, that there's no final nil like in Objective-C/Cocoa.
241
+ */
242
+ - (id)initWithObjectsAndKeys:(id)firstObject, ...
243
+ {
244
+ var argCount = arguments.length;
245
+
246
+ if (argCount % 2 !== 0)
247
+ [CPException raise:CPInvalidArgumentException reason:"Key-value count is mismatched. (" + argCount + " arguments passed)"];
248
+
249
+ self = [super init];
250
+
251
+ if (self)
252
+ {
253
+ // The arguments array contains self and _cmd, so the first object is at position 2.
254
+ var index = 2;
255
+
256
+ for(; index < argCount; index += 2)
257
+ {
258
+ var value = arguments[index];
259
+
260
+ if (value === nil)
261
+ break;
262
+
263
+ [self setObject:value forKey:arguments[index + 1]];
264
+ }
265
+ }
266
+
267
+ return self;
268
+ }
269
+
270
+ /*!
271
+ return a copy of the receiver (does not deep copy the objects contained in the dictionary).
272
+ */
273
+ - (CPDictionary)copy
274
+ {
275
+ return [CPDictionary dictionaryWithDictionary:self];
276
+ }
277
+
278
+ /*!
279
+ Returns the number of entries in the dictionary
280
+ */
281
+ - (int)count
282
+ {
283
+ return count;
284
+ }
285
+
286
+ /*!
287
+ Returns an array of keys for all the entries in the dictionary.
288
+ */
289
+ - (CPArray)allKeys
290
+ {
291
+ return _keys;
292
+ }
293
+
294
+ /*!
295
+ Returns an array of values for all the entries in the dictionary.
296
+ */
297
+ - (CPArray)allValues
298
+ {
299
+ var index = _keys.length,
300
+ values = [];
301
+
302
+ while (index--)
303
+ values.push(dictionary_getValue(self, [_keys[index]]));
304
+
305
+ return values;
306
+ }
307
+
308
+ /*!
309
+ Returns an enumerator that enumerates over all the dictionary's keys.
310
+ */
311
+ - (CPEnumerator)keyEnumerator
312
+ {
313
+ return [_keys objectEnumerator];
314
+ }
315
+
316
+ /*!
317
+ Returns an enumerator that enumerates over all the dictionary's values.
318
+ */
319
+ - (CPEnumerator)objectEnumerator
320
+ {
321
+ return [[_CPDictionaryValueEnumerator alloc] initWithDictionary:self];
322
+ }
323
+
324
+ /*!
325
+ Compare the receiver to this dictionary, and return whether or not they are equal.
326
+ */
327
+ - (BOOL)isEqualToDictionary:(CPDictionary)aDictionary
328
+ {
329
+ if (count !== [aDictionary count])
330
+ return NO;
331
+
332
+ var index = count;
333
+ while (index--)
334
+ {
335
+ var currentKey = _keys[index],
336
+ lhsObject = _buckets[currentKey],
337
+ rhsObject = aDictionary._buckets[currentKey];
338
+
339
+ if (lhsObject === rhsObject)
340
+ continue;
341
+
342
+ if (lhsObject.isa && rhsObject.isa && [lhsObject respondsToSelector:@selector(isEqual:)] && [lhsObject isEqual:rhsObject])
343
+ continue;
344
+
345
+ return NO;
346
+ }
347
+
348
+ return YES;
349
+ }
350
+
351
+ /*
352
+ Instance.isEqualToDictionary(aDictionary)
353
+ {
354
+ if(this.count()!=aDictionary.count()) return NO;
355
+
356
+ var i= this._keys.count();
357
+ while(i--) if(this.objectForKey(this._keys[i])!=aDictionary.objectForKey(this._keys[i])) return NO;
358
+
359
+ return YES;
360
+ }
361
+
362
+ Instance.allKeys()
363
+ {
364
+ return this._keys;
365
+ }
366
+
367
+ Instance.allKeysForObject(anObject)
368
+ {
369
+ var i= 0,
370
+ keys= CPArray.array(),
371
+ count= this.count();
372
+
373
+ while((i= this._objects.indexOfObjectInRage(0, count-i))!=CPNotFound) keys.addObject(this._keys[i]);
374
+
375
+ return keys;
376
+ }
377
+
378
+ Instance.allValues()
379
+ {
380
+ return this._objects;
381
+ }
382
+
383
+ Instance.keyEnumerator()
384
+ {
385
+ return this._keys.objectEnumerator();
386
+ }
387
+
388
+ Instance.keysSortedByValueUsingSelector(aSelector)
389
+ {
390
+ var dictionary= this,
391
+ objectSelector= function(rhs)
392
+ {
393
+ return aSelector.apply(dictionary.objectForKey(this), [dictionary.objectForKey(rhs)]);
394
+ };
395
+
396
+ return this._keys.sortedArrayUsingSelector(objectSelector);
397
+ }
398
+
399
+ Instance.objectEnumerator()
400
+ {
401
+ return this._objects.objectEnumerator();
402
+ }
403
+ */
404
+ /*!
405
+ Returns the object for the entry with key \c aKey.
406
+ @param aKey the key for the object's entry
407
+ @return the object for the entry
408
+ */
409
+ - (id)objectForKey:(CPString)aKey
410
+ {
411
+ var object = _buckets[aKey];
412
+
413
+ return (object === undefined) ? nil : object;
414
+ }
415
+ /*
416
+ Instance.objectsForKeys(keys, aNotFoundMarker)
417
+ {
418
+ var i= keys.length,
419
+ objects= CPArray.array();
420
+
421
+ while(i--)
422
+ {
423
+ var object= this.objectForKey(keys[i]);
424
+ objects.addObject(object==nil?aNotFoundMarker:object);
425
+ }
426
+
427
+ return objects;
428
+ }
429
+
430
+ Instance.valueForKey(aKey)
431
+ {
432
+ if(aKey.length && aKey[0]=="@") return this.objectForKey(aKey.substr(1));
433
+
434
+ return base.valueForKey(aKey);
435
+ }
436
+
437
+ //
438
+
439
+ Instance.addEntriesFromDictionary(aDictionary)
440
+ {
441
+ var key,
442
+ keyEnumerator= aDictionary.keyEnumerator();
443
+
444
+ while(key= keyEnumerator.nextObject()) this.setObjectForKey(aDictionary.objectForKey(key), key);
445
+ }
446
+ */
447
+ /*!
448
+ Removes all the entries from the dictionary.
449
+ */
450
+ - (void)removeAllObjects
451
+ {
452
+ _keys = [];
453
+ count = 0;
454
+ _buckets = {};
455
+ }
456
+
457
+ /*!
458
+ Removes the entry for the specified key.
459
+ @param aKey the key of the entry to be removed
460
+ */
461
+ - (void)removeObjectForKey:(id)aKey
462
+ {
463
+ dictionary_removeValue(self, aKey);
464
+ }
465
+
466
+ /*!
467
+ Removes each entry in allKeys from the receiver.
468
+ @param allKeys an array of keys that will be removed from the dictionary
469
+ */
470
+ - (void)removeObjectsForKeys:(CPArray)allKeys
471
+ {
472
+ var index = allKeys.length;
473
+
474
+ while (index--)
475
+ dictionary_removeValue(self, allKeys[index]);
476
+ }
477
+
478
+ /*
479
+ Instance.removeObjectForKey(aKey)
480
+ {
481
+ var entry= this._dictionary[aKey];
482
+
483
+ if(entry)
484
+ {
485
+ var range= CPMakeRange(entry.index, 1);
486
+
487
+ this._keys.removeObjectsInRange(range);
488
+ this._objects.removeObjectsInRange(range);
489
+
490
+ delete this._dictionary[aKey];
491
+ }
492
+ }
493
+
494
+ Instance.setDictionary(aDictionary)
495
+ {
496
+ this._keys= CPArray.arrayWithArray(aDictionary.allKeys());
497
+ this._objects= CPArray.arrayWithArray(aDictionary.allValues());
498
+
499
+ this._dictionary= { };
500
+
501
+ var i= this._keys.count();
502
+ while(i--) this._dictionary[this._keys[i]]= { object: this._objects[i], index: i };
503
+ }
504
+ */
505
+ /*!
506
+ Adds an entry into the dictionary.
507
+ @param anObject the object for the entry
508
+ @param aKey the entry's key
509
+ */
510
+ - (void)setObject:(id)anObject forKey:(id)aKey
511
+ {
512
+ dictionary_setValue(self, aKey, anObject);
513
+ }
514
+ /*
515
+ Instance.setValueForKey(aValue, aKey)
516
+ {
517
+ if(!aValue) this.removeObjectForKey(aKey);
518
+ else this.setObjectForKey(aValue, aKey);
519
+ }
520
+
521
+ Instance.copy()
522
+ {
523
+ return CPDictionary.alloc().dictionaryWithDictionary(this);
524
+ }
525
+ */
526
+
527
+ /*!
528
+ Take all the key/value pairs in aDictionary and apply them to this dictionary.
529
+ */
530
+ - (void)addEntriesFromDictionary:(CPDictionary)aDictionary
531
+ {
532
+ if (!aDictionary)
533
+ return;
534
+
535
+ var keys = [aDictionary allKeys],
536
+ index = [keys count];
537
+
538
+ while (index--)
539
+ {
540
+ var key = keys[index];
541
+
542
+ [self setObject:[aDictionary objectForKey:key] forKey:key];
543
+ }
544
+ }
545
+
546
+ /*!
547
+ Returns a human readable description of the dictionary.
548
+ */
549
+ - (CPString)description
550
+ {
551
+ var description = @"CPDictionary {\n";
552
+
553
+ var i = _keys.length;
554
+
555
+ while (i--)
556
+ {
557
+ description += _keys[i] + ":";
558
+
559
+ var object = _buckets[_keys[i]];
560
+
561
+ if (object && object.isa)
562
+ description += [object description];
563
+ else
564
+ description += object;
565
+
566
+ description += "\n";
567
+ }
568
+
569
+ description += "}";
570
+
571
+ return description;
572
+ }
573
+
574
+ @end
575
+
576
+ @implementation CPDictionary (CPCoding)
577
+
578
+ /*
579
+ Initializes the dictionary by unarchiving the data from a coder.
580
+ @param aCoder the coder from which the data will be unarchived.
581
+ @return the initialized dictionary
582
+ */
583
+ - (id)initWithCoder:(CPCoder)aCoder
584
+ {
585
+ return [aCoder _decodeDictionaryOfObjectsForKey:@"CP.objects"];
586
+ }
587
+
588
+ /*!
589
+ Archives the dictionary to a provided coder.
590
+ @param aCoder the coder to which the dictionary data will be archived.
591
+ */
592
+ - (void)encodeWithCoder:(CPCoder)aCoder
593
+ {
594
+ [aCoder _encodeDictionaryOfObjects:self forKey:@"CP.objects"];
595
+ }
596
+
597
+ @end
598
+
599
+ /*!
600
+ @class CPMutableDictionary
601
+ @ingroup compatability
602
+
603
+ This class is just an empty subclass of CPDictionary.
604
+ CPDictionary already implements mutable methods and
605
+ this class only exists for source compatability.
606
+ */
607
+ @implementation CPMutableDictionary : CPDictionary
608
+
609
+ @end
610
+
611
+ objj_dictionary.prototype.isa = CPDictionary;