gitlab-pygments.rb 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (399) hide show
  1. data/.gitignore +6 -0
  2. data/Gemfile +2 -0
  3. data/README.md +91 -0
  4. data/Rakefile +78 -0
  5. data/bench.rb +22 -0
  6. data/cache-lexers.rb +8 -0
  7. data/lexers +0 -0
  8. data/lib/pygments/lexer.rb +148 -0
  9. data/lib/pygments/mentos.py +344 -0
  10. data/lib/pygments/popen.rb +389 -0
  11. data/lib/pygments/version.rb +3 -0
  12. data/lib/pygments.rb +8 -0
  13. data/pygments.rb.gemspec +24 -0
  14. data/test/test_data.c +2581 -0
  15. data/test/test_data.py +514 -0
  16. data/test/test_data_generated +2582 -0
  17. data/test/test_pygments.rb +276 -0
  18. data/vendor/custom_formatters/gitlab.py +171 -0
  19. data/vendor/custom_lexers/github.py +362 -0
  20. data/vendor/pygments-main/AUTHORS +115 -0
  21. data/vendor/pygments-main/CHANGES +762 -0
  22. data/vendor/pygments-main/LICENSE +25 -0
  23. data/vendor/pygments-main/MANIFEST.in +6 -0
  24. data/vendor/pygments-main/Makefile +59 -0
  25. data/vendor/pygments-main/REVISION +1 -0
  26. data/vendor/pygments-main/TODO +15 -0
  27. data/vendor/pygments-main/docs/generate.py +472 -0
  28. data/vendor/pygments-main/docs/pygmentize.1 +94 -0
  29. data/vendor/pygments-main/docs/src/api.txt +270 -0
  30. data/vendor/pygments-main/docs/src/authors.txt +5 -0
  31. data/vendor/pygments-main/docs/src/changelog.txt +5 -0
  32. data/vendor/pygments-main/docs/src/cmdline.txt +147 -0
  33. data/vendor/pygments-main/docs/src/filterdevelopment.txt +70 -0
  34. data/vendor/pygments-main/docs/src/filters.txt +42 -0
  35. data/vendor/pygments-main/docs/src/formatterdevelopment.txt +169 -0
  36. data/vendor/pygments-main/docs/src/formatters.txt +48 -0
  37. data/vendor/pygments-main/docs/src/index.txt +69 -0
  38. data/vendor/pygments-main/docs/src/installation.txt +71 -0
  39. data/vendor/pygments-main/docs/src/integrate.txt +43 -0
  40. data/vendor/pygments-main/docs/src/lexerdevelopment.txt +551 -0
  41. data/vendor/pygments-main/docs/src/lexers.txt +67 -0
  42. data/vendor/pygments-main/docs/src/moinmoin.txt +39 -0
  43. data/vendor/pygments-main/docs/src/plugins.txt +93 -0
  44. data/vendor/pygments-main/docs/src/quickstart.txt +202 -0
  45. data/vendor/pygments-main/docs/src/rstdirective.txt +22 -0
  46. data/vendor/pygments-main/docs/src/styles.txt +143 -0
  47. data/vendor/pygments-main/docs/src/tokens.txt +349 -0
  48. data/vendor/pygments-main/docs/src/unicode.txt +49 -0
  49. data/vendor/pygments-main/external/markdown-processor.py +67 -0
  50. data/vendor/pygments-main/external/moin-parser.py +112 -0
  51. data/vendor/pygments-main/external/pygments.bashcomp +38 -0
  52. data/vendor/pygments-main/external/rst-directive-old.py +77 -0
  53. data/vendor/pygments-main/external/rst-directive.py +83 -0
  54. data/vendor/pygments-main/ez_setup.py +276 -0
  55. data/vendor/pygments-main/pygmentize +7 -0
  56. data/vendor/pygments-main/pygments/__init__.py +91 -0
  57. data/vendor/pygments-main/pygments/cmdline.py +433 -0
  58. data/vendor/pygments-main/pygments/console.py +74 -0
  59. data/vendor/pygments-main/pygments/filter.py +74 -0
  60. data/vendor/pygments-main/pygments/filters/__init__.py +357 -0
  61. data/vendor/pygments-main/pygments/formatter.py +92 -0
  62. data/vendor/pygments-main/pygments/formatters/__init__.py +68 -0
  63. data/vendor/pygments-main/pygments/formatters/_mapping.py +94 -0
  64. data/vendor/pygments-main/pygments/formatters/bbcode.py +109 -0
  65. data/vendor/pygments-main/pygments/formatters/gitlab.py +171 -0
  66. data/vendor/pygments-main/pygments/formatters/html.py +750 -0
  67. data/vendor/pygments-main/pygments/formatters/img.py +553 -0
  68. data/vendor/pygments-main/pygments/formatters/latex.py +378 -0
  69. data/vendor/pygments-main/pygments/formatters/other.py +117 -0
  70. data/vendor/pygments-main/pygments/formatters/rtf.py +136 -0
  71. data/vendor/pygments-main/pygments/formatters/svg.py +154 -0
  72. data/vendor/pygments-main/pygments/formatters/terminal.py +112 -0
  73. data/vendor/pygments-main/pygments/formatters/terminal256.py +222 -0
  74. data/vendor/pygments-main/pygments/lexer.py +697 -0
  75. data/vendor/pygments-main/pygments/lexers/__init__.py +229 -0
  76. data/vendor/pygments-main/pygments/lexers/_asybuiltins.py +1645 -0
  77. data/vendor/pygments-main/pygments/lexers/_clbuiltins.py +232 -0
  78. data/vendor/pygments-main/pygments/lexers/_luabuiltins.py +249 -0
  79. data/vendor/pygments-main/pygments/lexers/_mapping.py +298 -0
  80. data/vendor/pygments-main/pygments/lexers/_phpbuiltins.py +3787 -0
  81. data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +232 -0
  82. data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +29 -0
  83. data/vendor/pygments-main/pygments/lexers/_vimbuiltins.py +3 -0
  84. data/vendor/pygments-main/pygments/lexers/agile.py +1803 -0
  85. data/vendor/pygments-main/pygments/lexers/asm.py +360 -0
  86. data/vendor/pygments-main/pygments/lexers/compiled.py +2891 -0
  87. data/vendor/pygments-main/pygments/lexers/dotnet.py +636 -0
  88. data/vendor/pygments-main/pygments/lexers/functional.py +1832 -0
  89. data/vendor/pygments-main/pygments/lexers/github.py +362 -0
  90. data/vendor/pygments-main/pygments/lexers/hdl.py +356 -0
  91. data/vendor/pygments-main/pygments/lexers/jvm.py +847 -0
  92. data/vendor/pygments-main/pygments/lexers/math.py +1072 -0
  93. data/vendor/pygments-main/pygments/lexers/other.py +3339 -0
  94. data/vendor/pygments-main/pygments/lexers/parsers.py +695 -0
  95. data/vendor/pygments-main/pygments/lexers/shell.py +361 -0
  96. data/vendor/pygments-main/pygments/lexers/special.py +100 -0
  97. data/vendor/pygments-main/pygments/lexers/sql.py +559 -0
  98. data/vendor/pygments-main/pygments/lexers/templates.py +1631 -0
  99. data/vendor/pygments-main/pygments/lexers/text.py +1753 -0
  100. data/vendor/pygments-main/pygments/lexers/web.py +2864 -0
  101. data/vendor/pygments-main/pygments/plugin.py +74 -0
  102. data/vendor/pygments-main/pygments/scanner.py +104 -0
  103. data/vendor/pygments-main/pygments/style.py +117 -0
  104. data/vendor/pygments-main/pygments/styles/__init__.py +70 -0
  105. data/vendor/pygments-main/pygments/styles/autumn.py +65 -0
  106. data/vendor/pygments-main/pygments/styles/borland.py +51 -0
  107. data/vendor/pygments-main/pygments/styles/bw.py +49 -0
  108. data/vendor/pygments-main/pygments/styles/colorful.py +81 -0
  109. data/vendor/pygments-main/pygments/styles/default.py +73 -0
  110. data/vendor/pygments-main/pygments/styles/emacs.py +72 -0
  111. data/vendor/pygments-main/pygments/styles/friendly.py +72 -0
  112. data/vendor/pygments-main/pygments/styles/fruity.py +42 -0
  113. data/vendor/pygments-main/pygments/styles/manni.py +75 -0
  114. data/vendor/pygments-main/pygments/styles/monokai.py +106 -0
  115. data/vendor/pygments-main/pygments/styles/murphy.py +80 -0
  116. data/vendor/pygments-main/pygments/styles/native.py +65 -0
  117. data/vendor/pygments-main/pygments/styles/pastie.py +75 -0
  118. data/vendor/pygments-main/pygments/styles/perldoc.py +69 -0
  119. data/vendor/pygments-main/pygments/styles/rrt.py +33 -0
  120. data/vendor/pygments-main/pygments/styles/tango.py +141 -0
  121. data/vendor/pygments-main/pygments/styles/trac.py +63 -0
  122. data/vendor/pygments-main/pygments/styles/vim.py +63 -0
  123. data/vendor/pygments-main/pygments/styles/vs.py +38 -0
  124. data/vendor/pygments-main/pygments/token.py +195 -0
  125. data/vendor/pygments-main/pygments/unistring.py +130 -0
  126. data/vendor/pygments-main/pygments/util.py +232 -0
  127. data/vendor/pygments-main/scripts/check_sources.py +242 -0
  128. data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +30 -0
  129. data/vendor/pygments-main/scripts/epydoc.css +280 -0
  130. data/vendor/pygments-main/scripts/find_codetags.py +205 -0
  131. data/vendor/pygments-main/scripts/find_error.py +171 -0
  132. data/vendor/pygments-main/scripts/get_vimkw.py +43 -0
  133. data/vendor/pygments-main/scripts/pylintrc +301 -0
  134. data/vendor/pygments-main/scripts/reindent.py +291 -0
  135. data/vendor/pygments-main/scripts/vim2pygments.py +933 -0
  136. data/vendor/pygments-main/setup.cfg +6 -0
  137. data/vendor/pygments-main/setup.py +88 -0
  138. data/vendor/pygments-main/tests/dtds/HTML4-f.dtd +37 -0
  139. data/vendor/pygments-main/tests/dtds/HTML4-s.dtd +869 -0
  140. data/vendor/pygments-main/tests/dtds/HTML4.dcl +88 -0
  141. data/vendor/pygments-main/tests/dtds/HTML4.dtd +1092 -0
  142. data/vendor/pygments-main/tests/dtds/HTML4.soc +9 -0
  143. data/vendor/pygments-main/tests/dtds/HTMLlat1.ent +195 -0
  144. data/vendor/pygments-main/tests/dtds/HTMLspec.ent +77 -0
  145. data/vendor/pygments-main/tests/dtds/HTMLsym.ent +241 -0
  146. data/vendor/pygments-main/tests/examplefiles/ANTLRv3.g +608 -0
  147. data/vendor/pygments-main/tests/examplefiles/AcidStateAdvanced.hs +209 -0
  148. data/vendor/pygments-main/tests/examplefiles/AlternatingGroup.mu +102 -0
  149. data/vendor/pygments-main/tests/examplefiles/CPDictionary.j +611 -0
  150. data/vendor/pygments-main/tests/examplefiles/Constants.mo +158 -0
  151. data/vendor/pygments-main/tests/examplefiles/DancingSudoku.lhs +411 -0
  152. data/vendor/pygments-main/tests/examplefiles/Errors.scala +18 -0
  153. data/vendor/pygments-main/tests/examplefiles/File.hy +174 -0
  154. data/vendor/pygments-main/tests/examplefiles/Intro.java +1660 -0
  155. data/vendor/pygments-main/tests/examplefiles/Makefile +1131 -0
  156. data/vendor/pygments-main/tests/examplefiles/Object.st +4394 -0
  157. data/vendor/pygments-main/tests/examplefiles/OrderedMap.hx +584 -0
  158. data/vendor/pygments-main/tests/examplefiles/SmallCheck.hs +378 -0
  159. data/vendor/pygments-main/tests/examplefiles/Sorting.mod +470 -0
  160. data/vendor/pygments-main/tests/examplefiles/Sudoku.lhs +382 -0
  161. data/vendor/pygments-main/tests/examplefiles/addressbook.proto +30 -0
  162. data/vendor/pygments-main/tests/examplefiles/antlr_throws +1 -0
  163. data/vendor/pygments-main/tests/examplefiles/apache2.conf +393 -0
  164. data/vendor/pygments-main/tests/examplefiles/as3_test.as +143 -0
  165. data/vendor/pygments-main/tests/examplefiles/as3_test2.as +46 -0
  166. data/vendor/pygments-main/tests/examplefiles/as3_test3.as +3 -0
  167. data/vendor/pygments-main/tests/examplefiles/aspx-cs_example +27 -0
  168. data/vendor/pygments-main/tests/examplefiles/badcase.java +2 -0
  169. data/vendor/pygments-main/tests/examplefiles/batchfile.bat +49 -0
  170. data/vendor/pygments-main/tests/examplefiles/boot-9.scm +1557 -0
  171. data/vendor/pygments-main/tests/examplefiles/cells.ps +515 -0
  172. data/vendor/pygments-main/tests/examplefiles/ceval.c +2604 -0
  173. data/vendor/pygments-main/tests/examplefiles/cheetah_example.html +13 -0
  174. data/vendor/pygments-main/tests/examplefiles/classes.dylan +40 -0
  175. data/vendor/pygments-main/tests/examplefiles/condensed_ruby.rb +10 -0
  176. data/vendor/pygments-main/tests/examplefiles/coq_RelationClasses +447 -0
  177. data/vendor/pygments-main/tests/examplefiles/database.pytb +20 -0
  178. data/vendor/pygments-main/tests/examplefiles/de.MoinMoin.po +2461 -0
  179. data/vendor/pygments-main/tests/examplefiles/demo.ahk +181 -0
  180. data/vendor/pygments-main/tests/examplefiles/demo.cfm +38 -0
  181. data/vendor/pygments-main/tests/examplefiles/django_sample.html+django +68 -0
  182. data/vendor/pygments-main/tests/examplefiles/dwarf.cw +17 -0
  183. data/vendor/pygments-main/tests/examplefiles/erl_session +10 -0
  184. data/vendor/pygments-main/tests/examplefiles/escape_semicolon.clj +1 -0
  185. data/vendor/pygments-main/tests/examplefiles/evil_regex.js +48 -0
  186. data/vendor/pygments-main/tests/examplefiles/example.c +2080 -0
  187. data/vendor/pygments-main/tests/examplefiles/example.cls +15 -0
  188. data/vendor/pygments-main/tests/examplefiles/example.cpp +2363 -0
  189. data/vendor/pygments-main/tests/examplefiles/example.gs +106 -0
  190. data/vendor/pygments-main/tests/examplefiles/example.gst +7 -0
  191. data/vendor/pygments-main/tests/examplefiles/example.kt +47 -0
  192. data/vendor/pygments-main/tests/examplefiles/example.lua +250 -0
  193. data/vendor/pygments-main/tests/examplefiles/example.moo +26 -0
  194. data/vendor/pygments-main/tests/examplefiles/example.moon +629 -0
  195. data/vendor/pygments-main/tests/examplefiles/example.nim +1010 -0
  196. data/vendor/pygments-main/tests/examplefiles/example.ns2 +69 -0
  197. data/vendor/pygments-main/tests/examplefiles/example.p +34 -0
  198. data/vendor/pygments-main/tests/examplefiles/example.pas +2708 -0
  199. data/vendor/pygments-main/tests/examplefiles/example.rb +1852 -0
  200. data/vendor/pygments-main/tests/examplefiles/example.rhtml +561 -0
  201. data/vendor/pygments-main/tests/examplefiles/example.sh-session +19 -0
  202. data/vendor/pygments-main/tests/examplefiles/example.sml +156 -0
  203. data/vendor/pygments-main/tests/examplefiles/example.snobol +15 -0
  204. data/vendor/pygments-main/tests/examplefiles/example.tea +34 -0
  205. data/vendor/pygments-main/tests/examplefiles/example.u +548 -0
  206. data/vendor/pygments-main/tests/examplefiles/example.weechatlog +9 -0
  207. data/vendor/pygments-main/tests/examplefiles/example.xhtml +376 -0
  208. data/vendor/pygments-main/tests/examplefiles/example.yaml +302 -0
  209. data/vendor/pygments-main/tests/examplefiles/example2.aspx +29 -0
  210. data/vendor/pygments-main/tests/examplefiles/example_elixir.ex +363 -0
  211. data/vendor/pygments-main/tests/examplefiles/example_file.fy +128 -0
  212. data/vendor/pygments-main/tests/examplefiles/firefox.mak +586 -0
  213. data/vendor/pygments-main/tests/examplefiles/flipflop.sv +19 -0
  214. data/vendor/pygments-main/tests/examplefiles/foo.sce +6 -0
  215. data/vendor/pygments-main/tests/examplefiles/format.ml +1213 -0
  216. data/vendor/pygments-main/tests/examplefiles/fucked_up.rb +77 -0
  217. data/vendor/pygments-main/tests/examplefiles/function.mu +1 -0
  218. data/vendor/pygments-main/tests/examplefiles/functional.rst +1472 -0
  219. data/vendor/pygments-main/tests/examplefiles/genclass.clj +510 -0
  220. data/vendor/pygments-main/tests/examplefiles/genshi_example.xml+genshi +193 -0
  221. data/vendor/pygments-main/tests/examplefiles/genshitext_example.genshitext +33 -0
  222. data/vendor/pygments-main/tests/examplefiles/glsl.frag +7 -0
  223. data/vendor/pygments-main/tests/examplefiles/glsl.vert +13 -0
  224. data/vendor/pygments-main/tests/examplefiles/html+php_faulty.php +1 -0
  225. data/vendor/pygments-main/tests/examplefiles/http_request_example +14 -0
  226. data/vendor/pygments-main/tests/examplefiles/http_response_example +27 -0
  227. data/vendor/pygments-main/tests/examplefiles/import.hs +4 -0
  228. data/vendor/pygments-main/tests/examplefiles/intro.ik +24 -0
  229. data/vendor/pygments-main/tests/examplefiles/ints.php +10 -0
  230. data/vendor/pygments-main/tests/examplefiles/intsyn.fun +675 -0
  231. data/vendor/pygments-main/tests/examplefiles/intsyn.sig +286 -0
  232. data/vendor/pygments-main/tests/examplefiles/irb_heredoc +8 -0
  233. data/vendor/pygments-main/tests/examplefiles/irc.lsp +214 -0
  234. data/vendor/pygments-main/tests/examplefiles/java.properties +16 -0
  235. data/vendor/pygments-main/tests/examplefiles/jbst_example1.jbst +28 -0
  236. data/vendor/pygments-main/tests/examplefiles/jbst_example2.jbst +45 -0
  237. data/vendor/pygments-main/tests/examplefiles/jinjadesignerdoc.rst +713 -0
  238. data/vendor/pygments-main/tests/examplefiles/lighttpd_config.conf +13 -0
  239. data/vendor/pygments-main/tests/examplefiles/linecontinuation.py +47 -0
  240. data/vendor/pygments-main/tests/examplefiles/ltmain.sh +2849 -0
  241. data/vendor/pygments-main/tests/examplefiles/main.cmake +42 -0
  242. data/vendor/pygments-main/tests/examplefiles/markdown.lsp +679 -0
  243. data/vendor/pygments-main/tests/examplefiles/matlab_noreturn +3 -0
  244. data/vendor/pygments-main/tests/examplefiles/matlab_sample +27 -0
  245. data/vendor/pygments-main/tests/examplefiles/matlabsession_sample.txt +37 -0
  246. data/vendor/pygments-main/tests/examplefiles/minimal.ns2 +4 -0
  247. data/vendor/pygments-main/tests/examplefiles/moin_SyntaxReference.txt +340 -0
  248. data/vendor/pygments-main/tests/examplefiles/multiline_regexes.rb +38 -0
  249. data/vendor/pygments-main/tests/examplefiles/nasm_aoutso.asm +96 -0
  250. data/vendor/pygments-main/tests/examplefiles/nasm_objexe.asm +30 -0
  251. data/vendor/pygments-main/tests/examplefiles/nemerle_sample.n +87 -0
  252. data/vendor/pygments-main/tests/examplefiles/nginx_nginx.conf +118 -0
  253. data/vendor/pygments-main/tests/examplefiles/numbers.c +12 -0
  254. data/vendor/pygments-main/tests/examplefiles/objc_example.m +25 -0
  255. data/vendor/pygments-main/tests/examplefiles/objc_example2.m +24 -0
  256. data/vendor/pygments-main/tests/examplefiles/perl_misc +62 -0
  257. data/vendor/pygments-main/tests/examplefiles/perl_perl5db +998 -0
  258. data/vendor/pygments-main/tests/examplefiles/perl_regex-delims +120 -0
  259. data/vendor/pygments-main/tests/examplefiles/perlfunc.1 +856 -0
  260. data/vendor/pygments-main/tests/examplefiles/phpcomplete.vim +567 -0
  261. data/vendor/pygments-main/tests/examplefiles/pleac.in.rb +1223 -0
  262. data/vendor/pygments-main/tests/examplefiles/postgresql_test.txt +47 -0
  263. data/vendor/pygments-main/tests/examplefiles/pppoe.applescript +10 -0
  264. data/vendor/pygments-main/tests/examplefiles/psql_session.txt +122 -0
  265. data/vendor/pygments-main/tests/examplefiles/py3_test.txt +2 -0
  266. data/vendor/pygments-main/tests/examplefiles/pycon_test.pycon +14 -0
  267. data/vendor/pygments-main/tests/examplefiles/pytb_test2.pytb +2 -0
  268. data/vendor/pygments-main/tests/examplefiles/python25-bsd.mak +234 -0
  269. data/vendor/pygments-main/tests/examplefiles/qsort.prolog +13 -0
  270. data/vendor/pygments-main/tests/examplefiles/r-console-transcript.Rout +38 -0
  271. data/vendor/pygments-main/tests/examplefiles/ragel-cpp_rlscan +280 -0
  272. data/vendor/pygments-main/tests/examplefiles/ragel-cpp_snippet +2 -0
  273. data/vendor/pygments-main/tests/examplefiles/regex.js +22 -0
  274. data/vendor/pygments-main/tests/examplefiles/reversi.lsp +427 -0
  275. data/vendor/pygments-main/tests/examplefiles/ruby_func_def.rb +11 -0
  276. data/vendor/pygments-main/tests/examplefiles/scilab.sci +30 -0
  277. data/vendor/pygments-main/tests/examplefiles/sibling.prolog +19 -0
  278. data/vendor/pygments-main/tests/examplefiles/simple.md +747 -0
  279. data/vendor/pygments-main/tests/examplefiles/smarty_example.html +209 -0
  280. data/vendor/pygments-main/tests/examplefiles/source.lgt +343 -0
  281. data/vendor/pygments-main/tests/examplefiles/sources.list +62 -0
  282. data/vendor/pygments-main/tests/examplefiles/sphere.pov +18 -0
  283. data/vendor/pygments-main/tests/examplefiles/sqlite3.sqlite3-console +27 -0
  284. data/vendor/pygments-main/tests/examplefiles/squid.conf +30 -0
  285. data/vendor/pygments-main/tests/examplefiles/string.jl +1031 -0
  286. data/vendor/pygments-main/tests/examplefiles/string_delimiters.d +21 -0
  287. data/vendor/pygments-main/tests/examplefiles/stripheredoc.sh +3 -0
  288. data/vendor/pygments-main/tests/examplefiles/test.R +119 -0
  289. data/vendor/pygments-main/tests/examplefiles/test.adb +211 -0
  290. data/vendor/pygments-main/tests/examplefiles/test.asy +131 -0
  291. data/vendor/pygments-main/tests/examplefiles/test.awk +121 -0
  292. data/vendor/pygments-main/tests/examplefiles/test.bas +29 -0
  293. data/vendor/pygments-main/tests/examplefiles/test.bmx +145 -0
  294. data/vendor/pygments-main/tests/examplefiles/test.boo +39 -0
  295. data/vendor/pygments-main/tests/examplefiles/test.bro +250 -0
  296. data/vendor/pygments-main/tests/examplefiles/test.cs +374 -0
  297. data/vendor/pygments-main/tests/examplefiles/test.css +54 -0
  298. data/vendor/pygments-main/tests/examplefiles/test.d +135 -0
  299. data/vendor/pygments-main/tests/examplefiles/test.dart +23 -0
  300. data/vendor/pygments-main/tests/examplefiles/test.dtd +89 -0
  301. data/vendor/pygments-main/tests/examplefiles/test.ec +605 -0
  302. data/vendor/pygments-main/tests/examplefiles/test.ecl +58 -0
  303. data/vendor/pygments-main/tests/examplefiles/test.eh +315 -0
  304. data/vendor/pygments-main/tests/examplefiles/test.erl +169 -0
  305. data/vendor/pygments-main/tests/examplefiles/test.evoque +33 -0
  306. data/vendor/pygments-main/tests/examplefiles/test.fan +818 -0
  307. data/vendor/pygments-main/tests/examplefiles/test.flx +57 -0
  308. data/vendor/pygments-main/tests/examplefiles/test.gdc +13 -0
  309. data/vendor/pygments-main/tests/examplefiles/test.groovy +97 -0
  310. data/vendor/pygments-main/tests/examplefiles/test.html +339 -0
  311. data/vendor/pygments-main/tests/examplefiles/test.ini +10 -0
  312. data/vendor/pygments-main/tests/examplefiles/test.java +653 -0
  313. data/vendor/pygments-main/tests/examplefiles/test.jsp +24 -0
  314. data/vendor/pygments-main/tests/examplefiles/test.maql +45 -0
  315. data/vendor/pygments-main/tests/examplefiles/test.mod +374 -0
  316. data/vendor/pygments-main/tests/examplefiles/test.moo +51 -0
  317. data/vendor/pygments-main/tests/examplefiles/test.myt +166 -0
  318. data/vendor/pygments-main/tests/examplefiles/test.nim +93 -0
  319. data/vendor/pygments-main/tests/examplefiles/test.pas +743 -0
  320. data/vendor/pygments-main/tests/examplefiles/test.php +505 -0
  321. data/vendor/pygments-main/tests/examplefiles/test.plot +333 -0
  322. data/vendor/pygments-main/tests/examplefiles/test.ps1 +108 -0
  323. data/vendor/pygments-main/tests/examplefiles/test.pypylog +1839 -0
  324. data/vendor/pygments-main/tests/examplefiles/test.r3 +94 -0
  325. data/vendor/pygments-main/tests/examplefiles/test.rb +177 -0
  326. data/vendor/pygments-main/tests/examplefiles/test.rhtml +43 -0
  327. data/vendor/pygments-main/tests/examplefiles/test.scaml +8 -0
  328. data/vendor/pygments-main/tests/examplefiles/test.ssp +12 -0
  329. data/vendor/pygments-main/tests/examplefiles/test.tcsh +830 -0
  330. data/vendor/pygments-main/tests/examplefiles/test.vb +407 -0
  331. data/vendor/pygments-main/tests/examplefiles/test.vhdl +161 -0
  332. data/vendor/pygments-main/tests/examplefiles/test.xqy +138 -0
  333. data/vendor/pygments-main/tests/examplefiles/test.xsl +23 -0
  334. data/vendor/pygments-main/tests/examplefiles/truncated.pytb +15 -0
  335. data/vendor/pygments-main/tests/examplefiles/type.lisp +1202 -0
  336. data/vendor/pygments-main/tests/examplefiles/underscore.coffee +603 -0
  337. data/vendor/pygments-main/tests/examplefiles/unicode.applescript +5 -0
  338. data/vendor/pygments-main/tests/examplefiles/unicodedoc.py +11 -0
  339. data/vendor/pygments-main/tests/examplefiles/webkit-transition.css +3 -0
  340. data/vendor/pygments-main/tests/examplefiles/while.pov +13 -0
  341. data/vendor/pygments-main/tests/examplefiles/wiki.factor +384 -0
  342. data/vendor/pygments-main/tests/examplefiles/xml_example +1897 -0
  343. data/vendor/pygments-main/tests/examplefiles/zmlrpc.f90 +798 -0
  344. data/vendor/pygments-main/tests/old_run.py +138 -0
  345. data/vendor/pygments-main/tests/run.py +48 -0
  346. data/vendor/pygments-main/tests/support.py +15 -0
  347. data/vendor/pygments-main/tests/test_basic_api.py +294 -0
  348. data/vendor/pygments-main/tests/test_clexer.py +31 -0
  349. data/vendor/pygments-main/tests/test_cmdline.py +105 -0
  350. data/vendor/pygments-main/tests/test_examplefiles.py +97 -0
  351. data/vendor/pygments-main/tests/test_html_formatter.py +162 -0
  352. data/vendor/pygments-main/tests/test_latex_formatter.py +55 -0
  353. data/vendor/pygments-main/tests/test_perllexer.py +137 -0
  354. data/vendor/pygments-main/tests/test_regexlexer.py +47 -0
  355. data/vendor/pygments-main/tests/test_token.py +46 -0
  356. data/vendor/pygments-main/tests/test_using_api.py +40 -0
  357. data/vendor/pygments-main/tests/test_util.py +116 -0
  358. data/vendor/simplejson/.gitignore +10 -0
  359. data/vendor/simplejson/.travis.yml +5 -0
  360. data/vendor/simplejson/CHANGES.txt +291 -0
  361. data/vendor/simplejson/LICENSE.txt +19 -0
  362. data/vendor/simplejson/MANIFEST.in +5 -0
  363. data/vendor/simplejson/README.rst +19 -0
  364. data/vendor/simplejson/conf.py +179 -0
  365. data/vendor/simplejson/index.rst +628 -0
  366. data/vendor/simplejson/scripts/make_docs.py +18 -0
  367. data/vendor/simplejson/setup.py +104 -0
  368. data/vendor/simplejson/simplejson/__init__.py +510 -0
  369. data/vendor/simplejson/simplejson/_speedups.c +2745 -0
  370. data/vendor/simplejson/simplejson/decoder.py +425 -0
  371. data/vendor/simplejson/simplejson/encoder.py +567 -0
  372. data/vendor/simplejson/simplejson/ordered_dict.py +119 -0
  373. data/vendor/simplejson/simplejson/scanner.py +77 -0
  374. data/vendor/simplejson/simplejson/tests/__init__.py +67 -0
  375. data/vendor/simplejson/simplejson/tests/test_bigint_as_string.py +55 -0
  376. data/vendor/simplejson/simplejson/tests/test_check_circular.py +30 -0
  377. data/vendor/simplejson/simplejson/tests/test_decimal.py +66 -0
  378. data/vendor/simplejson/simplejson/tests/test_decode.py +83 -0
  379. data/vendor/simplejson/simplejson/tests/test_default.py +9 -0
  380. data/vendor/simplejson/simplejson/tests/test_dump.py +67 -0
  381. data/vendor/simplejson/simplejson/tests/test_encode_basestring_ascii.py +46 -0
  382. data/vendor/simplejson/simplejson/tests/test_encode_for_html.py +32 -0
  383. data/vendor/simplejson/simplejson/tests/test_errors.py +34 -0
  384. data/vendor/simplejson/simplejson/tests/test_fail.py +91 -0
  385. data/vendor/simplejson/simplejson/tests/test_float.py +19 -0
  386. data/vendor/simplejson/simplejson/tests/test_indent.py +86 -0
  387. data/vendor/simplejson/simplejson/tests/test_item_sort_key.py +20 -0
  388. data/vendor/simplejson/simplejson/tests/test_namedtuple.py +121 -0
  389. data/vendor/simplejson/simplejson/tests/test_pass1.py +76 -0
  390. data/vendor/simplejson/simplejson/tests/test_pass2.py +14 -0
  391. data/vendor/simplejson/simplejson/tests/test_pass3.py +20 -0
  392. data/vendor/simplejson/simplejson/tests/test_recursion.py +67 -0
  393. data/vendor/simplejson/simplejson/tests/test_scanstring.py +117 -0
  394. data/vendor/simplejson/simplejson/tests/test_separators.py +42 -0
  395. data/vendor/simplejson/simplejson/tests/test_speedups.py +20 -0
  396. data/vendor/simplejson/simplejson/tests/test_tuple.py +49 -0
  397. data/vendor/simplejson/simplejson/tests/test_unicode.py +109 -0
  398. data/vendor/simplejson/simplejson/tool.py +39 -0
  399. metadata +492 -0
@@ -0,0 +1,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)