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.
- data/.gitignore +6 -0
- data/Gemfile +2 -0
- data/README.md +91 -0
- data/Rakefile +78 -0
- data/bench.rb +22 -0
- data/cache-lexers.rb +8 -0
- data/lexers +0 -0
- data/lib/pygments/lexer.rb +148 -0
- data/lib/pygments/mentos.py +344 -0
- data/lib/pygments/popen.rb +389 -0
- data/lib/pygments/version.rb +3 -0
- data/lib/pygments.rb +8 -0
- data/pygments.rb.gemspec +24 -0
- data/test/test_data.c +2581 -0
- data/test/test_data.py +514 -0
- data/test/test_data_generated +2582 -0
- data/test/test_pygments.rb +276 -0
- data/vendor/custom_formatters/gitlab.py +171 -0
- data/vendor/custom_lexers/github.py +362 -0
- data/vendor/pygments-main/AUTHORS +115 -0
- data/vendor/pygments-main/CHANGES +762 -0
- data/vendor/pygments-main/LICENSE +25 -0
- data/vendor/pygments-main/MANIFEST.in +6 -0
- data/vendor/pygments-main/Makefile +59 -0
- data/vendor/pygments-main/REVISION +1 -0
- data/vendor/pygments-main/TODO +15 -0
- data/vendor/pygments-main/docs/generate.py +472 -0
- data/vendor/pygments-main/docs/pygmentize.1 +94 -0
- data/vendor/pygments-main/docs/src/api.txt +270 -0
- data/vendor/pygments-main/docs/src/authors.txt +5 -0
- data/vendor/pygments-main/docs/src/changelog.txt +5 -0
- data/vendor/pygments-main/docs/src/cmdline.txt +147 -0
- data/vendor/pygments-main/docs/src/filterdevelopment.txt +70 -0
- data/vendor/pygments-main/docs/src/filters.txt +42 -0
- data/vendor/pygments-main/docs/src/formatterdevelopment.txt +169 -0
- data/vendor/pygments-main/docs/src/formatters.txt +48 -0
- data/vendor/pygments-main/docs/src/index.txt +69 -0
- data/vendor/pygments-main/docs/src/installation.txt +71 -0
- data/vendor/pygments-main/docs/src/integrate.txt +43 -0
- data/vendor/pygments-main/docs/src/lexerdevelopment.txt +551 -0
- data/vendor/pygments-main/docs/src/lexers.txt +67 -0
- data/vendor/pygments-main/docs/src/moinmoin.txt +39 -0
- data/vendor/pygments-main/docs/src/plugins.txt +93 -0
- data/vendor/pygments-main/docs/src/quickstart.txt +202 -0
- data/vendor/pygments-main/docs/src/rstdirective.txt +22 -0
- data/vendor/pygments-main/docs/src/styles.txt +143 -0
- data/vendor/pygments-main/docs/src/tokens.txt +349 -0
- data/vendor/pygments-main/docs/src/unicode.txt +49 -0
- data/vendor/pygments-main/external/markdown-processor.py +67 -0
- data/vendor/pygments-main/external/moin-parser.py +112 -0
- data/vendor/pygments-main/external/pygments.bashcomp +38 -0
- data/vendor/pygments-main/external/rst-directive-old.py +77 -0
- data/vendor/pygments-main/external/rst-directive.py +83 -0
- data/vendor/pygments-main/ez_setup.py +276 -0
- data/vendor/pygments-main/pygmentize +7 -0
- data/vendor/pygments-main/pygments/__init__.py +91 -0
- data/vendor/pygments-main/pygments/cmdline.py +433 -0
- data/vendor/pygments-main/pygments/console.py +74 -0
- data/vendor/pygments-main/pygments/filter.py +74 -0
- data/vendor/pygments-main/pygments/filters/__init__.py +357 -0
- data/vendor/pygments-main/pygments/formatter.py +92 -0
- data/vendor/pygments-main/pygments/formatters/__init__.py +68 -0
- data/vendor/pygments-main/pygments/formatters/_mapping.py +94 -0
- data/vendor/pygments-main/pygments/formatters/bbcode.py +109 -0
- data/vendor/pygments-main/pygments/formatters/gitlab.py +171 -0
- data/vendor/pygments-main/pygments/formatters/html.py +750 -0
- data/vendor/pygments-main/pygments/formatters/img.py +553 -0
- data/vendor/pygments-main/pygments/formatters/latex.py +378 -0
- data/vendor/pygments-main/pygments/formatters/other.py +117 -0
- data/vendor/pygments-main/pygments/formatters/rtf.py +136 -0
- data/vendor/pygments-main/pygments/formatters/svg.py +154 -0
- data/vendor/pygments-main/pygments/formatters/terminal.py +112 -0
- data/vendor/pygments-main/pygments/formatters/terminal256.py +222 -0
- data/vendor/pygments-main/pygments/lexer.py +697 -0
- data/vendor/pygments-main/pygments/lexers/__init__.py +229 -0
- data/vendor/pygments-main/pygments/lexers/_asybuiltins.py +1645 -0
- data/vendor/pygments-main/pygments/lexers/_clbuiltins.py +232 -0
- data/vendor/pygments-main/pygments/lexers/_luabuiltins.py +249 -0
- data/vendor/pygments-main/pygments/lexers/_mapping.py +298 -0
- data/vendor/pygments-main/pygments/lexers/_phpbuiltins.py +3787 -0
- data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +232 -0
- data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +29 -0
- data/vendor/pygments-main/pygments/lexers/_vimbuiltins.py +3 -0
- data/vendor/pygments-main/pygments/lexers/agile.py +1803 -0
- data/vendor/pygments-main/pygments/lexers/asm.py +360 -0
- data/vendor/pygments-main/pygments/lexers/compiled.py +2891 -0
- data/vendor/pygments-main/pygments/lexers/dotnet.py +636 -0
- data/vendor/pygments-main/pygments/lexers/functional.py +1832 -0
- data/vendor/pygments-main/pygments/lexers/github.py +362 -0
- data/vendor/pygments-main/pygments/lexers/hdl.py +356 -0
- data/vendor/pygments-main/pygments/lexers/jvm.py +847 -0
- data/vendor/pygments-main/pygments/lexers/math.py +1072 -0
- data/vendor/pygments-main/pygments/lexers/other.py +3339 -0
- data/vendor/pygments-main/pygments/lexers/parsers.py +695 -0
- data/vendor/pygments-main/pygments/lexers/shell.py +361 -0
- data/vendor/pygments-main/pygments/lexers/special.py +100 -0
- data/vendor/pygments-main/pygments/lexers/sql.py +559 -0
- data/vendor/pygments-main/pygments/lexers/templates.py +1631 -0
- data/vendor/pygments-main/pygments/lexers/text.py +1753 -0
- data/vendor/pygments-main/pygments/lexers/web.py +2864 -0
- data/vendor/pygments-main/pygments/plugin.py +74 -0
- data/vendor/pygments-main/pygments/scanner.py +104 -0
- data/vendor/pygments-main/pygments/style.py +117 -0
- data/vendor/pygments-main/pygments/styles/__init__.py +70 -0
- data/vendor/pygments-main/pygments/styles/autumn.py +65 -0
- data/vendor/pygments-main/pygments/styles/borland.py +51 -0
- data/vendor/pygments-main/pygments/styles/bw.py +49 -0
- data/vendor/pygments-main/pygments/styles/colorful.py +81 -0
- data/vendor/pygments-main/pygments/styles/default.py +73 -0
- data/vendor/pygments-main/pygments/styles/emacs.py +72 -0
- data/vendor/pygments-main/pygments/styles/friendly.py +72 -0
- data/vendor/pygments-main/pygments/styles/fruity.py +42 -0
- data/vendor/pygments-main/pygments/styles/manni.py +75 -0
- data/vendor/pygments-main/pygments/styles/monokai.py +106 -0
- data/vendor/pygments-main/pygments/styles/murphy.py +80 -0
- data/vendor/pygments-main/pygments/styles/native.py +65 -0
- data/vendor/pygments-main/pygments/styles/pastie.py +75 -0
- data/vendor/pygments-main/pygments/styles/perldoc.py +69 -0
- data/vendor/pygments-main/pygments/styles/rrt.py +33 -0
- data/vendor/pygments-main/pygments/styles/tango.py +141 -0
- data/vendor/pygments-main/pygments/styles/trac.py +63 -0
- data/vendor/pygments-main/pygments/styles/vim.py +63 -0
- data/vendor/pygments-main/pygments/styles/vs.py +38 -0
- data/vendor/pygments-main/pygments/token.py +195 -0
- data/vendor/pygments-main/pygments/unistring.py +130 -0
- data/vendor/pygments-main/pygments/util.py +232 -0
- data/vendor/pygments-main/scripts/check_sources.py +242 -0
- data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +30 -0
- data/vendor/pygments-main/scripts/epydoc.css +280 -0
- data/vendor/pygments-main/scripts/find_codetags.py +205 -0
- data/vendor/pygments-main/scripts/find_error.py +171 -0
- data/vendor/pygments-main/scripts/get_vimkw.py +43 -0
- data/vendor/pygments-main/scripts/pylintrc +301 -0
- data/vendor/pygments-main/scripts/reindent.py +291 -0
- data/vendor/pygments-main/scripts/vim2pygments.py +933 -0
- data/vendor/pygments-main/setup.cfg +6 -0
- data/vendor/pygments-main/setup.py +88 -0
- data/vendor/pygments-main/tests/dtds/HTML4-f.dtd +37 -0
- data/vendor/pygments-main/tests/dtds/HTML4-s.dtd +869 -0
- data/vendor/pygments-main/tests/dtds/HTML4.dcl +88 -0
- data/vendor/pygments-main/tests/dtds/HTML4.dtd +1092 -0
- data/vendor/pygments-main/tests/dtds/HTML4.soc +9 -0
- data/vendor/pygments-main/tests/dtds/HTMLlat1.ent +195 -0
- data/vendor/pygments-main/tests/dtds/HTMLspec.ent +77 -0
- data/vendor/pygments-main/tests/dtds/HTMLsym.ent +241 -0
- data/vendor/pygments-main/tests/examplefiles/ANTLRv3.g +608 -0
- data/vendor/pygments-main/tests/examplefiles/AcidStateAdvanced.hs +209 -0
- data/vendor/pygments-main/tests/examplefiles/AlternatingGroup.mu +102 -0
- data/vendor/pygments-main/tests/examplefiles/CPDictionary.j +611 -0
- data/vendor/pygments-main/tests/examplefiles/Constants.mo +158 -0
- data/vendor/pygments-main/tests/examplefiles/DancingSudoku.lhs +411 -0
- data/vendor/pygments-main/tests/examplefiles/Errors.scala +18 -0
- data/vendor/pygments-main/tests/examplefiles/File.hy +174 -0
- data/vendor/pygments-main/tests/examplefiles/Intro.java +1660 -0
- data/vendor/pygments-main/tests/examplefiles/Makefile +1131 -0
- data/vendor/pygments-main/tests/examplefiles/Object.st +4394 -0
- data/vendor/pygments-main/tests/examplefiles/OrderedMap.hx +584 -0
- data/vendor/pygments-main/tests/examplefiles/SmallCheck.hs +378 -0
- data/vendor/pygments-main/tests/examplefiles/Sorting.mod +470 -0
- data/vendor/pygments-main/tests/examplefiles/Sudoku.lhs +382 -0
- data/vendor/pygments-main/tests/examplefiles/addressbook.proto +30 -0
- data/vendor/pygments-main/tests/examplefiles/antlr_throws +1 -0
- data/vendor/pygments-main/tests/examplefiles/apache2.conf +393 -0
- data/vendor/pygments-main/tests/examplefiles/as3_test.as +143 -0
- data/vendor/pygments-main/tests/examplefiles/as3_test2.as +46 -0
- data/vendor/pygments-main/tests/examplefiles/as3_test3.as +3 -0
- data/vendor/pygments-main/tests/examplefiles/aspx-cs_example +27 -0
- data/vendor/pygments-main/tests/examplefiles/badcase.java +2 -0
- data/vendor/pygments-main/tests/examplefiles/batchfile.bat +49 -0
- data/vendor/pygments-main/tests/examplefiles/boot-9.scm +1557 -0
- data/vendor/pygments-main/tests/examplefiles/cells.ps +515 -0
- data/vendor/pygments-main/tests/examplefiles/ceval.c +2604 -0
- data/vendor/pygments-main/tests/examplefiles/cheetah_example.html +13 -0
- data/vendor/pygments-main/tests/examplefiles/classes.dylan +40 -0
- data/vendor/pygments-main/tests/examplefiles/condensed_ruby.rb +10 -0
- data/vendor/pygments-main/tests/examplefiles/coq_RelationClasses +447 -0
- data/vendor/pygments-main/tests/examplefiles/database.pytb +20 -0
- data/vendor/pygments-main/tests/examplefiles/de.MoinMoin.po +2461 -0
- data/vendor/pygments-main/tests/examplefiles/demo.ahk +181 -0
- data/vendor/pygments-main/tests/examplefiles/demo.cfm +38 -0
- data/vendor/pygments-main/tests/examplefiles/django_sample.html+django +68 -0
- data/vendor/pygments-main/tests/examplefiles/dwarf.cw +17 -0
- data/vendor/pygments-main/tests/examplefiles/erl_session +10 -0
- data/vendor/pygments-main/tests/examplefiles/escape_semicolon.clj +1 -0
- data/vendor/pygments-main/tests/examplefiles/evil_regex.js +48 -0
- data/vendor/pygments-main/tests/examplefiles/example.c +2080 -0
- data/vendor/pygments-main/tests/examplefiles/example.cls +15 -0
- data/vendor/pygments-main/tests/examplefiles/example.cpp +2363 -0
- data/vendor/pygments-main/tests/examplefiles/example.gs +106 -0
- data/vendor/pygments-main/tests/examplefiles/example.gst +7 -0
- data/vendor/pygments-main/tests/examplefiles/example.kt +47 -0
- data/vendor/pygments-main/tests/examplefiles/example.lua +250 -0
- data/vendor/pygments-main/tests/examplefiles/example.moo +26 -0
- data/vendor/pygments-main/tests/examplefiles/example.moon +629 -0
- data/vendor/pygments-main/tests/examplefiles/example.nim +1010 -0
- data/vendor/pygments-main/tests/examplefiles/example.ns2 +69 -0
- data/vendor/pygments-main/tests/examplefiles/example.p +34 -0
- data/vendor/pygments-main/tests/examplefiles/example.pas +2708 -0
- data/vendor/pygments-main/tests/examplefiles/example.rb +1852 -0
- data/vendor/pygments-main/tests/examplefiles/example.rhtml +561 -0
- data/vendor/pygments-main/tests/examplefiles/example.sh-session +19 -0
- data/vendor/pygments-main/tests/examplefiles/example.sml +156 -0
- data/vendor/pygments-main/tests/examplefiles/example.snobol +15 -0
- data/vendor/pygments-main/tests/examplefiles/example.tea +34 -0
- data/vendor/pygments-main/tests/examplefiles/example.u +548 -0
- data/vendor/pygments-main/tests/examplefiles/example.weechatlog +9 -0
- data/vendor/pygments-main/tests/examplefiles/example.xhtml +376 -0
- data/vendor/pygments-main/tests/examplefiles/example.yaml +302 -0
- data/vendor/pygments-main/tests/examplefiles/example2.aspx +29 -0
- data/vendor/pygments-main/tests/examplefiles/example_elixir.ex +363 -0
- data/vendor/pygments-main/tests/examplefiles/example_file.fy +128 -0
- data/vendor/pygments-main/tests/examplefiles/firefox.mak +586 -0
- data/vendor/pygments-main/tests/examplefiles/flipflop.sv +19 -0
- data/vendor/pygments-main/tests/examplefiles/foo.sce +6 -0
- data/vendor/pygments-main/tests/examplefiles/format.ml +1213 -0
- data/vendor/pygments-main/tests/examplefiles/fucked_up.rb +77 -0
- data/vendor/pygments-main/tests/examplefiles/function.mu +1 -0
- data/vendor/pygments-main/tests/examplefiles/functional.rst +1472 -0
- data/vendor/pygments-main/tests/examplefiles/genclass.clj +510 -0
- data/vendor/pygments-main/tests/examplefiles/genshi_example.xml+genshi +193 -0
- data/vendor/pygments-main/tests/examplefiles/genshitext_example.genshitext +33 -0
- data/vendor/pygments-main/tests/examplefiles/glsl.frag +7 -0
- data/vendor/pygments-main/tests/examplefiles/glsl.vert +13 -0
- data/vendor/pygments-main/tests/examplefiles/html+php_faulty.php +1 -0
- data/vendor/pygments-main/tests/examplefiles/http_request_example +14 -0
- data/vendor/pygments-main/tests/examplefiles/http_response_example +27 -0
- data/vendor/pygments-main/tests/examplefiles/import.hs +4 -0
- data/vendor/pygments-main/tests/examplefiles/intro.ik +24 -0
- data/vendor/pygments-main/tests/examplefiles/ints.php +10 -0
- data/vendor/pygments-main/tests/examplefiles/intsyn.fun +675 -0
- data/vendor/pygments-main/tests/examplefiles/intsyn.sig +286 -0
- data/vendor/pygments-main/tests/examplefiles/irb_heredoc +8 -0
- data/vendor/pygments-main/tests/examplefiles/irc.lsp +214 -0
- data/vendor/pygments-main/tests/examplefiles/java.properties +16 -0
- data/vendor/pygments-main/tests/examplefiles/jbst_example1.jbst +28 -0
- data/vendor/pygments-main/tests/examplefiles/jbst_example2.jbst +45 -0
- data/vendor/pygments-main/tests/examplefiles/jinjadesignerdoc.rst +713 -0
- data/vendor/pygments-main/tests/examplefiles/lighttpd_config.conf +13 -0
- data/vendor/pygments-main/tests/examplefiles/linecontinuation.py +47 -0
- data/vendor/pygments-main/tests/examplefiles/ltmain.sh +2849 -0
- data/vendor/pygments-main/tests/examplefiles/main.cmake +42 -0
- data/vendor/pygments-main/tests/examplefiles/markdown.lsp +679 -0
- data/vendor/pygments-main/tests/examplefiles/matlab_noreturn +3 -0
- data/vendor/pygments-main/tests/examplefiles/matlab_sample +27 -0
- data/vendor/pygments-main/tests/examplefiles/matlabsession_sample.txt +37 -0
- data/vendor/pygments-main/tests/examplefiles/minimal.ns2 +4 -0
- data/vendor/pygments-main/tests/examplefiles/moin_SyntaxReference.txt +340 -0
- data/vendor/pygments-main/tests/examplefiles/multiline_regexes.rb +38 -0
- data/vendor/pygments-main/tests/examplefiles/nasm_aoutso.asm +96 -0
- data/vendor/pygments-main/tests/examplefiles/nasm_objexe.asm +30 -0
- data/vendor/pygments-main/tests/examplefiles/nemerle_sample.n +87 -0
- data/vendor/pygments-main/tests/examplefiles/nginx_nginx.conf +118 -0
- data/vendor/pygments-main/tests/examplefiles/numbers.c +12 -0
- data/vendor/pygments-main/tests/examplefiles/objc_example.m +25 -0
- data/vendor/pygments-main/tests/examplefiles/objc_example2.m +24 -0
- data/vendor/pygments-main/tests/examplefiles/perl_misc +62 -0
- data/vendor/pygments-main/tests/examplefiles/perl_perl5db +998 -0
- data/vendor/pygments-main/tests/examplefiles/perl_regex-delims +120 -0
- data/vendor/pygments-main/tests/examplefiles/perlfunc.1 +856 -0
- data/vendor/pygments-main/tests/examplefiles/phpcomplete.vim +567 -0
- data/vendor/pygments-main/tests/examplefiles/pleac.in.rb +1223 -0
- data/vendor/pygments-main/tests/examplefiles/postgresql_test.txt +47 -0
- data/vendor/pygments-main/tests/examplefiles/pppoe.applescript +10 -0
- data/vendor/pygments-main/tests/examplefiles/psql_session.txt +122 -0
- data/vendor/pygments-main/tests/examplefiles/py3_test.txt +2 -0
- data/vendor/pygments-main/tests/examplefiles/pycon_test.pycon +14 -0
- data/vendor/pygments-main/tests/examplefiles/pytb_test2.pytb +2 -0
- data/vendor/pygments-main/tests/examplefiles/python25-bsd.mak +234 -0
- data/vendor/pygments-main/tests/examplefiles/qsort.prolog +13 -0
- data/vendor/pygments-main/tests/examplefiles/r-console-transcript.Rout +38 -0
- data/vendor/pygments-main/tests/examplefiles/ragel-cpp_rlscan +280 -0
- data/vendor/pygments-main/tests/examplefiles/ragel-cpp_snippet +2 -0
- data/vendor/pygments-main/tests/examplefiles/regex.js +22 -0
- data/vendor/pygments-main/tests/examplefiles/reversi.lsp +427 -0
- data/vendor/pygments-main/tests/examplefiles/ruby_func_def.rb +11 -0
- data/vendor/pygments-main/tests/examplefiles/scilab.sci +30 -0
- data/vendor/pygments-main/tests/examplefiles/sibling.prolog +19 -0
- data/vendor/pygments-main/tests/examplefiles/simple.md +747 -0
- data/vendor/pygments-main/tests/examplefiles/smarty_example.html +209 -0
- data/vendor/pygments-main/tests/examplefiles/source.lgt +343 -0
- data/vendor/pygments-main/tests/examplefiles/sources.list +62 -0
- data/vendor/pygments-main/tests/examplefiles/sphere.pov +18 -0
- data/vendor/pygments-main/tests/examplefiles/sqlite3.sqlite3-console +27 -0
- data/vendor/pygments-main/tests/examplefiles/squid.conf +30 -0
- data/vendor/pygments-main/tests/examplefiles/string.jl +1031 -0
- data/vendor/pygments-main/tests/examplefiles/string_delimiters.d +21 -0
- data/vendor/pygments-main/tests/examplefiles/stripheredoc.sh +3 -0
- data/vendor/pygments-main/tests/examplefiles/test.R +119 -0
- data/vendor/pygments-main/tests/examplefiles/test.adb +211 -0
- data/vendor/pygments-main/tests/examplefiles/test.asy +131 -0
- data/vendor/pygments-main/tests/examplefiles/test.awk +121 -0
- data/vendor/pygments-main/tests/examplefiles/test.bas +29 -0
- data/vendor/pygments-main/tests/examplefiles/test.bmx +145 -0
- data/vendor/pygments-main/tests/examplefiles/test.boo +39 -0
- data/vendor/pygments-main/tests/examplefiles/test.bro +250 -0
- data/vendor/pygments-main/tests/examplefiles/test.cs +374 -0
- data/vendor/pygments-main/tests/examplefiles/test.css +54 -0
- data/vendor/pygments-main/tests/examplefiles/test.d +135 -0
- data/vendor/pygments-main/tests/examplefiles/test.dart +23 -0
- data/vendor/pygments-main/tests/examplefiles/test.dtd +89 -0
- data/vendor/pygments-main/tests/examplefiles/test.ec +605 -0
- data/vendor/pygments-main/tests/examplefiles/test.ecl +58 -0
- data/vendor/pygments-main/tests/examplefiles/test.eh +315 -0
- data/vendor/pygments-main/tests/examplefiles/test.erl +169 -0
- data/vendor/pygments-main/tests/examplefiles/test.evoque +33 -0
- data/vendor/pygments-main/tests/examplefiles/test.fan +818 -0
- data/vendor/pygments-main/tests/examplefiles/test.flx +57 -0
- data/vendor/pygments-main/tests/examplefiles/test.gdc +13 -0
- data/vendor/pygments-main/tests/examplefiles/test.groovy +97 -0
- data/vendor/pygments-main/tests/examplefiles/test.html +339 -0
- data/vendor/pygments-main/tests/examplefiles/test.ini +10 -0
- data/vendor/pygments-main/tests/examplefiles/test.java +653 -0
- data/vendor/pygments-main/tests/examplefiles/test.jsp +24 -0
- data/vendor/pygments-main/tests/examplefiles/test.maql +45 -0
- data/vendor/pygments-main/tests/examplefiles/test.mod +374 -0
- data/vendor/pygments-main/tests/examplefiles/test.moo +51 -0
- data/vendor/pygments-main/tests/examplefiles/test.myt +166 -0
- data/vendor/pygments-main/tests/examplefiles/test.nim +93 -0
- data/vendor/pygments-main/tests/examplefiles/test.pas +743 -0
- data/vendor/pygments-main/tests/examplefiles/test.php +505 -0
- data/vendor/pygments-main/tests/examplefiles/test.plot +333 -0
- data/vendor/pygments-main/tests/examplefiles/test.ps1 +108 -0
- data/vendor/pygments-main/tests/examplefiles/test.pypylog +1839 -0
- data/vendor/pygments-main/tests/examplefiles/test.r3 +94 -0
- data/vendor/pygments-main/tests/examplefiles/test.rb +177 -0
- data/vendor/pygments-main/tests/examplefiles/test.rhtml +43 -0
- data/vendor/pygments-main/tests/examplefiles/test.scaml +8 -0
- data/vendor/pygments-main/tests/examplefiles/test.ssp +12 -0
- data/vendor/pygments-main/tests/examplefiles/test.tcsh +830 -0
- data/vendor/pygments-main/tests/examplefiles/test.vb +407 -0
- data/vendor/pygments-main/tests/examplefiles/test.vhdl +161 -0
- data/vendor/pygments-main/tests/examplefiles/test.xqy +138 -0
- data/vendor/pygments-main/tests/examplefiles/test.xsl +23 -0
- data/vendor/pygments-main/tests/examplefiles/truncated.pytb +15 -0
- data/vendor/pygments-main/tests/examplefiles/type.lisp +1202 -0
- data/vendor/pygments-main/tests/examplefiles/underscore.coffee +603 -0
- data/vendor/pygments-main/tests/examplefiles/unicode.applescript +5 -0
- data/vendor/pygments-main/tests/examplefiles/unicodedoc.py +11 -0
- data/vendor/pygments-main/tests/examplefiles/webkit-transition.css +3 -0
- data/vendor/pygments-main/tests/examplefiles/while.pov +13 -0
- data/vendor/pygments-main/tests/examplefiles/wiki.factor +384 -0
- data/vendor/pygments-main/tests/examplefiles/xml_example +1897 -0
- data/vendor/pygments-main/tests/examplefiles/zmlrpc.f90 +798 -0
- data/vendor/pygments-main/tests/old_run.py +138 -0
- data/vendor/pygments-main/tests/run.py +48 -0
- data/vendor/pygments-main/tests/support.py +15 -0
- data/vendor/pygments-main/tests/test_basic_api.py +294 -0
- data/vendor/pygments-main/tests/test_clexer.py +31 -0
- data/vendor/pygments-main/tests/test_cmdline.py +105 -0
- data/vendor/pygments-main/tests/test_examplefiles.py +97 -0
- data/vendor/pygments-main/tests/test_html_formatter.py +162 -0
- data/vendor/pygments-main/tests/test_latex_formatter.py +55 -0
- data/vendor/pygments-main/tests/test_perllexer.py +137 -0
- data/vendor/pygments-main/tests/test_regexlexer.py +47 -0
- data/vendor/pygments-main/tests/test_token.py +46 -0
- data/vendor/pygments-main/tests/test_using_api.py +40 -0
- data/vendor/pygments-main/tests/test_util.py +116 -0
- data/vendor/simplejson/.gitignore +10 -0
- data/vendor/simplejson/.travis.yml +5 -0
- data/vendor/simplejson/CHANGES.txt +291 -0
- data/vendor/simplejson/LICENSE.txt +19 -0
- data/vendor/simplejson/MANIFEST.in +5 -0
- data/vendor/simplejson/README.rst +19 -0
- data/vendor/simplejson/conf.py +179 -0
- data/vendor/simplejson/index.rst +628 -0
- data/vendor/simplejson/scripts/make_docs.py +18 -0
- data/vendor/simplejson/setup.py +104 -0
- data/vendor/simplejson/simplejson/__init__.py +510 -0
- data/vendor/simplejson/simplejson/_speedups.c +2745 -0
- data/vendor/simplejson/simplejson/decoder.py +425 -0
- data/vendor/simplejson/simplejson/encoder.py +567 -0
- data/vendor/simplejson/simplejson/ordered_dict.py +119 -0
- data/vendor/simplejson/simplejson/scanner.py +77 -0
- data/vendor/simplejson/simplejson/tests/__init__.py +67 -0
- data/vendor/simplejson/simplejson/tests/test_bigint_as_string.py +55 -0
- data/vendor/simplejson/simplejson/tests/test_check_circular.py +30 -0
- data/vendor/simplejson/simplejson/tests/test_decimal.py +66 -0
- data/vendor/simplejson/simplejson/tests/test_decode.py +83 -0
- data/vendor/simplejson/simplejson/tests/test_default.py +9 -0
- data/vendor/simplejson/simplejson/tests/test_dump.py +67 -0
- data/vendor/simplejson/simplejson/tests/test_encode_basestring_ascii.py +46 -0
- data/vendor/simplejson/simplejson/tests/test_encode_for_html.py +32 -0
- data/vendor/simplejson/simplejson/tests/test_errors.py +34 -0
- data/vendor/simplejson/simplejson/tests/test_fail.py +91 -0
- data/vendor/simplejson/simplejson/tests/test_float.py +19 -0
- data/vendor/simplejson/simplejson/tests/test_indent.py +86 -0
- data/vendor/simplejson/simplejson/tests/test_item_sort_key.py +20 -0
- data/vendor/simplejson/simplejson/tests/test_namedtuple.py +121 -0
- data/vendor/simplejson/simplejson/tests/test_pass1.py +76 -0
- data/vendor/simplejson/simplejson/tests/test_pass2.py +14 -0
- data/vendor/simplejson/simplejson/tests/test_pass3.py +20 -0
- data/vendor/simplejson/simplejson/tests/test_recursion.py +67 -0
- data/vendor/simplejson/simplejson/tests/test_scanstring.py +117 -0
- data/vendor/simplejson/simplejson/tests/test_separators.py +42 -0
- data/vendor/simplejson/simplejson/tests/test_speedups.py +20 -0
- data/vendor/simplejson/simplejson/tests/test_tuple.py +49 -0
- data/vendor/simplejson/simplejson/tests/test_unicode.py +109 -0
- data/vendor/simplejson/simplejson/tool.py +39 -0
- 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,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
|
+
|