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,13 @@
1
+ partition([], _, [], []).
2
+ partition([X|Xs], Pivot, Smalls, Bigs) :-
3
+ ( X @< Pivot ->
4
+ Smalls = [X|Rest],
5
+ partition(Xs, Pivot, Rest, Bigs)
6
+ ; Bigs = [X|Rest],
7
+ partition(Xs, Pivot, Smalls, Rest)
8
+ ).
9
+
10
+ quicksort([]) --> [].
11
+ quicksort([X|Xs]) -->
12
+ { partition(Xs, X, Smaller, Bigger) },
13
+ quicksort(Smaller), [X], quicksort(Bigger).
@@ -0,0 +1,38 @@
1
+
2
+ R version 2.9.2 (2009-08-24)
3
+ Copyright (C) 2009 The R Foundation for Statistical Computing
4
+ ISBN 3-900051-07-0
5
+
6
+ R is free software and comes with ABSOLUTELY NO WARRANTY.
7
+ You are welcome to redistribute it under certain conditions.
8
+ Type 'license()' or 'licence()' for distribution details.
9
+
10
+ Natural language support but running in an English locale
11
+
12
+ R is a collaborative project with many contributors.
13
+ Type 'contributors()' for more information and
14
+ 'citation()' on how to cite R or R packages in publications.
15
+
16
+ Type 'demo()' for some demos, 'help()' for on-line help, or
17
+ 'help.start()' for an HTML browser interface to help.
18
+ Type 'q()' to quit R.
19
+
20
+ [R.app GUI 1.29 (5464) i386-apple-darwin8.11.1]
21
+
22
+ > x <- function {}
23
+ Error: syntax error
24
+ > x <- function() {}
25
+ > x <- function() {
26
+ + cat("hello")
27
+ + cat("world")
28
+ + }
29
+ > x
30
+ function() {
31
+ cat("hello")
32
+ cat("world")
33
+ }
34
+ > x()
35
+ helloworld
36
+ > 2 + 2
37
+ [1] 4
38
+ >
@@ -0,0 +1,280 @@
1
+ /*
2
+ * Lexes Ragel input files.
3
+ *
4
+ * @LANG: c++
5
+ *
6
+ * Test works with split code gen.
7
+ */
8
+
9
+ #include <iostream>
10
+ #include <stdlib.h>
11
+ #include <stdio.h>
12
+ #include <string.h>
13
+
14
+ using namespace std;
15
+
16
+ void escapeXML( const char *data )
17
+ {
18
+ while ( *data != 0 ) {
19
+ switch ( *data ) {
20
+ case '<': cout << "&lt;"; break;
21
+ case '>': cout << "&gt;"; break;
22
+ case '&': cout << "&amp;"; break;
23
+ default: cout << *data; break;
24
+ }
25
+ data += 1;
26
+ }
27
+ }
28
+
29
+ void escapeXML( char c )
30
+ {
31
+ switch ( c ) {
32
+ case '<': cout << "&lt;"; break;
33
+ case '>': cout << "&gt;"; break;
34
+ case '&': cout << "&amp;"; break;
35
+ default: cout << c; break;
36
+ }
37
+ }
38
+
39
+ void escapeXML( const char *data, int len )
40
+ {
41
+ for ( const char *end = data + len; data != end; data++ ) {
42
+ switch ( *data ) {
43
+ case '<': cout << "&lt;"; break;
44
+ case '>': cout << "&gt;"; break;
45
+ case '&': cout << "&amp;"; break;
46
+ default: cout << *data; break;
47
+ }
48
+ }
49
+ }
50
+
51
+ inline void write( const char *data )
52
+ {
53
+ cout << data;
54
+ }
55
+
56
+ inline void write( char c )
57
+ {
58
+ cout << c;
59
+ }
60
+
61
+ inline void write( const char *data, int len )
62
+ {
63
+ cout.write( data, len );
64
+ }
65
+
66
+
67
+ %%{
68
+ machine RagelScan;
69
+
70
+ word = [a-zA-Z_][a-zA-Z_0-9]*;
71
+ integer = [0-9]+;
72
+ hex = '0x' [0-9a-fA-F] [0-9a-fA-F]*;
73
+
74
+ default = ^0;
75
+ EOF = 0;
76
+
77
+ # Handles comments in outside code and inline blocks.
78
+ c_comment :=
79
+ ( default* :>> '*/' )
80
+ ${ escapeXML( fc ); }
81
+ @{ fret; };
82
+
83
+ action emit {
84
+ escapeXML( ts, te-ts );
85
+ }
86
+
87
+ #
88
+ # Inline action code
89
+ #
90
+
91
+ ilscan := |*
92
+
93
+ "'" ( [^'\\] | /\\./ )* "'" => emit;
94
+ '"' ( [^"\\] | /\\./ )* '"' => emit;
95
+ '/*' {
96
+ write( "/*" );
97
+ fcall c_comment;
98
+ };
99
+ '//' [^\n]* '\n' => emit;
100
+
101
+ '{' {
102
+ write( '{' );
103
+ inline_depth += 1;
104
+ };
105
+
106
+ '}' {
107
+ write( '}' );
108
+ /* If dropping down to the last } then return
109
+ * to ragel code. */
110
+ if ( --inline_depth == 0 ) {
111
+ write( "</inline>\n" );
112
+ fgoto rlscan;
113
+ }
114
+ };
115
+
116
+ default => { escapeXML( *ts ); };
117
+ *|;
118
+
119
+ #
120
+ # Ragel Tokens
121
+ #
122
+
123
+ rlscan := |*
124
+ '}%%' {
125
+ if ( !single_line ) {
126
+ write( "</section>\n" );
127
+ fgoto main;
128
+ }
129
+ };
130
+
131
+ '\n' {
132
+ if ( single_line ) {
133
+ write( "</section>\n" );
134
+ fgoto main;
135
+ }
136
+ };
137
+
138
+ # Word
139
+ word {
140
+ write( "<word>" );
141
+ write( ts, te-ts );
142
+ write( "</word>\n" );
143
+ };
144
+
145
+ # Decimal integer.
146
+ integer {
147
+ write( "<int>" );
148
+ write( ts, te-ts );
149
+ write( "</int>\n" );
150
+ };
151
+
152
+ # Hexidecimal integer.
153
+ hex {
154
+ write( "<hex>" );
155
+ write( ts, te-ts );
156
+ write( "</hex>\n" );
157
+ };
158
+
159
+ # Consume comments.
160
+ '#' [^\n]* '\n';
161
+
162
+ # Single literal string.
163
+ "'" ( [^'\\] | /\\./ )* "'" {
164
+ write( "<single_lit>" );
165
+ escapeXML( ts, te-ts );
166
+ write( "</single_lit>\n" );
167
+ };
168
+
169
+ # Double literal string.
170
+ '"' ( [^"\\] | /\\./ )* '"' {
171
+ write( "<double_lit>" );
172
+ escapeXML( ts, te-ts );
173
+ write( "</double_lit>\n" );
174
+ };
175
+
176
+ # Or literal.
177
+ '[' ( [^\]\\] | /\\./ )* ']' {
178
+ write( "<or_lit>" );
179
+ escapeXML( ts, te-ts );
180
+ write( "</or_lit>\n" );
181
+ };
182
+
183
+ # Regex Literal.
184
+ '/' ( [^/\\] | /\\./ ) * '/' {
185
+ write( "<re_lit>" );
186
+ escapeXML( ts, te-ts );
187
+ write( "</re_lit>\n" );
188
+ };
189
+
190
+ # Open an inline block
191
+ '{' {
192
+ inline_depth = 1;
193
+ write( "<inline>{" );
194
+ fgoto ilscan;
195
+ };
196
+
197
+ punct {
198
+ write( "<symbol>" );
199
+ escapeXML( fc );
200
+ write( "</symbol>\n" );
201
+ };
202
+
203
+ default;
204
+ *|;
205
+
206
+ #
207
+ # Outside code.
208
+ #
209
+
210
+ main := |*
211
+
212
+ "'" ( [^'\\] | /\\./ )* "'" => emit;
213
+ '"' ( [^"\\] | /\\./ )* '"' => emit;
214
+
215
+ '/*' {
216
+ escapeXML( ts, te-ts );
217
+ fcall c_comment;
218
+ };
219
+
220
+ '//' [^\n]* '\n' => emit;
221
+
222
+ '%%{' {
223
+ write( "<section>\n" );
224
+ single_line = false;
225
+ fgoto rlscan;
226
+ };
227
+
228
+ '%%' {
229
+ write( "<section>\n" );
230
+ single_line = true;
231
+ fgoto rlscan;
232
+ };
233
+
234
+ default {
235
+ escapeXML( *ts );
236
+ };
237
+
238
+ # EOF.
239
+ EOF;
240
+ *|;
241
+ }%%
242
+
243
+ %% write data nofinal;
244
+
245
+ void test( const char *data )
246
+ {
247
+ std::ios::sync_with_stdio(false);
248
+
249
+ int cs, act;
250
+ const char *ts, *te;
251
+ int stack[1], top;
252
+
253
+ bool single_line = false;
254
+ int inline_depth = 0;
255
+
256
+ %% write init;
257
+
258
+ /* Read in a block. */
259
+ const char *p = data;
260
+ const char *pe = data + strlen( data );
261
+ const char *eof = pe;
262
+ %% write exec;
263
+
264
+ if ( cs == RagelScan_error ) {
265
+ /* Machine failed before finding a token. */
266
+ cerr << "PARSE ERROR" << endl;
267
+ exit(1);
268
+ }
269
+ }
270
+
271
+ #define BUFSIZE 2048
272
+
273
+ int main()
274
+ {
275
+ std::ios::sync_with_stdio(false);
276
+
277
+ test("hi %%{ /'}%%'/ { /*{*/ {} } + '\\'' }%%there\n");
278
+
279
+ return 0;
280
+ }
@@ -0,0 +1,2 @@
1
+ %% write init;
2
+ /* Read in a block. */
@@ -0,0 +1,22 @@
1
+ // regex
2
+
3
+ blah(/abc/);
4
+ x = /abc/;
5
+ x = /abc/.match;
6
+
7
+ // math
8
+
9
+ blah(1/2); //comment
10
+ x = 1 / 2 / 3;
11
+ x = 1/1/.1;
12
+
13
+ // broken
14
+
15
+ x=/1/;
16
+ x=1/a/g;
17
+ x=a/a/g;
18
+
19
+ // real-world
20
+
21
+ var x = 1/(1+Math.sqrt(sum)); // convert to number between 1-0
22
+ return Math.round((num / den) * 100)/100;
@@ -0,0 +1,427 @@
1
+ #!/usr/bin/env newlisp
2
+ ;; @module reversi.lsp
3
+ ;; @description a simple version of Reversi: you as white against newLISP as black
4
+ ;; @version 0.1 alpha August 2007
5
+ ;; @author cormullion
6
+ ;;
7
+ ;; 2008-10-08 21:46:54
8
+ ;; updated for newLISP version 10. (changed nth-set to setf)
9
+ ;; this now does not work with newLISP version 9!
10
+ ;;
11
+ ;; This is my first attempt at writing a simple application using newLISP-GS.
12
+ ;; The game algorithms are basically by
13
+ ;; Peter Norvig http://norvig.com/paip/othello.lisp
14
+ ;; and all I've done is translate to newLISP and add the interface...
15
+ ;;
16
+ ;; To-Do: work out how to handle the end of the game properly...
17
+ ;; To-Do: complete newlispdoc for the functions
18
+
19
+ (constant 'empty 0)
20
+ (constant 'black 1)
21
+ (constant 'white 2)
22
+ (constant 'outer 3) ; squares outside the 8x8 board
23
+
24
+ (set '*board* '()) ; the master board is a 100 element list
25
+ (set '*moves* '()) ; list of moves made
26
+
27
+ ; these are the 8 different directions from a square on the board
28
+
29
+ (set 'all-directions '(-11 -10 -9 -1 1 9 10 11))
30
+
31
+ ; return a list of all the playable squares (the 8 by 8 grid inside the 10by10
32
+
33
+ (define (all-squares)
34
+ (local (result)
35
+ (for (square 11 88)
36
+ (if (<= 1 (mod square 10) 8)
37
+ (push square result -1)))
38
+ result))
39
+
40
+ ; make a board
41
+
42
+ (define (make-board)
43
+ (set '*board* (dup outer 100))
44
+ (dolist (s (all-squares))
45
+ (setf (*board* s) empty)))
46
+
47
+ ; for testing and working at a terminal
48
+
49
+ (define (print-board)
50
+ (print { })
51
+ (for (c 1 8)
52
+ (print c))
53
+ (set 'c 0)
54
+ (for (i 0 99)
55
+ (cond
56
+ ((= (*board* i) 0) (print {.}))
57
+ ((= (*board* i) 1) (print {b}))
58
+ ((= (*board* i) 2) (print {w})))
59
+ (if (and (<= i 88) (= (mod (+ i 1) 10) 0)) ; newline
60
+ (print "\n" (inc c))))
61
+ (println "\n"))
62
+
63
+ ; the initial starting pattern
64
+
65
+ (define (initial-board)
66
+ (make-board)
67
+ (setf (*board* 44) white)
68
+ (setf (*board* 55) white)
69
+ (setf (*board* 45) black)
70
+ (setf (*board* 54) black))
71
+
72
+ (define (opponent player)
73
+ (if (= player black) white black))
74
+
75
+ (define (player-name player)
76
+ (if (= player white) "white" "black"))
77
+
78
+ (define (valid-move? move)
79
+ (and
80
+ (integer? move)
81
+ (<= 11 move 88)
82
+ (<= 1 (mod move 10) 8)))
83
+
84
+ (define (empty-square? square)
85
+ (and
86
+ (valid-move? square)
87
+ (= (*board* square) empty)))
88
+
89
+ ; test whether a move is legal. The square must be empty
90
+ ; and it must flip at least one of the opponent's piece
91
+
92
+ (define (legal-move? move player)
93
+ (and
94
+ (empty-square? move)
95
+ (exists (fn (dir) (would-flip? move player dir)) all-directions)))
96
+
97
+ ; would this move by player result in any flips in the given direction?
98
+ ; if so, return the number of the 'opposite' (bracketing) piece's square
99
+
100
+ (define (would-flip? move player dir)
101
+ (let
102
+ ((c (+ move dir)))
103
+ (and
104
+ (= (*board* c) (opponent player))
105
+ (find-bracketing-piece (+ c dir) player dir))))
106
+
107
+ (define (find-bracketing-piece square player dir)
108
+ ; return the square of the bracketing piece, if any
109
+ (cond
110
+ ((= (*board* square) player) square)
111
+ ((= (*board* square) (opponent player))
112
+ (find-bracketing-piece (+ square dir) player dir))
113
+ (true nil)))
114
+
115
+ (define (make-flips move player dir)
116
+ (let
117
+ ((bracketer (would-flip? move player dir))
118
+ (c (+ move dir)))
119
+ (if bracketer
120
+ (do-until (= c bracketer)
121
+ (setf (*board* c) player)
122
+ (push c *flips* -1)
123
+ (inc c dir)))))
124
+
125
+ ; make the move on the master game board, not yet visually
126
+
127
+ (define (make-move move player)
128
+ (setf (*board* move) player)
129
+ (push move *moves* -1)
130
+ (set '*flips* '()) ; we're going to keep a record of the flips made
131
+ (dolist (dir all-directions)
132
+ (make-flips move player dir)))
133
+
134
+ (define (next-to-play previous-player)
135
+ (let ((opp (opponent previous-player)))
136
+ (cond
137
+ ((any-legal-move? opp) opp)
138
+ ((any-legal-move? previous-player)
139
+ (println (player-name opp) " has no moves")
140
+ previous-player)
141
+ (true nil))))
142
+
143
+ ; are there any legal moves (returns first) for this player?
144
+ (define (any-legal-move? player)
145
+ (exists (fn (move) (legal-move? move player))
146
+ (all-squares)))
147
+
148
+ ; a list of all legal moves might be useful
149
+ (define (legal-moves player)
150
+ (let ((result '()))
151
+ (dolist (move (all-squares))
152
+ (if (legal-move? move player)
153
+ (push move result)))
154
+ (unique result)))
155
+
156
+ ; define any number of strategies that can be called on to calculate
157
+ ; the next computer move. This is the only one I've done... - make
158
+ ; any legal move at random!
159
+
160
+ (define (random-strategy player)
161
+ (seed (date-value))
162
+ (apply amb (legal-moves player)))
163
+
164
+ ; get the next move using a particular strategy
165
+
166
+ (define (get-move strategy player)
167
+ (let ((move (apply strategy (list player))))
168
+ (cond
169
+ ((and
170
+ (valid-move? move)
171
+ (legal-move? move player))
172
+ (make-move move player))
173
+ (true
174
+ (println "no valid or legal move for " (player-name player) )
175
+ nil))
176
+ move))
177
+
178
+ ; that's about all the game algorithms for now
179
+ ; now for the interface
180
+
181
+ (if (= ostype "Win32")
182
+ (load (string (env "PROGRAMFILES") "/newlisp/guiserver.lsp"))
183
+ (load "/usr/share/newlisp/guiserver.lsp")
184
+ )
185
+
186
+ (gs:init)
187
+ (map set '(screen-width screen-height) (gs:get-screen))
188
+ (set 'board-width 540)
189
+ ; center on screen
190
+ (gs:frame 'Reversi (- (/ screen-width 2) (/ board-width 2)) 60 board-width 660 "Reversi")
191
+ (gs:set-border-layout 'Reversi)
192
+
193
+ (gs:canvas 'MyCanvas 'Reversi)
194
+ (gs:set-background 'MyCanvas '(.8 .9 .7 .8))
195
+ (gs:mouse-released 'MyCanvas 'mouse-released-action true)
196
+
197
+ (gs:panel 'Controls)
198
+ (gs:button 'Start 'start-game "Start")
199
+
200
+ (gs:panel 'Lower)
201
+ (gs:label 'WhiteScore "")
202
+ (gs:label 'BlackScore "")
203
+
204
+ (gs:add-to 'Controls 'Start )
205
+ (gs:add-to 'Lower 'WhiteScore 'BlackScore)
206
+ (gs:add-to 'Reversi 'MyCanvas "center" 'Controls "north" 'Lower "south")
207
+
208
+ (gs:set-anti-aliasing true)
209
+ (gs:set-visible 'Reversi true)
210
+
211
+ ; size of board square, and radius/width of counter
212
+ (set 'size 60 'width 30)
213
+
214
+ ; initialize the master board
215
+
216
+ (define (initial-board)
217
+ (make-board)
218
+ (setf (*board* 44) white)
219
+ (setf (*board* 55) white)
220
+ (setf (*board* 45) black)
221
+ (setf (*board* 54) black)
222
+ )
223
+
224
+ ; draw a graphical repesentation of the board
225
+
226
+ (define (draw-board)
227
+ (local (x y)
228
+ (dolist (i (all-squares))
229
+ (map set '(x y) (square-to-xy i))
230
+ (gs:draw-rect
231
+ (string x y)
232
+ (- (* y size) width ) ; !!!!!!
233
+ (- (* x size) width )
234
+ (* width 2)
235
+ (* width 2)
236
+ gs:white))))
237
+
238
+ (define (draw-first-four-pieces)
239
+ (draw-piece 44 "white")
240
+ (draw-piece 55 "white")
241
+ (draw-piece 45 "black")
242
+ (draw-piece 54 "black"))
243
+
244
+ ; this next function can mark the legal moves available to a player
245
+
246
+ (define (show-legal-moves player)
247
+ (local (legal-move-list x y)
248
+ (set 'legal-move-list (legal-moves player))
249
+ (dolist (m (all-squares))
250
+ (map set '(x y) (square-to-xy m))
251
+ (gs:draw-rect
252
+ (string x y)
253
+ (- (* y size) width ) ; !!!!!!
254
+ (- (* x size) width )
255
+ (* width 2)
256
+ (* width 2)
257
+ (if (find m legal-move-list) gs:blue gs:white)
258
+ )
259
+ )
260
+ )
261
+ )
262
+
263
+ ; convert the number of a square on the master board to coordinates
264
+
265
+ (define (square-to-xy square)
266
+ (list (/ square 10) (mod square 10)))
267
+
268
+ ; draw one of the pieces
269
+
270
+ (define (draw-piece square colour)
271
+ (local (x y)
272
+ (map set '(x y) (square-to-xy square))
273
+ (cond
274
+ ((= colour "white")
275
+ (gs:fill-circle
276
+ (string x y)
277
+ (* y size) ; !!!!!!! y first, cos y is x ;-)
278
+ (* x size)
279
+ width
280
+ gs:white))
281
+
282
+ ((= colour "black")
283
+ (gs:fill-circle
284
+ (string x y)
285
+ (* y size)
286
+ (* x size)
287
+ width
288
+ gs:black))
289
+
290
+ ((= colour "empty")
291
+ (gs:draw-rect
292
+ (string x y)
293
+ (- (* y size) width )
294
+ (- (* x size) width )
295
+ (* width 2)
296
+ (* width 2)
297
+ gs:white))
298
+ )))
299
+
300
+ ; animate the pieces flipping
301
+
302
+ (define (flip-piece square player)
303
+ ; flip by drawing thinner and fatter ellipses
304
+ ; go from full disk in opposite colour to invisible
305
+ ; then from invisible to full disk in true colour
306
+ (local (x y colour)
307
+ (map set '(x y) (square-to-xy square))
308
+ ; delete original piece
309
+ (gs:delete-tag (string x y))
310
+ (set 'colour (if (= player 2) gs:black gs:white ))
311
+ (for (i width 1 -3)
312
+ (gs:fill-ellipse
313
+ (string x y {flip} i)
314
+ (* y size) ; y first :-) !!!
315
+ (* x size)
316
+ i
317
+ width
318
+ colour)
319
+ (sleep 20) ; this might need adjusting...
320
+ (gs:delete-tag (string x y {flip} i))
321
+ )
322
+ (set 'colour (if (= player 2) gs:white gs:black))
323
+ (for (i 1 width 3)
324
+ (gs:fill-ellipse
325
+ (string x y {flip} i)
326
+ (* y size) ; :-) !!!
327
+ (* x size)
328
+ i
329
+ width
330
+ colour)
331
+ (sleep 20)
332
+ (gs:delete-tag (string x y {flip} i))
333
+ )
334
+ ; draw the piece again
335
+ (gs:fill-circle
336
+ (string x y)
337
+ (* y size)
338
+ (* x size)
339
+ width
340
+ colour)
341
+ )
342
+ )
343
+
344
+ (define (do-move move player)
345
+ (cond
346
+ ; check if the move is good ...
347
+ ((and (!= player nil)
348
+ (valid-move? move)
349
+ (legal-move? move player))
350
+
351
+ ; ... play it
352
+ ; make move on board
353
+ (make-move move player)
354
+ ; and on screen
355
+ (draw-piece move (player-name player))
356
+ (gs:update)
357
+ ; do flipping stuff
358
+
359
+ ; wait for a while
360
+ (sleep 1000)
361
+
362
+ ; then do flipping
363
+ (dolist (f *flips*)
364
+ (flip-piece f player))
365
+
366
+ (inc *move-number*)
367
+ (draw-piece move (player-name player))
368
+ (gs:update)
369
+
370
+ ; update scores
371
+ (gs:set-text 'WhiteScore
372
+ (string "White: " (first (count (list white) *board*))))
373
+ (gs:set-text 'BlackScore
374
+ (string "Black: " (first (count (list black) *board*))))
375
+ )
376
+ ; or return nil
377
+ (true
378
+ nil)))
379
+
380
+ ; the game is driven by the mouse clicks of the user
381
+ ; in reply, the computer plays a black piece
382
+ ; premature clicking is possible and possibly a bad thing...
383
+
384
+ (define (mouse-released-action x y button modifiers tags)
385
+ ; extract the tag of the clicked square
386
+ (set 'move (int (string (first tags)) 0 10))
387
+ (if (do-move move player)
388
+ (begin
389
+ (set 'player (next-to-play player))
390
+ ; there is a training mode - legal squares are highlighted
391
+ ; you can uncomment the next line...
392
+ ; (show-legal-moves player)
393
+ (gs:update)
394
+
395
+ ; wait for black's reply
396
+ (gs:set-cursor 'Reversi "wait")
397
+ (gs:set-text 'Start "black's move - thinking...")
398
+ ; give the illusion of Deep Thought...
399
+ (sleep 2000)
400
+ ; black's reply
401
+ ; currently only the random strategy has been defined...
402
+ (set 'strategy random-strategy)
403
+ (set 'move (apply strategy (list player)))
404
+ (do-move move player)
405
+ (set 'player (next-to-play player))
406
+ ; (show-legal-moves player) ; to see black's moves
407
+ (gs:set-text 'Start "your move")
408
+ (gs:set-cursor 'Reversi "default")
409
+ (gs:update))))
410
+
411
+ (define (start-game)
412
+ (gs:set-text 'Start "Click a square to place a piece!")
413
+ (gs:disable 'Start)
414
+ (set 'player white))
415
+
416
+ (define (start)
417
+ (gs:set-text 'Start "Start")
418
+ (gs:enable 'Start)
419
+ (set '*move-number* 1
420
+ '*flips* '())
421
+ (initial-board)
422
+ (draw-board)
423
+ (draw-first-four-pieces))
424
+
425
+ (start)
426
+
427
+ (gs:listen)