pygments.rb-jruby 0.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (473) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +6 -0
  3. data/CHANGELOG.md +71 -0
  4. data/Gemfile +2 -0
  5. data/LICENSE +17 -0
  6. data/README.md +118 -0
  7. data/Rakefile +66 -0
  8. data/bench.rb +22 -0
  9. data/cache-lexers.rb +8 -0
  10. data/lexers +0 -0
  11. data/lib/pygments.rb +8 -0
  12. data/lib/pygments/lexer.rb +148 -0
  13. data/lib/pygments/mentos.py +351 -0
  14. data/lib/pygments/popen.rb +404 -0
  15. data/lib/pygments/version.rb +3 -0
  16. data/pygments.rb.gemspec +24 -0
  17. data/test/test_data.c +2581 -0
  18. data/test/test_data.py +514 -0
  19. data/test/test_data_generated +2582 -0
  20. data/test/test_pygments.rb +287 -0
  21. data/vendor/custom_lexers/github.py +565 -0
  22. data/vendor/pygments-main/AUTHORS +153 -0
  23. data/vendor/pygments-main/CHANGES +889 -0
  24. data/vendor/pygments-main/LICENSE +25 -0
  25. data/vendor/pygments-main/MANIFEST.in +6 -0
  26. data/vendor/pygments-main/Makefile +59 -0
  27. data/vendor/pygments-main/REVISION +1 -0
  28. data/vendor/pygments-main/TODO +15 -0
  29. data/vendor/pygments-main/docs/generate.py +472 -0
  30. data/vendor/pygments-main/docs/pygmentize.1 +94 -0
  31. data/vendor/pygments-main/docs/src/api.txt +270 -0
  32. data/vendor/pygments-main/docs/src/authors.txt +5 -0
  33. data/vendor/pygments-main/docs/src/changelog.txt +5 -0
  34. data/vendor/pygments-main/docs/src/cmdline.txt +147 -0
  35. data/vendor/pygments-main/docs/src/filterdevelopment.txt +70 -0
  36. data/vendor/pygments-main/docs/src/filters.txt +42 -0
  37. data/vendor/pygments-main/docs/src/formatterdevelopment.txt +169 -0
  38. data/vendor/pygments-main/docs/src/formatters.txt +48 -0
  39. data/vendor/pygments-main/docs/src/index.txt +69 -0
  40. data/vendor/pygments-main/docs/src/installation.txt +71 -0
  41. data/vendor/pygments-main/docs/src/integrate.txt +48 -0
  42. data/vendor/pygments-main/docs/src/java.txt +70 -0
  43. data/vendor/pygments-main/docs/src/lexerdevelopment.txt +603 -0
  44. data/vendor/pygments-main/docs/src/lexers.txt +67 -0
  45. data/vendor/pygments-main/docs/src/moinmoin.txt +39 -0
  46. data/vendor/pygments-main/docs/src/plugins.txt +93 -0
  47. data/vendor/pygments-main/docs/src/quickstart.txt +202 -0
  48. data/vendor/pygments-main/docs/src/rstdirective.txt +22 -0
  49. data/vendor/pygments-main/docs/src/styles.txt +143 -0
  50. data/vendor/pygments-main/docs/src/tokens.txt +349 -0
  51. data/vendor/pygments-main/docs/src/unicode.txt +49 -0
  52. data/vendor/pygments-main/external/autopygmentize +64 -0
  53. data/vendor/pygments-main/external/lasso-builtins-generator-9.lasso +144 -0
  54. data/vendor/pygments-main/external/markdown-processor.py +67 -0
  55. data/vendor/pygments-main/external/moin-parser.py +112 -0
  56. data/vendor/pygments-main/external/pygments.bashcomp +38 -0
  57. data/vendor/pygments-main/external/rst-directive-old.py +77 -0
  58. data/vendor/pygments-main/external/rst-directive.py +83 -0
  59. data/vendor/pygments-main/ez_setup.py +276 -0
  60. data/vendor/pygments-main/pygmentize +7 -0
  61. data/vendor/pygments-main/pygments/__init__.py +91 -0
  62. data/vendor/pygments-main/pygments/cmdline.py +441 -0
  63. data/vendor/pygments-main/pygments/console.py +74 -0
  64. data/vendor/pygments-main/pygments/filter.py +74 -0
  65. data/vendor/pygments-main/pygments/filters/__init__.py +356 -0
  66. data/vendor/pygments-main/pygments/formatter.py +95 -0
  67. data/vendor/pygments-main/pygments/formatters/__init__.py +68 -0
  68. data/vendor/pygments-main/pygments/formatters/_mapping.py +92 -0
  69. data/vendor/pygments-main/pygments/formatters/bbcode.py +109 -0
  70. data/vendor/pygments-main/pygments/formatters/html.py +821 -0
  71. data/vendor/pygments-main/pygments/formatters/img.py +553 -0
  72. data/vendor/pygments-main/pygments/formatters/latex.py +378 -0
  73. data/vendor/pygments-main/pygments/formatters/other.py +115 -0
  74. data/vendor/pygments-main/pygments/formatters/rtf.py +136 -0
  75. data/vendor/pygments-main/pygments/formatters/svg.py +154 -0
  76. data/vendor/pygments-main/pygments/formatters/terminal.py +112 -0
  77. data/vendor/pygments-main/pygments/formatters/terminal256.py +222 -0
  78. data/vendor/pygments-main/pygments/lexer.py +765 -0
  79. data/vendor/pygments-main/pygments/lexers/__init__.py +240 -0
  80. data/vendor/pygments-main/pygments/lexers/_asybuiltins.py +1645 -0
  81. data/vendor/pygments-main/pygments/lexers/_clbuiltins.py +232 -0
  82. data/vendor/pygments-main/pygments/lexers/_lassobuiltins.py +5172 -0
  83. data/vendor/pygments-main/pygments/lexers/_luabuiltins.py +249 -0
  84. data/vendor/pygments-main/pygments/lexers/_mapping.py +354 -0
  85. data/vendor/pygments-main/pygments/lexers/_openedgebuiltins.py +562 -0
  86. data/vendor/pygments-main/pygments/lexers/_phpbuiltins.py +3787 -0
  87. data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +233 -0
  88. data/vendor/pygments-main/pygments/lexers/_robotframeworklexer.py +557 -0
  89. data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +40 -0
  90. data/vendor/pygments-main/pygments/lexers/_sourcemodbuiltins.py +1072 -0
  91. data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +360 -0
  92. data/vendor/pygments-main/pygments/lexers/_vimbuiltins.py +13 -0
  93. data/vendor/pygments-main/pygments/lexers/agile.py +2290 -0
  94. data/vendor/pygments-main/pygments/lexers/asm.py +398 -0
  95. data/vendor/pygments-main/pygments/lexers/compiled.py +3723 -0
  96. data/vendor/pygments-main/pygments/lexers/dalvik.py +104 -0
  97. data/vendor/pygments-main/pygments/lexers/dotnet.py +671 -0
  98. data/vendor/pygments-main/pygments/lexers/foxpro.py +428 -0
  99. data/vendor/pygments-main/pygments/lexers/functional.py +2731 -0
  100. data/vendor/pygments-main/pygments/lexers/github.py +565 -0
  101. data/vendor/pygments-main/pygments/lexers/hdl.py +356 -0
  102. data/vendor/pygments-main/pygments/lexers/jvm.py +1112 -0
  103. data/vendor/pygments-main/pygments/lexers/math.py +1918 -0
  104. data/vendor/pygments-main/pygments/lexers/other.py +3778 -0
  105. data/vendor/pygments-main/pygments/lexers/parsers.py +778 -0
  106. data/vendor/pygments-main/pygments/lexers/shell.py +424 -0
  107. data/vendor/pygments-main/pygments/lexers/special.py +100 -0
  108. data/vendor/pygments-main/pygments/lexers/sql.py +559 -0
  109. data/vendor/pygments-main/pygments/lexers/templates.py +1742 -0
  110. data/vendor/pygments-main/pygments/lexers/text.py +1893 -0
  111. data/vendor/pygments-main/pygments/lexers/web.py +4045 -0
  112. data/vendor/pygments-main/pygments/modeline.py +40 -0
  113. data/vendor/pygments-main/pygments/plugin.py +74 -0
  114. data/vendor/pygments-main/pygments/scanner.py +104 -0
  115. data/vendor/pygments-main/pygments/style.py +117 -0
  116. data/vendor/pygments-main/pygments/styles/__init__.py +70 -0
  117. data/vendor/pygments-main/pygments/styles/autumn.py +65 -0
  118. data/vendor/pygments-main/pygments/styles/borland.py +51 -0
  119. data/vendor/pygments-main/pygments/styles/bw.py +49 -0
  120. data/vendor/pygments-main/pygments/styles/colorful.py +81 -0
  121. data/vendor/pygments-main/pygments/styles/default.py +73 -0
  122. data/vendor/pygments-main/pygments/styles/emacs.py +72 -0
  123. data/vendor/pygments-main/pygments/styles/friendly.py +72 -0
  124. data/vendor/pygments-main/pygments/styles/fruity.py +42 -0
  125. data/vendor/pygments-main/pygments/styles/manni.py +75 -0
  126. data/vendor/pygments-main/pygments/styles/monokai.py +106 -0
  127. data/vendor/pygments-main/pygments/styles/murphy.py +80 -0
  128. data/vendor/pygments-main/pygments/styles/native.py +65 -0
  129. data/vendor/pygments-main/pygments/styles/pastie.py +75 -0
  130. data/vendor/pygments-main/pygments/styles/perldoc.py +69 -0
  131. data/vendor/pygments-main/pygments/styles/rrt.py +33 -0
  132. data/vendor/pygments-main/pygments/styles/tango.py +141 -0
  133. data/vendor/pygments-main/pygments/styles/trac.py +63 -0
  134. data/vendor/pygments-main/pygments/styles/vim.py +63 -0
  135. data/vendor/pygments-main/pygments/styles/vs.py +38 -0
  136. data/vendor/pygments-main/pygments/token.py +195 -0
  137. data/vendor/pygments-main/pygments/unistring.py +140 -0
  138. data/vendor/pygments-main/pygments/util.py +277 -0
  139. data/vendor/pygments-main/scripts/check_sources.py +242 -0
  140. data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +32 -0
  141. data/vendor/pygments-main/scripts/epydoc.css +280 -0
  142. data/vendor/pygments-main/scripts/find_codetags.py +205 -0
  143. data/vendor/pygments-main/scripts/find_error.py +170 -0
  144. data/vendor/pygments-main/scripts/get_vimkw.py +43 -0
  145. data/vendor/pygments-main/scripts/pylintrc +301 -0
  146. data/vendor/pygments-main/scripts/reindent.py +291 -0
  147. data/vendor/pygments-main/scripts/vim2pygments.py +933 -0
  148. data/vendor/pygments-main/setup.cfg +7 -0
  149. data/vendor/pygments-main/setup.py +90 -0
  150. data/vendor/pygments-main/tests/dtds/HTML4-f.dtd +37 -0
  151. data/vendor/pygments-main/tests/dtds/HTML4-s.dtd +869 -0
  152. data/vendor/pygments-main/tests/dtds/HTML4.dcl +88 -0
  153. data/vendor/pygments-main/tests/dtds/HTML4.dtd +1092 -0
  154. data/vendor/pygments-main/tests/dtds/HTML4.soc +9 -0
  155. data/vendor/pygments-main/tests/dtds/HTMLlat1.ent +195 -0
  156. data/vendor/pygments-main/tests/dtds/HTMLspec.ent +77 -0
  157. data/vendor/pygments-main/tests/dtds/HTMLsym.ent +241 -0
  158. data/vendor/pygments-main/tests/examplefiles/ANTLRv3.g +608 -0
  159. data/vendor/pygments-main/tests/examplefiles/AcidStateAdvanced.hs +209 -0
  160. data/vendor/pygments-main/tests/examplefiles/AlternatingGroup.mu +102 -0
  161. data/vendor/pygments-main/tests/examplefiles/BOM.js +1 -0
  162. data/vendor/pygments-main/tests/examplefiles/CPDictionary.j +611 -0
  163. data/vendor/pygments-main/tests/examplefiles/Config.in.cache +1973 -0
  164. data/vendor/pygments-main/tests/examplefiles/Constants.mo +158 -0
  165. data/vendor/pygments-main/tests/examplefiles/DancingSudoku.lhs +411 -0
  166. data/vendor/pygments-main/tests/examplefiles/Deflate.fs +578 -0
  167. data/vendor/pygments-main/tests/examplefiles/Errors.scala +18 -0
  168. data/vendor/pygments-main/tests/examplefiles/File.hy +174 -0
  169. data/vendor/pygments-main/tests/examplefiles/Get-CommandDefinitionHtml.ps1 +66 -0
  170. data/vendor/pygments-main/tests/examplefiles/IPDispatchC.nc +104 -0
  171. data/vendor/pygments-main/tests/examplefiles/IPDispatchP.nc +671 -0
  172. data/vendor/pygments-main/tests/examplefiles/Intro.java +1660 -0
  173. data/vendor/pygments-main/tests/examplefiles/Makefile +1131 -0
  174. data/vendor/pygments-main/tests/examplefiles/Object.st +4394 -0
  175. data/vendor/pygments-main/tests/examplefiles/OrderedMap.hx +584 -0
  176. data/vendor/pygments-main/tests/examplefiles/RoleQ.pm6 +23 -0
  177. data/vendor/pygments-main/tests/examplefiles/SmallCheck.hs +378 -0
  178. data/vendor/pygments-main/tests/examplefiles/Sorting.mod +470 -0
  179. data/vendor/pygments-main/tests/examplefiles/Sudoku.lhs +382 -0
  180. data/vendor/pygments-main/tests/examplefiles/addressbook.proto +30 -0
  181. data/vendor/pygments-main/tests/examplefiles/antlr_throws +1 -0
  182. data/vendor/pygments-main/tests/examplefiles/apache2.conf +393 -0
  183. data/vendor/pygments-main/tests/examplefiles/as3_test.as +143 -0
  184. data/vendor/pygments-main/tests/examplefiles/as3_test2.as +46 -0
  185. data/vendor/pygments-main/tests/examplefiles/as3_test3.as +3 -0
  186. data/vendor/pygments-main/tests/examplefiles/aspx-cs_example +27 -0
  187. data/vendor/pygments-main/tests/examplefiles/autoit_submit.au3 +25 -0
  188. data/vendor/pygments-main/tests/examplefiles/badcase.java +2 -0
  189. data/vendor/pygments-main/tests/examplefiles/batchfile.bat +49 -0
  190. data/vendor/pygments-main/tests/examplefiles/bigtest.nsi +308 -0
  191. data/vendor/pygments-main/tests/examplefiles/boot-9.scm +1557 -0
  192. data/vendor/pygments-main/tests/examplefiles/ca65_example +284 -0
  193. data/vendor/pygments-main/tests/examplefiles/cbmbas_example +9 -0
  194. data/vendor/pygments-main/tests/examplefiles/cells.ps +515 -0
  195. data/vendor/pygments-main/tests/examplefiles/ceval.c +2604 -0
  196. data/vendor/pygments-main/tests/examplefiles/cheetah_example.html +13 -0
  197. data/vendor/pygments-main/tests/examplefiles/classes.dylan +125 -0
  198. data/vendor/pygments-main/tests/examplefiles/condensed_ruby.rb +10 -0
  199. data/vendor/pygments-main/tests/examplefiles/coq_RelationClasses +447 -0
  200. data/vendor/pygments-main/tests/examplefiles/database.pytb +20 -0
  201. data/vendor/pygments-main/tests/examplefiles/de.MoinMoin.po +2461 -0
  202. data/vendor/pygments-main/tests/examplefiles/demo.ahk +181 -0
  203. data/vendor/pygments-main/tests/examplefiles/demo.cfm +38 -0
  204. data/vendor/pygments-main/tests/examplefiles/django_sample.html+django +68 -0
  205. data/vendor/pygments-main/tests/examplefiles/dwarf.cw +17 -0
  206. data/vendor/pygments-main/tests/examplefiles/erl_session +10 -0
  207. data/vendor/pygments-main/tests/examplefiles/escape_semicolon.clj +1 -0
  208. data/vendor/pygments-main/tests/examplefiles/evil_regex.js +48 -0
  209. data/vendor/pygments-main/tests/examplefiles/example.Rd +78 -0
  210. data/vendor/pygments-main/tests/examplefiles/example.bug +54 -0
  211. data/vendor/pygments-main/tests/examplefiles/example.c +2080 -0
  212. data/vendor/pygments-main/tests/examplefiles/example.ceylon +52 -0
  213. data/vendor/pygments-main/tests/examplefiles/example.clay +33 -0
  214. data/vendor/pygments-main/tests/examplefiles/example.cls +15 -0
  215. data/vendor/pygments-main/tests/examplefiles/example.cob +3556 -0
  216. data/vendor/pygments-main/tests/examplefiles/example.cpp +2363 -0
  217. data/vendor/pygments-main/tests/examplefiles/example.gs +106 -0
  218. data/vendor/pygments-main/tests/examplefiles/example.gst +7 -0
  219. data/vendor/pygments-main/tests/examplefiles/example.hx +142 -0
  220. data/vendor/pygments-main/tests/examplefiles/example.jag +48 -0
  221. data/vendor/pygments-main/tests/examplefiles/example.kt +47 -0
  222. data/vendor/pygments-main/tests/examplefiles/example.lagda +19 -0
  223. data/vendor/pygments-main/tests/examplefiles/example.lua +250 -0
  224. data/vendor/pygments-main/tests/examplefiles/example.monkey +152 -0
  225. data/vendor/pygments-main/tests/examplefiles/example.moo +26 -0
  226. data/vendor/pygments-main/tests/examplefiles/example.moon +629 -0
  227. data/vendor/pygments-main/tests/examplefiles/example.msc +43 -0
  228. data/vendor/pygments-main/tests/examplefiles/example.nim +1010 -0
  229. data/vendor/pygments-main/tests/examplefiles/example.ns2 +69 -0
  230. data/vendor/pygments-main/tests/examplefiles/example.p +34 -0
  231. data/vendor/pygments-main/tests/examplefiles/example.pas +2708 -0
  232. data/vendor/pygments-main/tests/examplefiles/example.prg +161 -0
  233. data/vendor/pygments-main/tests/examplefiles/example.rb +1852 -0
  234. data/vendor/pygments-main/tests/examplefiles/example.reg +19 -0
  235. data/vendor/pygments-main/tests/examplefiles/example.rexx +50 -0
  236. data/vendor/pygments-main/tests/examplefiles/example.rhtml +561 -0
  237. data/vendor/pygments-main/tests/examplefiles/example.rkt +95 -0
  238. data/vendor/pygments-main/tests/examplefiles/example.rpf +4 -0
  239. data/vendor/pygments-main/tests/examplefiles/example.sh-session +19 -0
  240. data/vendor/pygments-main/tests/examplefiles/example.shell-session +45 -0
  241. data/vendor/pygments-main/tests/examplefiles/example.sml +156 -0
  242. data/vendor/pygments-main/tests/examplefiles/example.snobol +15 -0
  243. data/vendor/pygments-main/tests/examplefiles/example.stan +108 -0
  244. data/vendor/pygments-main/tests/examplefiles/example.tea +34 -0
  245. data/vendor/pygments-main/tests/examplefiles/example.ts +28 -0
  246. data/vendor/pygments-main/tests/examplefiles/example.u +548 -0
  247. data/vendor/pygments-main/tests/examplefiles/example.weechatlog +9 -0
  248. data/vendor/pygments-main/tests/examplefiles/example.xhtml +376 -0
  249. data/vendor/pygments-main/tests/examplefiles/example.xtend +34 -0
  250. data/vendor/pygments-main/tests/examplefiles/example.yaml +302 -0
  251. data/vendor/pygments-main/tests/examplefiles/example2.aspx +29 -0
  252. data/vendor/pygments-main/tests/examplefiles/example2.msc +79 -0
  253. data/vendor/pygments-main/tests/examplefiles/example_elixir.ex +363 -0
  254. data/vendor/pygments-main/tests/examplefiles/example_file.fy +128 -0
  255. data/vendor/pygments-main/tests/examplefiles/firefox.mak +586 -0
  256. data/vendor/pygments-main/tests/examplefiles/flipflop.sv +19 -0
  257. data/vendor/pygments-main/tests/examplefiles/foo.sce +6 -0
  258. data/vendor/pygments-main/tests/examplefiles/format.ml +1213 -0
  259. data/vendor/pygments-main/tests/examplefiles/fucked_up.rb +77 -0
  260. data/vendor/pygments-main/tests/examplefiles/function.mu +1 -0
  261. data/vendor/pygments-main/tests/examplefiles/functional.rst +1472 -0
  262. data/vendor/pygments-main/tests/examplefiles/garcia-wachs.kk +133 -0
  263. data/vendor/pygments-main/tests/examplefiles/genclass.clj +510 -0
  264. data/vendor/pygments-main/tests/examplefiles/genshi_example.xml+genshi +193 -0
  265. data/vendor/pygments-main/tests/examplefiles/genshitext_example.genshitext +33 -0
  266. data/vendor/pygments-main/tests/examplefiles/glsl.frag +7 -0
  267. data/vendor/pygments-main/tests/examplefiles/glsl.vert +13 -0
  268. data/vendor/pygments-main/tests/examplefiles/grammar-test.p6 +22 -0
  269. data/vendor/pygments-main/tests/examplefiles/hello.smali +40 -0
  270. data/vendor/pygments-main/tests/examplefiles/hello.sp +9 -0
  271. data/vendor/pygments-main/tests/examplefiles/html+php_faulty.php +1 -0
  272. data/vendor/pygments-main/tests/examplefiles/http_request_example +15 -0
  273. data/vendor/pygments-main/tests/examplefiles/http_response_example +29 -0
  274. data/vendor/pygments-main/tests/examplefiles/import.hs +4 -0
  275. data/vendor/pygments-main/tests/examplefiles/inet_pton6.dg +71 -0
  276. data/vendor/pygments-main/tests/examplefiles/intro.ik +24 -0
  277. data/vendor/pygments-main/tests/examplefiles/ints.php +10 -0
  278. data/vendor/pygments-main/tests/examplefiles/intsyn.fun +675 -0
  279. data/vendor/pygments-main/tests/examplefiles/intsyn.sig +286 -0
  280. data/vendor/pygments-main/tests/examplefiles/irb_heredoc +8 -0
  281. data/vendor/pygments-main/tests/examplefiles/irc.lsp +214 -0
  282. data/vendor/pygments-main/tests/examplefiles/java.properties +16 -0
  283. data/vendor/pygments-main/tests/examplefiles/jbst_example1.jbst +28 -0
  284. data/vendor/pygments-main/tests/examplefiles/jbst_example2.jbst +45 -0
  285. data/vendor/pygments-main/tests/examplefiles/jinjadesignerdoc.rst +713 -0
  286. data/vendor/pygments-main/tests/examplefiles/json.lasso +301 -0
  287. data/vendor/pygments-main/tests/examplefiles/json.lasso9 +213 -0
  288. data/vendor/pygments-main/tests/examplefiles/lighttpd_config.conf +13 -0
  289. data/vendor/pygments-main/tests/examplefiles/linecontinuation.py +47 -0
  290. data/vendor/pygments-main/tests/examplefiles/livescript-demo.ls +41 -0
  291. data/vendor/pygments-main/tests/examplefiles/logos_example.xm +28 -0
  292. data/vendor/pygments-main/tests/examplefiles/ltmain.sh +2849 -0
  293. data/vendor/pygments-main/tests/examplefiles/main.cmake +42 -0
  294. data/vendor/pygments-main/tests/examplefiles/markdown.lsp +679 -0
  295. data/vendor/pygments-main/tests/examplefiles/matlab_noreturn +3 -0
  296. data/vendor/pygments-main/tests/examplefiles/matlab_sample +30 -0
  297. data/vendor/pygments-main/tests/examplefiles/matlabsession_sample.txt +37 -0
  298. data/vendor/pygments-main/tests/examplefiles/metagrammar.treetop +455 -0
  299. data/vendor/pygments-main/tests/examplefiles/mg_sample.pro +73 -0
  300. data/vendor/pygments-main/tests/examplefiles/minehunt.qml +112 -0
  301. data/vendor/pygments-main/tests/examplefiles/minimal.ns2 +4 -0
  302. data/vendor/pygments-main/tests/examplefiles/moin_SyntaxReference.txt +340 -0
  303. data/vendor/pygments-main/tests/examplefiles/multiline_regexes.rb +38 -0
  304. data/vendor/pygments-main/tests/examplefiles/nanomsg.intr +95 -0
  305. data/vendor/pygments-main/tests/examplefiles/nasm_aoutso.asm +96 -0
  306. data/vendor/pygments-main/tests/examplefiles/nasm_objexe.asm +30 -0
  307. data/vendor/pygments-main/tests/examplefiles/nemerle_sample.n +87 -0
  308. data/vendor/pygments-main/tests/examplefiles/nginx_nginx.conf +118 -0
  309. data/vendor/pygments-main/tests/examplefiles/numbers.c +12 -0
  310. data/vendor/pygments-main/tests/examplefiles/objc_example.m +32 -0
  311. data/vendor/pygments-main/tests/examplefiles/objc_example2.m +24 -0
  312. data/vendor/pygments-main/tests/examplefiles/perl_misc +62 -0
  313. data/vendor/pygments-main/tests/examplefiles/perl_perl5db +998 -0
  314. data/vendor/pygments-main/tests/examplefiles/perl_regex-delims +120 -0
  315. data/vendor/pygments-main/tests/examplefiles/perlfunc.1 +856 -0
  316. data/vendor/pygments-main/tests/examplefiles/phpMyAdmin.spec +163 -0
  317. data/vendor/pygments-main/tests/examplefiles/phpcomplete.vim +567 -0
  318. data/vendor/pygments-main/tests/examplefiles/pleac.in.rb +1223 -0
  319. data/vendor/pygments-main/tests/examplefiles/postgresql_test.txt +47 -0
  320. data/vendor/pygments-main/tests/examplefiles/pppoe.applescript +10 -0
  321. data/vendor/pygments-main/tests/examplefiles/psql_session.txt +122 -0
  322. data/vendor/pygments-main/tests/examplefiles/py3_test.txt +2 -0
  323. data/vendor/pygments-main/tests/examplefiles/py3tb_test.py3tb +4 -0
  324. data/vendor/pygments-main/tests/examplefiles/pycon_test.pycon +14 -0
  325. data/vendor/pygments-main/tests/examplefiles/pytb_test2.pytb +2 -0
  326. data/vendor/pygments-main/tests/examplefiles/pytb_test3.pytb +4 -0
  327. data/vendor/pygments-main/tests/examplefiles/python25-bsd.mak +234 -0
  328. data/vendor/pygments-main/tests/examplefiles/qsort.prolog +13 -0
  329. data/vendor/pygments-main/tests/examplefiles/r-console-transcript.Rout +38 -0
  330. data/vendor/pygments-main/tests/examplefiles/ragel-cpp_rlscan +280 -0
  331. data/vendor/pygments-main/tests/examplefiles/ragel-cpp_snippet +2 -0
  332. data/vendor/pygments-main/tests/examplefiles/regex.js +22 -0
  333. data/vendor/pygments-main/tests/examplefiles/reversi.lsp +427 -0
  334. data/vendor/pygments-main/tests/examplefiles/robotframework.txt +39 -0
  335. data/vendor/pygments-main/tests/examplefiles/ruby_func_def.rb +11 -0
  336. data/vendor/pygments-main/tests/examplefiles/rust_example.rs +233 -0
  337. data/vendor/pygments-main/tests/examplefiles/scilab.sci +30 -0
  338. data/vendor/pygments-main/tests/examplefiles/session.dylan-console +9 -0
  339. data/vendor/pygments-main/tests/examplefiles/sibling.prolog +19 -0
  340. data/vendor/pygments-main/tests/examplefiles/simple.md +747 -0
  341. data/vendor/pygments-main/tests/examplefiles/smarty_example.html +209 -0
  342. data/vendor/pygments-main/tests/examplefiles/source.lgt +343 -0
  343. data/vendor/pygments-main/tests/examplefiles/sources.list +62 -0
  344. data/vendor/pygments-main/tests/examplefiles/sphere.pov +18 -0
  345. data/vendor/pygments-main/tests/examplefiles/sqlite3.sqlite3-console +27 -0
  346. data/vendor/pygments-main/tests/examplefiles/squid.conf +30 -0
  347. data/vendor/pygments-main/tests/examplefiles/string.jl +1031 -0
  348. data/vendor/pygments-main/tests/examplefiles/string_delimiters.d +21 -0
  349. data/vendor/pygments-main/tests/examplefiles/stripheredoc.sh +3 -0
  350. data/vendor/pygments-main/tests/examplefiles/swig_java.swg +1329 -0
  351. data/vendor/pygments-main/tests/examplefiles/swig_std_vector.i +225 -0
  352. data/vendor/pygments-main/tests/examplefiles/test.R +153 -0
  353. data/vendor/pygments-main/tests/examplefiles/test.adb +211 -0
  354. data/vendor/pygments-main/tests/examplefiles/test.agda +102 -0
  355. data/vendor/pygments-main/tests/examplefiles/test.asy +131 -0
  356. data/vendor/pygments-main/tests/examplefiles/test.awk +121 -0
  357. data/vendor/pygments-main/tests/examplefiles/test.bas +29 -0
  358. data/vendor/pygments-main/tests/examplefiles/test.bb +95 -0
  359. data/vendor/pygments-main/tests/examplefiles/test.bmx +145 -0
  360. data/vendor/pygments-main/tests/examplefiles/test.boo +39 -0
  361. data/vendor/pygments-main/tests/examplefiles/test.bro +250 -0
  362. data/vendor/pygments-main/tests/examplefiles/test.cs +374 -0
  363. data/vendor/pygments-main/tests/examplefiles/test.css +54 -0
  364. data/vendor/pygments-main/tests/examplefiles/test.cu +36 -0
  365. data/vendor/pygments-main/tests/examplefiles/test.d +135 -0
  366. data/vendor/pygments-main/tests/examplefiles/test.dart +23 -0
  367. data/vendor/pygments-main/tests/examplefiles/test.dtd +89 -0
  368. data/vendor/pygments-main/tests/examplefiles/test.ebnf +31 -0
  369. data/vendor/pygments-main/tests/examplefiles/test.ec +605 -0
  370. data/vendor/pygments-main/tests/examplefiles/test.ecl +58 -0
  371. data/vendor/pygments-main/tests/examplefiles/test.eh +315 -0
  372. data/vendor/pygments-main/tests/examplefiles/test.erl +169 -0
  373. data/vendor/pygments-main/tests/examplefiles/test.evoque +33 -0
  374. data/vendor/pygments-main/tests/examplefiles/test.fan +818 -0
  375. data/vendor/pygments-main/tests/examplefiles/test.flx +57 -0
  376. data/vendor/pygments-main/tests/examplefiles/test.gdc +13 -0
  377. data/vendor/pygments-main/tests/examplefiles/test.groovy +97 -0
  378. data/vendor/pygments-main/tests/examplefiles/test.html +339 -0
  379. data/vendor/pygments-main/tests/examplefiles/test.ini +10 -0
  380. data/vendor/pygments-main/tests/examplefiles/test.java +653 -0
  381. data/vendor/pygments-main/tests/examplefiles/test.jsp +24 -0
  382. data/vendor/pygments-main/tests/examplefiles/test.maql +45 -0
  383. data/vendor/pygments-main/tests/examplefiles/test.mod +374 -0
  384. data/vendor/pygments-main/tests/examplefiles/test.moo +51 -0
  385. data/vendor/pygments-main/tests/examplefiles/test.myt +166 -0
  386. data/vendor/pygments-main/tests/examplefiles/test.nim +93 -0
  387. data/vendor/pygments-main/tests/examplefiles/test.opa +10 -0
  388. data/vendor/pygments-main/tests/examplefiles/test.p6 +252 -0
  389. data/vendor/pygments-main/tests/examplefiles/test.pas +743 -0
  390. data/vendor/pygments-main/tests/examplefiles/test.php +505 -0
  391. data/vendor/pygments-main/tests/examplefiles/test.plot +333 -0
  392. data/vendor/pygments-main/tests/examplefiles/test.ps1 +108 -0
  393. data/vendor/pygments-main/tests/examplefiles/test.pypylog +1839 -0
  394. data/vendor/pygments-main/tests/examplefiles/test.r3 +94 -0
  395. data/vendor/pygments-main/tests/examplefiles/test.rb +177 -0
  396. data/vendor/pygments-main/tests/examplefiles/test.rhtml +43 -0
  397. data/vendor/pygments-main/tests/examplefiles/test.scaml +8 -0
  398. data/vendor/pygments-main/tests/examplefiles/test.ssp +12 -0
  399. data/vendor/pygments-main/tests/examplefiles/test.tcsh +830 -0
  400. data/vendor/pygments-main/tests/examplefiles/test.vb +407 -0
  401. data/vendor/pygments-main/tests/examplefiles/test.vhdl +161 -0
  402. data/vendor/pygments-main/tests/examplefiles/test.xqy +138 -0
  403. data/vendor/pygments-main/tests/examplefiles/test.xsl +23 -0
  404. data/vendor/pygments-main/tests/examplefiles/test2.pypylog +120 -0
  405. data/vendor/pygments-main/tests/examplefiles/truncated.pytb +15 -0
  406. data/vendor/pygments-main/tests/examplefiles/type.lisp +1218 -0
  407. data/vendor/pygments-main/tests/examplefiles/underscore.coffee +603 -0
  408. data/vendor/pygments-main/tests/examplefiles/unicode.applescript +5 -0
  409. data/vendor/pygments-main/tests/examplefiles/unicodedoc.py +11 -0
  410. data/vendor/pygments-main/tests/examplefiles/unix-io.lid +37 -0
  411. data/vendor/pygments-main/tests/examplefiles/webkit-transition.css +3 -0
  412. data/vendor/pygments-main/tests/examplefiles/while.pov +13 -0
  413. data/vendor/pygments-main/tests/examplefiles/wiki.factor +384 -0
  414. data/vendor/pygments-main/tests/examplefiles/xml_example +1897 -0
  415. data/vendor/pygments-main/tests/examplefiles/zmlrpc.f90 +798 -0
  416. data/vendor/pygments-main/tests/old_run.py +138 -0
  417. data/vendor/pygments-main/tests/run.py +49 -0
  418. data/vendor/pygments-main/tests/support.py +15 -0
  419. data/vendor/pygments-main/tests/support/tags +36 -0
  420. data/vendor/pygments-main/tests/test_basic_api.py +295 -0
  421. data/vendor/pygments-main/tests/test_clexer.py +31 -0
  422. data/vendor/pygments-main/tests/test_cmdline.py +105 -0
  423. data/vendor/pygments-main/tests/test_examplefiles.py +99 -0
  424. data/vendor/pygments-main/tests/test_html_formatter.py +178 -0
  425. data/vendor/pygments-main/tests/test_latex_formatter.py +55 -0
  426. data/vendor/pygments-main/tests/test_lexers_other.py +68 -0
  427. data/vendor/pygments-main/tests/test_perllexer.py +137 -0
  428. data/vendor/pygments-main/tests/test_regexlexer.py +47 -0
  429. data/vendor/pygments-main/tests/test_token.py +46 -0
  430. data/vendor/pygments-main/tests/test_using_api.py +40 -0
  431. data/vendor/pygments-main/tests/test_util.py +135 -0
  432. data/vendor/simplejson/.gitignore +10 -0
  433. data/vendor/simplejson/.travis.yml +5 -0
  434. data/vendor/simplejson/CHANGES.txt +291 -0
  435. data/vendor/simplejson/LICENSE.txt +19 -0
  436. data/vendor/simplejson/MANIFEST.in +5 -0
  437. data/vendor/simplejson/README.rst +19 -0
  438. data/vendor/simplejson/conf.py +179 -0
  439. data/vendor/simplejson/index.rst +628 -0
  440. data/vendor/simplejson/scripts/make_docs.py +18 -0
  441. data/vendor/simplejson/setup.py +104 -0
  442. data/vendor/simplejson/simplejson/__init__.py +510 -0
  443. data/vendor/simplejson/simplejson/_speedups.c +2745 -0
  444. data/vendor/simplejson/simplejson/decoder.py +425 -0
  445. data/vendor/simplejson/simplejson/encoder.py +567 -0
  446. data/vendor/simplejson/simplejson/ordered_dict.py +119 -0
  447. data/vendor/simplejson/simplejson/scanner.py +77 -0
  448. data/vendor/simplejson/simplejson/tests/__init__.py +67 -0
  449. data/vendor/simplejson/simplejson/tests/test_bigint_as_string.py +55 -0
  450. data/vendor/simplejson/simplejson/tests/test_check_circular.py +30 -0
  451. data/vendor/simplejson/simplejson/tests/test_decimal.py +66 -0
  452. data/vendor/simplejson/simplejson/tests/test_decode.py +83 -0
  453. data/vendor/simplejson/simplejson/tests/test_default.py +9 -0
  454. data/vendor/simplejson/simplejson/tests/test_dump.py +67 -0
  455. data/vendor/simplejson/simplejson/tests/test_encode_basestring_ascii.py +46 -0
  456. data/vendor/simplejson/simplejson/tests/test_encode_for_html.py +32 -0
  457. data/vendor/simplejson/simplejson/tests/test_errors.py +34 -0
  458. data/vendor/simplejson/simplejson/tests/test_fail.py +91 -0
  459. data/vendor/simplejson/simplejson/tests/test_float.py +19 -0
  460. data/vendor/simplejson/simplejson/tests/test_indent.py +86 -0
  461. data/vendor/simplejson/simplejson/tests/test_item_sort_key.py +20 -0
  462. data/vendor/simplejson/simplejson/tests/test_namedtuple.py +121 -0
  463. data/vendor/simplejson/simplejson/tests/test_pass1.py +76 -0
  464. data/vendor/simplejson/simplejson/tests/test_pass2.py +14 -0
  465. data/vendor/simplejson/simplejson/tests/test_pass3.py +20 -0
  466. data/vendor/simplejson/simplejson/tests/test_recursion.py +67 -0
  467. data/vendor/simplejson/simplejson/tests/test_scanstring.py +117 -0
  468. data/vendor/simplejson/simplejson/tests/test_separators.py +42 -0
  469. data/vendor/simplejson/simplejson/tests/test_speedups.py +20 -0
  470. data/vendor/simplejson/simplejson/tests/test_tuple.py +49 -0
  471. data/vendor/simplejson/simplejson/tests/test_unicode.py +109 -0
  472. data/vendor/simplejson/simplejson/tool.py +39 -0
  473. metadata +557 -0
@@ -0,0 +1,158 @@
1
+ within Modelica;
2
+ package Constants
3
+ "Library of mathematical constants and constants of nature (e.g., pi, eps, R, sigma)"
4
+
5
+ import SI = Modelica.SIunits;
6
+ import NonSI = Modelica.SIunits.Conversions.NonSIunits;
7
+
8
+ extends Modelica.Icons.Library2;
9
+
10
+ // Mathematical constants
11
+ final constant Real e=Modelica.Math.exp(1.0);
12
+ final constant Real pi=2*Modelica.Math.asin(1.0); // 3.14159265358979;
13
+ final constant Real D2R=pi/180 "Degree to Radian";
14
+ final constant Real R2D=180/pi "Radian to Degree";
15
+
16
+ // Machine dependent constants
17
+ // (the definition is a temporary fix since not adapted to the
18
+ // machine where the Modelica translator is running)
19
+ final constant Real eps=1.e-15 "Biggest number such that 1.0 + eps = 1.0";
20
+ final constant Real small=1.e-60
21
+ "Smallest number such that small and -small are representable on the machine";
22
+ final constant Real inf=1.e+60
23
+ "Biggest Real number such that inf and -inf are representable on the machine";
24
+ final constant Integer Integer_inf=2147483647
25
+ "Biggest Integer number such that Integer_inf and -Integer_inf are representable on the machine";
26
+
27
+ // Constants of nature
28
+ // (name, value, description from http://physics.nist.gov/cuu/Constants/)
29
+ final constant SI.Velocity c=299792458 "Speed of light in vacuum";
30
+ final constant SI.Acceleration g_n=9.80665
31
+ "Standard acceleration of gravity on earth";
32
+ final constant Real G(final unit="m3/(kg.s2)") = 6.6742e-11
33
+ "Newtonian constant of gravitation";
34
+ final constant SI.FaradayConstant F = 9.64853399e4 "Faraday constant, C/mol";
35
+ final constant Real h(final unit="J.s") = 6.6260693e-34 "Planck constant";
36
+ final constant Real k(final unit="J/K") = 1.3806505e-23 "Boltzmann constant";
37
+ final constant Real R(final unit="J/(mol.K)") = 8.314472 "Molar gas constant";
38
+ final constant Real sigma(final unit="W/(m2.K4)") = 5.670400e-8
39
+ "Stefan-Boltzmann constant";
40
+ final constant Real N_A(final unit="1/mol") = 6.0221415e23
41
+ "Avogadro constant";
42
+ final constant Real mue_0(final unit="N/A2") = 4*pi*1.e-7 "Magnetic constant";
43
+ final constant Real epsilon_0(final unit="F/m") = 1/(mue_0*c*c)
44
+ "Electric constant";
45
+ final constant NonSI.Temperature_degC T_zero=-273.15
46
+ "Absolute zero temperature";
47
+
48
+ annotation (
49
+ Documentation(info="<html>
50
+ <p>
51
+ This package provides often needed constants from mathematics, machine
52
+ dependent constants and constants from nature. The latter constants
53
+ (name, value, description) are from the following source:
54
+ </p>
55
+
56
+ <dl>
57
+ <dt>Peter J. Mohr and Barry N. Taylor (1999):</dt>
58
+ <dd><b>CODATA Recommended Values of the Fundamental Physical Constants: 1998</b>.
59
+ Journal of Physical and Chemical Reference Data, Vol. 28, No. 6, 1999 and
60
+ Reviews of Modern Physics, Vol. 72, No. 2, 2000. See also <a href=
61
+ \"http://physics.nist.gov/cuu/Constants/\">http://physics.nist.gov/cuu/Constants/</a></dd>
62
+ </dl>
63
+
64
+ <p>CODATA is the Committee on Data for Science and Technology.</p>
65
+
66
+ <dl>
67
+ <dt><b>Main Author:</b></dt>
68
+ <dd><a href=\"http://www.robotic.dlr.de/Martin.Otter/\">Martin Otter</a><br>
69
+ Deutsches Zentrum f&uuml;r Luft und Raumfahrt e. V. (DLR)<br>
70
+ Oberpfaffenhofen<br>
71
+ Postfach 11 16<br>
72
+ D-82230 We&szlig;ling<br>
73
+ email: <a href=\"mailto:Martin.Otter@dlr.de\">Martin.Otter@dlr.de</a></dd>
74
+ </dl>
75
+
76
+
77
+ <p>
78
+ Copyright &copy; 1998-2009, Modelica Association and DLR.
79
+ </p>
80
+ <p>
81
+ <i>This Modelica package is <b>free</b> software; it can be redistributed and/or modified
82
+ under the terms of the <b>Modelica license</b>, see the license conditions
83
+ and the accompanying <b>disclaimer</b>
84
+ <a href=\"Modelica://Modelica.UsersGuide.ModelicaLicense\">here</a>.</i>
85
+ </p><br>
86
+ </html>
87
+ ", revisions="<html>
88
+ <ul>
89
+ <li><i>Nov 8, 2004</i>
90
+ by <a href=\"http://www.robotic.dlr.de/Christian.Schweiger/\">Christian Schweiger</a>:<br>
91
+ Constants updated according to 2002 CODATA values.</li>
92
+ <li><i>Dec 9, 1999</i>
93
+ by <a href=\"http://www.robotic.dlr.de/Martin.Otter/\">Martin Otter</a>:<br>
94
+ Constants updated according to 1998 CODATA values. Using names, values
95
+ and description text from this source. Included magnetic and
96
+ electric constant.</li>
97
+ <li><i>Sep 18, 1999</i>
98
+ by <a href=\"http://www.robotic.dlr.de/Martin.Otter/\">Martin Otter</a>:<br>
99
+ Constants eps, inf, small introduced.</li>
100
+ <li><i>Nov 15, 1997</i>
101
+ by <a href=\"http://www.robotic.dlr.de/Martin.Otter/\">Martin Otter</a>:<br>
102
+ Realized.</li>
103
+ </ul>
104
+ </html>"),
105
+ Invisible=true,
106
+ Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{100,
107
+ 100}}), graphics={
108
+ Line(
109
+ points={{-34,-38},{12,-38}},
110
+ color={0,0,0},
111
+ thickness=0.5),
112
+ Line(
113
+ points={{-20,-38},{-24,-48},{-28,-56},{-34,-64}},
114
+ color={0,0,0},
115
+ thickness=0.5),
116
+ Line(
117
+ points={{-2,-38},{2,-46},{8,-56},{14,-64}},
118
+ color={0,0,0},
119
+ thickness=0.5)}),
120
+ Diagram(graphics={
121
+ Rectangle(
122
+ extent={{200,162},{380,312}},
123
+ fillColor={235,235,235},
124
+ fillPattern=FillPattern.Solid,
125
+ lineColor={0,0,255}),
126
+ Polygon(
127
+ points={{200,312},{220,332},{400,332},{380,312},{200,312}},
128
+ fillColor={235,235,235},
129
+ fillPattern=FillPattern.Solid,
130
+ lineColor={0,0,255}),
131
+ Polygon(
132
+ points={{400,332},{400,182},{380,162},{380,312},{400,332}},
133
+ fillColor={235,235,235},
134
+ fillPattern=FillPattern.Solid,
135
+ lineColor={0,0,255}),
136
+ Text(
137
+ extent={{210,302},{370,272}},
138
+ lineColor={160,160,164},
139
+ fillColor={0,0,0},
140
+ fillPattern=FillPattern.Solid,
141
+ textString="Library"),
142
+ Line(
143
+ points={{266,224},{312,224}},
144
+ color={0,0,0},
145
+ thickness=1),
146
+ Line(
147
+ points={{280,224},{276,214},{272,206},{266,198}},
148
+ color={0,0,0},
149
+ thickness=1),
150
+ Line(
151
+ points={{298,224},{302,216},{308,206},{314,198}},
152
+ color={0,0,0},
153
+ thickness=1),
154
+ Text(
155
+ extent={{152,412},{458,334}},
156
+ lineColor={255,0,0},
157
+ textString="Modelica.Constants")}));
158
+ end Constants;
@@ -0,0 +1,411 @@
1
+ A Sukodku solver by Chris Kuklewicz (haskell (at) list (dot) mightyreason (dot) com)
2
+ The usual BSD license applies, copyright 2006.
3
+ Uploaded to HaskellWiki as DancingSudoku.lhs
4
+
5
+ I compile on a powerbook G4 (Mac OS X, ghc 6.4.2) using
6
+ ghc -optc-O3 -funbox-strict-fields -O2 --make -fglasgow-exts
7
+
8
+ This is a translation of Knuth's GDANCE from dance.w / dance.c
9
+
10
+ http://www-cs-faculty.stanford.edu/~uno/preprints.html
11
+ http://www-cs-faculty.stanford.edu/~uno/programs.html
12
+ http://en.wikipedia.org/wiki/Dancing_Links
13
+
14
+ I have an older verison that uses lazy ST to return the solutions on
15
+ demand, which was more useful when trying to generate new puzzles to
16
+ solve.
17
+
18
+ > module Main where
19
+
20
+ > import Prelude hiding (read)
21
+ > import Control.Monad
22
+ > import Control.Monad.Fix
23
+ > import Data.Array.IArray
24
+ > import Control.Monad.ST.Strict
25
+ > import Data.STRef.Strict
26
+ > import Data.Char(intToDigit,digitToInt)
27
+ > import Data.List(unfoldr,intersperse,inits)
28
+
29
+ > new = newSTRef
30
+ > {-# INLINE new #-}
31
+ > read = readSTRef
32
+ > {-# INLINE read #-}
33
+ > write = writeSTRef
34
+ > {-# INLINE write #-}
35
+ > modify = modifySTRef
36
+ > {-# INLINE modify #-}
37
+
38
+ Data types to prevent mixing different index and value types
39
+
40
+ > type A = Int
41
+ > newtype R = R A deriving (Show,Read,Eq,Ord,Ix,Enum)
42
+ > newtype C = C A deriving (Show,Read,Eq,Ord,Ix,Enum)
43
+ > newtype V = V A deriving (Show,Read,Eq,Ord,Ix,Enum)
44
+ > newtype B = B A deriving (Show,Read,Eq,Ord,Ix,Enum)
45
+
46
+ Sudoku also has block constraints, so we want to look up a block
47
+ index in an array:
48
+
49
+ > lookupBlock :: Array (R,C) B
50
+ > lookupBlock = listArray bb [ toBlock ij | ij <- range bb ]
51
+ > where ra :: Array Int B
52
+ > ra = listArray (0,pred (rangeSize b)) [B (fst b) .. B (snd b)]
53
+ > toBlock (R i,C j) = ra ! ( (div (index b j) 3)+3*(div (index b i) 3) )
54
+
55
+ The values for an unknown location is 'u'.
56
+ The bound and range are given by b and rng. And bb is a 2D bound.
57
+
58
+ > u = V 0 -- unknown value
59
+ > b :: (Int,Int)
60
+ > b = (1,9) -- min and max bounds
61
+ > rng = enumFromTo (fst b) (snd b) -- list from '1' to '9'
62
+ > bb = ((R (fst b),C (fst b)),(R (snd b),C (snd b)))
63
+
64
+ A Spec can be turned into a parsed array with ease:
65
+
66
+ > type Hint = ((R,C),V)
67
+ > newtype Spec = Spec [Hint] deriving (Eq,Show)
68
+
69
+ > type PA = Array (R,C) V
70
+
71
+ > parse :: Spec -> PA
72
+ > parse (Spec parsed) = let acc old new = new
73
+ > in accumArray acc u bb parsed
74
+
75
+ The dancing links algorithm depends on a sparse 2D node structure.
76
+ Each column represents a constraint. Each row represents a Hint.
77
+ The number of possible hints is 9x9x9 = 271
78
+
79
+ > type (MutInt st) = (STRef st) Int
80
+
81
+ The pointer types:
82
+
83
+ > type (NodePtr st) = (STRef st) (Node st)
84
+ > type (HeadPtr st) = (STRef st) (Head st)
85
+
86
+ The structures is a 2D grid of nodes, with Col's on the top of
87
+ columns and a sparse collection of nodes. Note that topNode of Head
88
+ is not a strict field. This is because the topNode needs to refer to
89
+ the Head, and they are both created monadically.
90
+
91
+ > type HeadName = (Int,Int,Int) -- see below for meaning
92
+
93
+ > data Head st = Head {headName:: !HeadName
94
+ > ,topNode:: (Node st) -- header node for this column
95
+ > ,len:: !(MutInt st) -- number of nodes below this head
96
+ > ,next,prev:: !(HeadPtr st) -- doubly-linked list
97
+ > }
98
+
99
+ > data Node st = Node {getHint:: !Hint
100
+ > ,getHead:: !(Head st) -- head for the column this node is in
101
+ > ,up,down,left,right :: !(NodePtr st) -- two doubly-linked lists
102
+ > }
103
+
104
+ > instance Eq (Head st) where
105
+ > a == b = headName a == headName b
106
+
107
+ > instance Eq (Node st) where
108
+ > a == b = up a == up b
109
+
110
+ To initialize the structures is a bit tedious. Knuth's code reads in
111
+ the problem description from a data file and builds the structure
112
+ based on that. Rather than short strings, I will use HeadName as the
113
+ identifier.
114
+
115
+ The columns are (0,4,5) for nodes that put some value in Row 4 Col 5
116
+ (1,2,3) for nodes that put Val 3 in Row 2 and some column
117
+ (2,7,4) for nodes that put Val 4 in Col 7 and some row
118
+ (3,1,8) for nodes that put Val 8 in some (row,column) in Block 1
119
+
120
+ The first head is (0,0,0) which is the root. The non-root head data
121
+ will be put in an array with the HeadName as an index.
122
+
123
+ > headNames :: [HeadName]
124
+ > headNames = let names = [0,1,2,3]
125
+ > in (0,0,0):[ (l,i,j) | l<-names,i<-rng,j<-rng]
126
+
127
+ A "row" of left-right linked nodes is a move. It is defined by a
128
+ list of head names.
129
+
130
+ > type Move = [(Hint,HeadName)]
131
+
132
+ Initial hints are enforced by making them the only legal move for
133
+ that location. Blank entries with value 'u = V 0' have a move for
134
+ all possible values [V 1..V 9].
135
+
136
+ > parseSpec :: Spec -> [Move]
137
+ > parseSpec spec =
138
+ > let rowsFrom :: Hint -> [Move]
139
+ > rowsFrom (rc@(R r,C c),mv@(V v')) =
140
+ > if mv == u then [ rsyms v | v <- rng ]
141
+ > else [ rsyms v' ]
142
+ > where (B b) = lookupBlock ! rc
143
+ > rsyms :: A -> Move
144
+ > rsyms v = map ( (,) (rc,V v) ) [(0,r,c),(1,r,v),(2,c,v),(3,b,v)]
145
+ > in concatMap rowsFrom (assocs (parse spec))
146
+
147
+ mkDList creates doubly linked lists using a monadic smart
148
+ constructor and the recursive "mdo" notation as documented at
149
+ http://www.haskell.org/ghc/docs/latest/html/users_guide/syntax-extns.html#mdo-notation
150
+ http://www.cse.ogi.edu/PacSoft/projects/rmb/
151
+
152
+ For more fun with this, see the wiki page at
153
+ http://haskell.org/hawiki/TyingTheKnot
154
+
155
+ > mkDList :: (MonadFix m) => (b -> a -> b -> m b) -> [a] -> m b
156
+ > mkDList _ [] = error "must have at least one element"
157
+ > mkDList mkNode xs = mdo (first,last) <- go last xs first
158
+ > return first
159
+ > where go prev [] next = return (next,prev)
160
+ > go prev (x:xs) next = mdo this <- mkNode prev x rest
161
+ > (rest,last) <- go this xs next
162
+ > return (this,last)
163
+
164
+ toSimple takes a function and a header node and iterates (read . function)
165
+ until the header is reached again, but does not return the header
166
+ itself.
167
+
168
+ > toSingle step header = loop =<< (read . step) header
169
+ > where loop y = if header/=y then liftM (y:) (read (step y) >>= loop)
170
+ > else return []
171
+ >
172
+
173
+ forEach is an optimization of (toSimple step header >>= mapM_ act)
174
+
175
+ > forEach step header act = loop =<< (read . step) header
176
+ > where loop y = if header/=y then (act y >> (read (step y)) >>= loop)
177
+ > else return ()
178
+
179
+ Now make the root node and all the head nodes. This also exploits mdo:
180
+
181
+ > makeHeads :: [HeadName] -> (ST st) (Head st)
182
+ > makeHeads names = mkDList makeHead names
183
+ > where makeHead before name after = mdo
184
+ > ~newTopNode <- liftM4 (Node ((R 0,C 0),V 0) newHead) (new newTopNode) (new newTopNode)
185
+ > (new newTopNode) (new newTopNode)
186
+ > newHead <- liftM3 (Head name newTopNode)
187
+ > (new 0) (new after) (new before)
188
+ > return newHead
189
+
190
+ The Head nodes will be places in an array for easy lookup while building moves:
191
+
192
+ > type HArray st = Array HeadName (Head st)
193
+ > hBounds = ((0,1,1),(3,9,9))
194
+ > type Root st = (Head st,HArray st)
195
+
196
+ The addMove function creates the (four) nodes that represent a move and adds
197
+ them to the data structure. The HArray in Root makes for a fast
198
+ lookup of the Head data.
199
+
200
+ > addMove :: forall st. (Root st) -> Move -> (ST st) (Node st)
201
+ > addMove (_,ha) move = mkDList addNode move
202
+ > where addNode :: (Node st) -> (Hint,HeadName) -> (Node st) -> (ST st) (Node st)
203
+ > addNode before (hint,name) after = do
204
+ > let head = ha ! name
205
+ > let below = topNode head
206
+ > above <- read (up below)
207
+ > newNode <- liftM4 (Node hint head) (new above) (new below)
208
+ > (new before) (new after)
209
+ > write (down above) newNode
210
+ > write (up below) newNode
211
+ > modify (len head) succ
212
+ > l <- read (len head)
213
+ > seq l (return newNode)
214
+
215
+ Create the column headers, including the fast lookup array. These
216
+ will be resused between puzzles.
217
+
218
+ > initHA :: (ST st) (Root st)
219
+ > initHA = do
220
+ > root <- makeHeads headNames
221
+ > heads <- toSingle next root
222
+ > let ha = array hBounds (zip (map headName heads) heads)
223
+ > return (root,ha)
224
+
225
+ Take the Root from initHA and a puzzle Spec and fill in all the Nodes.
226
+
227
+ > initRoot :: (Root st) -> Spec -> (ST st) ()
228
+ > initRoot root spec = do
229
+ > let moves = parseSpec spec
230
+ > mapM_ (addMove root) moves
231
+
232
+ Return the column headers to their condition after initHA
233
+
234
+ > resetRoot :: (Root st) -> (ST st) ()
235
+ > resetRoot (root,ha) = do
236
+ > let heads@(first:_) = elems ha
237
+ > let resetHead head = do
238
+ > write (len head) 0
239
+ > let node = topNode head
240
+ > write (down node) node
241
+ > write (up node) node
242
+ > reset (last:[]) = do
243
+ > write (prev root) last
244
+ > write (next root) first
245
+ > reset (before:xs@(head:[])) = do
246
+ > resetHead head
247
+ > write (prev head) before
248
+ > write (next head) root
249
+ > reset xs
250
+ > reset (before:xs@(head:after:_)) = do
251
+ > resetHead head
252
+ > write (prev head) before
253
+ > write (next head) after
254
+ > reset xs
255
+ > reset (root:heads)
256
+
257
+ getBest iterates over the unmet constraints (i.e. the Head that are
258
+ reachable from root). It locates the one with the lowest number of
259
+ possible moves that will solve it, aborting early if it finds 0 or 1
260
+ moves.
261
+
262
+ > getBest :: (Head st) -> (ST st) (Maybe (Head st))
263
+ > getBest root = do
264
+ > first <- read (next root)
265
+ > if first == root then return Nothing
266
+ > else do
267
+ > let findMin m best head | head == root = return (Just best)
268
+ > | otherwise = do
269
+ > l <- read (len head)
270
+ > if l <= 1 then return (Just head)
271
+ > else if l < m then findMin l head =<< read (next head)
272
+ > else findMin l best =<< read (next head)
273
+ > findMin 10 first first
274
+
275
+ The unlink and relink operations are from where Knuth got the name
276
+ "dancing links". So long as "a" does not change in between, the
277
+ relink call will undo the unlink call. Similarly, the unconver will
278
+ undo the changes of cover and unconverOthers will undo coverOthers.
279
+
280
+ > unlink :: (a->STRef st a) -> (a->STRef st a) -> a -> (ST st) ()
281
+ > unlink prev next a = do
282
+ > before <- read (prev a)
283
+ > after <- read (next a)
284
+ > write (next before) after
285
+ > write (prev after) before
286
+
287
+ > relink :: (a->STRef st a) -> (a->STRef st a) -> a -> (ST st) ()
288
+ > relink prev next a = do
289
+ > before <- read (prev a)
290
+ > after <- read (next a)
291
+ > write (next before) a
292
+ > write (prev after) a
293
+
294
+ > cover :: (Head st) -> (ST st) ()
295
+ > cover head = do
296
+ > unlink prev next head
297
+ > let eachDown rr = forEach right rr eachRight
298
+ > eachRight nn = do
299
+ > unlink up down nn
300
+ > modify (len $ getHead nn) pred
301
+ > forEach down (topNode head) eachDown
302
+
303
+ > uncover :: (Head st) -> (ST st) ()
304
+ > uncover head = do
305
+ > let eachUp rr = forEach left rr eachLeft
306
+ > eachLeft nn = do
307
+ > modify (len $ getHead nn) succ
308
+ > relink up down nn
309
+ > forEach up (topNode head) eachUp
310
+ > relink prev next head
311
+
312
+ > coverOthers :: (Node st) -> (ST st) ()
313
+ > coverOthers node = forEach right node (cover . getHead)
314
+
315
+ > uncoverOthers :: (Node st) -> (ST st) ()
316
+ > uncoverOthers node = forEach left node (uncover . getHead)
317
+
318
+ A helper function for gdance:
319
+
320
+ > choicesToSpec :: [(Node st)] -> Spec
321
+ > choicesToSpec = Spec . (map getHint)
322
+
323
+ This is the heart of the algorithm. I have altered it to return only
324
+ the first solution, or produce an error if none is found.
325
+
326
+ Knuth used several goto links to do what is done below with tail
327
+ recursion.
328
+
329
+ > gdance :: (Head st) -> (ST st) Spec -- [Spec]
330
+ > gdance root =
331
+ > let
332
+ > forward choices = do
333
+ > maybeHead <- getBest root
334
+ > case maybeHead of
335
+ > Nothing -> if null choices
336
+ > then error "No choices in forward" -- return [] -- for [Spec]
337
+ > else do -- nextSols <- recover choices -- for [Spec]
338
+ > return $ (choicesToSpec choices) -- :nextSols -- for [Spec]
339
+ > Just head -> do cover head
340
+ > startRow <- readSTRef (down (topNode head))
341
+ > advance (startRow:choices)
342
+ >
343
+ > advance choices@(newRow:oldChoices) = do
344
+ > let endOfRows = topNode (getHead newRow)
345
+ > if (newRow == endOfRows)
346
+ > then do uncover (getHead newRow)
347
+ > if (null oldChoices)
348
+ > then error "No choices in advance" -- return [] -- for [Spec]
349
+ > else recover oldChoices
350
+ > else do coverOthers newRow
351
+ > forward choices
352
+ >
353
+ > recover (oldRow:oldChoices) = do
354
+ > uncoverOthers oldRow
355
+ > newRow <- readSTRef (down oldRow)
356
+ > advance (newRow:oldChoices)
357
+ >
358
+ > in forward []
359
+
360
+
361
+ Convert a text board into a Spec
362
+
363
+ > parseBoard :: String -> Spec
364
+ > parseBoard s = Spec (zip rcs vs'check)
365
+ > where rcs :: [(R,C)]
366
+ > rcs = [ (R r,C c) | r <- rng, c <- rng ]
367
+ > isUnset c = (c=='.') || (c==' ') || (c=='0')
368
+ > isHint c = ('1'<=c) && (c<='9')
369
+ > cs = take 81 $ filter (\c -> isUnset c || isHint c) s
370
+ > vs :: [V]
371
+ > vs = map (\c -> if isUnset c then u else (V $ digitToInt c)) cs
372
+ > vs'check = if 81==length vs then vs else error ("parse of board failed\n"++s)
373
+
374
+ This is quite useful as a utility function which partitions the list into groups of n elements.
375
+ Used by showSpec.
376
+
377
+ > groupTake :: Int->[a]->[[a]]
378
+ > groupTake n b = unfoldr foo b
379
+ > where foo [] = Nothing
380
+ > foo b = Just (splitAt n b)
381
+
382
+ Make a nice 2D ascii board from the Spec (not used at the moment)
383
+
384
+ > showSpec :: Spec -> String
385
+ > showSpec spec = let pa = parse spec
386
+ > g = groupTake 9 (map (\(V v) -> if v == 0 then '.' else intToDigit v) $ elems pa)
387
+ > addV line = concat $ intersperse "|" (groupTake 3 line)
388
+ > addH list = concat $ intersperse ["---+---+---"] (groupTake 3 list)
389
+ > in unlines $ addH (map addV g)
390
+
391
+ One line display
392
+
393
+ > showCompact spec = map (\(V v) -> intToDigit v) (elems (parse spec))
394
+
395
+ The main routine is designed to handle the input from http://www.csse.uwa.edu.au/~gordon/sudoku17
396
+
397
+ > main = do
398
+ > all <- getContents
399
+ > let puzzles = zip [1..] (map parseBoard (lines all))
400
+ > root <- stToIO initHA
401
+ > let act :: (Int,Spec) -> IO ()
402
+ > act (i,spec) = do
403
+ > answer <- stToIO (do initRoot root spec
404
+ > answer <- gdance (fst root)
405
+ > resetRoot root
406
+ > return answer)
407
+ > print (i,showCompact answer)
408
+ > mapM_ act puzzles
409
+
410
+ > inits' xn@(_:_) = zipWith take [0..] $ map (const xn) $ undefined:xn
411
+ > inits' _ = undefined