pygments.rb 0.6.3 → 1.0.0
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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +11 -0
- data/README.md +6 -6
- data/Rakefile +2 -1
- data/cache-lexers.rb +1 -1
- data/circle.yml +7 -0
- data/lib/pygments/lexer.rb +3 -3
- data/lib/pygments/popen.rb +67 -30
- data/lib/pygments/version.rb +1 -1
- data/pygments.rb.gemspec +2 -1
- data/test/test_pygments.rb +16 -16
- data/vendor/pygments-main/AUTHORS +54 -8
- data/vendor/pygments-main/CHANGES +247 -25
- data/vendor/pygments-main/LICENSE +1 -1
- data/vendor/pygments-main/Makefile +15 -6
- data/vendor/pygments-main/README.rst +39 -0
- data/vendor/pygments-main/REVISION +1 -1
- data/vendor/pygments-main/TODO +0 -3
- data/vendor/pygments-main/doc/_themes/pygments14/layout.html +1 -1
- data/vendor/pygments-main/doc/_themes/pygments14/static/pygments14.css_t +1 -1
- data/vendor/pygments-main/doc/conf.py +3 -11
- data/vendor/pygments-main/doc/docs/api.rst +15 -0
- data/vendor/pygments-main/doc/docs/cmdline.rst +6 -2
- data/vendor/pygments-main/doc/docs/filterdevelopment.rst +4 -3
- data/vendor/pygments-main/doc/docs/integrate.rst +11 -15
- data/vendor/pygments-main/doc/docs/java.rst +7 -7
- data/vendor/pygments-main/doc/docs/lexerdevelopment.rst +258 -171
- data/vendor/pygments-main/doc/docs/lexers.rst +2 -2
- data/vendor/pygments-main/doc/docs/styles.rst +58 -0
- data/vendor/pygments-main/doc/docs/tokens.rst +22 -2
- data/vendor/pygments-main/doc/docs/unicode.rst +15 -7
- data/vendor/pygments-main/doc/faq.rst +17 -21
- data/vendor/pygments-main/doc/index.rst +12 -11
- data/vendor/pygments-main/doc/languages.rst +10 -7
- data/vendor/pygments-main/external/autopygmentize +9 -6
- data/vendor/pygments-main/external/lasso-builtins-generator-9.lasso +70 -52
- data/vendor/pygments-main/external/markdown-processor.py +1 -1
- data/vendor/pygments-main/external/moin-parser.py +1 -1
- data/vendor/pygments-main/external/rst-directive.py +1 -1
- data/vendor/pygments-main/pygmentize +2 -1
- data/vendor/pygments-main/pygments/__init__.py +14 -15
- data/vendor/pygments-main/pygments/cmdline.py +188 -113
- data/vendor/pygments-main/pygments/console.py +13 -13
- data/vendor/pygments-main/pygments/filter.py +7 -7
- data/vendor/pygments-main/pygments/filters/__init__.py +24 -32
- data/vendor/pygments-main/pygments/formatter.py +5 -5
- data/vendor/pygments-main/pygments/formatters/__init__.py +92 -44
- data/vendor/pygments-main/pygments/formatters/_mapping.py +51 -69
- data/vendor/pygments-main/pygments/formatters/bbcode.py +1 -1
- data/vendor/pygments-main/pygments/formatters/html.py +63 -51
- data/vendor/pygments-main/pygments/formatters/img.py +25 -22
- data/vendor/pygments-main/pygments/formatters/irc.py +182 -0
- data/vendor/pygments-main/pygments/formatters/latex.py +34 -22
- data/vendor/pygments-main/pygments/formatters/other.py +5 -7
- data/vendor/pygments-main/pygments/formatters/rtf.py +28 -31
- data/vendor/pygments-main/pygments/formatters/svg.py +1 -2
- data/vendor/pygments-main/pygments/formatters/terminal.py +29 -45
- data/vendor/pygments-main/pygments/formatters/terminal256.py +118 -31
- data/vendor/pygments-main/pygments/lexer.py +120 -34
- data/vendor/pygments-main/pygments/lexers/__init__.py +85 -53
- data/vendor/pygments-main/pygments/lexers/{_asybuiltins.py → _asy_builtins.py} +7 -7
- data/vendor/pygments-main/pygments/lexers/{_clbuiltins.py → _cl_builtins.py} +17 -17
- data/vendor/pygments-main/pygments/lexers/_cocoa_builtins.py +72 -0
- data/vendor/pygments-main/pygments/lexers/_csound_builtins.py +1346 -0
- data/vendor/pygments-main/pygments/lexers/{_lassobuiltins.py → _lasso_builtins.py} +4699 -4561
- data/vendor/pygments-main/pygments/lexers/{_luabuiltins.py → _lua_builtins.py} +91 -51
- data/vendor/pygments-main/pygments/lexers/_mapping.py +342 -242
- data/vendor/pygments-main/pygments/lexers/_mql_builtins.py +1172 -0
- data/vendor/pygments-main/pygments/lexers/_openedge_builtins.py +2547 -0
- data/vendor/pygments-main/pygments/lexers/{_phpbuiltins.py → _php_builtins.py} +350 -353
- data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +600 -212
- data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +3084 -30
- data/vendor/pygments-main/pygments/lexers/_sourcemod_builtins.py +1163 -0
- data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +91 -13
- data/vendor/pygments-main/pygments/lexers/_stata_builtins.py +419 -0
- data/vendor/pygments-main/pygments/lexers/_tsql_builtins.py +1004 -0
- data/vendor/pygments-main/pygments/lexers/_vim_builtins.py +1939 -0
- data/vendor/pygments-main/pygments/lexers/actionscript.py +240 -0
- data/vendor/pygments-main/pygments/lexers/agile.py +14 -2542
- data/vendor/pygments-main/pygments/lexers/algebra.py +221 -0
- data/vendor/pygments-main/pygments/lexers/ambient.py +76 -0
- data/vendor/pygments-main/pygments/lexers/ampl.py +87 -0
- data/vendor/pygments-main/pygments/lexers/apl.py +101 -0
- data/vendor/pygments-main/pygments/lexers/archetype.py +318 -0
- data/vendor/pygments-main/pygments/lexers/asm.py +276 -81
- data/vendor/pygments-main/pygments/lexers/automation.py +374 -0
- data/vendor/pygments-main/pygments/lexers/basic.py +500 -0
- data/vendor/pygments-main/pygments/lexers/bibtex.py +156 -0
- data/vendor/pygments-main/pygments/lexers/business.py +594 -0
- data/vendor/pygments-main/pygments/lexers/c_cpp.py +252 -0
- data/vendor/pygments-main/pygments/lexers/c_like.py +541 -0
- data/vendor/pygments-main/pygments/lexers/capnproto.py +79 -0
- data/vendor/pygments-main/pygments/lexers/chapel.py +101 -0
- data/vendor/pygments-main/pygments/lexers/clean.py +288 -0
- data/vendor/pygments-main/pygments/lexers/compiled.py +24 -5182
- data/vendor/pygments-main/pygments/lexers/configs.py +833 -0
- data/vendor/pygments-main/pygments/lexers/console.py +114 -0
- data/vendor/pygments-main/pygments/lexers/crystal.py +384 -0
- data/vendor/pygments-main/pygments/lexers/csound.py +366 -0
- data/vendor/pygments-main/pygments/lexers/css.py +689 -0
- data/vendor/pygments-main/pygments/lexers/d.py +251 -0
- data/vendor/pygments-main/pygments/lexers/dalvik.py +6 -6
- data/vendor/pygments-main/pygments/lexers/data.py +555 -0
- data/vendor/pygments-main/pygments/lexers/diff.py +165 -0
- data/vendor/pygments-main/pygments/lexers/dotnet.py +96 -88
- data/vendor/pygments-main/pygments/lexers/dsls.py +878 -0
- data/vendor/pygments-main/pygments/lexers/dylan.py +289 -0
- data/vendor/pygments-main/pygments/lexers/ecl.py +125 -0
- data/vendor/pygments-main/pygments/lexers/eiffel.py +65 -0
- data/vendor/pygments-main/pygments/lexers/elm.py +121 -0
- data/vendor/pygments-main/pygments/lexers/erlang.py +533 -0
- data/vendor/pygments-main/pygments/lexers/esoteric.py +275 -0
- data/vendor/pygments-main/pygments/lexers/ezhil.py +68 -0
- data/vendor/pygments-main/pygments/lexers/factor.py +344 -0
- data/vendor/pygments-main/pygments/lexers/fantom.py +250 -0
- data/vendor/pygments-main/pygments/lexers/felix.py +273 -0
- data/vendor/pygments-main/pygments/lexers/forth.py +177 -0
- data/vendor/pygments-main/pygments/lexers/fortran.py +205 -0
- data/vendor/pygments-main/pygments/lexers/foxpro.py +1 -1
- data/vendor/pygments-main/pygments/lexers/functional.py +11 -3661
- data/vendor/pygments-main/pygments/lexers/go.py +101 -0
- data/vendor/pygments-main/pygments/lexers/grammar_notation.py +213 -0
- data/vendor/pygments-main/pygments/lexers/graph.py +7 -8
- data/vendor/pygments-main/pygments/lexers/graphics.py +553 -0
- data/vendor/pygments-main/pygments/lexers/haskell.py +840 -0
- data/vendor/pygments-main/pygments/lexers/haxe.py +936 -0
- data/vendor/pygments-main/pygments/lexers/hdl.py +172 -145
- data/vendor/pygments-main/pygments/lexers/hexdump.py +97 -0
- data/vendor/pygments-main/pygments/lexers/html.py +602 -0
- data/vendor/pygments-main/pygments/lexers/idl.py +270 -0
- data/vendor/pygments-main/pygments/lexers/igor.py +288 -0
- data/vendor/pygments-main/pygments/lexers/inferno.py +3 -3
- data/vendor/pygments-main/pygments/lexers/installers.py +322 -0
- data/vendor/pygments-main/pygments/lexers/int_fiction.py +1343 -0
- data/vendor/pygments-main/pygments/lexers/iolang.py +63 -0
- data/vendor/pygments-main/pygments/lexers/j.py +146 -0
- data/vendor/pygments-main/pygments/lexers/javascript.py +1506 -0
- data/vendor/pygments-main/pygments/lexers/julia.py +333 -0
- data/vendor/pygments-main/pygments/lexers/jvm.py +232 -186
- data/vendor/pygments-main/pygments/lexers/lisp.py +2621 -0
- data/vendor/pygments-main/pygments/lexers/make.py +202 -0
- data/vendor/pygments-main/pygments/lexers/markup.py +595 -0
- data/vendor/pygments-main/pygments/lexers/math.py +11 -2276
- data/vendor/pygments-main/pygments/lexers/matlab.py +663 -0
- data/vendor/pygments-main/pygments/lexers/ml.py +769 -0
- data/vendor/pygments-main/pygments/lexers/modeling.py +358 -0
- data/vendor/pygments-main/pygments/lexers/modula2.py +1561 -0
- data/vendor/pygments-main/pygments/lexers/monte.py +203 -0
- data/vendor/pygments-main/pygments/lexers/ncl.py +1053 -0
- data/vendor/pygments-main/pygments/lexers/nimrod.py +159 -0
- data/vendor/pygments-main/pygments/lexers/nit.py +64 -0
- data/vendor/pygments-main/pygments/lexers/nix.py +136 -0
- data/vendor/pygments-main/pygments/lexers/oberon.py +105 -0
- data/vendor/pygments-main/pygments/lexers/objective.py +504 -0
- data/vendor/pygments-main/pygments/lexers/ooc.py +85 -0
- data/vendor/pygments-main/pygments/lexers/other.py +30 -4481
- data/vendor/pygments-main/pygments/lexers/parasail.py +79 -0
- data/vendor/pygments-main/pygments/lexers/parsers.py +171 -114
- data/vendor/pygments-main/pygments/lexers/pascal.py +644 -0
- data/vendor/pygments-main/pygments/lexers/pawn.py +199 -0
- data/vendor/pygments-main/pygments/lexers/perl.py +616 -0
- data/vendor/pygments-main/pygments/lexers/php.py +267 -0
- data/vendor/pygments-main/pygments/lexers/praat.py +294 -0
- data/vendor/pygments-main/pygments/lexers/prolog.py +306 -0
- data/vendor/pygments-main/pygments/lexers/python.py +938 -0
- data/vendor/pygments-main/pygments/lexers/qvt.py +152 -0
- data/vendor/pygments-main/pygments/lexers/r.py +453 -0
- data/vendor/pygments-main/pygments/lexers/rdf.py +195 -24
- data/vendor/pygments-main/pygments/lexers/rebol.py +431 -0
- data/vendor/pygments-main/pygments/lexers/resource.py +85 -0
- data/vendor/pygments-main/pygments/lexers/rnc.py +67 -0
- data/vendor/pygments-main/pygments/lexers/roboconf.py +82 -0
- data/vendor/pygments-main/pygments/lexers/{_robotframeworklexer.py → robotframework.py} +20 -18
- data/vendor/pygments-main/pygments/lexers/ruby.py +519 -0
- data/vendor/pygments-main/pygments/lexers/rust.py +209 -0
- data/vendor/pygments-main/pygments/lexers/sas.py +228 -0
- data/vendor/pygments-main/pygments/lexers/scripting.py +1222 -0
- data/vendor/pygments-main/pygments/lexers/shell.py +478 -115
- data/vendor/pygments-main/pygments/lexers/smalltalk.py +195 -0
- data/vendor/pygments-main/pygments/lexers/smv.py +75 -0
- data/vendor/pygments-main/pygments/lexers/snobol.py +83 -0
- data/vendor/pygments-main/pygments/lexers/special.py +6 -2
- data/vendor/pygments-main/pygments/lexers/sql.py +209 -120
- data/vendor/pygments-main/pygments/lexers/stata.py +106 -0
- data/vendor/pygments-main/pygments/lexers/supercollider.py +90 -0
- data/vendor/pygments-main/pygments/lexers/tcl.py +145 -0
- data/vendor/pygments-main/pygments/lexers/templates.py +282 -90
- data/vendor/pygments-main/pygments/lexers/testing.py +207 -0
- data/vendor/pygments-main/pygments/lexers/text.py +15 -2045
- data/vendor/pygments-main/pygments/lexers/textedit.py +169 -0
- data/vendor/pygments-main/pygments/lexers/textfmts.py +297 -0
- data/vendor/pygments-main/pygments/lexers/theorem.py +458 -0
- data/vendor/pygments-main/pygments/lexers/trafficscript.py +54 -0
- data/vendor/pygments-main/pygments/lexers/typoscript.py +225 -0
- data/vendor/pygments-main/pygments/lexers/urbi.py +133 -0
- data/vendor/pygments-main/pygments/lexers/varnish.py +190 -0
- data/vendor/pygments-main/pygments/lexers/verification.py +111 -0
- data/vendor/pygments-main/pygments/lexers/web.py +13 -4499
- data/vendor/pygments-main/pygments/lexers/webmisc.py +979 -0
- data/vendor/pygments-main/pygments/lexers/whiley.py +117 -0
- data/vendor/pygments-main/pygments/lexers/x10.py +69 -0
- data/vendor/pygments-main/pygments/modeline.py +5 -2
- data/vendor/pygments-main/pygments/plugin.py +1 -1
- data/vendor/pygments-main/pygments/regexopt.py +92 -0
- data/vendor/pygments-main/pygments/scanner.py +3 -2
- data/vendor/pygments-main/pygments/sphinxext.py +11 -6
- data/vendor/pygments-main/pygments/style.py +41 -4
- data/vendor/pygments-main/pygments/styles/__init__.py +5 -1
- data/vendor/pygments-main/pygments/styles/algol.py +63 -0
- data/vendor/pygments-main/pygments/styles/algol_nu.py +63 -0
- data/vendor/pygments-main/pygments/styles/arduino.py +98 -0
- data/vendor/pygments-main/pygments/styles/autumn.py +1 -1
- data/vendor/pygments-main/pygments/styles/borland.py +1 -1
- data/vendor/pygments-main/pygments/styles/bw.py +1 -1
- data/vendor/pygments-main/pygments/styles/colorful.py +1 -1
- data/vendor/pygments-main/pygments/styles/default.py +1 -1
- data/vendor/pygments-main/pygments/styles/emacs.py +1 -1
- data/vendor/pygments-main/pygments/styles/friendly.py +1 -1
- data/vendor/pygments-main/pygments/styles/fruity.py +1 -1
- data/vendor/pygments-main/pygments/styles/igor.py +1 -1
- data/vendor/pygments-main/pygments/styles/lovelace.py +97 -0
- data/vendor/pygments-main/pygments/styles/manni.py +1 -1
- data/vendor/pygments-main/pygments/styles/monokai.py +1 -1
- data/vendor/pygments-main/pygments/styles/murphy.py +1 -1
- data/vendor/pygments-main/pygments/styles/native.py +1 -1
- data/vendor/pygments-main/pygments/styles/paraiso_dark.py +1 -1
- data/vendor/pygments-main/pygments/styles/paraiso_light.py +1 -1
- data/vendor/pygments-main/pygments/styles/pastie.py +1 -1
- data/vendor/pygments-main/pygments/styles/perldoc.py +2 -2
- data/vendor/pygments-main/pygments/styles/rrt.py +1 -1
- data/vendor/pygments-main/pygments/styles/sas.py +41 -0
- data/vendor/pygments-main/pygments/styles/stata.py +37 -0
- data/vendor/pygments-main/pygments/styles/tango.py +1 -1
- data/vendor/pygments-main/pygments/styles/trac.py +1 -1
- data/vendor/pygments-main/pygments/styles/vim.py +1 -1
- data/vendor/pygments-main/pygments/styles/vs.py +1 -1
- data/vendor/pygments-main/pygments/styles/xcode.py +1 -1
- data/vendor/pygments-main/pygments/token.py +31 -16
- data/vendor/pygments-main/pygments/unistring.py +141 -65
- data/vendor/pygments-main/pygments/util.py +129 -33
- data/vendor/pygments-main/requirements.txt +5 -0
- data/vendor/pygments-main/scripts/check_sources.py +25 -40
- data/vendor/pygments-main/scripts/debug_lexer.py +246 -0
- data/vendor/pygments-main/scripts/find_error.py +1 -0
- data/vendor/pygments-main/scripts/get_vimkw.py +35 -4
- data/vendor/pygments-main/setup.cfg +3 -0
- data/vendor/pygments-main/setup.py +17 -30
- data/vendor/pygments-main/tox.ini +7 -0
- metadata +159 -387
- data/vendor/pygments-main/ez_setup.py +0 -382
- data/vendor/pygments-main/pygments/lexers/_cocoabuiltins.py +0 -73
- data/vendor/pygments-main/pygments/lexers/_openedgebuiltins.py +0 -562
- data/vendor/pygments-main/pygments/lexers/_sourcemodbuiltins.py +0 -1077
- data/vendor/pygments-main/pygments/lexers/_vimbuiltins.py +0 -13
- data/vendor/pygments-main/pygments/lexers/qbasic.py +0 -157
- data/vendor/pygments-main/scripts/find_codetags.py +0 -213
- data/vendor/pygments-main/scripts/find_error.py +0 -173
- data/vendor/pygments-main/tests/dtds/HTML4-f.dtd +0 -37
- data/vendor/pygments-main/tests/dtds/HTML4-s.dtd +0 -869
- data/vendor/pygments-main/tests/dtds/HTML4.dcl +0 -88
- data/vendor/pygments-main/tests/dtds/HTML4.dtd +0 -1092
- data/vendor/pygments-main/tests/dtds/HTML4.soc +0 -9
- data/vendor/pygments-main/tests/dtds/HTMLlat1.ent +0 -195
- data/vendor/pygments-main/tests/dtds/HTMLspec.ent +0 -77
- data/vendor/pygments-main/tests/dtds/HTMLsym.ent +0 -241
- data/vendor/pygments-main/tests/examplefiles/99_bottles_of_beer.chpl +0 -118
- data/vendor/pygments-main/tests/examplefiles/AcidStateAdvanced.hs +0 -209
- data/vendor/pygments-main/tests/examplefiles/AlternatingGroup.mu +0 -102
- data/vendor/pygments-main/tests/examplefiles/BOM.js +0 -1
- data/vendor/pygments-main/tests/examplefiles/CPDictionary.j +0 -611
- data/vendor/pygments-main/tests/examplefiles/Config.in.cache +0 -1973
- data/vendor/pygments-main/tests/examplefiles/Constants.mo +0 -158
- data/vendor/pygments-main/tests/examplefiles/DancingSudoku.lhs +0 -411
- data/vendor/pygments-main/tests/examplefiles/Deflate.fs +0 -578
- data/vendor/pygments-main/tests/examplefiles/Error.pmod +0 -38
- data/vendor/pygments-main/tests/examplefiles/Errors.scala +0 -18
- data/vendor/pygments-main/tests/examplefiles/FakeFile.pike +0 -360
- data/vendor/pygments-main/tests/examplefiles/Get-CommandDefinitionHtml.ps1 +0 -66
- data/vendor/pygments-main/tests/examplefiles/IPDispatchC.nc +0 -104
- data/vendor/pygments-main/tests/examplefiles/IPDispatchP.nc +0 -671
- data/vendor/pygments-main/tests/examplefiles/Intro.java +0 -1660
- data/vendor/pygments-main/tests/examplefiles/Makefile +0 -1131
- data/vendor/pygments-main/tests/examplefiles/Object.st +0 -4394
- data/vendor/pygments-main/tests/examplefiles/OrderedMap.hx +0 -584
- data/vendor/pygments-main/tests/examplefiles/RoleQ.pm6 +0 -23
- data/vendor/pygments-main/tests/examplefiles/SmallCheck.hs +0 -378
- data/vendor/pygments-main/tests/examplefiles/Sorting.mod +0 -470
- data/vendor/pygments-main/tests/examplefiles/Sudoku.lhs +0 -382
- data/vendor/pygments-main/tests/examplefiles/addressbook.proto +0 -30
- data/vendor/pygments-main/tests/examplefiles/antlr_ANTLRv3.g +0 -608
- data/vendor/pygments-main/tests/examplefiles/antlr_throws +0 -1
- data/vendor/pygments-main/tests/examplefiles/apache2.conf +0 -393
- data/vendor/pygments-main/tests/examplefiles/as3_test.as +0 -143
- data/vendor/pygments-main/tests/examplefiles/as3_test2.as +0 -46
- data/vendor/pygments-main/tests/examplefiles/as3_test3.as +0 -3
- data/vendor/pygments-main/tests/examplefiles/aspx-cs_example +0 -27
- data/vendor/pygments-main/tests/examplefiles/autoit_submit.au3 +0 -25
- data/vendor/pygments-main/tests/examplefiles/badcase.java +0 -2
- data/vendor/pygments-main/tests/examplefiles/batchfile.bat +0 -49
- data/vendor/pygments-main/tests/examplefiles/bigtest.nsi +0 -308
- data/vendor/pygments-main/tests/examplefiles/boot-9.scm +0 -1557
- data/vendor/pygments-main/tests/examplefiles/ca65_example +0 -284
- data/vendor/pygments-main/tests/examplefiles/cbmbas_example +0 -9
- data/vendor/pygments-main/tests/examplefiles/cells.ps +0 -515
- data/vendor/pygments-main/tests/examplefiles/ceval.c +0 -2604
- data/vendor/pygments-main/tests/examplefiles/cheetah_example.html +0 -13
- data/vendor/pygments-main/tests/examplefiles/classes.dylan +0 -125
- data/vendor/pygments-main/tests/examplefiles/clojure-weird-keywords.clj +0 -5
- data/vendor/pygments-main/tests/examplefiles/condensed_ruby.rb +0 -10
- data/vendor/pygments-main/tests/examplefiles/coq_RelationClasses +0 -447
- data/vendor/pygments-main/tests/examplefiles/core.cljs +0 -52
- data/vendor/pygments-main/tests/examplefiles/database.pytb +0 -20
- data/vendor/pygments-main/tests/examplefiles/de.MoinMoin.po +0 -2461
- data/vendor/pygments-main/tests/examplefiles/demo.ahk +0 -181
- data/vendor/pygments-main/tests/examplefiles/demo.cfm +0 -50
- data/vendor/pygments-main/tests/examplefiles/demo.hbs +0 -12
- data/vendor/pygments-main/tests/examplefiles/django_sample.html+django +0 -68
- data/vendor/pygments-main/tests/examplefiles/dwarf.cw +0 -17
- data/vendor/pygments-main/tests/examplefiles/ember.handlebars +0 -33
- data/vendor/pygments-main/tests/examplefiles/erl_session +0 -10
- data/vendor/pygments-main/tests/examplefiles/escape_semicolon.clj +0 -1
- data/vendor/pygments-main/tests/examplefiles/evil_regex.js +0 -48
- data/vendor/pygments-main/tests/examplefiles/example.Rd +0 -78
- data/vendor/pygments-main/tests/examplefiles/example.als +0 -217
- data/vendor/pygments-main/tests/examplefiles/example.bug +0 -54
- data/vendor/pygments-main/tests/examplefiles/example.c +0 -2080
- data/vendor/pygments-main/tests/examplefiles/example.ceylon +0 -52
- data/vendor/pygments-main/tests/examplefiles/example.chai +0 -6
- data/vendor/pygments-main/tests/examplefiles/example.clay +0 -33
- data/vendor/pygments-main/tests/examplefiles/example.cls +0 -15
- data/vendor/pygments-main/tests/examplefiles/example.cob +0 -3556
- data/vendor/pygments-main/tests/examplefiles/example.coffee +0 -27
- data/vendor/pygments-main/tests/examplefiles/example.cpp +0 -2363
- data/vendor/pygments-main/tests/examplefiles/example.e +0 -124
- data/vendor/pygments-main/tests/examplefiles/example.f90 +0 -8
- data/vendor/pygments-main/tests/examplefiles/example.feature +0 -16
- data/vendor/pygments-main/tests/examplefiles/example.gd +0 -23
- data/vendor/pygments-main/tests/examplefiles/example.gi +0 -64
- data/vendor/pygments-main/tests/examplefiles/example.groovy +0 -2
- data/vendor/pygments-main/tests/examplefiles/example.gs +0 -106
- data/vendor/pygments-main/tests/examplefiles/example.gst +0 -7
- data/vendor/pygments-main/tests/examplefiles/example.hs +0 -27
- data/vendor/pygments-main/tests/examplefiles/example.hx +0 -185
- data/vendor/pygments-main/tests/examplefiles/example.i6t +0 -32
- data/vendor/pygments-main/tests/examplefiles/example.i7x +0 -45
- data/vendor/pygments-main/tests/examplefiles/example.inf +0 -374
- data/vendor/pygments-main/tests/examplefiles/example.j +0 -564
- data/vendor/pygments-main/tests/examplefiles/example.jag +0 -48
- data/vendor/pygments-main/tests/examplefiles/example.java +0 -16
- data/vendor/pygments-main/tests/examplefiles/example.kal +0 -75
- data/vendor/pygments-main/tests/examplefiles/example.kt +0 -47
- data/vendor/pygments-main/tests/examplefiles/example.lagda +0 -19
- data/vendor/pygments-main/tests/examplefiles/example.liquid +0 -42
- data/vendor/pygments-main/tests/examplefiles/example.lua +0 -250
- data/vendor/pygments-main/tests/examplefiles/example.ma +0 -8
- data/vendor/pygments-main/tests/examplefiles/example.monkey +0 -152
- data/vendor/pygments-main/tests/examplefiles/example.moo +0 -26
- data/vendor/pygments-main/tests/examplefiles/example.moon +0 -629
- data/vendor/pygments-main/tests/examplefiles/example.mq4 +0 -187
- data/vendor/pygments-main/tests/examplefiles/example.mqh +0 -123
- data/vendor/pygments-main/tests/examplefiles/example.msc +0 -43
- data/vendor/pygments-main/tests/examplefiles/example.ni +0 -57
- data/vendor/pygments-main/tests/examplefiles/example.nim +0 -1010
- data/vendor/pygments-main/tests/examplefiles/example.nix +0 -80
- data/vendor/pygments-main/tests/examplefiles/example.ns2 +0 -69
- data/vendor/pygments-main/tests/examplefiles/example.pas +0 -2708
- data/vendor/pygments-main/tests/examplefiles/example.pp +0 -8
- data/vendor/pygments-main/tests/examplefiles/example.prg +0 -161
- data/vendor/pygments-main/tests/examplefiles/example.rb +0 -1852
- data/vendor/pygments-main/tests/examplefiles/example.red +0 -257
- data/vendor/pygments-main/tests/examplefiles/example.reds +0 -150
- data/vendor/pygments-main/tests/examplefiles/example.reg +0 -19
- data/vendor/pygments-main/tests/examplefiles/example.rexx +0 -50
- data/vendor/pygments-main/tests/examplefiles/example.rhtml +0 -561
- data/vendor/pygments-main/tests/examplefiles/example.rkt +0 -743
- data/vendor/pygments-main/tests/examplefiles/example.rpf +0 -4
- data/vendor/pygments-main/tests/examplefiles/example.sh +0 -22
- data/vendor/pygments-main/tests/examplefiles/example.sh-session +0 -19
- data/vendor/pygments-main/tests/examplefiles/example.shell-session +0 -45
- data/vendor/pygments-main/tests/examplefiles/example.slim +0 -31
- data/vendor/pygments-main/tests/examplefiles/example.sls +0 -51
- data/vendor/pygments-main/tests/examplefiles/example.sml +0 -156
- data/vendor/pygments-main/tests/examplefiles/example.snobol +0 -15
- data/vendor/pygments-main/tests/examplefiles/example.stan +0 -110
- data/vendor/pygments-main/tests/examplefiles/example.tea +0 -34
- data/vendor/pygments-main/tests/examplefiles/example.todotxt +0 -9
- data/vendor/pygments-main/tests/examplefiles/example.ts +0 -28
- data/vendor/pygments-main/tests/examplefiles/example.u +0 -548
- data/vendor/pygments-main/tests/examplefiles/example.weechatlog +0 -9
- data/vendor/pygments-main/tests/examplefiles/example.xhtml +0 -376
- data/vendor/pygments-main/tests/examplefiles/example.xtend +0 -34
- data/vendor/pygments-main/tests/examplefiles/example.yaml +0 -302
- data/vendor/pygments-main/tests/examplefiles/example2.aspx +0 -29
- data/vendor/pygments-main/tests/examplefiles/example2.msc +0 -79
- data/vendor/pygments-main/tests/examplefiles/exampleScript.cfc +0 -241
- data/vendor/pygments-main/tests/examplefiles/exampleTag.cfc +0 -18
- data/vendor/pygments-main/tests/examplefiles/example_elixir.ex +0 -205
- data/vendor/pygments-main/tests/examplefiles/example_file.fy +0 -128
- data/vendor/pygments-main/tests/examplefiles/firefox.mak +0 -586
- data/vendor/pygments-main/tests/examplefiles/flipflop.sv +0 -19
- data/vendor/pygments-main/tests/examplefiles/foo.sce +0 -6
- data/vendor/pygments-main/tests/examplefiles/format.ml +0 -1213
- data/vendor/pygments-main/tests/examplefiles/fucked_up.rb +0 -77
- data/vendor/pygments-main/tests/examplefiles/function.mu +0 -1
- data/vendor/pygments-main/tests/examplefiles/functional.rst +0 -1472
- data/vendor/pygments-main/tests/examplefiles/garcia-wachs.kk +0 -133
- data/vendor/pygments-main/tests/examplefiles/genclass.clj +0 -510
- data/vendor/pygments-main/tests/examplefiles/genshi_example.xml+genshi +0 -193
- data/vendor/pygments-main/tests/examplefiles/genshitext_example.genshitext +0 -33
- data/vendor/pygments-main/tests/examplefiles/glsl.frag +0 -7
- data/vendor/pygments-main/tests/examplefiles/glsl.vert +0 -13
- data/vendor/pygments-main/tests/examplefiles/grammar-test.p6 +0 -22
- data/vendor/pygments-main/tests/examplefiles/hash_syntax.rb +0 -5
- data/vendor/pygments-main/tests/examplefiles/hello.at +0 -6
- data/vendor/pygments-main/tests/examplefiles/hello.golo +0 -5
- data/vendor/pygments-main/tests/examplefiles/hello.lsl +0 -12
- data/vendor/pygments-main/tests/examplefiles/hello.smali +0 -40
- data/vendor/pygments-main/tests/examplefiles/hello.sp +0 -9
- data/vendor/pygments-main/tests/examplefiles/html+php_faulty.php +0 -1
- data/vendor/pygments-main/tests/examplefiles/http_request_example +0 -15
- data/vendor/pygments-main/tests/examplefiles/http_response_example +0 -29
- data/vendor/pygments-main/tests/examplefiles/hybris_File.hy +0 -174
- data/vendor/pygments-main/tests/examplefiles/idl_sample.pro +0 -73
- data/vendor/pygments-main/tests/examplefiles/iex_example +0 -23
- data/vendor/pygments-main/tests/examplefiles/inet_pton6.dg +0 -71
- data/vendor/pygments-main/tests/examplefiles/intro.ik +0 -24
- data/vendor/pygments-main/tests/examplefiles/ints.php +0 -10
- data/vendor/pygments-main/tests/examplefiles/intsyn.fun +0 -675
- data/vendor/pygments-main/tests/examplefiles/intsyn.sig +0 -286
- data/vendor/pygments-main/tests/examplefiles/irb_heredoc +0 -8
- data/vendor/pygments-main/tests/examplefiles/irc.lsp +0 -214
- data/vendor/pygments-main/tests/examplefiles/java.properties +0 -16
- data/vendor/pygments-main/tests/examplefiles/jbst_example1.jbst +0 -28
- data/vendor/pygments-main/tests/examplefiles/jbst_example2.jbst +0 -45
- data/vendor/pygments-main/tests/examplefiles/jinjadesignerdoc.rst +0 -713
- data/vendor/pygments-main/tests/examplefiles/json.lasso +0 -301
- data/vendor/pygments-main/tests/examplefiles/json.lasso9 +0 -213
- data/vendor/pygments-main/tests/examplefiles/language.hy +0 -165
- data/vendor/pygments-main/tests/examplefiles/lighttpd_config.conf +0 -13
- data/vendor/pygments-main/tests/examplefiles/limbo.b +0 -456
- data/vendor/pygments-main/tests/examplefiles/linecontinuation.py +0 -47
- data/vendor/pygments-main/tests/examplefiles/livescript-demo.ls +0 -43
- data/vendor/pygments-main/tests/examplefiles/logos_example.xm +0 -28
- data/vendor/pygments-main/tests/examplefiles/ltmain.sh +0 -2849
- data/vendor/pygments-main/tests/examplefiles/main.cmake +0 -44
- data/vendor/pygments-main/tests/examplefiles/markdown.lsp +0 -679
- data/vendor/pygments-main/tests/examplefiles/matlab_noreturn +0 -3
- data/vendor/pygments-main/tests/examplefiles/matlab_sample +0 -30
- data/vendor/pygments-main/tests/examplefiles/matlabsession_sample.txt +0 -37
- data/vendor/pygments-main/tests/examplefiles/metagrammar.treetop +0 -455
- data/vendor/pygments-main/tests/examplefiles/minehunt.qml +0 -112
- data/vendor/pygments-main/tests/examplefiles/minimal.ns2 +0 -4
- data/vendor/pygments-main/tests/examplefiles/moin_SyntaxReference.txt +0 -340
- data/vendor/pygments-main/tests/examplefiles/multiline_regexes.rb +0 -38
- data/vendor/pygments-main/tests/examplefiles/nanomsg.intr +0 -95
- data/vendor/pygments-main/tests/examplefiles/nasm_aoutso.asm +0 -96
- data/vendor/pygments-main/tests/examplefiles/nasm_objexe.asm +0 -30
- data/vendor/pygments-main/tests/examplefiles/nemerle_sample.n +0 -87
- data/vendor/pygments-main/tests/examplefiles/nginx_nginx.conf +0 -118
- data/vendor/pygments-main/tests/examplefiles/numbers.c +0 -12
- data/vendor/pygments-main/tests/examplefiles/objc_example.m +0 -179
- data/vendor/pygments-main/tests/examplefiles/openedge_example +0 -34
- data/vendor/pygments-main/tests/examplefiles/pawn_example +0 -25
- data/vendor/pygments-main/tests/examplefiles/perl_misc +0 -62
- data/vendor/pygments-main/tests/examplefiles/perl_perl5db +0 -998
- data/vendor/pygments-main/tests/examplefiles/perl_regex-delims +0 -120
- data/vendor/pygments-main/tests/examplefiles/perlfunc.1 +0 -856
- data/vendor/pygments-main/tests/examplefiles/phpMyAdmin.spec +0 -163
- data/vendor/pygments-main/tests/examplefiles/phpcomplete.vim +0 -567
- data/vendor/pygments-main/tests/examplefiles/pleac.in.rb +0 -1223
- data/vendor/pygments-main/tests/examplefiles/postgresql_test.txt +0 -47
- data/vendor/pygments-main/tests/examplefiles/pppoe.applescript +0 -10
- data/vendor/pygments-main/tests/examplefiles/psql_session.txt +0 -122
- data/vendor/pygments-main/tests/examplefiles/py3_test.txt +0 -2
- data/vendor/pygments-main/tests/examplefiles/py3tb_test.py3tb +0 -4
- data/vendor/pygments-main/tests/examplefiles/pycon_test.pycon +0 -14
- data/vendor/pygments-main/tests/examplefiles/pytb_test2.pytb +0 -2
- data/vendor/pygments-main/tests/examplefiles/pytb_test3.pytb +0 -4
- data/vendor/pygments-main/tests/examplefiles/python25-bsd.mak +0 -234
- data/vendor/pygments-main/tests/examplefiles/qbasic_example +0 -2
- data/vendor/pygments-main/tests/examplefiles/qsort.prolog +0 -13
- data/vendor/pygments-main/tests/examplefiles/r-console-transcript.Rout +0 -38
- data/vendor/pygments-main/tests/examplefiles/r6rs-comments.scm +0 -23
- data/vendor/pygments-main/tests/examplefiles/ragel-cpp_rlscan +0 -280
- data/vendor/pygments-main/tests/examplefiles/ragel-cpp_snippet +0 -2
- data/vendor/pygments-main/tests/examplefiles/regex.js +0 -22
- data/vendor/pygments-main/tests/examplefiles/reversi.lsp +0 -427
- data/vendor/pygments-main/tests/examplefiles/robotframework_test.txt +0 -39
- data/vendor/pygments-main/tests/examplefiles/rql-queries.rql +0 -34
- data/vendor/pygments-main/tests/examplefiles/ruby_func_def.rb +0 -11
- data/vendor/pygments-main/tests/examplefiles/rust_example.rs +0 -233
- data/vendor/pygments-main/tests/examplefiles/scilab.sci +0 -30
- data/vendor/pygments-main/tests/examplefiles/scope.cirru +0 -43
- data/vendor/pygments-main/tests/examplefiles/session.dylan-console +0 -9
- data/vendor/pygments-main/tests/examplefiles/sibling.prolog +0 -19
- data/vendor/pygments-main/tests/examplefiles/simple.md +0 -747
- data/vendor/pygments-main/tests/examplefiles/smarty_example.html +0 -209
- data/vendor/pygments-main/tests/examplefiles/source.lgt +0 -343
- data/vendor/pygments-main/tests/examplefiles/sources.list +0 -62
- data/vendor/pygments-main/tests/examplefiles/sparql.rq +0 -23
- data/vendor/pygments-main/tests/examplefiles/sphere.pov +0 -18
- data/vendor/pygments-main/tests/examplefiles/sqlite3.sqlite3-console +0 -27
- data/vendor/pygments-main/tests/examplefiles/squid.conf +0 -30
- data/vendor/pygments-main/tests/examplefiles/string.jl +0 -1031
- data/vendor/pygments-main/tests/examplefiles/string_delimiters.d +0 -21
- data/vendor/pygments-main/tests/examplefiles/stripheredoc.sh +0 -3
- data/vendor/pygments-main/tests/examplefiles/swig_java.swg +0 -1329
- data/vendor/pygments-main/tests/examplefiles/swig_std_vector.i +0 -225
- data/vendor/pygments-main/tests/examplefiles/test.R +0 -185
- data/vendor/pygments-main/tests/examplefiles/test.adb +0 -211
- data/vendor/pygments-main/tests/examplefiles/test.agda +0 -102
- data/vendor/pygments-main/tests/examplefiles/test.apl +0 -26
- data/vendor/pygments-main/tests/examplefiles/test.asy +0 -131
- data/vendor/pygments-main/tests/examplefiles/test.awk +0 -121
- data/vendor/pygments-main/tests/examplefiles/test.bb +0 -95
- data/vendor/pygments-main/tests/examplefiles/test.bmx +0 -145
- data/vendor/pygments-main/tests/examplefiles/test.boo +0 -39
- data/vendor/pygments-main/tests/examplefiles/test.bro +0 -250
- data/vendor/pygments-main/tests/examplefiles/test.cs +0 -374
- data/vendor/pygments-main/tests/examplefiles/test.css +0 -54
- data/vendor/pygments-main/tests/examplefiles/test.cu +0 -36
- data/vendor/pygments-main/tests/examplefiles/test.cyp +0 -123
- data/vendor/pygments-main/tests/examplefiles/test.d +0 -135
- data/vendor/pygments-main/tests/examplefiles/test.dart +0 -23
- data/vendor/pygments-main/tests/examplefiles/test.dtd +0 -89
- data/vendor/pygments-main/tests/examplefiles/test.ebnf +0 -31
- data/vendor/pygments-main/tests/examplefiles/test.ec +0 -605
- data/vendor/pygments-main/tests/examplefiles/test.ecl +0 -58
- data/vendor/pygments-main/tests/examplefiles/test.eh +0 -315
- data/vendor/pygments-main/tests/examplefiles/test.erl +0 -169
- data/vendor/pygments-main/tests/examplefiles/test.evoque +0 -33
- data/vendor/pygments-main/tests/examplefiles/test.fan +0 -818
- data/vendor/pygments-main/tests/examplefiles/test.flx +0 -57
- data/vendor/pygments-main/tests/examplefiles/test.gdc +0 -13
- data/vendor/pygments-main/tests/examplefiles/test.groovy +0 -97
- data/vendor/pygments-main/tests/examplefiles/test.html +0 -339
- data/vendor/pygments-main/tests/examplefiles/test.idr +0 -93
- data/vendor/pygments-main/tests/examplefiles/test.ini +0 -10
- data/vendor/pygments-main/tests/examplefiles/test.java +0 -653
- data/vendor/pygments-main/tests/examplefiles/test.jsp +0 -24
- data/vendor/pygments-main/tests/examplefiles/test.maql +0 -45
- data/vendor/pygments-main/tests/examplefiles/test.mask +0 -41
- data/vendor/pygments-main/tests/examplefiles/test.mod +0 -374
- data/vendor/pygments-main/tests/examplefiles/test.moo +0 -51
- data/vendor/pygments-main/tests/examplefiles/test.myt +0 -166
- data/vendor/pygments-main/tests/examplefiles/test.nim +0 -93
- data/vendor/pygments-main/tests/examplefiles/test.opa +0 -10
- data/vendor/pygments-main/tests/examplefiles/test.p6 +0 -252
- data/vendor/pygments-main/tests/examplefiles/test.pan +0 -54
- data/vendor/pygments-main/tests/examplefiles/test.pas +0 -743
- data/vendor/pygments-main/tests/examplefiles/test.php +0 -507
- data/vendor/pygments-main/tests/examplefiles/test.pig +0 -148
- data/vendor/pygments-main/tests/examplefiles/test.plot +0 -333
- data/vendor/pygments-main/tests/examplefiles/test.ps1 +0 -108
- data/vendor/pygments-main/tests/examplefiles/test.pwn +0 -253
- data/vendor/pygments-main/tests/examplefiles/test.pypylog +0 -1839
- data/vendor/pygments-main/tests/examplefiles/test.r3 +0 -114
- data/vendor/pygments-main/tests/examplefiles/test.rb +0 -177
- data/vendor/pygments-main/tests/examplefiles/test.rhtml +0 -43
- data/vendor/pygments-main/tests/examplefiles/test.rsl +0 -111
- data/vendor/pygments-main/tests/examplefiles/test.scaml +0 -8
- data/vendor/pygments-main/tests/examplefiles/test.ssp +0 -12
- data/vendor/pygments-main/tests/examplefiles/test.swift +0 -65
- data/vendor/pygments-main/tests/examplefiles/test.tcsh +0 -830
- data/vendor/pygments-main/tests/examplefiles/test.vb +0 -407
- data/vendor/pygments-main/tests/examplefiles/test.vhdl +0 -161
- data/vendor/pygments-main/tests/examplefiles/test.xqy +0 -138
- data/vendor/pygments-main/tests/examplefiles/test.xsl +0 -23
- data/vendor/pygments-main/tests/examplefiles/test.zep +0 -33
- data/vendor/pygments-main/tests/examplefiles/test2.pypylog +0 -120
- data/vendor/pygments-main/tests/examplefiles/truncated.pytb +0 -15
- data/vendor/pygments-main/tests/examplefiles/type.lisp +0 -1218
- data/vendor/pygments-main/tests/examplefiles/underscore.coffee +0 -603
- data/vendor/pygments-main/tests/examplefiles/unicode.applescript +0 -5
- data/vendor/pygments-main/tests/examplefiles/unicode.go +0 -10
- data/vendor/pygments-main/tests/examplefiles/unicodedoc.py +0 -11
- data/vendor/pygments-main/tests/examplefiles/unix-io.lid +0 -37
- data/vendor/pygments-main/tests/examplefiles/vbnet_test.bas +0 -29
- data/vendor/pygments-main/tests/examplefiles/vctreestatus_hg +0 -4
- data/vendor/pygments-main/tests/examplefiles/vimrc +0 -21
- data/vendor/pygments-main/tests/examplefiles/webkit-transition.css +0 -3
- data/vendor/pygments-main/tests/examplefiles/while.pov +0 -13
- data/vendor/pygments-main/tests/examplefiles/wiki.factor +0 -384
- data/vendor/pygments-main/tests/examplefiles/xml_example +0 -1897
- data/vendor/pygments-main/tests/examplefiles/zmlrpc.f90 +0 -798
- data/vendor/pygments-main/tests/run.py +0 -44
- data/vendor/pygments-main/tests/string_asserts.py +0 -22
- data/vendor/pygments-main/tests/support.py +0 -15
- data/vendor/pygments-main/tests/support/tags +0 -36
- data/vendor/pygments-main/tests/test_basic_api.py +0 -309
- data/vendor/pygments-main/tests/test_cfm.py +0 -46
- data/vendor/pygments-main/tests/test_clexer.py +0 -236
- data/vendor/pygments-main/tests/test_cmdline.py +0 -106
- data/vendor/pygments-main/tests/test_examplefiles.py +0 -110
- data/vendor/pygments-main/tests/test_html_formatter.py +0 -180
- data/vendor/pygments-main/tests/test_latex_formatter.py +0 -57
- data/vendor/pygments-main/tests/test_lexers_other.py +0 -68
- data/vendor/pygments-main/tests/test_objectiveclexer.py +0 -81
- data/vendor/pygments-main/tests/test_perllexer.py +0 -137
- data/vendor/pygments-main/tests/test_qbasiclexer.py +0 -43
- data/vendor/pygments-main/tests/test_regexlexer.py +0 -54
- data/vendor/pygments-main/tests/test_rtf_formatter.py +0 -109
- data/vendor/pygments-main/tests/test_string_asserts.py +0 -39
- data/vendor/pygments-main/tests/test_token.py +0 -46
- data/vendor/pygments-main/tests/test_using_api.py +0 -40
- data/vendor/pygments-main/tests/test_util.py +0 -135
@@ -1,33 +0,0 @@
|
|
1
|
-
$overlay{name=site_base}
|
2
|
-
|
3
|
-
$begin{table_row}
|
4
|
-
$for{ col in row }
|
5
|
-
<td>${col}</td>\
|
6
|
-
$else
|
7
|
-
<td class="empty" colspan="7">empty row</td>
|
8
|
-
$rof
|
9
|
-
$end{table_row}
|
10
|
-
|
11
|
-
<table>
|
12
|
-
$for{ i, row in enumerate(rows) }
|
13
|
-
<tr$if{i%2} class="odd"$fi> #[ "odd" rows get a special style ]#
|
14
|
-
$evoque{#table_row}
|
15
|
-
$evoque{
|
16
|
-
#table_row
|
17
|
-
}
|
18
|
-
$evoque{'#table_row'}
|
19
|
-
$evoque{ '#table_row', collection=None, quoting="str"}
|
20
|
-
$evoque{name="#table_row"}
|
21
|
-
$evoque{name=var_table_row}
|
22
|
-
$evoque{%#table_row%}
|
23
|
-
$evoque{% #table_row %}
|
24
|
-
</tr>
|
25
|
-
$rof
|
26
|
-
</table>
|
27
|
-
|
28
|
-
$evoque{disclaimer, collection="legals"}
|
29
|
-
$evoque{ disclaimer , collection="legals", abc=123}
|
30
|
-
$evoque{% disclaimer, collection="legals"%}
|
31
|
-
|
32
|
-
$test{% site_base="site.html",
|
33
|
-
rows=[("a", "b", 3.0, {"one":1}, "<escape-me/>", "i", "j")] %}
|
@@ -1,818 +0,0 @@
|
|
1
|
-
//
|
2
|
-
// Copyright (c) 2008, Brian Frank and Andy Frank
|
3
|
-
// Licensed under the Academic Free License version 3.0
|
4
|
-
//
|
5
|
-
// History:
|
6
|
-
// 17 Nov 08 Brian Frank Creation
|
7
|
-
//
|
8
|
-
|
9
|
-
using compiler
|
10
|
-
|
11
|
-
**
|
12
|
-
** JavaBridge is the compiler plugin for bringing Java
|
13
|
-
** classes into the Fantom type system.
|
14
|
-
**
|
15
|
-
class JavaBridge : CBridge
|
16
|
-
{
|
17
|
-
|
18
|
-
//////////////////////////////////////////////////////////////////////////
|
19
|
-
// Constructor
|
20
|
-
//////////////////////////////////////////////////////////////////////////
|
21
|
-
|
22
|
-
**
|
23
|
-
** Construct a JavaBridge for current environment
|
24
|
-
**
|
25
|
-
new make(Compiler c, ClassPath cp := ClassPath.makeForCurrent)
|
26
|
-
: super(c)
|
27
|
-
{
|
28
|
-
this.cp = cp
|
29
|
-
}
|
30
|
-
|
31
|
-
//////////////////////////////////////////////////////////////////////////
|
32
|
-
// Namespace
|
33
|
-
//////////////////////////////////////////////////////////////////////////
|
34
|
-
|
35
|
-
**
|
36
|
-
** Map a FFI "podName" to a Java package.
|
37
|
-
**
|
38
|
-
override CPod resolvePod(Str name, Loc? loc)
|
39
|
-
{
|
40
|
-
// the empty package is used to represent primitives
|
41
|
-
if (name == "") return primitives
|
42
|
-
|
43
|
-
// look for package name in classpatch
|
44
|
-
classes := cp.classes[name]
|
45
|
-
if (classes == null)
|
46
|
-
throw CompilerErr("Java package '$name' not found", loc)
|
47
|
-
|
48
|
-
// map package to JavaPod
|
49
|
-
return JavaPod(this, name, classes)
|
50
|
-
}
|
51
|
-
|
52
|
-
**
|
53
|
-
** Map class meta-data and Java members to Fantom slots
|
54
|
-
** for the specified JavaType.
|
55
|
-
**
|
56
|
-
virtual Void loadType(JavaType type, Str:CSlot slots)
|
57
|
-
{
|
58
|
-
JavaReflect.loadType(type, slots)
|
59
|
-
}
|
60
|
-
|
61
|
-
//////////////////////////////////////////////////////////////////////////
|
62
|
-
// Call Resolution
|
63
|
-
//////////////////////////////////////////////////////////////////////////
|
64
|
-
|
65
|
-
**
|
66
|
-
** Resolve a construction call to a Java constructor.
|
67
|
-
**
|
68
|
-
override Expr resolveConstruction(CallExpr call)
|
69
|
-
{
|
70
|
-
// if the last argument is an it-block, then we know
|
71
|
-
// right away that we will not be passing it thru to Java,
|
72
|
-
// so strip it off to be appended as call to Obj.with
|
73
|
-
itBlock := call.args.last as ClosureExpr
|
74
|
-
if (itBlock != null && itBlock.isItBlock)
|
75
|
-
call.args.removeAt(-1)
|
76
|
-
else
|
77
|
-
itBlock = null
|
78
|
-
|
79
|
-
// if this is an interop array like IntArray/int[] use make
|
80
|
-
// factory otherwise look for Java constructor called <init>
|
81
|
-
JavaType base := call.target.ctype
|
82
|
-
if (base.isInteropArray)
|
83
|
-
call.method = base.method("make")
|
84
|
-
else
|
85
|
-
call.method = base.method("<init>")
|
86
|
-
|
87
|
-
// call resolution to deal with overloading
|
88
|
-
call = resolveCall(call)
|
89
|
-
|
90
|
-
// we need to create an implicit target for the Java runtime
|
91
|
-
// to perform the new opcode to ensure it is on the stack
|
92
|
-
// before the args (we don't do this for interop Array classes)
|
93
|
-
if (!base.isInteropArray)
|
94
|
-
{
|
95
|
-
loc := call.loc
|
96
|
-
call.target = CallExpr.makeWithMethod(loc, null, base.newMethod) { synthetic=true }
|
97
|
-
}
|
98
|
-
|
99
|
-
// if we stripped an it-block argument,
|
100
|
-
// add it as trailing call to Obj.with
|
101
|
-
if (itBlock != null) return itBlock.toWith(call)
|
102
|
-
return call
|
103
|
-
}
|
104
|
-
|
105
|
-
**
|
106
|
-
** Resolve a construction chain call where a Fantom constructor
|
107
|
-
** calls the super-class constructor. Type check the arguments
|
108
|
-
** and insert any conversions needed.
|
109
|
-
**
|
110
|
-
override Expr resolveConstructorChain(CallExpr call)
|
111
|
-
{
|
112
|
-
// we don't allow chaining to a this ctor for Java FFI
|
113
|
-
if (call.target.id !== ExprId.superExpr)
|
114
|
-
throw err("Must use super constructor call in Java FFI", call.loc)
|
115
|
-
|
116
|
-
// route to a superclass constructor
|
117
|
-
JavaType base := call.target.ctype.deref
|
118
|
-
call.method = base.method("<init>")
|
119
|
-
|
120
|
-
// call resolution to deal with overloading
|
121
|
-
return resolveCall(call)
|
122
|
-
}
|
123
|
-
|
124
|
-
**
|
125
|
-
** Given a dot operator slot access on the given foreign
|
126
|
-
** base type, determine the appopriate slot to use based on
|
127
|
-
** whether parens were used
|
128
|
-
** base.name => noParens = true
|
129
|
-
** base.name() => noParens = false
|
130
|
-
**
|
131
|
-
** In Java a given name could be bound to both a field and
|
132
|
-
** a method. In this case we only resolve the field if
|
133
|
-
** no parens are used. We also handle the special case of
|
134
|
-
** Java annotations here because their element methods are
|
135
|
-
** also mapped as Fantom fields (instance based mixin field).
|
136
|
-
**
|
137
|
-
override CSlot? resolveSlotAccess(CType base, Str name, Bool noParens)
|
138
|
-
{
|
139
|
-
// first try to resolve as a field
|
140
|
-
field := base.field(name)
|
141
|
-
if (field != null)
|
142
|
-
{
|
143
|
-
// if no () we used and this isn't an annotation field
|
144
|
-
if (noParens && (field.isStatic || !base.isMixin))
|
145
|
-
return field
|
146
|
-
|
147
|
-
// if we did find a field, then make sure we use that
|
148
|
-
// field's parent type to resolve a method (becuase the
|
149
|
-
// base type might be a sub-class of a Java type in which
|
150
|
-
// case it is unware of field/method overloads)
|
151
|
-
return field.parent.method(name)
|
152
|
-
}
|
153
|
-
|
154
|
-
// lookup method
|
155
|
-
return base.method(name)
|
156
|
-
}
|
157
|
-
|
158
|
-
**
|
159
|
-
** Resolve a method call: try to find the best match
|
160
|
-
** and apply any coercions needed.
|
161
|
-
**
|
162
|
-
override CallExpr resolveCall(CallExpr call)
|
163
|
-
{
|
164
|
-
// try to match against all the overloaded methods
|
165
|
-
matches := CallMatch[,]
|
166
|
-
CMethod? m := call.method
|
167
|
-
while (m != null)
|
168
|
-
{
|
169
|
-
match := matchCall(call, m)
|
170
|
-
if (match != null) matches.add(match)
|
171
|
-
m = m is JavaMethod ? ((JavaMethod)m).next : null
|
172
|
-
}
|
173
|
-
|
174
|
-
// if we have exactly one match use then use that one
|
175
|
-
if (matches.size == 1) return matches[0].apply(call)
|
176
|
-
|
177
|
-
// if we have multiple matches; resolve to
|
178
|
-
// most specific match according to JLS rules
|
179
|
-
// TODO: this does not correct resolve when using Fantom implicit casting
|
180
|
-
if (matches.size > 1)
|
181
|
-
{
|
182
|
-
best := resolveMostSpecific(matches)
|
183
|
-
if (best != null) return best.apply(call)
|
184
|
-
}
|
185
|
-
|
186
|
-
// zero or multiple ambiguous matches is a compiler error
|
187
|
-
s := StrBuf()
|
188
|
-
s.add(matches.isEmpty ? "Invalid args " : "Ambiguous call ")
|
189
|
-
s.add(call.name).add("(")
|
190
|
-
s.add(call.args.join(", ") |Expr arg->Str| { return arg.toTypeStr })
|
191
|
-
s.add(")")
|
192
|
-
throw err(s.toStr, call.loc)
|
193
|
-
}
|
194
|
-
|
195
|
-
**
|
196
|
-
** Check if the call matches the specified overload method.
|
197
|
-
** If so return method and coerced args otherwise return null.
|
198
|
-
**
|
199
|
-
internal CallMatch? matchCall(CallExpr call, CMethod m)
|
200
|
-
{
|
201
|
-
// first check if have matching numbers of args and params
|
202
|
-
args := call.args
|
203
|
-
if (m.params.size < args.size) return null
|
204
|
-
|
205
|
-
// check if each argument is ok or can be coerced
|
206
|
-
isErr := false
|
207
|
-
newArgs := args.dup
|
208
|
-
m.params.each |CParam p, Int i|
|
209
|
-
{
|
210
|
-
if (i >= args.size)
|
211
|
-
{
|
212
|
-
// param has a default value, then that is ok
|
213
|
-
if (!p.hasDefault) isErr = true
|
214
|
-
}
|
215
|
-
else
|
216
|
-
{
|
217
|
-
// ensure arg fits parameter type (or auto-cast)
|
218
|
-
newArgs[i] = coerce(args[i], p.paramType) |->| { isErr = true }
|
219
|
-
}
|
220
|
-
}
|
221
|
-
if (isErr) return null
|
222
|
-
return CallMatch { it.method = m; it.args = newArgs }
|
223
|
-
}
|
224
|
-
|
225
|
-
**
|
226
|
-
** Given a list of overloaed methods find the most specific method
|
227
|
-
** according to Java Language Specification 15.11.2.2. The "informal
|
228
|
-
** intuition" rule is that a method is more specific than another
|
229
|
-
** if the first could be could be passed onto the second one.
|
230
|
-
**
|
231
|
-
internal static CallMatch? resolveMostSpecific(CallMatch[] matches)
|
232
|
-
{
|
233
|
-
CallMatch? best := matches[0]
|
234
|
-
for (i:=1; i<matches.size; ++i)
|
235
|
-
{
|
236
|
-
x := matches[i]
|
237
|
-
if (isMoreSpecific(best, x)) { continue }
|
238
|
-
if (isMoreSpecific(x, best)) { best = x; continue }
|
239
|
-
return null
|
240
|
-
}
|
241
|
-
return best
|
242
|
-
}
|
243
|
-
|
244
|
-
**
|
245
|
-
** Is 'a' more specific than 'b' such that 'a' could be used
|
246
|
-
** passed to 'b' without a compile time error.
|
247
|
-
**
|
248
|
-
internal static Bool isMoreSpecific(CallMatch a, CallMatch b)
|
249
|
-
{
|
250
|
-
return a.method.params.all |CParam ap, Int i->Bool|
|
251
|
-
{
|
252
|
-
bp := b.method.params[i]
|
253
|
-
return ap.paramType.fits(bp.paramType)
|
254
|
-
}
|
255
|
-
}
|
256
|
-
|
257
|
-
//////////////////////////////////////////////////////////////////////////
|
258
|
-
// Overrides
|
259
|
-
//////////////////////////////////////////////////////////////////////////
|
260
|
-
|
261
|
-
**
|
262
|
-
** Called during Inherit step when a Fantom slot overrides a FFI slot.
|
263
|
-
** Log and throw compiler error if there is a problem.
|
264
|
-
**
|
265
|
-
override Void checkOverride(TypeDef t, CSlot base, SlotDef def)
|
266
|
-
{
|
267
|
-
// we don't allow Fantom to override Java methods with multiple
|
268
|
-
// overloaded versions since the Fantom type system can't actually
|
269
|
-
// override all the overloaded versions
|
270
|
-
jslot := base as JavaSlot
|
271
|
-
if (jslot?.next != null)
|
272
|
-
throw err("Cannot override Java overloaded method: '$jslot.name'", def.loc)
|
273
|
-
|
274
|
-
// route to method override checking
|
275
|
-
if (base is JavaMethod && def is MethodDef)
|
276
|
-
checkMethodOverride(t, base, def)
|
277
|
-
}
|
278
|
-
|
279
|
-
**
|
280
|
-
** Called on method/method overrides in the checkOverride callback.
|
281
|
-
**
|
282
|
-
private Void checkMethodOverride(TypeDef t, JavaMethod base, MethodDef def)
|
283
|
-
{
|
284
|
-
// bail early if we know things aren't going to work out
|
285
|
-
if (base.params.size != def.params.size) return
|
286
|
-
|
287
|
-
// if the return type is primitive or Java array and the
|
288
|
-
// Fantom declaration matches how it is inferred into the Fan
|
289
|
-
// type system, then just change the return type - the compiler
|
290
|
-
// will impliclty do all the return coercions
|
291
|
-
if (isOverrideInferredType(base.returnType, def.returnType))
|
292
|
-
{
|
293
|
-
def.ret = def.inheritedRet = base.returnType
|
294
|
-
}
|
295
|
-
|
296
|
-
// if any of the parameters is a primitive or Java array
|
297
|
-
// and the Fantom declaration matches how it is inferred into
|
298
|
-
// the Fantom type type, then change the parameter type to
|
299
|
-
// the Java override type and make the Fantom type a local
|
300
|
-
// variable:
|
301
|
-
// Java: void foo(int a) { ... }
|
302
|
-
// Fantom: Void foo(Int a) { ... }
|
303
|
-
// Result: Void foo(int a_$J) { Int a := a_$J; ... }
|
304
|
-
//
|
305
|
-
base.params.eachr |CParam bp, Int i|
|
306
|
-
{
|
307
|
-
dp := def.paramDefs[i]
|
308
|
-
if (!isOverrideInferredType(bp.paramType, dp.paramType)) return
|
309
|
-
|
310
|
-
// add local variable: Int bar := bar_$J
|
311
|
-
local := LocalDefStmt(def.loc)
|
312
|
-
local.ctype = dp.paramType
|
313
|
-
local.name = dp.name
|
314
|
-
local.init = UnknownVarExpr(def.loc, null, dp.name + "_\$J")
|
315
|
-
def.code.stmts.insert(0, local)
|
316
|
-
|
317
|
-
// rename parameter Int bar -> int bar_$J
|
318
|
-
dp.name = dp.name + "_\$J"
|
319
|
-
dp.paramType = bp.paramType
|
320
|
-
}
|
321
|
-
}
|
322
|
-
|
323
|
-
**
|
324
|
-
** When overriding a Java method check if the base type is
|
325
|
-
** is a Java primitive or array and the override definition is
|
326
|
-
** matches how the Java type is inferred in the Fantom type system.
|
327
|
-
** If we have a match return true and we'll swizzle things in
|
328
|
-
** checkMethodOverride.
|
329
|
-
**
|
330
|
-
static private Bool isOverrideInferredType(CType base, CType def)
|
331
|
-
{
|
332
|
-
// check if base class slot is a JavaType
|
333
|
-
java := base.toNonNullable as JavaType
|
334
|
-
if (java != null)
|
335
|
-
{
|
336
|
-
// allow primitives is it matches the inferred type
|
337
|
-
if (java.isPrimitive) return java.inferredAs == def
|
338
|
-
|
339
|
-
// allow arrays if mapped as Foo[] -> Foo?[]?
|
340
|
-
if (java.isArray) return java.inferredAs == def.toNonNullable && def.isNullable
|
341
|
-
}
|
342
|
-
return false
|
343
|
-
}
|
344
|
-
|
345
|
-
//////////////////////////////////////////////////////////////////////////
|
346
|
-
// CheckErrors
|
347
|
-
//////////////////////////////////////////////////////////////////////////
|
348
|
-
|
349
|
-
**
|
350
|
-
** Called during CheckErrors step for a type which extends
|
351
|
-
** a FFI class or implements any FFI mixins.
|
352
|
-
**
|
353
|
-
override Void checkType(TypeDef def)
|
354
|
-
{
|
355
|
-
// can't subclass a primitive array like ByteArray/byte[]
|
356
|
-
if (def.base.deref is JavaType && def.base.deref->isInteropArray)
|
357
|
-
{
|
358
|
-
err("Cannot subclass from Java interop array: $def.base", def.loc)
|
359
|
-
return
|
360
|
-
}
|
361
|
-
|
362
|
-
// we don't allow deep inheritance of Java classes because
|
363
|
-
// the Fantom constructor and Java constructor model don't match
|
364
|
-
// up past one level of inheritance
|
365
|
-
// NOTE: that that when we remove this restriction we need to
|
366
|
-
// test how field initialization works because instance$init
|
367
|
-
// is almost certain to break with the current emit design
|
368
|
-
javaBase := def.base
|
369
|
-
while (javaBase != null && !javaBase.isForeign) javaBase = javaBase.base
|
370
|
-
if (javaBase != null && javaBase !== def.base)
|
371
|
-
{
|
372
|
-
err("Cannot subclass Java class more than one level: $javaBase", def.loc)
|
373
|
-
return
|
374
|
-
}
|
375
|
-
|
376
|
-
// ensure that when we map Fantom constructors to Java
|
377
|
-
// constructors that we don't have duplicate signatures
|
378
|
-
ctors := def.ctorDefs
|
379
|
-
ctors.each |MethodDef a, Int i|
|
380
|
-
{
|
381
|
-
ctors.each |MethodDef b, Int j|
|
382
|
-
{
|
383
|
-
if (i > j && areParamsSame(a, b))
|
384
|
-
err("Duplicate Java FFI constructor signatures: '$b.name' and '$a.name'", a.loc)
|
385
|
-
}
|
386
|
-
}
|
387
|
-
}
|
388
|
-
|
389
|
-
**
|
390
|
-
** Do the two methods have the exact same parameter types.
|
391
|
-
**
|
392
|
-
static Bool areParamsSame(CMethod a, CMethod b)
|
393
|
-
{
|
394
|
-
if (a.params.size != b.params.size) return false
|
395
|
-
for (i:=0; i<a.params.size; ++i)
|
396
|
-
{
|
397
|
-
if (a.params[i].paramType != b.params[i].paramType)
|
398
|
-
return false
|
399
|
-
}
|
400
|
-
return true
|
401
|
-
}
|
402
|
-
|
403
|
-
//////////////////////////////////////////////////////////////////////////
|
404
|
-
// Coercion
|
405
|
-
//////////////////////////////////////////////////////////////////////////
|
406
|
-
|
407
|
-
**
|
408
|
-
** Return if we can make the actual type fit the expected
|
409
|
-
** type, potentially using a coercion.
|
410
|
-
**
|
411
|
-
Bool fits(CType actual, CType expected)
|
412
|
-
{
|
413
|
-
// use dummy expression and route to coerce code
|
414
|
-
dummy := UnknownVarExpr(Loc("dummy"), null, "dummy") { ctype = actual }
|
415
|
-
fits := true
|
416
|
-
coerce(dummy, expected) |->| { fits=false }
|
417
|
-
return fits
|
418
|
-
}
|
419
|
-
|
420
|
-
**
|
421
|
-
** Coerce expression to expected type. If not a type match
|
422
|
-
** then run the onErr function.
|
423
|
-
**
|
424
|
-
override Expr coerce(Expr expr, CType expected, |->| onErr)
|
425
|
-
{
|
426
|
-
// handle easy case
|
427
|
-
actual := expr.ctype
|
428
|
-
expected = expected.deref
|
429
|
-
if (actual == expected) return expr
|
430
|
-
|
431
|
-
// handle null literal
|
432
|
-
if (expr.id === ExprId.nullLiteral && expected.isNullable)
|
433
|
-
return expr
|
434
|
-
|
435
|
-
// handle Fantom to Java primitives
|
436
|
-
if (expected.pod == primitives)
|
437
|
-
return coerceToPrimitive(expr, expected, onErr)
|
438
|
-
|
439
|
-
// handle Java primitives to Fan
|
440
|
-
if (actual.pod == primitives)
|
441
|
-
return coerceFromPrimitive(expr, expected, onErr)
|
442
|
-
|
443
|
-
// handle Java array to Fantom list
|
444
|
-
if (actual.name[0] == '[')
|
445
|
-
return coerceFromArray(expr, expected, onErr)
|
446
|
-
|
447
|
-
// handle Fantom list to Java array
|
448
|
-
if (expected.name[0] == '[')
|
449
|
-
return coerceToArray(expr, expected, onErr)
|
450
|
-
|
451
|
-
// handle sys::Func -> Java interface
|
452
|
-
if (actual is FuncType && expected.isMixin && expected.toNonNullable is JavaType)
|
453
|
-
return coerceFuncToInterface(expr, expected.toNonNullable, onErr)
|
454
|
-
|
455
|
-
// handle special classes and interfaces for built-in Fantom
|
456
|
-
// classes which actually map directly to Java built-in types
|
457
|
-
if (actual.isBool && boolTypes.contains(expected.toNonNullable.signature)) return box(expr)
|
458
|
-
if (actual.isInt && intTypes.contains(expected.toNonNullable.signature)) return box(expr)
|
459
|
-
if (actual.isFloat && floatTypes.contains(expected.toNonNullable.signature)) return box(expr)
|
460
|
-
if (actual.isDecimal && decimalTypes.contains(expected.toNonNullable.signature)) return expr
|
461
|
-
if (actual.isStr && strTypes.contains(expected.toNonNullable.signature)) return expr
|
462
|
-
|
463
|
-
// use normal Fantom coercion behavior
|
464
|
-
return super.coerce(expr, expected, onErr)
|
465
|
-
}
|
466
|
-
|
467
|
-
**
|
468
|
-
** Ensure value type is boxed.
|
469
|
-
**
|
470
|
-
private Expr box(Expr expr)
|
471
|
-
{
|
472
|
-
if (expr.ctype.isVal)
|
473
|
-
return TypeCheckExpr.coerce(expr, expr.ctype.toNullable)
|
474
|
-
else
|
475
|
-
return expr
|
476
|
-
}
|
477
|
-
|
478
|
-
**
|
479
|
-
** Coerce a fan expression to a Java primitive (other
|
480
|
-
** than the ones we support natively)
|
481
|
-
**
|
482
|
-
Expr coerceToPrimitive(Expr expr, JavaType expected, |->| onErr)
|
483
|
-
{
|
484
|
-
actual := expr.ctype
|
485
|
-
|
486
|
-
// sys::Int (long) -> int, short, byte
|
487
|
-
if (actual.isInt && expected.isPrimitiveIntLike)
|
488
|
-
return TypeCheckExpr.coerce(expr, expected)
|
489
|
-
|
490
|
-
// sys::Float (double) -> float
|
491
|
-
if (actual.isFloat && expected.isPrimitiveFloat)
|
492
|
-
return TypeCheckExpr.coerce(expr, expected)
|
493
|
-
|
494
|
-
// no coercion - type error
|
495
|
-
onErr()
|
496
|
-
return expr
|
497
|
-
}
|
498
|
-
|
499
|
-
**
|
500
|
-
** Coerce a Java primitive to a Fantom type.
|
501
|
-
**
|
502
|
-
Expr coerceFromPrimitive(Expr expr, CType expected, |->| onErr)
|
503
|
-
{
|
504
|
-
actual := (JavaType)expr.ctype
|
505
|
-
|
506
|
-
// int, short, byte -> sys::Int (long)
|
507
|
-
if (actual.isPrimitiveIntLike)
|
508
|
-
{
|
509
|
-
if (expected.isInt || expected.isObj)
|
510
|
-
return TypeCheckExpr.coerce(expr, expected)
|
511
|
-
}
|
512
|
-
|
513
|
-
// float -> sys::Float (float)
|
514
|
-
if (actual.isPrimitiveFloat)
|
515
|
-
{
|
516
|
-
if (expected.isFloat || expected.isObj)
|
517
|
-
return TypeCheckExpr.coerce(expr, expected)
|
518
|
-
}
|
519
|
-
|
520
|
-
// no coercion - type error
|
521
|
-
onErr()
|
522
|
-
return expr
|
523
|
-
}
|
524
|
-
|
525
|
-
**
|
526
|
-
** Coerce a Java array to a Fantom list.
|
527
|
-
**
|
528
|
-
Expr coerceFromArray(Expr expr, CType expected, |->| onErr)
|
529
|
-
{
|
530
|
-
actual := (JavaType)expr.ctype.toNonNullable
|
531
|
-
|
532
|
-
// if expected is array type
|
533
|
-
if (expected is JavaType && ((JavaType)expected).isArray)
|
534
|
-
if (actual.arrayOf.fits(((JavaType)expected).arrayOf)) return expr
|
535
|
-
|
536
|
-
// if expected is Obj
|
537
|
-
if (expected.isObj) return arrayToList(expr, actual.inferredArrayOf)
|
538
|
-
|
539
|
-
// if expected is list type
|
540
|
-
if (expected.toNonNullable is ListType)
|
541
|
-
{
|
542
|
-
expectedOf := ((ListType)expected.toNonNullable).v
|
543
|
-
if (actual.inferredArrayOf.fits(expectedOf)) return arrayToList(expr, expectedOf)
|
544
|
-
}
|
545
|
-
|
546
|
-
// no coercion available
|
547
|
-
onErr()
|
548
|
-
return expr
|
549
|
-
}
|
550
|
-
|
551
|
-
**
|
552
|
-
** Generate List.make(of, expr) where expr is Object[]
|
553
|
-
**
|
554
|
-
private Expr arrayToList(Expr expr, CType of)
|
555
|
-
{
|
556
|
-
loc := expr.loc
|
557
|
-
ofExpr := LiteralExpr(loc, ExprId.typeLiteral, ns.typeType, of)
|
558
|
-
call := CallExpr.makeWithMethod(loc, null, listMakeFromArray, [ofExpr, expr])
|
559
|
-
call.synthetic = true
|
560
|
-
return call
|
561
|
-
}
|
562
|
-
|
563
|
-
**
|
564
|
-
** Coerce a Fantom list to Java array.
|
565
|
-
**
|
566
|
-
Expr coerceToArray(Expr expr, CType expected, |->| onErr)
|
567
|
-
{
|
568
|
-
loc := expr.loc
|
569
|
-
expectedOf := ((JavaType)expected.toNonNullable).inferredArrayOf
|
570
|
-
actual := expr.ctype
|
571
|
-
|
572
|
-
// if actual is list type
|
573
|
-
if (actual.toNonNullable is ListType)
|
574
|
-
{
|
575
|
-
actualOf := ((ListType)actual.toNonNullable).v
|
576
|
-
if (actualOf.fits(expectedOf))
|
577
|
-
{
|
578
|
-
// (Foo[])list.asArray(cls)
|
579
|
-
clsLiteral := CallExpr.makeWithMethod(loc, null, JavaType.classLiteral(this, expectedOf))
|
580
|
-
asArray := CallExpr.makeWithMethod(loc, expr, listAsArray, [clsLiteral])
|
581
|
-
return TypeCheckExpr.coerce(asArray, expected)
|
582
|
-
}
|
583
|
-
}
|
584
|
-
|
585
|
-
// no coercion available
|
586
|
-
onErr()
|
587
|
-
return expr
|
588
|
-
}
|
589
|
-
|
590
|
-
**
|
591
|
-
** Attempt to coerce a parameterized sys::Func expr to a Java
|
592
|
-
** interface if the interface supports exactly one matching method.
|
593
|
-
**
|
594
|
-
Expr coerceFuncToInterface(Expr expr, JavaType expected, |->| onErr)
|
595
|
-
{
|
596
|
-
// check if we have exactly one abstract method in the expected type
|
597
|
-
loc := expr.loc
|
598
|
-
abstracts := expected.methods.findAll |CMethod m->Bool| { return m.isAbstract }
|
599
|
-
if (abstracts.size != 1) { onErr(); return expr }
|
600
|
-
method := abstracts.first
|
601
|
-
|
602
|
-
// check if we have a match
|
603
|
-
FuncType funcType := (FuncType)expr.ctype
|
604
|
-
if (!isFuncToInterfaceMatch(funcType, method)) { onErr(); return expr }
|
605
|
-
|
606
|
-
// check if we've already generated a wrapper for this combo
|
607
|
-
key := "${funcType.signature}+${method.qname}"
|
608
|
-
ctor := funcWrappers[key]
|
609
|
-
if (ctor == null)
|
610
|
-
{
|
611
|
-
ctor = generateFuncToInterfaceWrapper(expr.loc, funcType, expected, method)
|
612
|
-
funcWrappers[key] = ctor
|
613
|
-
}
|
614
|
-
|
615
|
-
// replace expr with FuncWrapperX(expr)
|
616
|
-
call := CallExpr.makeWithMethod(loc, null, ctor, [expr])
|
617
|
-
call.synthetic = true
|
618
|
-
return call
|
619
|
-
}
|
620
|
-
|
621
|
-
**
|
622
|
-
** Return if the specified function type can be used to implement
|
623
|
-
** the specified interface method.
|
624
|
-
**
|
625
|
-
Bool isFuncToInterfaceMatch(FuncType funcType, CMethod method)
|
626
|
-
{
|
627
|
-
// sanity check to map to callX method - can't handle more than 8 args
|
628
|
-
if (method.params.size > 8) return false
|
629
|
-
|
630
|
-
// check if method is match for function; first check is that
|
631
|
-
// method must supply all the arguments required by the function
|
632
|
-
if (funcType.params.size > method.params.size) return false
|
633
|
-
|
634
|
-
// check that func return type fits method return
|
635
|
-
retOk := method.returnType.isVoid || fits(funcType.ret, method.returnType)
|
636
|
-
if (!retOk) return false
|
637
|
-
|
638
|
-
// check all the method parameters fit the function parameters
|
639
|
-
paramsOk := funcType.params.all |CType f, Int i->Bool| { return fits(f, method.params[i].paramType) }
|
640
|
-
if (!paramsOk) return false
|
641
|
-
|
642
|
-
return true
|
643
|
-
}
|
644
|
-
|
645
|
-
**
|
646
|
-
** Generate the wrapper which implements the specified expected interface
|
647
|
-
** and overrides the specified method which calls the function.
|
648
|
-
**
|
649
|
-
CMethod generateFuncToInterfaceWrapper(Loc loc, FuncType funcType, CType expected, CMethod method)
|
650
|
-
{
|
651
|
-
// Fantom: func typed as |Str|
|
652
|
-
// Java: interface Foo { void bar(String) }
|
653
|
-
// Result: FuncWrapperX(func)
|
654
|
-
//
|
655
|
-
// class FuncWrapperX : Foo
|
656
|
-
// {
|
657
|
-
// new make(Func f) { _func = f }
|
658
|
-
// override Void bar(Str a) { _func.call(a) }
|
659
|
-
// Func _func
|
660
|
-
// }
|
661
|
-
|
662
|
-
// generate FuncWrapper class
|
663
|
-
name := "FuncWrapper" + funcWrappers.size
|
664
|
-
cls := TypeDef(ns, loc, compiler.types[0].unit, name, FConst.Internal + FConst.Synthetic)
|
665
|
-
cls.base = ns.objType
|
666
|
-
cls.mixins = [expected]
|
667
|
-
addTypeDef(cls)
|
668
|
-
|
669
|
-
// generate FuncWrapper._func field
|
670
|
-
field := FieldDef(loc, cls)
|
671
|
-
((SlotDef)field).name = "_func"
|
672
|
-
((DefNode)field).flags = FConst.Private + FConst.Storage + FConst.Synthetic
|
673
|
-
field.fieldType = funcType
|
674
|
-
cls.addSlot(field)
|
675
|
-
|
676
|
-
// generate FuncWrapper.make constructor
|
677
|
-
ctor := MethodDef(loc, cls, "make", FConst.Internal + FConst.Ctor + FConst.Synthetic)
|
678
|
-
ctor.ret = ns.voidType
|
679
|
-
ctor.paramDefs = [ParamDef(loc, funcType, "f")]
|
680
|
-
ctor.code = Block.make(loc)
|
681
|
-
ctor.code.stmts.add(BinaryExpr.makeAssign(
|
682
|
-
FieldExpr(loc, ThisExpr(loc), field),
|
683
|
-
UnknownVarExpr(loc, null, "f")).toStmt)
|
684
|
-
ctor.code.stmts.add(ReturnStmt.make(loc))
|
685
|
-
cls.addSlot(ctor)
|
686
|
-
|
687
|
-
// generate FuncWrapper override of abstract method
|
688
|
-
over := MethodDef(loc, cls, method.name, FConst.Public + FConst.Override + FConst.Synthetic)
|
689
|
-
over.ret = method.returnType
|
690
|
-
over.paramDefs = ParamDef[,]
|
691
|
-
over.code = Block.make(loc)
|
692
|
-
callArity := "call"
|
693
|
-
call := CallExpr.makeWithMethod(loc, FieldExpr(loc, ThisExpr(loc), field), funcType.method(callArity))
|
694
|
-
method.params.each |CParam param, Int i|
|
695
|
-
{
|
696
|
-
paramName := "p$i"
|
697
|
-
over.params.add(ParamDef(loc, param.paramType, paramName))
|
698
|
-
if (i < funcType.params.size)
|
699
|
-
call.args.add(UnknownVarExpr(loc, null, paramName))
|
700
|
-
}
|
701
|
-
if (method.returnType.isVoid)
|
702
|
-
over.code.stmts.add(call.toStmt).add(ReturnStmt(loc))
|
703
|
-
else
|
704
|
-
over.code.stmts.add(ReturnStmt(loc, call))
|
705
|
-
cls.addSlot(over)
|
706
|
-
|
707
|
-
// return the ctor which we use for coercion
|
708
|
-
return ctor
|
709
|
-
}
|
710
|
-
|
711
|
-
//////////////////////////////////////////////////////////////////////////
|
712
|
-
// Reflection
|
713
|
-
//////////////////////////////////////////////////////////////////////////
|
714
|
-
|
715
|
-
**
|
716
|
-
** Get a CMethod representation for 'List.make(Type, Object[])'
|
717
|
-
**
|
718
|
-
once CMethod listMakeFromArray()
|
719
|
-
{
|
720
|
-
return JavaMethod(
|
721
|
-
this.ns.listType,
|
722
|
-
"make",
|
723
|
-
FConst.Public + FConst.Static,
|
724
|
-
this.ns.listType.toNullable,
|
725
|
-
[
|
726
|
-
JavaParam("of", this.ns.typeType),
|
727
|
-
JavaParam("array", objectArrayType)
|
728
|
-
])
|
729
|
-
}
|
730
|
-
|
731
|
-
**
|
732
|
-
** Get a CMethod representation for 'Object[] List.asArray()'
|
733
|
-
**
|
734
|
-
once CMethod listAsArray()
|
735
|
-
{
|
736
|
-
return JavaMethod(
|
737
|
-
this.ns.listType,
|
738
|
-
"asArray",
|
739
|
-
FConst.Public,
|
740
|
-
objectArrayType,
|
741
|
-
[JavaParam("cls", classType)])
|
742
|
-
}
|
743
|
-
|
744
|
-
**
|
745
|
-
** Get a CType representation for 'java.lang.Class'
|
746
|
-
**
|
747
|
-
once JavaType classType()
|
748
|
-
{
|
749
|
-
return ns.resolveType("[java]java.lang::Class")
|
750
|
-
}
|
751
|
-
|
752
|
-
**
|
753
|
-
** Get a CType representation for 'java.lang.Object[]'
|
754
|
-
**
|
755
|
-
once JavaType objectArrayType()
|
756
|
-
{
|
757
|
-
return ns.resolveType("[java]java.lang::[Object")
|
758
|
-
}
|
759
|
-
|
760
|
-
//////////////////////////////////////////////////////////////////////////
|
761
|
-
// Fields
|
762
|
-
//////////////////////////////////////////////////////////////////////////
|
763
|
-
|
764
|
-
const static Str[] boolTypes := Str[
|
765
|
-
"[java]java.io::Serializable",
|
766
|
-
"[java]java.lang::Comparable",
|
767
|
-
]
|
768
|
-
|
769
|
-
const static Str[] intTypes := Str[
|
770
|
-
"[java]java.lang::Number",
|
771
|
-
"[java]java.io::Serializable",
|
772
|
-
"[java]java.lang::Comparable",
|
773
|
-
]
|
774
|
-
|
775
|
-
const static Str[] floatTypes := Str[
|
776
|
-
"[java]java.lang::Number",
|
777
|
-
"[java]java.io::Serializable",
|
778
|
-
"[java]java.lang::Comparable",
|
779
|
-
]
|
780
|
-
|
781
|
-
const static Str[] decimalTypes := Str[
|
782
|
-
"[java]java.lang::Number",
|
783
|
-
"[java]java.io::Serializable",
|
784
|
-
"[java]java.lang::Comparable",
|
785
|
-
]
|
786
|
-
|
787
|
-
const static Str[] strTypes := Str[
|
788
|
-
"[java]java.io::Serializable",
|
789
|
-
"[java]java.lang::CharSequence",
|
790
|
-
"[java]java.lang::Comparable",
|
791
|
-
]
|
792
|
-
|
793
|
-
JavaPrimitives primitives := JavaPrimitives(this)
|
794
|
-
ClassPath cp
|
795
|
-
|
796
|
-
private Str:CMethod funcWrappers := Str:CMethod[:] // funcType+method:ctor
|
797
|
-
|
798
|
-
}
|
799
|
-
|
800
|
-
**************************************************************************
|
801
|
-
** CallMatch
|
802
|
-
**************************************************************************
|
803
|
-
|
804
|
-
internal class CallMatch
|
805
|
-
{
|
806
|
-
CallExpr apply(CallExpr call)
|
807
|
-
{
|
808
|
-
call.args = args
|
809
|
-
call.method = method
|
810
|
-
call.ctype = method.isCtor ? method.parent : method.returnType
|
811
|
-
return call
|
812
|
-
}
|
813
|
-
|
814
|
-
override Str toStr() { return method.signature }
|
815
|
-
|
816
|
-
CMethod? method // matched method
|
817
|
-
Expr[]? args // coerced arguments
|
818
|
-
}
|