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,152 @@
1
+ Strict
2
+
3
+ ' single line comment
4
+
5
+ #rem
6
+ multi
7
+ line
8
+ comment
9
+ #end
10
+
11
+ #rem
12
+ nested
13
+ #rem
14
+ multi
15
+ line
16
+ #end
17
+ comment
18
+ #end
19
+
20
+ Import mojo
21
+
22
+ Const ONECONST:Int = 1
23
+ Const TWOCONST := 2
24
+ Const THREECONST := 3, FOURCONST:Int = 4
25
+
26
+ Global someVariable:Int = 4
27
+
28
+ ' sample class from the documentation
29
+ Class Game Extends App
30
+
31
+ Function New()
32
+ End
33
+
34
+ Function DrawSpiral(clock)
35
+ Local w=DeviceWidth/2
36
+ For Local i#=0 Until w*1.5 Step .2
37
+ Local x#,y#
38
+ x=w+i*Sin(i*3+clock)
39
+ y=w+i*Cos(i*2+clock)
40
+ DrawRect x,y,1,1
41
+ Next
42
+ hitbox.Collide(event.pos)
43
+ End
44
+
45
+ Field updateCount
46
+
47
+ Method OnCreate()
48
+ Print "spiral"
49
+
50
+ SetUpdateRate 60
51
+ End
52
+
53
+ Method OnUpdate()
54
+ updateCount+=1
55
+ End
56
+
57
+ Method OnRender()
58
+ Cls
59
+ DrawSpiral updateCount
60
+ DrawSpiral updateCount*1.1
61
+ End
62
+
63
+ End
64
+
65
+ Class Enemy
66
+ Method Die () Abstract
67
+ End
68
+
69
+ ' extending
70
+ Class Hoodlum Extends Enemy
71
+ ' field
72
+ Field testField:Bool = True
73
+
74
+ ' naming class with modulepath
75
+ Local currentNode:list.Node<Vector2D>
76
+
77
+ Method Die ()
78
+ Print "B'oss, he-- he killed me, b'oss!"
79
+ End
80
+ End
81
+
82
+ ' extending with generics
83
+ Class VectorNode Extends Node<Vector2D>
84
+ End
85
+
86
+ ' interfaces
87
+ Interface Computer
88
+ Method Boot ()
89
+ Method Process ()
90
+ Method Display ()
91
+ End
92
+
93
+ Class PC Implements Computer
94
+ End
95
+
96
+ ' array syntax
97
+ Global listOfStuff:String[42]
98
+ Global lessStuff:String[5] = listOfStuff[4..8]
99
+ Global oneStuff:String = listOfStuff[23]
100
+
101
+ 'a comma separated sequence
102
+ Global scores:Int[]=[10,20,30]
103
+ 'a comma separated sequence
104
+ Global text:String[]=["Hello","There","World"]
105
+ Global worstCase:worst.List<String[]>
106
+
107
+ ' string type
108
+ Global string1:String = "Hello world"
109
+ Global string2$ = "Hello world"
110
+
111
+ ' escape characers in strings
112
+ Global string3 := "Hello~zWorld"
113
+ Global string4 := "~qHello World~q"
114
+ Global string5 := "~tIndented~n"
115
+ Global string6 := "tilda is wavey... ~~"
116
+
117
+ ' string pseudofunctions
118
+ Print " Hello World ~n".Trim() ' prints "Hello World"
119
+ Print "Hello World".ToUpper() ' prints "HELLO WORLD"
120
+
121
+ ' Boolean shorttype
122
+ Global boolVariable1:Bool = True
123
+ Global boolVariable2? = False
124
+
125
+ ' number formats
126
+ Global hexNum1:Int = $3d0dead
127
+ Global hexNum2% = $CAFEBABE
128
+
129
+ Global floatNum1:Float = 3.141516
130
+ Global floatNum2# = 3.141516
131
+ Global floatNum3 := .141516
132
+
133
+ ' preprocessor keywords
134
+ #If TARGET = "android"
135
+ DoStuff()
136
+ #ElseIf TARGET = "ios"
137
+ DoOtherStuff()
138
+ #End
139
+
140
+ ' preprocessor variable
141
+ #SOMETHING = True
142
+ #Print SOMETHING
143
+ #If SOMETHING
144
+ #End
145
+
146
+ ' operators
147
+ Global a = 32
148
+ Global b = 32 ~ 0
149
+ b ~= 16
150
+ b |= 16
151
+ b &= 16
152
+ Global c = a | b
@@ -0,0 +1,26 @@
1
+ if (this.running)
2
+ player:tell("[Train] Error: already a jump in progress");
3
+ return;
4
+ endif
5
+ this.running = 1;
6
+ this.aborted = 0;
7
+ this:announce_all("[Train] departure in 20 seconds");
8
+ dest = this.targets[random(length(this.targets))];
9
+ this:announce_all("[Train] Next stop is '", dest:title(), "'");
10
+ this:announce_all("You hear the engines starting up");
11
+ this.location:announce("The MOOTrain starts up his engines");
12
+ suspend(20);
13
+ if (this.aborted)
14
+ this.running = 0;
15
+ this.aborted = 0;
16
+ return;
17
+ endif
18
+ this:announce_all("[Train] Departure!");
19
+ this.location:announce_all("The MOOTrain leaves into the 42th dimension!");
20
+ this:announce_all("Outside you see the lights of the 42th dimension");
21
+ this:moveto(dest);
22
+ suspend(4);
23
+ this:announce_all("The glowing gets less, until you can see the clear shape of the room, the MOOTrain has landed in");
24
+ this.location:announce_all("The MOOTrain arrives out of the 42th dimension!");
25
+ this:announce_all("[Train] arrived in '", dest:title(), "'");
26
+ this.running = 0;
@@ -0,0 +1,629 @@
1
+ -- transform.moon
2
+ -- Leaf Corcoran (leafot@gmail.com) 2011
3
+ --
4
+ -- This is part of the MoonScript compiler. See <http://moonscript.org>
5
+ -- MoonScript is licensed under the MIT License
6
+ --
7
+
8
+ module "moonscript.transform", package.seeall
9
+
10
+ types = require "moonscript.types"
11
+ util = require "moonscript.util"
12
+ data = require "moonscript.data"
13
+
14
+ import reversed from util
15
+ import ntype, build, smart_node, is_slice from types
16
+ import insert from table
17
+
18
+ export Statement, Value, NameProxy, LocalName, Run
19
+
20
+ -- always declares as local
21
+ class LocalName
22
+ new: (@name) => self[1] = "temp_name"
23
+ get_name: => @name
24
+
25
+ class NameProxy
26
+ new: (@prefix) =>
27
+ self[1] = "temp_name"
28
+
29
+ get_name: (scope) =>
30
+ if not @name
31
+ @name = scope\free_name @prefix, true
32
+ @name
33
+
34
+ chain: (...) =>
35
+ items = {...} -- todo: fix ... propagation
36
+ items = for i in *items
37
+ if type(i) == "string"
38
+ {"dot", i}
39
+ else
40
+ i
41
+
42
+ build.chain {
43
+ base: self
44
+ unpack items
45
+ }
46
+
47
+ index: (key) =>
48
+ build.chain {
49
+ base: self, {"index", key}
50
+ }
51
+
52
+ __tostring: =>
53
+ if @name
54
+ ("name<%s>")\format @name
55
+ else
56
+ ("name<prefix(%s)>")\format @prefix
57
+
58
+ class Run
59
+ new: (@fn) =>
60
+ self[1] = "run"
61
+
62
+ call: (state) =>
63
+ self.fn state
64
+
65
+ -- transform the last stm is a list of stms
66
+ -- will puke on group
67
+ apply_to_last = (stms, fn) ->
68
+ -- find last (real) exp
69
+ last_exp_id = 0
70
+ for i = #stms, 1, -1
71
+ stm = stms[i]
72
+ if stm and util.moon.type(stm) != Run
73
+ last_exp_id = i
74
+ break
75
+
76
+ return for i, stm in ipairs stms
77
+ if i == last_exp_id
78
+ fn stm
79
+ else
80
+ stm
81
+
82
+ -- is a body a sindle expression/statement
83
+ is_singular = (body) ->
84
+ return false if #body != 1
85
+ if "group" == ntype body
86
+ is_singular body[2]
87
+ else
88
+ true
89
+
90
+ constructor_name = "new"
91
+
92
+ class Transformer
93
+ new: (@transformers, @scope) =>
94
+ @seen_nodes = {}
95
+
96
+ transform: (scope, node, ...) =>
97
+ -- print scope, node, ...
98
+ return node if @seen_nodes[node]
99
+ @seen_nodes[node] = true
100
+ while true
101
+ transformer = @transformers[ntype node]
102
+ res = if transformer
103
+ transformer(scope, node, ...) or node
104
+ else
105
+ node
106
+ return node if res == node
107
+ node = res
108
+
109
+ __call: (node, ...) =>
110
+ @transform @scope, node, ...
111
+
112
+ instance: (scope) =>
113
+ Transformer @transformers, scope
114
+
115
+ can_transform: (node) =>
116
+ @transformers[ntype node] != nil
117
+
118
+ construct_comprehension = (inner, clauses) ->
119
+ current_stms = inner
120
+ for _, clause in reversed clauses
121
+ t = clause[1]
122
+ current_stms = if t == "for"
123
+ _, names, iter = unpack clause
124
+ {"foreach", names, iter, current_stms}
125
+ elseif t == "when"
126
+ _, cond = unpack clause
127
+ {"if", cond, current_stms}
128
+ else
129
+ error "Unknown comprehension clause: "..t
130
+ current_stms = {current_stms}
131
+
132
+ current_stms[1]
133
+
134
+ Statement = Transformer {
135
+ assign: (node) =>
136
+ _, names, values = unpack node
137
+ -- bubble cascading assigns
138
+ if #values == 1 and types.cascading[ntype values[1]]
139
+ values[1] = @transform.statement values[1], (stm) ->
140
+ t = ntype stm
141
+ if types.is_value stm
142
+ {"assign", names, {stm}}
143
+ else
144
+ stm
145
+
146
+ build.group {
147
+ {"declare", names}
148
+ values[1]
149
+ }
150
+ else
151
+ node
152
+
153
+ export: (node) =>
154
+ -- assign values if they are included
155
+ if #node > 2
156
+ if node[2] == "class"
157
+ cls = smart_node node[3]
158
+ build.group {
159
+ {"export", {cls.name}}
160
+ cls
161
+ }
162
+ else
163
+ build.group {
164
+ node
165
+ build.assign {
166
+ names: node[2]
167
+ values: node[3]
168
+ }
169
+ }
170
+ else
171
+ nil
172
+
173
+ update: (node) =>
174
+ _, name, op, exp = unpack node
175
+ op_final = op\match "^(.+)=$"
176
+ error "Unknown op: "..op if not op_final
177
+ build.assign_one name, {"exp", name, op_final, exp}
178
+
179
+ import: (node) =>
180
+ _, names, source = unpack node
181
+
182
+ stubs = for name in *names
183
+ if type(name) == "table"
184
+ name
185
+ else
186
+ {"dot", name}
187
+
188
+ real_names = for name in *names
189
+ type(name) == "table" and name[2] or name
190
+
191
+ if type(source) == "string"
192
+ build.assign {
193
+ names: real_names
194
+ values: [build.chain { base: source, stub} for stub in *stubs]
195
+ }
196
+ else
197
+ source_name = NameProxy "table"
198
+ build.group {
199
+ {"declare", real_names}
200
+ build["do"] {
201
+ build.assign_one source_name, source
202
+ build.assign {
203
+ names: real_names
204
+ values: [build.chain { base: source_name, stub} for stub in *stubs]
205
+ }
206
+ }
207
+ }
208
+
209
+ comprehension: (node, action) =>
210
+ _, exp, clauses = unpack node
211
+
212
+ action = action or (exp) -> {exp}
213
+ construct_comprehension action(exp), clauses
214
+
215
+ -- handle cascading return decorator
216
+ if: (node, ret) =>
217
+ if ret
218
+ smart_node node
219
+ -- mutate all the bodies
220
+ node['then'] = apply_to_last node['then'], ret
221
+ for i = 4, #node
222
+ case = node[i]
223
+ body_idx = #node[i]
224
+ case[body_idx] = apply_to_last case[body_idx], ret
225
+ node
226
+
227
+ with: (node, ret) =>
228
+ _, exp, block = unpack node
229
+ scope_name = NameProxy "with"
230
+ build["do"] {
231
+ build.assign_one scope_name, exp
232
+ Run => @set "scope_var", scope_name
233
+ build.group block
234
+ if ret
235
+ ret scope_name
236
+ }
237
+
238
+ foreach: (node) =>
239
+ smart_node node
240
+ if ntype(node.iter) == "unpack"
241
+ list = node.iter[2]
242
+
243
+ index_name = NameProxy "index"
244
+ list_name = NameProxy "list"
245
+
246
+ slice_var = nil
247
+ bounds = if is_slice list
248
+ slice = list[#list]
249
+ table.remove list
250
+ table.remove slice, 1
251
+
252
+ slice[2] = if slice[2] and slice[2] != ""
253
+ max_tmp_name = NameProxy "max"
254
+ slice_var = build.assign_one max_tmp_name, slice[2]
255
+ {"exp", max_tmp_name, "<", 0
256
+ "and", {"length", list_name}, "+", max_tmp_name
257
+ "or", max_tmp_name }
258
+ else
259
+ {"length", list_name}
260
+
261
+ slice
262
+ else
263
+ {1, {"length", list_name}}
264
+
265
+ build.group {
266
+ build.assign_one list_name, list
267
+ slice_var
268
+ build["for"] {
269
+ name: index_name
270
+ bounds: bounds
271
+ body: {
272
+ {"assign", node.names, {list_name\index index_name}}
273
+ build.group node.body
274
+ }
275
+ }
276
+ }
277
+
278
+ switch: (node, ret) =>
279
+ _, exp, conds = unpack node
280
+ exp_name = NameProxy "exp"
281
+
282
+ -- convert switch conds into if statment conds
283
+ convert_cond = (cond) ->
284
+ t, case_exp, body = unpack cond
285
+ out = {}
286
+ insert out, t == "case" and "elseif" or "else"
287
+ if t != "else"
288
+ insert out, {"exp", case_exp, "==", exp_name} if t != "else"
289
+ else
290
+ body = case_exp
291
+
292
+ if ret
293
+ body = apply_to_last body, ret
294
+
295
+ insert out, body
296
+
297
+ out
298
+
299
+ first = true
300
+ if_stm = {"if"}
301
+ for cond in *conds
302
+ if_cond = convert_cond cond
303
+ if first
304
+ first = false
305
+ insert if_stm, if_cond[2]
306
+ insert if_stm, if_cond[3]
307
+ else
308
+ insert if_stm, if_cond
309
+
310
+ build.group {
311
+ build.assign_one exp_name, exp
312
+ if_stm
313
+ }
314
+
315
+ class: (node) =>
316
+ _, name, parent_val, body = unpack node
317
+
318
+ -- split apart properties and statements
319
+ statements = {}
320
+ properties = {}
321
+ for item in *body
322
+ switch item[1]
323
+ when "stm"
324
+ insert statements, item[2]
325
+ when "props"
326
+ for tuple in *item[2,]
327
+ insert properties, tuple
328
+
329
+ -- find constructor
330
+ constructor = nil
331
+ properties = for tuple in *properties
332
+ if tuple[1] == constructor_name
333
+ constructor = tuple[2]
334
+ nil
335
+ else
336
+ tuple
337
+
338
+ parent_cls_name = NameProxy "parent"
339
+ base_name = NameProxy "base"
340
+ self_name = NameProxy "self"
341
+ cls_name = NameProxy "class"
342
+
343
+ if not constructor
344
+ constructor = build.fndef {
345
+ args: {{"..."}}
346
+ arrow: "fat"
347
+ body: {
348
+ build["if"] {
349
+ cond: parent_cls_name
350
+ then: {
351
+ build.chain { base: "super", {"call", {"..."}} }
352
+ }
353
+ }
354
+ }
355
+ }
356
+ else
357
+ smart_node constructor
358
+ constructor.arrow = "fat"
359
+
360
+ cls = build.table {
361
+ {"__init", constructor}
362
+ {"__base", base_name}
363
+ {"__name", {"string", '"', name}} -- "quote the string"
364
+ {"__parent", parent_cls_name}
365
+ }
366
+
367
+ -- look up a name in the class object
368
+ class_lookup = build["if"] {
369
+ cond: {"exp", "val", "==", "nil", "and", parent_cls_name}
370
+ then: {
371
+ parent_cls_name\index"name"
372
+ }
373
+ }
374
+ insert class_lookup, {"else", {"val"}}
375
+
376
+ cls_mt = build.table {
377
+ {"__index", build.fndef {
378
+ args: {{"cls"}, {"name"}}
379
+ body: {
380
+ build.assign_one LocalName"val", build.chain {
381
+ base: "rawget", {"call", {base_name, "name"}}
382
+ }
383
+ class_lookup
384
+ }
385
+ }}
386
+ {"__call", build.fndef {
387
+ args: {{"cls"}, {"..."}}
388
+ body: {
389
+ build.assign_one self_name, build.chain {
390
+ base: "setmetatable"
391
+ {"call", {"{}", base_name}}
392
+ }
393
+ build.chain {
394
+ base: "cls.__init"
395
+ {"call", {self_name, "..."}}
396
+ }
397
+ self_name
398
+ }
399
+ }}
400
+ }
401
+
402
+ cls = build.chain {
403
+ base: "setmetatable"
404
+ {"call", {cls, cls_mt}}
405
+ }
406
+
407
+ value = nil
408
+ with build
409
+ value = .block_exp {
410
+ Run =>
411
+ @set "super", (block, chain) ->
412
+ if chain
413
+ slice = [item for item in *chain[3,]]
414
+ new_chain = {"chain", parent_cls_name}
415
+
416
+ head = slice[1]
417
+
418
+ if head == nil
419
+ return parent_cls_name
420
+
421
+ switch head[1]
422
+ -- calling super, inject calling name and self into chain
423
+ when "call"
424
+ calling_name = block\get"current_block"
425
+ slice[1] = {"call", {"self", unpack head[2]}}
426
+ act = if ntype(calling_name) != "value" then "index" else "dot"
427
+ insert new_chain, {act, calling_name}
428
+
429
+ -- colon call on super, replace class with self as first arg
430
+ when "colon"
431
+ call = head[3]
432
+ insert new_chain, {"dot", head[2]}
433
+ slice[1] = { "call", { "self", unpack call[2] } }
434
+
435
+ insert new_chain, item for item in *slice
436
+
437
+ new_chain
438
+ else
439
+ parent_cls_name
440
+
441
+ .assign_one parent_cls_name, parent_val == "" and "nil" or parent_val
442
+ .assign_one base_name, {"table", properties}
443
+ .assign_one base_name\chain"__index", base_name
444
+
445
+ build["if"] {
446
+ cond: parent_cls_name
447
+ then: {
448
+ .chain {
449
+ base: "setmetatable"
450
+ {"call", {
451
+ base_name,
452
+ .chain { base: parent_cls_name, {"dot", "__base"}}
453
+ }}
454
+ }
455
+ }
456
+ }
457
+
458
+ .assign_one cls_name, cls
459
+ .assign_one base_name\chain"__class", cls_name
460
+
461
+ .group if #statements > 0 {
462
+ .assign_one LocalName"self", cls_name
463
+ .group statements
464
+ } else {}
465
+
466
+ cls_name
467
+ }
468
+
469
+ value = .group {
470
+ .declare names: {name}
471
+ .assign {
472
+ names: {name}
473
+ values: {value}
474
+ }
475
+ }
476
+
477
+ value
478
+ }
479
+
480
+ class Accumulator
481
+ body_idx: { for: 4, while: 3, foreach: 4 }
482
+
483
+ new: =>
484
+ @accum_name = NameProxy "accum"
485
+ @value_name = NameProxy "value"
486
+ @len_name = NameProxy "len"
487
+
488
+ -- wraps node and mutates body
489
+ convert: (node) =>
490
+ index = @body_idx[ntype node]
491
+ node[index] = @mutate_body node[index]
492
+ @wrap node
493
+
494
+ -- wrap the node into a block_exp
495
+ wrap: (node) =>
496
+ build.block_exp {
497
+ build.assign_one @accum_name, build.table!
498
+ build.assign_one @len_name, 0
499
+ node
500
+ @accum_name
501
+ }
502
+
503
+ -- mutates the body of a loop construct to save last value into accumulator
504
+ -- can optionally skip nil results
505
+ mutate_body: (body, skip_nil=true) =>
506
+ val = if not skip_nil and is_singular body
507
+ with body[1]
508
+ body = {}
509
+ else
510
+ body = apply_to_last body, (n) ->
511
+ build.assign_one @value_name, n
512
+ @value_name
513
+
514
+ update = {
515
+ {"update", @len_name, "+=", 1}
516
+ build.assign_one @accum_name\index(@len_name), val
517
+ }
518
+
519
+ if skip_nil
520
+ table.insert body, build["if"] {
521
+ cond: {"exp", @value_name, "!=", "nil"}
522
+ then: update
523
+ }
524
+ else
525
+ table.insert body, build.group update
526
+
527
+ body
528
+
529
+ default_accumulator = (node) =>
530
+ Accumulator!\convert node
531
+
532
+
533
+ implicitly_return = (scope) ->
534
+ fn = (stm) ->
535
+ t = ntype stm
536
+ if types.manual_return[t] or not types.is_value stm
537
+ stm
538
+ elseif types.cascading[t]
539
+ scope.transform.statement stm, fn
540
+ else
541
+ if t == "comprehension" and not types.comprehension_has_value stm
542
+ stm
543
+ else
544
+ {"return", stm}
545
+
546
+ fn
547
+
548
+ Value = Transformer {
549
+ for: default_accumulator
550
+ while: default_accumulator
551
+ foreach: default_accumulator
552
+
553
+ comprehension: (node) =>
554
+ a = Accumulator!
555
+ node = @transform.statement node, (exp) ->
556
+ a\mutate_body {exp}, false
557
+ a\wrap node
558
+
559
+ tblcomprehension: (node) =>
560
+ _, key_exp, value_exp, clauses = unpack node
561
+
562
+ accum = NameProxy "tbl"
563
+ dest = build.chain { base: accum, {"index", key_exp} }
564
+ inner = build.assign_one dest, value_exp
565
+
566
+ build.block_exp {
567
+ build.assign_one accum, build.table!
568
+ construct_comprehension {inner}, clauses
569
+ accum
570
+ }
571
+
572
+ fndef: (node) =>
573
+ smart_node node
574
+ node.body = apply_to_last node.body, implicitly_return self
575
+ node
576
+
577
+ if: (node) => build.block_exp { node }
578
+ with: (node) => build.block_exp { node }
579
+ switch: (node) =>
580
+ build.block_exp { node }
581
+
582
+ -- pull out colon chain
583
+ chain: (node) =>
584
+ stub = node[#node]
585
+ if type(stub) == "table" and stub[1] == "colon_stub"
586
+ table.remove node, #node
587
+
588
+ base_name = NameProxy "base"
589
+ fn_name = NameProxy "fn"
590
+
591
+ is_super = node[2] == "super"
592
+ @transform.value build.block_exp {
593
+ build.assign {
594
+ names: {base_name}
595
+ values: {node}
596
+ }
597
+
598
+ build.assign {
599
+ names: {fn_name}
600
+ values: {
601
+ build.chain { base: base_name, {"dot", stub[2]} }
602
+ }
603
+ }
604
+
605
+ build.fndef {
606
+ args: {{"..."}}
607
+ body: {
608
+ build.chain {
609
+ base: fn_name, {"call", {is_super and "self" or base_name, "..."}}
610
+ }
611
+ }
612
+ }
613
+ }
614
+
615
+ block_exp: (node) =>
616
+ _, body = unpack node
617
+
618
+ fn = nil
619
+ arg_list = {}
620
+
621
+ insert body, Run =>
622
+ if @has_varargs
623
+ insert arg_list, "..."
624
+ insert fn.args, {"..."}
625
+
626
+ fn = smart_node build.fndef body: body
627
+ build.chain { base: {"parens", fn}, {"call", arg_list} }
628
+ }
629
+