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,382 @@
1
+ % Copyright 2005 Brian Alliet
2
+
3
+ \documentclass[11pt]{article}
4
+ \usepackage{palatino}
5
+ \usepackage{fullpage}
6
+ \usepackage{parskip}
7
+ \usepackage{lhs}
8
+
9
+ \begin{document}
10
+
11
+ \title{Sudoku Solver}
12
+ \author{Brian Alliet}
13
+ \maketitle
14
+
15
+ \ignore{
16
+ \begin{code}
17
+ module Sudoku (
18
+ Sudoku,
19
+ makeSudoku, solve, eliminate, analyze, backtrack,
20
+ main
21
+ ) where
22
+
23
+ import Array
24
+ import Monad
25
+ import List (union,intersperse,transpose,(\\),nub,nubBy)
26
+ \end{code}
27
+ }
28
+
29
+ \section{Introduction}
30
+
31
+ This Haskell module implements a solver for Sudoku~\footnote{http://en.wikipedia.org/wiki/Sudoku} puzzles. It can solve
32
+ any Sudoku puzzle, even those that require backtracking.
33
+
34
+ \section{Data Types}
35
+
36
+ \begin{code}
37
+ data CellState a = Known a | Unknown [a] | Impossible deriving Eq
38
+ \end{code}
39
+
40
+ Each cell in a Sudoku grid can be in one of three states: ``Known'' if it has a known correct value~\footnote{Actually
41
+ this doesn't always means it is correct. While we are in the backtracking stage we make our guesses ``Known''.},
42
+ ``Unknown'' if there is still more than one possible correct value, or ``Impossible'' if there is no value that can
43
+ possibly fit the cell. Sudoku grids with ``Impossible'' cells are quickly discarded by the {\tt solve} function.
44
+
45
+ \begin{code}
46
+ type Coords = (Int,Int)
47
+ type Grid a = Array Coords (CellState a)
48
+ newtype Sudoku a = Sudoku { unSudoku :: Grid a } deriving Eq
49
+ \end{code}
50
+
51
+ We represent a Sudoku grid as an Array indexed by integer coordinates. We additionally define a newtype wrapper for the
52
+ grid. The smart constructor, {\tt makeSudoku} verifies some invariants before creating the Sudoku value. All the public
53
+ API functions operate on the Sudoku type.
54
+
55
+ \begin{code}
56
+ instance Show a => Show (Sudoku a) where showsPrec p = showParen (p>0) . showsGrid . unSudoku
57
+ instance Show a => Show (CellState a) where showsPrec _ = showsCell
58
+ \end{code}
59
+
60
+ We define {\tt Show} instances for the above types.
61
+
62
+ \section{Internal Functions}
63
+
64
+ \begin{code}
65
+ size :: Grid a -> Int
66
+ size = (+1).fst.snd.bounds
67
+ \end{code}
68
+
69
+ {\tt size} returns the size (the width, height, and number of subboxes) for a Sudoku grid. We ensure Grid's are always
70
+ square and indexed starting at $(0,0)$ so simply incrementing either of the array's upper bounds is correct.
71
+
72
+ \begin{code}
73
+ getRow,getCol,getBox :: Grid a -> Int -> [(Coords,CellState a)]
74
+ getRow grid r = [let l = (r,c) in (l,grid!l)|c <- [0..size grid - 1]]
75
+ getCol grid c = [let l = (r,c) in (l,grid!l)|r <- [0..size grid - 1]]
76
+ getBox grid b = [let l = (r,c) in (l,grid!l)|r <- [boxR..boxR+boxN-1],c <- [boxC..boxC+boxN-1]]
77
+ where
78
+ boxN = intSqrt (size grid); boxR = b `quot` boxN * boxN; boxC = b `rem` boxN * boxN
79
+
80
+ getBoxOf :: Grid a -> Coords -> [(Coords,CellState a)]
81
+ getBoxOf grid (r,c) = grid `getBox` ((r `quot` boxN * boxN) + (c `quot` boxN))
82
+ where boxN = intSqrt (size grid)
83
+ \end{code}
84
+
85
+ {\tt getRow}, {\tt getCol}, and {\tt getBox} return the coordinates and values of the cell in row, column, or box
86
+ number {\tt n}, {\tt r}, or {\tt b}.
87
+
88
+ \begin{code}
89
+ getNeighbors :: Eq a => Grid a -> Coords -> [(Coords,CellState a)]
90
+ getNeighbors grid l@(r,c) = filter ((/=l).fst)
91
+ $ foldr (union.($grid)) []
92
+ [(`getRow`r),(`getCol`c),(`getBoxOf`l)]
93
+ \end{code}
94
+
95
+ {\tt getNeighbors} returns the coordinates and values of all the neighbors of this cell.
96
+
97
+ \begin{code}
98
+ impossible :: Eq a => Grid a -> Coords -> [a]
99
+ impossible grid l = map snd $ justKnowns $ grid `getNeighbors` l
100
+ \end{code}
101
+
102
+ {\tt impossible} returns a list of impossible values for a given cell. The impossible values consist of the values any
103
+ ``Known'' neighbors.
104
+
105
+ \begin{code}
106
+ justUnknowns :: [(Coords,CellState a)] -> [(Coords,[a])]
107
+ justUnknowns = foldr (\c -> case c of (p,Unknown xs) -> ((p,xs):); _ -> id) []
108
+
109
+ justKnowns :: [(Coords,CellState a)] -> [(Coords,a)]
110
+ justKnowns = foldr (\c -> case c of (p,Known x) -> ((p,x):); _ -> id) []
111
+ \end{code}
112
+
113
+ {\tt justUnknowns} and {\tt justKnowns} return only the Known or Unknown values (with the constructor stripped off)
114
+ from a list of cells.
115
+
116
+ \begin{code}
117
+ updateGrid :: Grid a -> [(Coords,CellState a)] -> Maybe (Grid a)
118
+ updateGrid _ [] = Nothing
119
+ updateGrid grid xs = Just $ grid // nubBy (\(x,_) (y,_) -> x==y) xs
120
+ \end{code}
121
+
122
+ {\tt updateGrid} applies a set of updates to a grid and returns the new grid only if it was updated.
123
+
124
+ \section{Public API}
125
+
126
+ \begin{code}
127
+ makeSudoku :: (Num a, Ord a, Enum a) => [[a]] -> Sudoku a
128
+ makeSudoku xs
129
+ | not (all ((==size).length) xs) = error "error not a square"
130
+ | (intSqrt size)^(2::Int) /= size = error "error dims aren't perfect squares"
131
+ | any (\x -> x < 0 || x > fromIntegral size) (concat xs) = error "value out of range"
132
+ | otherwise = Sudoku (listArray ((0,0),(size-1,size-1)) states)
133
+ where
134
+ size = length xs
135
+ states = map f (concat xs)
136
+ f 0 = Unknown [1..fromIntegral size]
137
+ f x = Known x
138
+ \end{code}
139
+
140
+ {\tt makeSudoku} makes a {\tt Sudoku} value from a list of numbers. The given matrix must be square and have dimensions
141
+ that are a perfect square. The possible values for each cell range from 1 to the dimension of the square with ``0''
142
+ representing unknown values.\footnote{The rest of the code doesn't depend on any of this weird ``0'' is unknown
143
+ representation. In fact, it doesn't depend on numeric values at all. ``0'' is just used here because it makes
144
+ representing grids in Haskell source code easier.}
145
+
146
+ \begin{code}
147
+ eliminate :: Eq a => Sudoku a -> Maybe (Sudoku a)
148
+ eliminate (Sudoku grid) = fmap Sudoku $ updateGrid grid changes >>= sanitize
149
+ where
150
+ changes = concatMap findChange $ assocs grid
151
+ findChange (l,Unknown xs)
152
+ = map ((,) l)
153
+ $ case filter (not.(`elem`impossible grid l)) xs of
154
+ [] -> return Impossible
155
+ [x] -> return $ Known x
156
+ xs'
157
+ | xs' /= xs -> return $ Unknown xs'
158
+ | otherwise -> mzero
159
+ findChange _ = mzero
160
+ sanitize grid = return $ grid // [(l,Impossible) |
161
+ (l,x) <- justKnowns changes, x `elem` impossible grid l]
162
+ \end{code}
163
+
164
+ The {\tt eliminate} phase tries to remove possible choices for ``Unknowns'' based on ``Known'' values in the same row,
165
+ column, or box as the ``Unknown'' value. For each cell on the grid we find its ``neighbors'', that is, cells in the
166
+ same row, column, or box. Out of those neighbors we get a list of all the ``Known'' values. We can eliminate all of
167
+ these from our list of candidates for this cell. If we're lucky enough to eliminate all the candidates but one we have
168
+ a new ``Known'' value. If we're unlucky enough to have eliminates {\bf all} the possible candidates we have a new
169
+ ``Impossible'' value.
170
+
171
+ After iterating though every cell we make one more pass looking for conflicting changes. {\tt sanitize} marks cells as
172
+ ``Impossible'' if we have conflicting ``Known'' values.
173
+
174
+ \begin{code}
175
+ analyze :: Eq a => Sudoku a -> Maybe (Sudoku a)
176
+ analyze (Sudoku grid) = fmap Sudoku $ updateGrid grid $ nub [u |
177
+ f <- map ($grid) [getRow,getCol,getBox],
178
+ n <- [0..size grid - 1],
179
+ u <- unique (f n)]
180
+ where
181
+ unique xs = foldr f [] $ foldr (union.snd) [] unknowns \\ map snd (justKnowns xs)
182
+ where
183
+ unknowns = justUnknowns xs
184
+ f c = case filter ((c`elem`).snd) unknowns of
185
+ [(p,_)] -> ((p,Known c):)
186
+ _ -> id
187
+ \end{code}
188
+
189
+ The {\tt analyze} phase tries to turn ``Unknowns'' into ``Knowns'' when a certain ``Unknown'' is the only cell that
190
+ contains a value needed in a given row, column, or box. We apply each of the functions {\tt getRow}, {\tt getCol}, and
191
+ {\tt getBox} to all the indices on the grid, apply {\tt unique} to each group, and update the array with the
192
+ results. {\tt unique} gets a list of all the unknown cells in the group and finds all the unknown values in each of
193
+ those cells. Each of these values are iterated though looking for a value that is only contained in one cell. If such a
194
+ value is found the cell containing it must be that value.
195
+
196
+ \begin{code}
197
+ backtrack :: (MonadPlus m, Eq a) => Sudoku a -> m (Sudoku a)
198
+ backtrack (Sudoku grid) = case (justUnknowns (assocs grid)) of
199
+ [] -> return $ Sudoku grid
200
+ ((p,xs):_) -> msum $ map (\x -> solve $ Sudoku $ grid // [(p,Known x)]) xs
201
+ \end{code}
202
+
203
+ Sometimes the above two phases still aren't enough to solve a puzzle. For these rare puzzles backtracking is required.
204
+ We attempt to solve the puzzle by replacing the first ``Unknown'' value with each of the candidate values and solving
205
+ the resulting puzzles. Hopefully at least one of our choices will result in a solvable puzzle.
206
+
207
+ We could actually solve any puzzle using backtracking alone, although this would be very inefficient. The above
208
+ functions simplify most puzzles enough that the backtracking phase has to do hardly any work.
209
+
210
+ \begin{code}
211
+ solve :: (MonadPlus m, Eq a) => Sudoku a -> m (Sudoku a)
212
+ solve sudoku =
213
+ case eliminate sudoku of
214
+ Just new
215
+ | any (==Impossible) (elems (unSudoku new))-> mzero
216
+ | otherwise -> solve new
217
+ Nothing -> case analyze sudoku of
218
+ Just new -> solve new
219
+ Nothing -> backtrack sudoku
220
+ \end{code}
221
+
222
+ {\tt solve} glues all the above phases together. First we run the {\tt eliminate} phase. If that found the puzzle to
223
+ be unsolvable we abort immediately. If {\tt eliminate} changed the grid we go though the {\tt eliminate} phase again
224
+ hoping to eliminate more. Once {\tt eliminate} can do no more work we move on to the {\tt analyze} phase. If this
225
+ succeeds in doing some work we start over again with the {\tt eliminate} phase. Once {\tt analyze} can do no more work
226
+ we have no choice but to resort to backtracking. (However in most cases backtracking won't actually do anything because
227
+ the puzzle is already solved.)
228
+
229
+ \begin{code}
230
+ showsCell :: Show a => CellState a -> ShowS
231
+ showsCell (Known x) = shows x
232
+ showsCell (Impossible) = showChar 'X'
233
+ showsCell (Unknown xs) = \rest -> ('(':)
234
+ $ foldr id (')':rest)
235
+ $ intersperse (showChar ' ')
236
+ $ map shows xs
237
+ \end{code}
238
+
239
+ {\tt showCell} shows a cell.
240
+
241
+ \begin{code}
242
+ showsGrid :: Show a => Grid a -> ShowS
243
+ showsGrid grid = showsTable [[grid!(r,c) | c <- [0..size grid-1]] | r <- [0..size grid-1]]
244
+ \end{code}
245
+
246
+ {\tt showGrid} show a grid.
247
+
248
+ \begin{code}
249
+ -- FEATURE: This is pretty inefficient
250
+ showsTable :: Show a => [[a]] -> ShowS
251
+ showsTable xs = (showChar '\n' .) $ showString $ unlines $ map (concat . intersperse " ") xs''
252
+ where
253
+ xs' = (map.map) show xs
254
+ colWidths = map (max 2 . maximum . map length) (transpose xs')
255
+ xs'' = map (zipWith (\n s -> s ++ (replicate (n - length s) ' ')) colWidths) xs'
256
+ \end{code}
257
+
258
+ {\tt showsTable} shows a table (or matrix). Every column has the same width so things line up.
259
+
260
+ \begin{code}
261
+ intSqrt :: Integral a => a -> a
262
+ intSqrt n
263
+ | n < 0 = error "intSqrt: negative n"
264
+ | otherwise = f n
265
+ where
266
+ f x = if y < x then f y else x
267
+ where y = (x + (n `quot` x)) `quot` 2
268
+ \end{code}
269
+
270
+ {\tt intSqrt} is Newton`s Iteration for finding integral square roots.
271
+
272
+ \ignore{
273
+ \begin{code}
274
+ test :: Sudoku Int
275
+ test = makeSudoku [
276
+ [0,6,0,1,0,4,0,5,0],
277
+ [0,0,8,3,0,5,6,0,0],
278
+ [2,0,0,0,0,0,0,0,1],
279
+ [8,0,0,4,0,7,0,0,6],
280
+ [0,0,6,0,0,0,3,0,0],
281
+ [7,0,0,9,0,1,0,0,4],
282
+ [5,0,0,0,0,0,0,0,2],
283
+ [0,0,7,2,0,6,9,0,0],
284
+ [0,4,0,5,0,8,0,7,0]]
285
+
286
+ test2 :: Sudoku Int
287
+ test2 = makeSudoku [
288
+ [0,7,0,0,0,0,8,0,0],
289
+ [0,0,0,2,0,4,0,0,0],
290
+ [0,0,6,0,0,0,0,3,0],
291
+ [0,0,0,5,0,0,0,0,6],
292
+ [9,0,8,0,0,2,0,4,0],
293
+ [0,5,0,0,3,0,9,0,0],
294
+ [0,0,2,0,8,0,0,6,0],
295
+ [0,6,0,9,0,0,7,0,1],
296
+ [4,0,0,0,0,3,0,0,0]]
297
+
298
+ testSmall :: Sudoku Int
299
+ testSmall = makeSudoku [
300
+ [1,0,0,0,0,0,0,0,0],
301
+ [0,0,2,7,4,0,0,0,0],
302
+ [0,0,0,5,0,0,0,0,4],
303
+ [0,3,0,0,0,0,0,0,0],
304
+ [7,5,0,0,0,0,0,0,0],
305
+ [0,0,0,0,0,9,6,0,0],
306
+ [0,4,0,0,0,6,0,0,0],
307
+ [0,0,0,0,0,0,0,7,1],
308
+ [0,0,0,0,0,1,0,3,0]]
309
+
310
+ testHard :: Sudoku Int
311
+ testHard = makeSudoku [
312
+ [0,0,0,8,0,2,0,0,0],
313
+ [5,0,0,0,0,0,0,0,1],
314
+ [0,0,6,0,5,0,3,0,0],
315
+ [0,0,9,0,1,0,8,0,0],
316
+ [1,0,0,0,0,0,0,0,2],
317
+ [0,0,0,9,0,7,0,0,0],
318
+ [0,6,1,0,3,0,7,8,0],
319
+ [0,5,0,0,0,0,0,4,0],
320
+ [0,7,2,0,4,0,1,5,0]]
321
+
322
+ testHard2 :: Sudoku Int
323
+ testHard2 = makeSudoku [
324
+ [3,0,0,2,0,0,9,0,0],
325
+ [0,0,0,0,0,0,0,0,5],
326
+ [0,7,0,1,0,4,0,0,0],
327
+ [0,0,9,0,0,0,8,0,0],
328
+ [5,0,0,0,7,0,0,0,6],
329
+ [0,0,1,0,0,0,2,0,0],
330
+ [0,0,0,3,0,9,0,4,0],
331
+ [8,0,0,0,0,0,0,0,0],
332
+ [0,0,6,0,0,5,0,0,7]]
333
+
334
+ testHW :: Sudoku Int
335
+ testHW = makeSudoku [
336
+ [0,0,0,1,0,0,7,0,2],
337
+ [0,3,0,9,5,0,0,0,0],
338
+ [0,0,1,0,0,2,0,0,3],
339
+ [5,9,0,0,0,0,3,0,1],
340
+ [0,2,0,0,0,0,0,7,0],
341
+ [7,0,3,0,0,0,0,9,8],
342
+ [8,0,0,2,0,0,1,0,0],
343
+ [0,0,0,0,8,5,0,6,0],
344
+ [6,0,5,0,0,9,0,0,0]]
345
+
346
+ testTough :: Sudoku Int
347
+ testTough = makeSudoku $ map (map read . words) $ lines $
348
+ "8 3 0 0 0 0 0 4 6\n"++
349
+ "0 2 0 1 0 4 0 3 0\n"++
350
+ "0 0 0 0 0 0 0 0 0\n"++
351
+ "0 0 2 9 0 6 5 0 0\n"++
352
+ "1 4 0 0 0 0 0 2 3\n"++
353
+ "0 0 5 4 0 3 1 0 0\n"++
354
+ "0 0 0 0 0 0 0 0 0\n"++
355
+ "0 6 0 3 0 8 0 7 0\n"++
356
+ "9 5 0 0 0 0 0 6 2\n"
357
+
358
+ testDiabolical :: Sudoku Int
359
+ testDiabolical = makeSudoku $ map (map read . words) $ lines $
360
+ "8 0 0 7 0 1 0 0 2\n"++
361
+ "0 0 6 0 0 0 7 0 0\n"++
362
+ "0 1 7 0 0 0 8 9 0\n"++
363
+ "0 0 0 1 7 3 0 0 0\n"++
364
+ "7 0 0 0 0 0 0 0 6\n"++
365
+ "0 0 0 9 5 6 0 0 0\n"++
366
+ "0 9 5 0 0 0 4 1 0\n"++
367
+ "0 0 8 0 0 0 5 0 0\n"++
368
+ "3 0 0 6 0 5 0 0 7\n"
369
+
370
+ main :: IO ()
371
+ main = do
372
+ let
373
+ solve' p = case solve p of
374
+ [] -> fail $ "couldn't solve: " ++ show p
375
+ sols -> return sols
376
+ mapM_ (\p -> solve' p >>= putStrLn.show) [test,test2,testSmall,testHard,testHard2,testHW,testTough,testDiabolical]
377
+ return ()
378
+
379
+ \end{code}
380
+ }
381
+
382
+ \end{document}
@@ -0,0 +1,30 @@
1
+ // See README.txt for information and build instructions.
2
+
3
+ package tutorial;
4
+
5
+ option java_package = "com.example.tutorial";
6
+ option java_outer_classname = "AddressBookProtos";
7
+
8
+ message Person {
9
+ required string name = 1;
10
+ required int32 id = 2; // Unique ID number for this person.
11
+ optional string email = 3;
12
+
13
+ enum PhoneType {
14
+ MOBILE = 0;
15
+ HOME = 1;
16
+ WORK = 2;
17
+ }
18
+
19
+ message PhoneNumber {
20
+ required string number = 1;
21
+ optional PhoneType type = 2 [default = HOME];
22
+ }
23
+
24
+ repeated PhoneNumber phone = 4;
25
+ }
26
+
27
+ // Our address book file is just one of these.
28
+ message AddressBook {
29
+ repeated Person person = 1;
30
+ }
@@ -0,0 +1 @@
1
+ public f throws a, b, c : x ;
@@ -0,0 +1,393 @@
1
+ # Based upon the NCSA server configuration files originally by Rob McCool.
2
+ # Changed extensively for the Debian package by Daniel Stone <daniel@sfarc.net>
3
+ # and also by Thom May <thom@debian.org>.
4
+
5
+ # ServerRoot: The top of the directory tree under which the server's
6
+ # configuration, error, and log files are kept.
7
+ #
8
+ # NOTE! If you intend to place this on an NFS (or otherwise network)
9
+ # mounted filesystem then please read the LockFile documentation
10
+ # (available at <URL:http://www.apache.org/docs/mod/core.html#lockfile>);
11
+ # you will save yourself a lot of trouble.
12
+
13
+ ServerRoot "/etc/apache2"
14
+
15
+ # The LockFile directive sets the path to the lockfile used when Apache
16
+ # is compiled with either USE_FCNTL_SERIALIZED_ACCEPT or
17
+ # USE_FLOCK_SERIALIZED_ACCEPT. This directive should normally be left at
18
+ # its default value. The main reason for changing it is if the logs
19
+ # directory is NFS mounted, since the lockfile MUST BE STORED ON A LOCAL
20
+ # DISK. The PID of the main server process is automatically appended to
21
+ # the filename.
22
+
23
+ LockFile /var/lock/apache2/accept.lock
24
+
25
+ # PidFile: The file in which the server should record its process
26
+ # identification number when it starts.
27
+
28
+ PidFile /var/run/apache2.pid
29
+
30
+ # Timeout: The number of seconds before receives and sends time out.
31
+
32
+ Timeout 300
33
+
34
+ # KeepAlive: Whether or not to allow persistent connections (more than
35
+ # one request per connection). Set to "Off" to deactivate.
36
+
37
+ KeepAlive On
38
+
39
+ # MaxKeepAliveRequests: The maximum number of requests to allow
40
+ # during a persistent connection. Set to 0 to allow an unlimited amount.
41
+ # We recommend you leave this number high, for maximum performance.
42
+
43
+ MaxKeepAliveRequests 100
44
+
45
+ # KeepAliveTimeout: Number of seconds to wait for the next request from the
46
+ # same client on the same connection.
47
+
48
+ KeepAliveTimeout 15
49
+
50
+ ##
51
+ ## Server-Pool Size Regulation (MPM specific)
52
+ ##
53
+
54
+ # prefork MPM
55
+ # StartServers ......... number of server processes to start
56
+ # MinSpareServers ...... minimum number of server processes which are kept spare
57
+ # MaxSpareServers ...... maximum number of server processes which are kept spare
58
+ # MaxClients ........... maximum number of server processes allowed to start
59
+ # MaxRequestsPerChild .. maximum number of requests a server process serves
60
+ <IfModule prefork.c>
61
+ StartServers 5
62
+ MinSpareServers 5
63
+ MaxSpareServers 10
64
+ MaxClients 20
65
+ MaxRequestsPerChild 0
66
+ </IfModule>
67
+
68
+ # pthread MPM
69
+ # StartServers ......... initial number of server processes to start
70
+ # MaxClients ........... maximum number of server processes allowed to start
71
+ # MinSpareThreads ...... minimum number of worker threads which are kept spare
72
+ # MaxSpareThreads ...... maximum number of worker threads which are kept spare
73
+ # ThreadsPerChild ...... constant number of worker threads in each server process
74
+ # MaxRequestsPerChild .. maximum number of requests a server process serves
75
+ <IfModule worker.c>
76
+ StartServers 2
77
+ MaxClients 150
78
+ MinSpareThreads 25
79
+ MaxSpareThreads 75
80
+ ThreadsPerChild 25
81
+ MaxRequestsPerChild 0
82
+ </IfModule>
83
+
84
+ # perchild MPM
85
+ # NumServers ........... constant number of server processes
86
+ # StartThreads ......... initial number of worker threads in each server process
87
+ # MinSpareThreads ...... minimum number of worker threads which are kept spare
88
+ # MaxSpareThreads ...... maximum number of worker threads which are kept spare
89
+ # MaxThreadsPerChild ... maximum number of worker threads in each server process
90
+ # MaxRequestsPerChild .. maximum number of connections per server process (then it dies)
91
+ <IfModule perchild.c>
92
+ NumServers 5
93
+ StartThreads 5
94
+ MinSpareThreads 5
95
+ MaxSpareThreads 10
96
+ MaxThreadsPerChild 20
97
+ MaxRequestsPerChild 0
98
+ AcceptMutex fcntl
99
+ </IfModule>
100
+
101
+ User www-data
102
+ Group www-data
103
+
104
+ # The following directives define some format nicknames for use with
105
+ # a CustomLog directive (see below).
106
+ LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
107
+ LogFormat "%h %l %u %t \"%r\" %>s %b" common
108
+ LogFormat "%{Referer}i -> %U" referer
109
+ LogFormat "%{User-agent}i" agent
110
+
111
+
112
+ # Global error log.
113
+ ErrorLog /var/log/apache2/error.log
114
+
115
+ # Include module configuration:
116
+ Include /etc/apache2/mods-enabled/*.load
117
+ Include /etc/apache2/mods-enabled/*.conf
118
+
119
+ # Include all the user configurations:
120
+ Include /etc/apache2/httpd.conf
121
+
122
+ # Include ports listing
123
+ Include /etc/apache2/ports.conf
124
+
125
+ # Include generic snippets of statements
126
+ Include /etc/apache2/conf.d/[^.#]*
127
+
128
+ #Let's have some Icons, shall we?
129
+ Alias /icons/ "/usr/share/apache2/icons/"
130
+ <Directory "/usr/share/apache2/icons">
131
+ Options Indexes MultiViews
132
+ AllowOverride None
133
+ Order allow,deny
134
+ Allow from all
135
+ </Directory>
136
+
137
+ # Set up the default error docs.
138
+ #
139
+ # Customizable error responses come in three flavors:
140
+ # 1) plain text 2) local redirects 3) external redirects
141
+ #
142
+ # Some examples:
143
+ #ErrorDocument 500 "The server made a boo boo."
144
+ #ErrorDocument 404 /missing.html
145
+ #ErrorDocument 404 "/cgi-bin/missing_handler.pl"
146
+ #ErrorDocument 402 http://www.example.com/subscription_info.html
147
+ #
148
+
149
+ #
150
+ # Putting this all together, we can Internationalize error responses.
151
+ #
152
+ # We use Alias to redirect any /error/HTTP_<error>.html.var response to
153
+ # our collection of by-error message multi-language collections. We use
154
+ # includes to substitute the appropriate text.
155
+ #
156
+ # You can modify the messages' appearance without changing any of the
157
+ # default HTTP_<error>.html.var files by adding the line;
158
+ #
159
+ # Alias /error/include/ "/your/include/path/"
160
+ #
161
+ # which allows you to create your own set of files by starting with the
162
+ # /usr/local/apache2/error/include/ files and
163
+ # copying them to /your/include/path/, even on a per-VirtualHost basis.
164
+ #
165
+
166
+ <IfModule mod_negotiation.c>
167
+ <IfModule mod_include.c>
168
+ Alias /error/ "/usr/share/apache2/error/"
169
+
170
+ <Directory "/usr/share/apache2/error">
171
+ AllowOverride None
172
+ Options IncludesNoExec
173
+ AddOutputFilter Includes html
174
+ AddHandler type-map var
175
+ Order allow,deny
176
+ Allow from all
177
+ LanguagePriority en es de fr
178
+ ForceLanguagePriority Prefer Fallback
179
+ </Directory>
180
+
181
+ ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var
182
+ ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var
183
+ ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var
184
+ ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var
185
+ ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var
186
+ ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var
187
+ ErrorDocument 410 /error/HTTP_GONE.html.var
188
+ ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var
189
+ ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var
190
+ ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var
191
+ ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var
192
+ ErrorDocument 415 /error/HTTP_SERVICE_UNAVAILABLE.html.var
193
+ ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var
194
+ ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var
195
+ ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var
196
+ ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var
197
+ ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var
198
+
199
+ </IfModule>
200
+ </IfModule>
201
+
202
+ DirectoryIndex index.html index.cgi index.pl index.php index.xhtml
203
+
204
+ # UserDir is now a module
205
+ #UserDir public_html
206
+ #UserDir disabled root
207
+
208
+ #<Directory /home/*/public_html>
209
+ # AllowOverride FileInfo AuthConfig Limit
210
+ # Options Indexes SymLinksIfOwnerMatch IncludesNoExec
211
+ #</Directory>
212
+
213
+ AccessFileName .htaccess
214
+
215
+ <Files ~ "^\.ht">
216
+ Order allow,deny
217
+ Deny from all
218
+ </Files>
219
+
220
+ UseCanonicalName Off
221
+
222
+ TypesConfig /etc/mime.types
223
+ DefaultType text/plain
224
+
225
+ HostnameLookups Off
226
+
227
+ IndexOptions FancyIndexing VersionSort
228
+
229
+ AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
230
+
231
+ AddIconByType (TXT,/icons/text.gif) text/*
232
+ AddIconByType (IMG,/icons/image2.gif) image/*
233
+ AddIconByType (SND,/icons/sound2.gif) audio/*
234
+ AddIconByType (VID,/icons/movie.gif) video/*
235
+
236
+ # This really should be .jpg.
237
+
238
+ AddIcon /icons/binary.gif .bin .exe
239
+ AddIcon /icons/binhex.gif .hqx
240
+ AddIcon /icons/tar.gif .tar
241
+ AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
242
+ AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
243
+ AddIcon /icons/a.gif .ps .ai .eps
244
+ AddIcon /icons/layout.gif .html .shtml .htm .pdf
245
+ AddIcon /icons/text.gif .txt
246
+ AddIcon /icons/c.gif .c
247
+ AddIcon /icons/p.gif .pl .py
248
+ AddIcon /icons/f.gif .for
249
+ AddIcon /icons/dvi.gif .dvi
250
+ AddIcon /icons/uuencoded.gif .uu
251
+ AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
252
+ AddIcon /icons/tex.gif .tex
253
+ AddIcon /icons/bomb.gif core
254
+
255
+ AddIcon /icons/back.gif ..
256
+ AddIcon /icons/hand.right.gif README
257
+ AddIcon /icons/folder.gif ^^DIRECTORY^^
258
+ AddIcon /icons/blank.gif ^^BLANKICON^^
259
+
260
+
261
+ # This is from Matty J's patch. Anyone want to make the icons?
262
+ #AddIcon /icons/dirsymlink.jpg ^^SYMDIR^^
263
+ #AddIcon /icons/symlink.jpg ^^SYMLINK^^
264
+
265
+ DefaultIcon /icons/unknown.gif
266
+
267
+ ReadmeName README.html
268
+ HeaderName HEADER.html
269
+
270
+ IndexIgnore .??* *~ *# HEADER* RCS CVS *,t
271
+
272
+ AddEncoding x-compress Z
273
+ AddEncoding x-gzip gz tgz
274
+
275
+ AddLanguage da .dk
276
+ AddLanguage nl .nl
277
+ AddLanguage en .en
278
+ AddLanguage et .et
279
+ AddLanguage fr .fr
280
+ AddLanguage de .de
281
+ AddLanguage el .el
282
+ AddLanguage it .it
283
+ AddLanguage ja .ja
284
+ AddLanguage pl .po
285
+ AddLanguage ko .ko
286
+ AddLanguage pt .pt
287
+ AddLanguage no .no
288
+ AddLanguage pt-br .pt-br
289
+ AddLanguage ltz .ltz
290
+ AddLanguage ca .ca
291
+ AddLanguage es .es
292
+ AddLanguage sv .se
293
+ AddLanguage cz .cz
294
+ AddLanguage ru .ru
295
+ AddLanguage tw .tw
296
+ AddLanguage zh-tw .tw
297
+
298
+ LanguagePriority en da nl et fr de el it ja ko no pl pt pt-br ltz ca es sv tw
299
+
300
+
301
+ #AddDefaultCharset ISO-8859-1
302
+
303
+ AddCharset ISO-8859-1 .iso8859-1 .latin1
304
+ AddCharset ISO-8859-2 .iso8859-2 .latin2 .cen
305
+ AddCharset ISO-8859-3 .iso8859-3 .latin3
306
+ AddCharset ISO-8859-4 .iso8859-4 .latin4
307
+ AddCharset ISO-8859-5 .iso8859-5 .latin5 .cyr .iso-ru
308
+ AddCharset ISO-8859-6 .iso8859-6 .latin6 .arb
309
+ AddCharset ISO-8859-7 .iso8859-7 .latin7 .grk
310
+ AddCharset ISO-8859-8 .iso8859-8 .latin8 .heb
311
+ AddCharset ISO-8859-9 .iso8859-9 .latin9 .trk
312
+ AddCharset ISO-2022-JP .iso2022-jp .jis
313
+ AddCharset ISO-2022-KR .iso2022-kr .kis
314
+ AddCharset ISO-2022-CN .iso2022-cn .cis
315
+ AddCharset Big5 .Big5 .big5
316
+ # For russian, more than one charset is used (depends on client, mostly):
317
+ AddCharset WINDOWS-1251 .cp-1251 .win-1251
318
+ AddCharset CP866 .cp866
319
+ AddCharset KOI8-r .koi8-r .koi8-ru
320
+ AddCharset KOI8-ru .koi8-uk .ua
321
+ AddCharset ISO-10646-UCS-2 .ucs2
322
+ AddCharset ISO-10646-UCS-4 .ucs4
323
+ AddCharset UTF-8 .utf8
324
+
325
+ AddCharset GB2312 .gb2312 .gb
326
+ AddCharset utf-7 .utf7
327
+ AddCharset utf-8 .utf8
328
+ AddCharset big5 .big5 .b5
329
+ AddCharset EUC-TW .euc-tw
330
+ AddCharset EUC-JP .euc-jp
331
+ AddCharset EUC-KR .euc-kr
332
+ AddCharset shift_jis .sjis
333
+
334
+ #AddType application/x-httpd-php .php
335
+ #AddType application/x-httpd-php-source .phps
336
+
337
+ AddType application/x-tar .tgz
338
+
339
+ # To use CGI scripts outside /cgi-bin/:
340
+ #
341
+ #AddHandler cgi-script .cgi
342
+
343
+ # To use server-parsed HTML files
344
+ #
345
+ <FilesMatch "\.shtml(\..+)?$">
346
+ SetOutputFilter INCLUDES
347
+ </FilesMatch>
348
+
349
+ # If you wish to use server-parsed imagemap files, use
350
+ #
351
+ #AddHandler imap-file map
352
+
353
+ BrowserMatch "Mozilla/2" nokeepalive
354
+ BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
355
+ BrowserMatch "RealPlayer 4\.0" force-response-1.0
356
+ BrowserMatch "Java/1\.0" force-response-1.0
357
+ BrowserMatch "JDK/1\.0" force-response-1.0
358
+
359
+ #
360
+ # The following directive disables redirects on non-GET requests for
361
+ # a directory that does not include the trailing slash. This fixes a
362
+ # problem with Microsoft WebFolders which does not appropriately handle
363
+ # redirects for folders with DAV methods.
364
+ #
365
+
366
+ BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
367
+ BrowserMatch "^WebDrive" redirect-carefully
368
+ BrowserMatch "^gnome-vfs" redirect-carefully
369
+ BrowserMatch "^WebDAVFS/1.[012]" redirect-carefully
370
+
371
+ # Allow server status reports, with the URL of http://servername/server-status
372
+ # Change the ".your_domain.com" to match your domain to enable.
373
+ #
374
+ #<Location /server-status>
375
+ # SetHandler server-status
376
+ # Order deny,allow
377
+ # Deny from all
378
+ # Allow from .your_domain.com
379
+ #</Location>
380
+
381
+ # Allow remote server configuration reports, with the URL of
382
+ # http://servername/server-info (requires that mod_info.c be loaded).
383
+ # Change the ".your_domain.com" to match your domain to enable.
384
+ #
385
+ #<Location /server-info>
386
+ # SetHandler server-info
387
+ # Order deny,allow
388
+ # Deny from all
389
+ # Allow from .your_domain.com
390
+ #</Location>
391
+
392
+ # Include the virtual host configurations:
393
+ Include /etc/apache2/sites-enabled/[^.#]*