gitlab-pygments.rb 0.3.2

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 (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,106 @@
1
+ package example
2
+
3
+ uses java.util.*
4
+
5
+ uses java.io.File
6
+
7
+ class Person extends Contact implements IEmailable {
8
+
9
+ var _name : String
10
+ var _age : Integer as Age
11
+ var _relationship : Relationship as readonly RelationshipOfPerson
12
+
13
+ delegate _emailHelper represents IEmailable
14
+
15
+ enum Relationship {
16
+ FRIEND,
17
+ FAMILY,
18
+ BUSINESS_CONTACT
19
+ }
20
+
21
+ // Map of names to people
22
+ static var ALL_PEOPLE = new HashMap<String, Person>()
23
+
24
+ /* Constructs a new Person */
25
+ construct( name : String, age : Integer, relationship : Relationship ) {
26
+ _name = name
27
+ _age = age
28
+ _relationship = relationship
29
+ _emailHelper = new EmailHelper( this )
30
+ }
31
+
32
+ property get Name():String{
33
+ return _name
34
+ }
35
+
36
+ property set Name(name : String){
37
+ _name = name
38
+ }
39
+
40
+ /* Implement IEmailable#getEmailName() */
41
+ override function getEmailName():String{
42
+ return Name
43
+ }
44
+
45
+ function incrementAge() {
46
+ _age++
47
+ }
48
+
49
+ @Deprecated
50
+ function printPersonInfo() {
51
+ print( "Person { Name : ${Name}, Age : ${Age}, Relationship : ${RelationshipOfPerson} }" )
52
+ }
53
+
54
+ static function addPerson(p : Person){
55
+ if(ALL_PEOPLE.containsKey(p?.Name)) {
56
+ throw new IllegalArgumentException( "There is already someone named '${p.Name}'." )
57
+ }
58
+ ALL_PEOPLE[p.Name] = p
59
+ }
60
+
61
+ static function addAllPeople( contacts : List<Contact> ) {
62
+ for( contact in contacts ) {
63
+ if( contact typeis Person and not ALL_PEOPLE.containsKey( contact.Name )) {
64
+ addPerson( contact )
65
+ }
66
+ }
67
+ }
68
+
69
+ static function getAllPeopleOlderThanNOrderedByName( age : int ) {
70
+ var allPeople = ALL_PEOPLE.Values
71
+
72
+ return allPeople.where( \ p -> p.Age > age ).orderBy( \ p -> p.Name )
73
+ }
74
+
75
+ static function loadPersonFromDB( id : Integer ) {
76
+ using( var conn = DBConnectionManager.getConnection(),
77
+ var stmt = conn.prepareStatement( "SELECT name, age, relationship FROM PEOPLE WHERE ID=?") ){
78
+
79
+ stmt.setInt( 0, 0 )
80
+ var result = stmt.executeQuery()
81
+ if( result.next() ) {
82
+ addPerson( new Person( result.getString( "name" ),
83
+ result.getInt( "age" ),
84
+ Relationship.valueOf( result.getString( "relationship" ) ) ) )
85
+
86
+ }
87
+ }
88
+ }
89
+
90
+ /* Loads in people from a CSV */
91
+ static function loadFromFile( file : File ) {
92
+ file.eachLine( \ line -> {
93
+ if( line.HasContent ) {
94
+ addPerson( line.toPerson() )
95
+ }
96
+ })
97
+ }
98
+
99
+ /* Save people to a CSV */
100
+ static function saveToFile( file : File ) {
101
+ using( var writer = new FileWriter( file ) ) {
102
+ print( PersonCSVTemplate.renderToString( ALL_PEOPLE.Values ) )
103
+ PersonCSVTemplate.render( writer, ALL_PEOPLE.Values )
104
+ }
105
+ }
106
+ }
@@ -0,0 +1,7 @@
1
+ <%!-- defined in example/PersonCSVTemplate.gst --%>
2
+
3
+ <%@ params( users : Collection <User> ) %>
4
+
5
+ <% for( user in users ) { %>
6
+
7
+ ${user.LastName}, ${user.FirstName}, ${user.Department} <% } %>
@@ -0,0 +1,47 @@
1
+ package addressbook
2
+
3
+ class Contact(
4
+ val name : String,
5
+ val emails : List<EmailAddress>,
6
+ val addresses : List<PostalAddress>,
7
+ val phonenums : List<PhoneNumber>
8
+ )
9
+
10
+ class EmailAddress(
11
+ val user : String,
12
+ val host : String
13
+ )
14
+
15
+ class PostalAddress(
16
+ val streetAddress : String,
17
+ val city : String,
18
+ val zip : String,
19
+ val state : USState?,
20
+ val country : Country
21
+ ) {
22
+ assert {(state == null) xor (country == Countries["US"]) }
23
+ }
24
+
25
+ class PhoneNumber(
26
+ val country : Country,
27
+ val areaCode : Int,
28
+ val number : Long
29
+ )
30
+
31
+ object Countries {
32
+ fun get(id : CountryID) : Country = countryTable[id]
33
+
34
+ private var table : Map<String, Country>? = null
35
+ private val countryTable : Map<String, Country>
36
+ get() {
37
+ if (table == null) {
38
+ table = HashMap()
39
+ for (line in TextFile("countries.txt").lines(stripWhiteSpace = true)) {
40
+ table[line] = Country(line)
41
+ }
42
+ }
43
+ return table
44
+ }
45
+ }
46
+
47
+ class Country(val name : String)
@@ -0,0 +1,250 @@
1
+ --[[
2
+ Auctioneer Advanced
3
+ Version: <%version%> (<%codename%>)
4
+ Revision: $Id: CoreMain.lua 2233 2007-09-25 03:57:33Z norganna $
5
+ URL: http://auctioneeraddon.com/
6
+
7
+ This is an addon for World of Warcraft that adds statistical history to the auction data that is collected
8
+ when the auction is scanned, so that you can easily determine what price
9
+ you will be able to sell an item for at auction or at a vendor whenever you
10
+ mouse-over an item in the game
11
+
12
+ License:
13
+ This program is free software; you can redistribute it and/or
14
+ modify it under the terms of the GNU General Public License
15
+ as published by the Free Software Foundation; either version 2
16
+ of the License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU General Public License for more details.
22
+
23
+ You should have received a copy of the GNU General Public License
24
+ along with this program(see GPL.txt); if not, write to the Free Software
25
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
26
+
27
+ Note:
28
+ This AddOn's source code is specifically designed to work with
29
+ World of Warcraft's interpreted AddOn system.
30
+ You have an implicit licence to use this AddOn with these facilities
31
+ since that is its designated purpose as per:
32
+ http://www.fsf.org/licensing/licenses/gpl-faq.html#InterpreterIncompat
33
+ ]]
34
+
35
+
36
+ --[[
37
+ See CoreAPI.lua for a description of the modules API
38
+ ]]
39
+
40
+ if (not AucAdvanced) then AucAdvanced = {} end
41
+ if (not AucAdvancedData) then AucAdvancedData = {} end
42
+ if (not AucAdvancedLocal) then AucAdvancedLocal = {} end
43
+ if (not AucAdvancedConfig) then AucAdvancedConfig = {} end
44
+
45
+ AucAdvanced.Version="<%version%>";
46
+ if (AucAdvanced.Version == "<".."%version%>") then
47
+ AucAdvanced.Version = "5.0.DEV";
48
+ end
49
+
50
+ local private = {}
51
+
52
+ -- For our modular stats system, each stats engine should add their
53
+ -- subclass to AucAdvanced.Modules.<type>.<name> and store their data into their own
54
+ -- data table in AucAdvancedData.Stats.<type><name>
55
+ if (not AucAdvanced.Modules) then AucAdvanced.Modules = {Stat={},Util={},Filter={}} end
56
+ if (not AucAdvancedData.Stats) then AucAdvancedData.Stats = {} end
57
+ if (not AucAdvancedLocal.Stats) then AucAdvancedLocal.Stats = {} end
58
+
59
+ function private.TooltipHook(vars, ret, frame, name, hyperlink, quality, quantity, cost, additional)
60
+ if EnhTooltip.LinkType(hyperlink) ~= "item" then
61
+ return -- Auctioneer hooks into item tooltips only
62
+ end
63
+
64
+ -- Check to see if we need to force load scandata
65
+ local getter = AucAdvanced.Settings.GetSetting
66
+ if (getter("scandata.tooltip.display") and getter("scandata.force")) then
67
+ AucAdvanced.Scan.GetImage()
68
+ end
69
+
70
+ for system, systemMods in pairs(AucAdvanced.Modules) do
71
+ for engine, engineLib in pairs(systemMods) do
72
+ if (engineLib.Processor) then engineLib.Processor("tooltip", frame, name, hyperlink, quality, quantity, cost, additional) end
73
+ end
74
+ end
75
+ end
76
+
77
+ function private.HookAH()
78
+ hooksecurefunc("AuctionFrameBrowse_Update", AucAdvanced.API.ListUpdate)
79
+ for system, systemMods in pairs(AucAdvanced.Modules) do
80
+ for engine, engineLib in pairs(systemMods) do
81
+ if (engineLib.Processor) then
82
+ engineLib.Processor("auctionui")
83
+ end
84
+ end
85
+ end
86
+ end
87
+
88
+ function private.OnLoad(addon)
89
+ addon = addon:lower()
90
+
91
+ -- Check if the actual addon itself is loading
92
+ if (addon == "auc-advanced") then
93
+ Stubby.RegisterAddOnHook("Blizzard_AuctionUi", "Auc-Advanced", private.HookAH)
94
+ Stubby.RegisterFunctionHook("EnhTooltip.AddTooltip", 600, private.TooltipHook)
95
+ for pos, module in ipairs(AucAdvanced.EmbeddedModules) do
96
+ -- These embedded modules have also just been loaded
97
+ private.OnLoad(module)
98
+ end
99
+ end
100
+
101
+ -- Notify the actual module if it exists
102
+ local auc, sys, eng = strsplit("-", addon)
103
+ if (auc == "auc" and sys and eng) then
104
+ for system, systemMods in pairs(AucAdvanced.Modules) do
105
+ if (sys == system:lower()) then
106
+ for engine, engineLib in pairs(systemMods) do
107
+ if (eng == engine:lower() and engineLib.OnLoad) then
108
+ engineLib.OnLoad(addon)
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
114
+
115
+ -- Check all modules' load triggers and pass event to processors
116
+ for system, systemMods in pairs(AucAdvanced.Modules) do
117
+ for engine, engineLib in pairs(systemMods) do
118
+ if (engineLib.LoadTriggers and engineLib.LoadTriggers[addon]) then
119
+ if (engineLib.OnLoad) then
120
+ engineLib.OnLoad(addon)
121
+ end
122
+ end
123
+ if (engineLib.Processor and auc == "auc" and sys and eng) then
124
+ engineLib.Processor("load", addon)
125
+ end
126
+ end
127
+ end
128
+ end
129
+
130
+ function private.OnUnload()
131
+ for system, systemMods in pairs(AucAdvanced.Modules) do
132
+ for engine, engineLib in pairs(systemMods) do
133
+ if (engineLib.OnUnload) then
134
+ engineLib.OnUnload()
135
+ end
136
+ end
137
+ end
138
+ end
139
+
140
+ private.Schedule = {}
141
+ function private.OnEvent(...)
142
+ local event, arg = select(2, ...)
143
+ if (event == "ADDON_LOADED") then
144
+ local addon = string.lower(arg)
145
+ if (addon:sub(1,4) == "auc-") then
146
+ private.OnLoad(addon)
147
+ end
148
+ elseif (event == "AUCTION_HOUSE_SHOW") then
149
+ -- Do Nothing for now
150
+ elseif (event == "AUCTION_HOUSE_CLOSED") then
151
+ AucAdvanced.Scan.Interrupt()
152
+ elseif (event == "PLAYER_LOGOUT") then
153
+ AucAdvanced.Scan.Commit(true)
154
+ private.OnUnload()
155
+ elseif event == "UNIT_INVENTORY_CHANGED"
156
+ or event == "ITEM_LOCK_CHANGED"
157
+ or event == "CURSOR_UPDATE"
158
+ or event == "BAG_UPDATE"
159
+ then
160
+ private.Schedule["inventory"] = GetTime() + 0.15
161
+ end
162
+ end
163
+
164
+ function private.OnUpdate(...)
165
+ if event == "inventory" then
166
+ AucAdvanced.Post.AlertBagsChanged()
167
+ end
168
+
169
+ local now = GetTime()
170
+ for event, time in pairs(private.Schedule) do
171
+ if time > now then
172
+ for system, systemMods in pairs(AucAdvanced.Modules) do
173
+ for engine, engineLib in pairs(systemMods) do
174
+ if engineLib.Processor then
175
+ engineLib.Processor(event, time)
176
+ end
177
+ end
178
+ end
179
+ end
180
+ private.Schedule[event] = nil
181
+ end
182
+ end
183
+
184
+ private.Frame = CreateFrame("Frame")
185
+ private.Frame:RegisterEvent("ADDON_LOADED")
186
+ private.Frame:RegisterEvent("AUCTION_HOUSE_SHOW")
187
+ private.Frame:RegisterEvent("AUCTION_HOUSE_CLOSED")
188
+ private.Frame:RegisterEvent("UNIT_INVENTORY_CHANGED")
189
+ private.Frame:RegisterEvent("ITEM_LOCK_CHANGED")
190
+ private.Frame:RegisterEvent("CURSOR_UPDATE")
191
+ private.Frame:RegisterEvent("BAG_UPDATE")
192
+ private.Frame:RegisterEvent("PLAYER_LOGOUT")
193
+ private.Frame:SetScript("OnEvent", private.OnEvent)
194
+ private.Frame:SetScript("OnUpdate", private.OnUpdate)
195
+
196
+ -- Auctioneer's debug functions
197
+ AucAdvanced.Debug = {}
198
+ local addonName = "Auctioneer" -- the addon's name as it will be displayed in
199
+ -- the debug messages
200
+ -------------------------------------------------------------------------------
201
+ -- Prints the specified message to nLog.
202
+ --
203
+ -- syntax:
204
+ -- errorCode, message = debugPrint([message][, category][, title][, errorCode][, level])
205
+ --
206
+ -- parameters:
207
+ -- message - (string) the error message
208
+ -- nil, no error message specified
209
+ -- category - (string) the category of the debug message
210
+ -- nil, no category specified
211
+ -- title - (string) the title for the debug message
212
+ -- nil, no title specified
213
+ -- errorCode - (number) the error code
214
+ -- nil, no error code specified
215
+ -- level - (string) nLog message level
216
+ -- Any nLog.levels string is valid.
217
+ -- nil, no level specified
218
+ --
219
+ -- returns:
220
+ -- errorCode - (number) errorCode, if one is specified
221
+ -- nil, otherwise
222
+ -- message - (string) message, if one is specified
223
+ -- nil, otherwise
224
+ -------------------------------------------------------------------------------
225
+ function AucAdvanced.Debug.DebugPrint(message, category, title, errorCode, level)
226
+ return DebugLib.DebugPrint(addonName, message, category, title, errorCode, level)
227
+ end
228
+
229
+ -------------------------------------------------------------------------------
230
+ -- Used to make sure that conditions are met within functions.
231
+ -- If test is false, the error message will be written to nLog and the user's
232
+ -- default chat channel.
233
+ --
234
+ -- syntax:
235
+ -- assertion = assert(test, message)
236
+ --
237
+ -- parameters:
238
+ -- test - (any) false/nil, if the assertion failed
239
+ -- anything else, otherwise
240
+ -- message - (string) the message which will be output to the user
241
+ --
242
+ -- returns:
243
+ -- assertion - (boolean) true, if the test passed
244
+ -- false, otherwise
245
+ -------------------------------------------------------------------------------
246
+ function AucAdvanced.Debug.Assert(test, message)
247
+ return DebugLib.Assert(addonName, test, message)
248
+ end
249
+
250
+
@@ -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
+