rufus-lua-win 5.1.5
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/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +69 -0
- data/Rakefile +1 -0
- data/lib/rufus/lua/win.rb +18 -0
- data/lib/rufus/lua/win/version.rb +7 -0
- data/rufus-lua-win.gemspec +23 -0
- data/vendor/lua/bin/liblua.dll +0 -0
- data/vendor/lua/lib/lua/LuaXml.lua +119 -0
- data/vendor/lua/lib/lua/alien.lua +250 -0
- data/vendor/lua/lib/lua/alien/core.dll +0 -0
- data/vendor/lua/lib/lua/alien/struct.dll +0 -0
- data/vendor/lua/lib/lua/base.lua +536 -0
- data/vendor/lua/lib/lua/bin.lua +20 -0
- data/vendor/lua/lib/lua/bit.dll +0 -0
- data/vendor/lua/lib/lua/cdlua.dll +0 -0
- data/vendor/lua/lib/lua/cdluacontextplus.dll +0 -0
- data/vendor/lua/lib/lua/cdluagl.dll +0 -0
- data/vendor/lua/lib/lua/cdluaim.dll +0 -0
- data/vendor/lua/lib/lua/cdluapdf.dll +0 -0
- data/vendor/lua/lib/lua/copas.lua +543 -0
- data/vendor/lua/lib/lua/coxpcall.lua +57 -0
- data/vendor/lua/lib/lua/date.lua +745 -0
- data/vendor/lua/lib/lua/debug_ext.lua +84 -0
- data/vendor/lua/lib/lua/debug_init.lua +2 -0
- data/vendor/lua/lib/lua/des56.dll +0 -0
- data/vendor/lua/lib/lua/dist/config.lua +109 -0
- data/vendor/lua/lib/lua/dist/constraints.lua +271 -0
- data/vendor/lua/lib/lua/dist/depends.lua +601 -0
- data/vendor/lua/lib/lua/dist/git.lua +307 -0
- data/vendor/lua/lib/lua/dist/init.lua +278 -0
- data/vendor/lua/lib/lua/dist/manifest.lua +225 -0
- data/vendor/lua/lib/lua/dist/package.lua +583 -0
- data/vendor/lua/lib/lua/dist/sys.lua +367 -0
- data/vendor/lua/lib/lua/dist/utils.lua +130 -0
- data/vendor/lua/lib/lua/ex.dll +0 -0
- data/vendor/lua/lib/lua/fstable.lua +116 -0
- data/vendor/lua/lib/lua/getopt.lua +273 -0
- data/vendor/lua/lib/lua/git.lua +5 -0
- data/vendor/lua/lib/lua/git/core.dll +0 -0
- data/vendor/lua/lib/lua/git/objects.lua +121 -0
- data/vendor/lua/lib/lua/git/pack.lua +316 -0
- data/vendor/lua/lib/lua/git/protocol.lua +188 -0
- data/vendor/lua/lib/lua/git/repo.lua +283 -0
- data/vendor/lua/lib/lua/git/util.lua +233 -0
- data/vendor/lua/lib/lua/gzio.dll +0 -0
- data/vendor/lua/lib/lua/gzip.lua +81 -0
- data/vendor/lua/lib/lua/iconv.dll +0 -0
- data/vendor/lua/lib/lua/imlua.dll +0 -0
- data/vendor/lua/lib/lua/imlua_fftw.dll +0 -0
- data/vendor/lua/lib/lua/imlua_jp2.dll +0 -0
- data/vendor/lua/lib/lua/imlua_process.dll +0 -0
- data/vendor/lua/lib/lua/imlua_process_omp.dll +0 -0
- data/vendor/lua/lib/lua/io_ext.lua +115 -0
- data/vendor/lua/lib/lua/iuplua.dll +0 -0
- data/vendor/lua/lib/lua/iuplua_mglplot.dll +0 -0
- data/vendor/lua/lib/lua/iuplua_pplot.dll +0 -0
- data/vendor/lua/lib/lua/iupluacd.dll +0 -0
- data/vendor/lua/lib/lua/iupluacontrols.dll +0 -0
- data/vendor/lua/lib/lua/iupluagl.dll +0 -0
- data/vendor/lua/lib/lua/iupluaim.dll +0 -0
- data/vendor/lua/lib/lua/iupluaimglib.dll +0 -0
- data/vendor/lua/lib/lua/iupluatuio.dll +0 -0
- data/vendor/lua/lib/lua/lanes-keeper.lua +302 -0
- data/vendor/lua/lib/lua/lanes.lua +591 -0
- data/vendor/lua/lib/lua/lanes/core.dll +0 -0
- data/vendor/lua/lib/lua/lcs.lua +55 -0
- data/vendor/lua/lib/lua/lemock.lua +659 -0
- data/vendor/lua/lib/lua/lfs.dll +0 -0
- data/vendor/lua/lib/lua/list.lua +375 -0
- data/vendor/lua/lib/lua/logging.lua +189 -0
- data/vendor/lua/lib/lua/logging/console.lua +22 -0
- data/vendor/lua/lib/lua/logging/email.lua +44 -0
- data/vendor/lua/lib/lua/logging/file.lua +55 -0
- data/vendor/lua/lib/lua/logging/rolling_file.lua +81 -0
- data/vendor/lua/lib/lua/logging/socket.lua +35 -0
- data/vendor/lua/lib/lua/logging/sql.lua +64 -0
- data/vendor/lua/lib/lua/loop/base.lua +68 -0
- data/vendor/lua/lib/lua/loop/cached.lua +312 -0
- data/vendor/lua/lib/lua/loop/collection/MapWithArrayOfKeys.lua +64 -0
- data/vendor/lua/lib/lua/loop/collection/ObjectCache.lua +39 -0
- data/vendor/lua/lib/lua/loop/collection/OrderedSet.lua +164 -0
- data/vendor/lua/lib/lua/loop/collection/PriorityQueue.lua +86 -0
- data/vendor/lua/lib/lua/loop/collection/UnorderedArray.lua +32 -0
- data/vendor/lua/lib/lua/loop/collection/UnorderedArraySet.lua +56 -0
- data/vendor/lua/lib/lua/loop/compiler/Arguments.lua +108 -0
- data/vendor/lua/lib/lua/loop/compiler/Conditional.lua +50 -0
- data/vendor/lua/lib/lua/loop/compiler/Expression.lua +215 -0
- data/vendor/lua/lib/lua/loop/component/base.lua +221 -0
- data/vendor/lua/lib/lua/loop/component/contained.lua +71 -0
- data/vendor/lua/lib/lua/loop/component/dynamic.lua +223 -0
- data/vendor/lua/lib/lua/loop/component/intercepted.lua +354 -0
- data/vendor/lua/lib/lua/loop/component/wrapped.lua +195 -0
- data/vendor/lua/lib/lua/loop/debug/Inspector.lua +521 -0
- data/vendor/lua/lib/lua/loop/debug/Matcher.lua +192 -0
- data/vendor/lua/lib/lua/loop/debug/Verbose.lua +266 -0
- data/vendor/lua/lib/lua/loop/debug/Viewer.lua +200 -0
- data/vendor/lua/lib/lua/loop/multiple.lua +105 -0
- data/vendor/lua/lib/lua/loop/object/Exception.lua +57 -0
- data/vendor/lua/lib/lua/loop/object/Publisher.lua +43 -0
- data/vendor/lua/lib/lua/loop/object/Wrapper.lua +39 -0
- data/vendor/lua/lib/lua/loop/scoped.lua +585 -0
- data/vendor/lua/lib/lua/loop/serial/FileStream.lua +48 -0
- data/vendor/lua/lib/lua/loop/serial/Serializer.lua +291 -0
- data/vendor/lua/lib/lua/loop/serial/SocketStream.lua +51 -0
- data/vendor/lua/lib/lua/loop/serial/StringStream.lua +47 -0
- data/vendor/lua/lib/lua/loop/simple.lua +75 -0
- data/vendor/lua/lib/lua/loop/table.lua +71 -0
- data/vendor/lua/lib/lua/loop/thread/CoSocket.lua +416 -0
- data/vendor/lua/lib/lua/loop/thread/IOScheduler.lua +170 -0
- data/vendor/lua/lib/lua/loop/thread/Scheduler.lua +327 -0
- data/vendor/lua/lib/lua/loop/thread/SocketScheduler.lua +88 -0
- data/vendor/lua/lib/lua/loop/thread/Timer.lua +54 -0
- data/vendor/lua/lib/lua/lpeg.dll +0 -0
- data/vendor/lua/lib/lua/ltn12.lua +292 -0
- data/vendor/lua/lib/lua/luaXML_lib.dll +0 -0
- data/vendor/lua/lib/lua/luacurl.dll +0 -0
- data/vendor/lua/lib/lua/luadoc/config.lua +34 -0
- data/vendor/lua/lib/lua/luadoc/doclet/debug.lua +46 -0
- data/vendor/lua/lib/lua/luadoc/doclet/formatter.lua +84 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html.lua +289 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/file.lp +113 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/function.lp +64 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/index.lp +70 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/luadoc.css +286 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/menu.lp +55 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/module.lp +109 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/table.lp +15 -0
- data/vendor/lua/lib/lua/luadoc/doclet/raw.lua +12 -0
- data/vendor/lua/lib/lua/luadoc/init.lua +58 -0
- data/vendor/lua/lib/lua/luadoc/lp.lua +130 -0
- data/vendor/lua/lib/lua/luadoc/taglet/standard.lua +495 -0
- data/vendor/lua/lib/lua/luadoc/taglet/standard/tags.lua +171 -0
- data/vendor/lua/lib/lua/luadoc/util.lua +233 -0
- data/vendor/lua/lib/lua/luagl.dll +0 -0
- data/vendor/lua/lib/lua/luaglu.dll +0 -0
- data/vendor/lua/lib/lua/luaidl.lua +113 -0
- data/vendor/lua/lib/lua/luaidl/lex.lua +793 -0
- data/vendor/lua/lib/lua/luaidl/pre.lua +149 -0
- data/vendor/lua/lib/lua/luaidl/sin.lua +3631 -0
- data/vendor/lua/lib/lua/luarocks/add.lua +108 -0
- data/vendor/lua/lib/lua/luarocks/admin_remove.lua +87 -0
- data/vendor/lua/lib/lua/luarocks/build.lua +330 -0
- data/vendor/lua/lib/lua/luarocks/build/builtin.lua +253 -0
- data/vendor/lua/lib/lua/luarocks/build/cmake.lua +54 -0
- data/vendor/lua/lib/lua/luarocks/build/command.lua +32 -0
- data/vendor/lua/lib/lua/luarocks/build/make.lua +92 -0
- data/vendor/lua/lib/lua/luarocks/cache.lua +85 -0
- data/vendor/lua/lib/lua/luarocks/cfg.lua +449 -0
- data/vendor/lua/lib/lua/luarocks/command_line.lua +163 -0
- data/vendor/lua/lib/lua/luarocks/deps.lua +654 -0
- data/vendor/lua/lib/lua/luarocks/dir.lua +69 -0
- data/vendor/lua/lib/lua/luarocks/download.lua +90 -0
- data/vendor/lua/lib/lua/luarocks/fetch.lua +321 -0
- data/vendor/lua/lib/lua/luarocks/fetch/cvs.lua +44 -0
- data/vendor/lua/lib/lua/luarocks/fetch/git.lua +81 -0
- data/vendor/lua/lib/lua/luarocks/fetch/git_file.lua +17 -0
- data/vendor/lua/lib/lua/luarocks/fetch/hg.lua +54 -0
- data/vendor/lua/lib/lua/luarocks/fetch/sscm.lua +42 -0
- data/vendor/lua/lib/lua/luarocks/fetch/svn.lua +53 -0
- data/vendor/lua/lib/lua/luarocks/fs.lua +40 -0
- data/vendor/lua/lib/lua/luarocks/fs/lua.lua +676 -0
- data/vendor/lua/lib/lua/luarocks/fs/unix.lua +88 -0
- data/vendor/lua/lib/lua/luarocks/fs/unix/tools.lua +325 -0
- data/vendor/lua/lib/lua/luarocks/fs/win32.lua +107 -0
- data/vendor/lua/lib/lua/luarocks/fs/win32/tools.lua +334 -0
- data/vendor/lua/lib/lua/luarocks/help.lua +101 -0
- data/vendor/lua/lib/lua/luarocks/index.lua +172 -0
- data/vendor/lua/lib/lua/luarocks/install.lua +151 -0
- data/vendor/lua/lib/lua/luarocks/list.lua +35 -0
- data/vendor/lua/lib/lua/luarocks/loader.lua +228 -0
- data/vendor/lua/lib/lua/luarocks/make.lua +71 -0
- data/vendor/lua/lib/lua/luarocks/make_manifest.lua +34 -0
- data/vendor/lua/lib/lua/luarocks/manif.lua +360 -0
- data/vendor/lua/lib/lua/luarocks/manif_core.lua +75 -0
- data/vendor/lua/lib/lua/luarocks/new_version.lua +141 -0
- data/vendor/lua/lib/lua/luarocks/pack.lua +205 -0
- data/vendor/lua/lib/lua/luarocks/path.lua +315 -0
- data/vendor/lua/lib/lua/luarocks/persist.lua +173 -0
- data/vendor/lua/lib/lua/luarocks/refresh_cache.lua +30 -0
- data/vendor/lua/lib/lua/luarocks/remove.lua +135 -0
- data/vendor/lua/lib/lua/luarocks/rep.lua +313 -0
- data/vendor/lua/lib/lua/luarocks/require.lua +6 -0
- data/vendor/lua/lib/lua/luarocks/search.lua +399 -0
- data/vendor/lua/lib/lua/luarocks/show.lua +138 -0
- data/vendor/lua/lib/lua/luarocks/site_config.lua +23 -0
- data/vendor/lua/lib/lua/luarocks/tools/patch.lua +712 -0
- data/vendor/lua/lib/lua/luarocks/tools/tar.lua +144 -0
- data/vendor/lua/lib/lua/luarocks/tools/zip.lua +245 -0
- data/vendor/lua/lib/lua/luarocks/type_check.lua +267 -0
- data/vendor/lua/lib/lua/luarocks/unpack.lua +151 -0
- data/vendor/lua/lib/lua/luarocks/util.lua +420 -0
- data/vendor/lua/lib/lua/luarocks/validate.lua +164 -0
- data/vendor/lua/lib/lua/luars232.dll +0 -0
- data/vendor/lua/lib/lua/luasql/mysql.dll +0 -0
- data/vendor/lua/lib/lua/luasql/postgres.dll +0 -0
- data/vendor/lua/lib/lua/luasql/sqlite3.dll +0 -0
- data/vendor/lua/lib/lua/luaunit.lua +601 -0
- data/vendor/lua/lib/lua/lxp.dll +0 -0
- data/vendor/lua/lib/lua/lxp/lom.lua +60 -0
- data/vendor/lua/lib/lua/math_ext.lua +27 -0
- data/vendor/lua/lib/lua/mbox.lua +53 -0
- data/vendor/lua/lib/lua/md5.lua +19 -0
- data/vendor/lua/lib/lua/md5/core.dll +0 -0
- data/vendor/lua/lib/lua/metalua.lua +0 -0
- data/vendor/lua/lib/lua/metalua/ast_to_string.mlua +553 -0
- data/vendor/lua/lib/lua/metalua/base.lua +104 -0
- data/vendor/lua/lib/lua/metalua/bytecode.lua +0 -0
- data/vendor/lua/lib/lua/metalua/clopts.mlua +204 -0
- data/vendor/lua/lib/lua/metalua/compiler.lua +3 -0
- data/vendor/lua/lib/lua/metalua/dollar.mlua +24 -0
- data/vendor/lua/lib/lua/metalua/extension/H-runtime.mlua +216 -0
- data/vendor/lua/lib/lua/metalua/extension/H.mlua +22 -0
- data/vendor/lua/lib/lua/metalua/extension/anaphoric.mlua +54 -0
- data/vendor/lua/lib/lua/metalua/extension/clist.mlua +149 -0
- data/vendor/lua/lib/lua/metalua/extension/continue.mlua +53 -0
- data/vendor/lua/lib/lua/metalua/extension/localin.mlua +2 -0
- data/vendor/lua/lib/lua/metalua/extension/log.mlua +39 -0
- data/vendor/lua/lib/lua/metalua/extension/match.mlua +374 -0
- data/vendor/lua/lib/lua/metalua/extension/ternary.mlua +10 -0
- data/vendor/lua/lib/lua/metalua/extension/trycatch.mlua +189 -0
- data/vendor/lua/lib/lua/metalua/extension/types-runtime.mlua +159 -0
- data/vendor/lua/lib/lua/metalua/extension/types.mlua +352 -0
- data/vendor/lua/lib/lua/metalua/extension/withdo.mlua +30 -0
- data/vendor/lua/lib/lua/metalua/extension/xglobal-runtime.lua +41 -0
- data/vendor/lua/lib/lua/metalua/extension/xglobal.mlua +20 -0
- data/vendor/lua/lib/lua/metalua/extension/xloop.mlua +100 -0
- data/vendor/lua/lib/lua/metalua/extension/xmatch.mlua +216 -0
- data/vendor/lua/lib/lua/metalua/metaloop.mlua +76 -0
- data/vendor/lua/lib/lua/metalua/mlc.lua +0 -0
- data/vendor/lua/lib/lua/metalua/mlc_xcall.lua +119 -0
- data/vendor/lua/lib/lua/metalua/mlp.lua +0 -0
- data/vendor/lua/lib/lua/metalua/package2.lua +101 -0
- data/vendor/lua/lib/lua/metalua/runtime.lua +3 -0
- data/vendor/lua/lib/lua/metalua/string2.lua +44 -0
- data/vendor/lua/lib/lua/metalua/table2.lua +372 -0
- data/vendor/lua/lib/lua/metalua/walk.mlua +304 -0
- data/vendor/lua/lib/lua/metalua/walk/bindings.mlua +41 -0
- data/vendor/lua/lib/lua/metalua/walk/id.mlua +186 -0
- data/vendor/lua/lib/lua/metalua/walk/scope.lua +54 -0
- data/vendor/lua/lib/lua/mime.lua +87 -0
- data/vendor/lua/lib/lua/mime/core.dll +0 -0
- data/vendor/lua/lib/lua/mobdebug.lua +1484 -0
- data/vendor/lua/lib/lua/modules.lua +16 -0
- data/vendor/lua/lib/lua/object.lua +56 -0
- data/vendor/lua/lib/lua/oil/Exception.lua +26 -0
- data/vendor/lua/lib/lua/oil/arch.lua +27 -0
- data/vendor/lua/lib/lua/oil/arch/basic/client.lua +29 -0
- data/vendor/lua/lib/lua/oil/arch/basic/common.lua +13 -0
- data/vendor/lua/lib/lua/oil/arch/basic/server.lua +27 -0
- data/vendor/lua/lib/lua/oil/arch/cooperative/common.lua +10 -0
- data/vendor/lua/lib/lua/oil/arch/cooperative/server.lua +16 -0
- data/vendor/lua/lib/lua/oil/arch/corba/client.lua +39 -0
- data/vendor/lua/lib/lua/oil/arch/corba/common.lua +58 -0
- data/vendor/lua/lib/lua/oil/arch/corba/intercepted/client.lua +9 -0
- data/vendor/lua/lib/lua/oil/arch/corba/intercepted/server.lua +9 -0
- data/vendor/lua/lib/lua/oil/arch/corba/server.lua +35 -0
- data/vendor/lua/lib/lua/oil/arch/ludo/byref.lua +18 -0
- data/vendor/lua/lib/lua/oil/arch/ludo/client.lua +19 -0
- data/vendor/lua/lib/lua/oil/arch/ludo/common.lua +18 -0
- data/vendor/lua/lib/lua/oil/arch/ludo/server.lua +19 -0
- data/vendor/lua/lib/lua/oil/arch/typed/client.lua +27 -0
- data/vendor/lua/lib/lua/oil/arch/typed/common.lua +9 -0
- data/vendor/lua/lib/lua/oil/arch/typed/server.lua +18 -0
- data/vendor/lua/lib/lua/oil/assert.lua +87 -0
- data/vendor/lua/lib/lua/oil/builder.lua +45 -0
- data/vendor/lua/lib/lua/oil/builder/basic/client.lua +31 -0
- data/vendor/lua/lib/lua/oil/builder/basic/common.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/basic/server.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/cooperative/common.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/cooperative/server.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/corba/client.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/corba/common.lua +24 -0
- data/vendor/lua/lib/lua/oil/builder/corba/gencode.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/corba/intercepted/client.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/corba/intercepted/server.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/corba/server.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/lua/client.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/lua/server.lua +12 -0
- data/vendor/lua/lib/lua/oil/builder/ludo/byref.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/ludo/client.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/ludo/common.lua +14 -0
- data/vendor/lua/lib/lua/oil/builder/ludo/server.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/typed/client.lua +16 -0
- data/vendor/lua/lib/lua/oil/builder/typed/server.lua +12 -0
- data/vendor/lua/lib/lua/oil/compat.lua +846 -0
- data/vendor/lua/lib/lua/oil/component.lua +1 -0
- data/vendor/lua/lib/lua/oil/corba/giop.lua +301 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Codec.lua +1568 -0
- data/vendor/lua/lib/lua/oil/corba/giop/CodecGen.lua +589 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Exception.lua +25 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Indexer.lua +63 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Listener.lua +343 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Messenger.lua +228 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Referrer.lua +180 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Requester.lua +462 -0
- data/vendor/lua/lib/lua/oil/corba/idl.lua +597 -0
- data/vendor/lua/lib/lua/oil/corba/idl/Compiler.lua +133 -0
- data/vendor/lua/lib/lua/oil/corba/idl/Importer.lua +235 -0
- data/vendor/lua/lib/lua/oil/corba/idl/Indexer.lua +95 -0
- data/vendor/lua/lib/lua/oil/corba/idl/Registry.lua +1821 -0
- data/vendor/lua/lib/lua/oil/corba/idl/ir.lua +847 -0
- data/vendor/lua/lib/lua/oil/corba/idl/sysex.lua +21 -0
- data/vendor/lua/lib/lua/oil/corba/iiop/Profiler.lua +200 -0
- data/vendor/lua/lib/lua/oil/corba/intercepted/Listener.lua +158 -0
- data/vendor/lua/lib/lua/oil/corba/intercepted/Requester.lua +181 -0
- data/vendor/lua/lib/lua/oil/corba/services/event.lua +126 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/ConsumerAdmin.lua +50 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/EventFactory.lua +15 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/EventQueue.lua +37 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/ProxyPushConsumer.lua +75 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/ProxyPushSupplier.lua +62 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/SingleDeferredDispatcher.lua +60 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/SingleSynchronousDispatcher.lua +39 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/SupplierAdmin.lua +50 -0
- data/vendor/lua/lib/lua/oil/corba/services/naming.lua +436 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Acceptor.lua +268 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Channels.lua +121 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Connector.lua +147 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Dispatcher.lua +99 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Proxies.lua +86 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Proxies/asynchronous.lua +56 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Proxies/protected.lua +17 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Proxies/synchronous.lua +17 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Proxies/utils.lua +29 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Receiver.lua +110 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Servants.lua +207 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Sockets.lua +44 -0
- data/vendor/lua/lib/lua/oil/kernel/cooperative/Receiver.lua +139 -0
- data/vendor/lua/lib/lua/oil/kernel/intercepted/Listener.lua +47 -0
- data/vendor/lua/lib/lua/oil/kernel/intercepted/Requester.lua +58 -0
- data/vendor/lua/lib/lua/oil/kernel/lua/Dispatcher.lua +76 -0
- data/vendor/lua/lib/lua/oil/kernel/lua/Proxies.lua +69 -0
- data/vendor/lua/lib/lua/oil/kernel/typed/Dispatcher.lua +91 -0
- data/vendor/lua/lib/lua/oil/kernel/typed/Proxies.lua +153 -0
- data/vendor/lua/lib/lua/oil/kernel/typed/Servants.lua +137 -0
- data/vendor/lua/lib/lua/oil/ludo/Codec.lua +66 -0
- data/vendor/lua/lib/lua/oil/ludo/CodecByRef.lua +103 -0
- data/vendor/lua/lib/lua/oil/ludo/Listener.lua +151 -0
- data/vendor/lua/lib/lua/oil/ludo/Referrer.lua +72 -0
- data/vendor/lua/lib/lua/oil/ludo/Requester.lua +107 -0
- data/vendor/lua/lib/lua/oil/oo.lua +1 -0
- data/vendor/lua/lib/lua/oil/port.lua +1 -0
- data/vendor/lua/lib/lua/oil/properties.lua +57 -0
- data/vendor/lua/lib/lua/oil/verbose.lua +133 -0
- data/vendor/lua/lib/lua/package_ext.lua +15 -0
- data/vendor/lua/lib/lua/parser.lua +268 -0
- data/vendor/lua/lib/lua/pl/Date.lua +555 -0
- data/vendor/lua/lib/lua/pl/List.lua +613 -0
- data/vendor/lua/lib/lua/pl/Map.lua +113 -0
- data/vendor/lua/lib/lua/pl/MultiMap.lua +62 -0
- data/vendor/lua/lib/lua/pl/OrderedMap.lua +151 -0
- data/vendor/lua/lib/lua/pl/Set.lua +153 -0
- data/vendor/lua/lib/lua/pl/app.lua +165 -0
- data/vendor/lua/lib/lua/pl/array2d.lua +501 -0
- data/vendor/lua/lib/lua/pl/class.lua +180 -0
- data/vendor/lua/lib/lua/pl/comprehension.lua +286 -0
- data/vendor/lua/lib/lua/pl/config.lua +176 -0
- data/vendor/lua/lib/lua/pl/data.lua +606 -0
- data/vendor/lua/lib/lua/pl/dir.lua +475 -0
- data/vendor/lua/lib/lua/pl/file.lua +70 -0
- data/vendor/lua/lib/lua/pl/func.lua +376 -0
- data/vendor/lua/lib/lua/pl/init.lua +68 -0
- data/vendor/lua/lib/lua/pl/input.lua +173 -0
- data/vendor/lua/lib/lua/pl/lapp.lua +407 -0
- data/vendor/lua/lib/lua/pl/lexer.lua +456 -0
- data/vendor/lua/lib/lua/pl/luabalanced.lua +264 -0
- data/vendor/lua/lib/lua/pl/operator.lua +201 -0
- data/vendor/lua/lib/lua/pl/path.lua +398 -0
- data/vendor/lua/lib/lua/pl/permute.lua +63 -0
- data/vendor/lua/lib/lua/pl/platf/luajava.lua +101 -0
- data/vendor/lua/lib/lua/pl/pretty.lua +285 -0
- data/vendor/lua/lib/lua/pl/seq.lua +551 -0
- data/vendor/lua/lib/lua/pl/sip.lua +344 -0
- data/vendor/lua/lib/lua/pl/strict.lua +70 -0
- data/vendor/lua/lib/lua/pl/stringio.lua +158 -0
- data/vendor/lua/lib/lua/pl/stringx.lua +440 -0
- data/vendor/lua/lib/lua/pl/tablex.lua +817 -0
- data/vendor/lua/lib/lua/pl/template.lua +103 -0
- data/vendor/lua/lib/lua/pl/test.lua +135 -0
- data/vendor/lua/lib/lua/pl/text.lua +243 -0
- data/vendor/lua/lib/lua/pl/utils.lua +550 -0
- data/vendor/lua/lib/lua/pl/xml.lua +689 -0
- data/vendor/lua/lib/lua/profiler.dll +0 -0
- data/vendor/lua/lib/lua/re.lua +248 -0
- data/vendor/lua/lib/lua/rex_onig.dll +0 -0
- data/vendor/lua/lib/lua/rex_pcre.dll +0 -0
- data/vendor/lua/lib/lua/rex_posix.dll +0 -0
- data/vendor/lua/lib/lua/rings.dll +0 -0
- data/vendor/lua/lib/lua/serialize.lua +193 -0
- data/vendor/lua/lib/lua/set.lua +149 -0
- data/vendor/lua/lib/lua/socket.lua +133 -0
- data/vendor/lua/lib/lua/socket/core.dll +0 -0
- data/vendor/lua/lib/lua/socket/ftp.lua +281 -0
- data/vendor/lua/lib/lua/socket/http.lua +350 -0
- data/vendor/lua/lib/lua/socket/smtp.lua +251 -0
- data/vendor/lua/lib/lua/socket/tp.lua +123 -0
- data/vendor/lua/lib/lua/socket/url.lua +297 -0
- data/vendor/lua/lib/lua/ssl.dll +0 -0
- data/vendor/lua/lib/lua/ssl.lua +93 -0
- data/vendor/lua/lib/lua/ssl/https.lua +138 -0
- data/vendor/lua/lib/lua/stable.lua +28 -0
- data/vendor/lua/lib/lua/std.lua +16 -0
- data/vendor/lua/lib/lua/strbuf.lua +32 -0
- data/vendor/lua/lib/lua/strict.lua +45 -0
- data/vendor/lua/lib/lua/string_ext.lua +274 -0
- data/vendor/lua/lib/lua/table_ext.lua +117 -0
- data/vendor/lua/lib/lua/tar.lua +262 -0
- data/vendor/lua/lib/lua/task.dll +0 -0
- data/vendor/lua/lib/lua/tree.lua +81 -0
- data/vendor/lua/lib/lua/unicode.dll +0 -0
- data/vendor/lua/lib/lua/verbose_require.lua +11 -0
- data/vendor/lua/lib/lua/vstruct.lua +86 -0
- data/vendor/lua/lib/lua/vstruct/ast.lua +192 -0
- data/vendor/lua/lib/lua/vstruct/ast/Bitpack.lua +33 -0
- data/vendor/lua/lib/lua/vstruct/ast/Generator.lua +174 -0
- data/vendor/lua/lib/lua/vstruct/ast/IO.lua +45 -0
- data/vendor/lua/lib/lua/vstruct/ast/List.lua +56 -0
- data/vendor/lua/lib/lua/vstruct/ast/Name.lua +20 -0
- data/vendor/lua/lib/lua/vstruct/ast/Repeat.lua +23 -0
- data/vendor/lua/lib/lua/vstruct/ast/Root.lua +19 -0
- data/vendor/lua/lib/lua/vstruct/ast/Table.lua +65 -0
- data/vendor/lua/lib/lua/vstruct/cursor.lua +81 -0
- data/vendor/lua/lib/lua/vstruct/io.lua +45 -0
- data/vendor/lua/lib/lua/vstruct/io/a.lua +24 -0
- data/vendor/lua/lib/lua/vstruct/io/b.lua +28 -0
- data/vendor/lua/lib/lua/vstruct/io/bigendian.lua +21 -0
- data/vendor/lua/lib/lua/vstruct/io/c.lua +25 -0
- data/vendor/lua/lib/lua/vstruct/io/defaults.lua +24 -0
- data/vendor/lua/lib/lua/vstruct/io/endianness.lua +41 -0
- data/vendor/lua/lib/lua/vstruct/io/f.lua +129 -0
- data/vendor/lua/lib/lua/vstruct/io/hostendian.lua +21 -0
- data/vendor/lua/lib/lua/vstruct/io/i.lua +42 -0
- data/vendor/lua/lib/lua/vstruct/io/littleendian.lua +21 -0
- data/vendor/lua/lib/lua/vstruct/io/m.lua +62 -0
- data/vendor/lua/lib/lua/vstruct/io/p.lua +23 -0
- data/vendor/lua/lib/lua/vstruct/io/s.lua +27 -0
- data/vendor/lua/lib/lua/vstruct/io/seekb.lua +18 -0
- data/vendor/lua/lib/lua/vstruct/io/seekf.lua +18 -0
- data/vendor/lua/lib/lua/vstruct/io/seekto.lua +18 -0
- data/vendor/lua/lib/lua/vstruct/io/u.lua +54 -0
- data/vendor/lua/lib/lua/vstruct/io/x.lua +34 -0
- data/vendor/lua/lib/lua/vstruct/io/z.lua +63 -0
- data/vendor/lua/lib/lua/vstruct/lexer.lua +100 -0
- data/vendor/lua/lib/lua/vstruct/pack.lua +142 -0
- data/vendor/lua/lib/lua/vstruct/test.lua +47 -0
- data/vendor/lua/lib/lua/vstruct/test/basic.lua +73 -0
- data/vendor/lua/lib/lua/vstruct/test/common.lua +100 -0
- data/vendor/lua/lib/lua/vstruct/test/fp-bigendian.lua +56 -0
- data/vendor/lua/lib/lua/vstruct/test/fp-littleendian.lua +56 -0
- data/vendor/lua/lib/lua/vstruct/test/struct-test-gen.lua +1230 -0
- data/vendor/lua/lib/lua/vstruct/unpack.lua +126 -0
- data/vendor/lua/lib/lua/wx.dll +0 -0
- data/vendor/lua/lib/lua/xml.lua +75 -0
- data/vendor/lua/lib/lua/zip.dll +0 -0
- data/vendor/lua/lib/lua/zlib.dll +0 -0
- metadata +529 -0
|
@@ -0,0 +1,689 @@
|
|
|
1
|
+
--- XML LOM Utilities.
|
|
2
|
+
--
|
|
3
|
+
-- This implements some useful things on [LOM](http://matthewwild.co.uk/projects/luaexpat/lom.html) documents, such as returned by `lxp.lom.parse`.
|
|
4
|
+
-- In particular, it can convert LOM back into XML text, with optional pretty-printing control.
|
|
5
|
+
-- It is s based on stanza.lua from [Prosody](http://hg.prosody.im/trunk/file/4621c92d2368/util/stanza.lua)
|
|
6
|
+
--
|
|
7
|
+
-- > d = xml.parse "<nodes><node id='1'>alice</node></nodes>"
|
|
8
|
+
-- > = d
|
|
9
|
+
-- <nodes><node id='1'>alice</node></nodes>
|
|
10
|
+
-- > = xml.tostring(d,'',' ')
|
|
11
|
+
-- <nodes>
|
|
12
|
+
-- <node id='1'>alice</node>
|
|
13
|
+
-- </nodes>
|
|
14
|
+
--
|
|
15
|
+
-- Can be used as a lightweight one-stop-shop for simple XML processing; a simple XML parser is included
|
|
16
|
+
-- but the default is to use `lxp.lom` if it can be found.
|
|
17
|
+
-- <pre>
|
|
18
|
+
-- Prosody IM
|
|
19
|
+
-- Copyright (C) 2008-2010 Matthew Wild
|
|
20
|
+
-- Copyright (C) 2008-2010 Waqas Hussain--
|
|
21
|
+
-- classic Lua XML parser by Roberto Ierusalimschy.
|
|
22
|
+
-- modified to output LOM format.
|
|
23
|
+
-- http://lua-users.org/wiki/LuaXml
|
|
24
|
+
-- </pre>
|
|
25
|
+
-- See @{06-data.md.XML|the Guide}
|
|
26
|
+
--
|
|
27
|
+
-- Dependencies: `pl.utils`
|
|
28
|
+
--
|
|
29
|
+
-- Soft Dependencies: `lxp.lom` (fallback is to use basic Lua parser)
|
|
30
|
+
-- @module pl.xml
|
|
31
|
+
|
|
32
|
+
local split = require 'pl.utils'.split
|
|
33
|
+
local t_insert = table.insert;
|
|
34
|
+
local t_concat = table.concat;
|
|
35
|
+
local t_remove = table.remove;
|
|
36
|
+
local s_format = string.format;
|
|
37
|
+
local s_match = string.match;
|
|
38
|
+
local tostring = tostring;
|
|
39
|
+
local setmetatable = setmetatable;
|
|
40
|
+
local getmetatable = getmetatable;
|
|
41
|
+
local pairs = pairs;
|
|
42
|
+
local ipairs = ipairs;
|
|
43
|
+
local type = type;
|
|
44
|
+
local next = next;
|
|
45
|
+
local print = print;
|
|
46
|
+
local unpack = unpack;
|
|
47
|
+
local s_gsub = string.gsub;
|
|
48
|
+
local s_char = string.char;
|
|
49
|
+
local s_find = string.find;
|
|
50
|
+
local os = os;
|
|
51
|
+
local pcall,require,io = pcall,require,io
|
|
52
|
+
|
|
53
|
+
local _M = {}
|
|
54
|
+
local Doc = { __type = "doc" };
|
|
55
|
+
Doc.__index = Doc;
|
|
56
|
+
|
|
57
|
+
--- create a new document node.
|
|
58
|
+
-- @param tag the tag name
|
|
59
|
+
-- @param attr optional attributes (table of name-value pairs)
|
|
60
|
+
function _M.new(tag, attr)
|
|
61
|
+
local doc = { tag = tag, attr = attr or {}, last_add = {}};
|
|
62
|
+
return setmetatable(doc, Doc);
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
--- parse an XML document. By default, this uses lxp.lom.parse, but
|
|
66
|
+
-- falls back to basic_parse, or if use_basic is true
|
|
67
|
+
-- @param text_or_file file or string representation
|
|
68
|
+
-- @param is_file whether text_or_file is a file name or not
|
|
69
|
+
-- @param use_basic do a basic parse
|
|
70
|
+
-- @return a parsed LOM document with the document metatatables set
|
|
71
|
+
-- @return nil, error the error can either be a file error or a parse error
|
|
72
|
+
function _M.parse(text_or_file, is_file, use_basic)
|
|
73
|
+
local parser,status,lom
|
|
74
|
+
if use_basic then parser = _M.basic_parse
|
|
75
|
+
else
|
|
76
|
+
status,lom = pcall(require,'lxp.lom')
|
|
77
|
+
if not status then parser = _M.basic_parse else parser = lom.parse end
|
|
78
|
+
end
|
|
79
|
+
if is_file then
|
|
80
|
+
local f,err = io.open(text_or_file)
|
|
81
|
+
if not f then return nil,err end
|
|
82
|
+
text_or_file = f:read '*a'
|
|
83
|
+
f:close()
|
|
84
|
+
end
|
|
85
|
+
local doc,err = parser(text_or_file)
|
|
86
|
+
if not doc then return nil,err end
|
|
87
|
+
if lom then
|
|
88
|
+
_M.walk(doc,false,function(_,d)
|
|
89
|
+
setmetatable(d,Doc)
|
|
90
|
+
end)
|
|
91
|
+
end
|
|
92
|
+
return doc
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
---- convenient function to add a document node, This updates the last inserted position.
|
|
96
|
+
-- @param tag a tag name
|
|
97
|
+
-- @param attrs optional set of attributes (name-string pairs)
|
|
98
|
+
function Doc:addtag(tag, attrs)
|
|
99
|
+
local s = _M.new(tag, attrs);
|
|
100
|
+
(self.last_add[#self.last_add] or self):add_direct_child(s);
|
|
101
|
+
t_insert(self.last_add, s);
|
|
102
|
+
return self;
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
--- convenient function to add a text node. This updates the last inserted position.
|
|
106
|
+
-- @param text a string
|
|
107
|
+
function Doc:text(text)
|
|
108
|
+
(self.last_add[#self.last_add] or self):add_direct_child(text);
|
|
109
|
+
return self;
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
---- go up one level in a document
|
|
113
|
+
function Doc:up()
|
|
114
|
+
t_remove(self.last_add);
|
|
115
|
+
return self;
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
function Doc:reset()
|
|
119
|
+
local last_add = self.last_add;
|
|
120
|
+
for i = 1,#last_add do
|
|
121
|
+
last_add[i] = nil;
|
|
122
|
+
end
|
|
123
|
+
return self;
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
--- append a child to a document directly.
|
|
127
|
+
-- @param child a child node (either text or a document)
|
|
128
|
+
function Doc:add_direct_child(child)
|
|
129
|
+
t_insert(self, child);
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
--- append a child to a document at the last element added
|
|
133
|
+
-- @param child a child node (either text or a document)
|
|
134
|
+
function Doc:add_child(child)
|
|
135
|
+
(self.last_add[#self.last_add] or self):add_direct_child(child);
|
|
136
|
+
return self;
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
--accessing attributes: useful not to have to expose implementation (attr)
|
|
140
|
+
--but also can allow attr to be nil in any future optimizations
|
|
141
|
+
|
|
142
|
+
--- set attributes of a document node.
|
|
143
|
+
-- @param t a table containing attribute/value pairs
|
|
144
|
+
function Doc:set_attribs (t)
|
|
145
|
+
for k,v in pairs(t) do
|
|
146
|
+
self.attr[k] = v
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
--- set a single attribute of a document node.
|
|
151
|
+
-- @param a attribute
|
|
152
|
+
-- @param v its value
|
|
153
|
+
function Doc:set_attrib(a,v)
|
|
154
|
+
self.attr[a] = v
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
--- access the attributes of a document node.
|
|
158
|
+
function Doc:get_attribs()
|
|
159
|
+
return self.attr
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
--- function to create an element with a given tag name and a set of children.
|
|
163
|
+
-- @param tag a tag name
|
|
164
|
+
-- @param items either text or a table where the hash part is the attributes and the list part is the children.
|
|
165
|
+
function _M.elem(tag,items)
|
|
166
|
+
local s = _M.new(tag)
|
|
167
|
+
if type(items) == 'string' then items = {items} end
|
|
168
|
+
if _M.is_tag(items) then
|
|
169
|
+
t_insert(s,items)
|
|
170
|
+
elseif type(items) == 'table' then
|
|
171
|
+
for k,v in pairs(items) do
|
|
172
|
+
if type(k) == 'string' then
|
|
173
|
+
s.attr[k] = v
|
|
174
|
+
t_insert(s.attr,k)
|
|
175
|
+
else
|
|
176
|
+
s[k] = v
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
return s
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
--- given a list of names, return a number of element constructors.
|
|
184
|
+
-- @param list a list of names, or a comma-separated string.
|
|
185
|
+
-- @usage local parent,children = doc.tags 'parent,children' <br>
|
|
186
|
+
-- doc = parent {child 'one', child 'two'}
|
|
187
|
+
function _M.tags(list)
|
|
188
|
+
local ctors = {}
|
|
189
|
+
local elem = _M.elem
|
|
190
|
+
if type(list) == 'string' then list = split(list,'%s*,%s*') end
|
|
191
|
+
for _,tag in ipairs(list) do
|
|
192
|
+
local ctor = function(items) return _M.elem(tag,items) end
|
|
193
|
+
t_insert(ctors,ctor)
|
|
194
|
+
end
|
|
195
|
+
return unpack(ctors)
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
local templ_cache = {}
|
|
199
|
+
|
|
200
|
+
local function is_data(data)
|
|
201
|
+
return #data == 0 or type(data[1]) ~= 'table'
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
local function prepare_data(data)
|
|
205
|
+
-- a hack for ensuring that $1 maps to first element of data, etc.
|
|
206
|
+
-- Either this or could change the gsub call just below.
|
|
207
|
+
for i,v in ipairs(data) do
|
|
208
|
+
data[tostring(i)] = v
|
|
209
|
+
end
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
--- create a substituted copy of a document,
|
|
213
|
+
-- @param templ may be a document or a string representation which will be parsed and cached
|
|
214
|
+
-- @param data a table of name-value pairs or a list of such tables
|
|
215
|
+
-- @return an XML document
|
|
216
|
+
function Doc.subst(templ, data)
|
|
217
|
+
if type(data) ~= 'table' or not next(data) then return nil, "data must be a non-empty table" end
|
|
218
|
+
if is_data(data) then
|
|
219
|
+
prepare_data(data)
|
|
220
|
+
end
|
|
221
|
+
if type(templ) == 'string' then
|
|
222
|
+
if templ_cache[templ] then
|
|
223
|
+
templ = templ_cache[templ]
|
|
224
|
+
else
|
|
225
|
+
local str,err = templ
|
|
226
|
+
templ,err = _M.parse(str)
|
|
227
|
+
if not templ then return nil,err end
|
|
228
|
+
templ_cache[str] = templ
|
|
229
|
+
end
|
|
230
|
+
end
|
|
231
|
+
local function _subst(item)
|
|
232
|
+
return _M.clone(templ,function(s)
|
|
233
|
+
return s:gsub('%$(%w+)',item)
|
|
234
|
+
end)
|
|
235
|
+
end
|
|
236
|
+
if is_data(data) then return _subst(data) end
|
|
237
|
+
local list = {}
|
|
238
|
+
for _,item in ipairs(data) do
|
|
239
|
+
prepare_data(item)
|
|
240
|
+
t_insert(list,_subst(item))
|
|
241
|
+
end
|
|
242
|
+
if data.tag then
|
|
243
|
+
list = _M.elem(data.tag,list)
|
|
244
|
+
end
|
|
245
|
+
return list
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
--- get the first child with a given tag name.
|
|
250
|
+
-- @param tag the tag name
|
|
251
|
+
function Doc:child_with_name(tag)
|
|
252
|
+
for _, child in ipairs(self) do
|
|
253
|
+
if child.tag == tag then return child; end
|
|
254
|
+
end
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
local _children_with_name
|
|
258
|
+
function _children_with_name(self,tag,list,recurse)
|
|
259
|
+
for _, child in ipairs(self) do if type(child) == 'table' then
|
|
260
|
+
if child.tag == tag then t_insert(list,child) end
|
|
261
|
+
if recurse then _children_with_name(child,tag,list,recurse) end
|
|
262
|
+
end end
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
--- get all elements in a document that have a given tag.
|
|
266
|
+
-- @param tag a tag name
|
|
267
|
+
-- @param dont_recurse optionally only return the immediate children with this tag name
|
|
268
|
+
-- @return a list of elements
|
|
269
|
+
function Doc:get_elements_with_name(tag,dont_recurse)
|
|
270
|
+
local res = {}
|
|
271
|
+
_children_with_name(self,tag,res,not dont_recurse)
|
|
272
|
+
return res
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
-- iterate over all children of a document node, including text nodes.
|
|
276
|
+
function Doc:children()
|
|
277
|
+
local i = 0;
|
|
278
|
+
return function (a)
|
|
279
|
+
i = i + 1
|
|
280
|
+
return a[i];
|
|
281
|
+
end, self, i;
|
|
282
|
+
end
|
|
283
|
+
|
|
284
|
+
-- return the first child element of a node, if it exists.
|
|
285
|
+
function Doc:first_childtag()
|
|
286
|
+
if #self == 0 then return end
|
|
287
|
+
for _,t in ipairs(self) do
|
|
288
|
+
if type(t) == 'table' then return t end
|
|
289
|
+
end
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
function Doc:matching_tags(tag, xmlns)
|
|
293
|
+
xmlns = xmlns or self.attr.xmlns;
|
|
294
|
+
local tags = self;
|
|
295
|
+
local start_i, max_i = 1, #tags;
|
|
296
|
+
return function ()
|
|
297
|
+
for i=start_i,max_i do
|
|
298
|
+
v = tags[i];
|
|
299
|
+
if (not tag or v.tag == tag)
|
|
300
|
+
and (not xmlns or xmlns == v.attr.xmlns) then
|
|
301
|
+
start_i = i+1;
|
|
302
|
+
return v;
|
|
303
|
+
end
|
|
304
|
+
end
|
|
305
|
+
end, tags, i;
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
--- iterate over all child elements of a document node.
|
|
309
|
+
function Doc:childtags()
|
|
310
|
+
local i = 0;
|
|
311
|
+
return function (a)
|
|
312
|
+
local v
|
|
313
|
+
repeat
|
|
314
|
+
i = i + 1
|
|
315
|
+
v = self[i]
|
|
316
|
+
if v and type(v) == 'table' then return v; end
|
|
317
|
+
until not v
|
|
318
|
+
end, self[1], i;
|
|
319
|
+
end
|
|
320
|
+
|
|
321
|
+
--- visit child element of a node and call a function, possibility modifying the document.
|
|
322
|
+
-- @param callback a function passed the node (text or element). If it returns nil, that node will be removed.
|
|
323
|
+
-- If it returns a value, that will replace the current node.
|
|
324
|
+
function Doc:maptags(callback)
|
|
325
|
+
local is_tag = _M.is_tag
|
|
326
|
+
local i = 1;
|
|
327
|
+
while i <= #self do
|
|
328
|
+
if is_tag(self[i]) then
|
|
329
|
+
local ret = callback(self[i]);
|
|
330
|
+
if ret == nil then
|
|
331
|
+
t_remove(self, i);
|
|
332
|
+
else
|
|
333
|
+
self[i] = ret;
|
|
334
|
+
i = i + 1;
|
|
335
|
+
end
|
|
336
|
+
end
|
|
337
|
+
end
|
|
338
|
+
return self;
|
|
339
|
+
end
|
|
340
|
+
|
|
341
|
+
local xml_escape
|
|
342
|
+
do
|
|
343
|
+
local escape_table = { ["'"] = "'", ["\""] = """, ["<"] = "<", [">"] = ">", ["&"] = "&" };
|
|
344
|
+
function xml_escape(str) return (s_gsub(str, "['&<>\"]", escape_table)); end
|
|
345
|
+
_M.xml_escape = xml_escape;
|
|
346
|
+
end
|
|
347
|
+
|
|
348
|
+
-- pretty printing
|
|
349
|
+
-- if indent, then put each new tag on its own line
|
|
350
|
+
-- if attr_indent, put each new attribute on its own line
|
|
351
|
+
local function _dostring(t, buf, self, xml_escape, parentns, idn, indent, attr_indent)
|
|
352
|
+
local nsid = 0;
|
|
353
|
+
local tag = t.tag
|
|
354
|
+
local lf,alf = ""," "
|
|
355
|
+
if indent then lf = '\n'..idn end
|
|
356
|
+
if attr_indent then alf = '\n'..idn..attr_indent end
|
|
357
|
+
t_insert(buf, lf.."<"..tag);
|
|
358
|
+
for k, v in pairs(t.attr) do
|
|
359
|
+
if type(k) ~= 'number' then -- LOM attr table has list-like part
|
|
360
|
+
if s_find(k, "\1", 1, true) then
|
|
361
|
+
local ns, attrk = s_match(k, "^([^\1]*)\1?(.*)$");
|
|
362
|
+
nsid = nsid + 1;
|
|
363
|
+
t_insert(buf, " xmlns:ns"..nsid.."='"..xml_escape(ns).."' ".."ns"..nsid..":"..attrk.."='"..xml_escape(v).."'");
|
|
364
|
+
elseif not(k == "xmlns" and v == parentns) then
|
|
365
|
+
t_insert(buf, alf..k.."='"..xml_escape(v).."'");
|
|
366
|
+
end
|
|
367
|
+
end
|
|
368
|
+
end
|
|
369
|
+
local len,has_children = #t;
|
|
370
|
+
if len == 0 then
|
|
371
|
+
local out = "/>"
|
|
372
|
+
if attr_indent then out = '\n'..idn..out end
|
|
373
|
+
t_insert(buf, out);
|
|
374
|
+
else
|
|
375
|
+
t_insert(buf, ">");
|
|
376
|
+
for n=1,len do
|
|
377
|
+
local child = t[n];
|
|
378
|
+
if child.tag then
|
|
379
|
+
self(child, buf, self, xml_escape, t.attr.xmlns,idn and idn..indent, indent, attr_indent );
|
|
380
|
+
has_children = true
|
|
381
|
+
else -- text element
|
|
382
|
+
t_insert(buf, xml_escape(child));
|
|
383
|
+
end
|
|
384
|
+
end
|
|
385
|
+
t_insert(buf, (has_children and lf or '').."</"..tag..">");
|
|
386
|
+
end
|
|
387
|
+
end
|
|
388
|
+
|
|
389
|
+
---- pretty-print an XML document
|
|
390
|
+
--- @param t an XML document
|
|
391
|
+
--- @param idn an initial indent (indents are all strings)
|
|
392
|
+
--- @param indent an indent for each level
|
|
393
|
+
--- @param attr_indent if given, indent each attribute pair and put on a separate line
|
|
394
|
+
--- @return a string representation
|
|
395
|
+
function _M.tostring(t,idn,indent, attr_indent)
|
|
396
|
+
local buf = {};
|
|
397
|
+
_dostring(t, buf, _dostring, xml_escape, nil,idn,indent, attr_indent);
|
|
398
|
+
return t_concat(buf);
|
|
399
|
+
end
|
|
400
|
+
|
|
401
|
+
Doc.__tostring = _M.tostring
|
|
402
|
+
|
|
403
|
+
--- get the full text value of an element
|
|
404
|
+
function Doc:get_text()
|
|
405
|
+
local res = {}
|
|
406
|
+
for i,el in ipairs(self) do
|
|
407
|
+
if type(el) == 'string' then t_insert(res,el) end
|
|
408
|
+
end
|
|
409
|
+
return t_concat(res);
|
|
410
|
+
end
|
|
411
|
+
|
|
412
|
+
--- make a copy of a document
|
|
413
|
+
-- @param doc the original document
|
|
414
|
+
-- @param strsubst an optional function for handling string copying which could do substitution, etc.
|
|
415
|
+
function _M.clone(doc, strsubst)
|
|
416
|
+
local lookup_table = {};
|
|
417
|
+
local function _copy(object)
|
|
418
|
+
if type(object) ~= "table" then
|
|
419
|
+
if strsubst and type(object) == 'string' then return strsubst(object)
|
|
420
|
+
else return object;
|
|
421
|
+
end
|
|
422
|
+
elseif lookup_table[object] then
|
|
423
|
+
return lookup_table[object];
|
|
424
|
+
end
|
|
425
|
+
local new_table = {};
|
|
426
|
+
lookup_table[object] = new_table;
|
|
427
|
+
for index, value in pairs(object) do
|
|
428
|
+
new_table[_copy(index)] = _copy(value); -- is cloning keys much use, hm?
|
|
429
|
+
end
|
|
430
|
+
return setmetatable(new_table, getmetatable(object));
|
|
431
|
+
end
|
|
432
|
+
|
|
433
|
+
return _copy(doc)
|
|
434
|
+
end
|
|
435
|
+
|
|
436
|
+
--- compare two documents.
|
|
437
|
+
-- @param t1 any value
|
|
438
|
+
-- @param t2 any value
|
|
439
|
+
function _M.compare(t1,t2)
|
|
440
|
+
local ty1 = type(t1)
|
|
441
|
+
local ty2 = type(t2)
|
|
442
|
+
if ty1 ~= ty2 then return false, 'type mismatch' end
|
|
443
|
+
if ty1 == 'string' then
|
|
444
|
+
return t1 == t2 and true or 'text '..t1..' ~= text '..t2
|
|
445
|
+
end
|
|
446
|
+
if ty1 ~= 'table' or ty2 ~= 'table' then return false, 'not a document' end
|
|
447
|
+
if t1.tag ~= t2.tag then return false, 'tag '..t1.tag..' ~= tag '..t2.tag end
|
|
448
|
+
if #t1 ~= #t2 then return false, 'size '..#t1..' ~= size '..#t2..' for tag '..t1.tag end
|
|
449
|
+
-- compare attributes
|
|
450
|
+
for k,v in pairs(t1.attr) do
|
|
451
|
+
if t2.attr[k] ~= v then return false, 'mismatch attrib' end
|
|
452
|
+
end
|
|
453
|
+
for k,v in pairs(t2.attr) do
|
|
454
|
+
if t1.attr[k] ~= v then return false, 'mismatch attrib' end
|
|
455
|
+
end
|
|
456
|
+
-- compare children
|
|
457
|
+
for i = 1,#t1 do
|
|
458
|
+
local yes,err = _M.compare(t1[i],t2[i])
|
|
459
|
+
if not yes then return err end
|
|
460
|
+
end
|
|
461
|
+
return true
|
|
462
|
+
end
|
|
463
|
+
|
|
464
|
+
--- is this value a document element?
|
|
465
|
+
-- @param d any value
|
|
466
|
+
function _M.is_tag(d)
|
|
467
|
+
return type(d) == 'table' and type(d.tag) == 'string'
|
|
468
|
+
end
|
|
469
|
+
|
|
470
|
+
--- call the desired function recursively over the document.
|
|
471
|
+
-- @param doc the document
|
|
472
|
+
-- @param depth_first visit child notes first, then the current node
|
|
473
|
+
-- @param operation a function which will receive the current tag name and current node.
|
|
474
|
+
function _M.walk (doc, depth_first, operation)
|
|
475
|
+
if not depth_first then operation(doc.tag,doc) end
|
|
476
|
+
for _,d in ipairs(doc) do
|
|
477
|
+
if _M.is_tag(d) then
|
|
478
|
+
_M.walk(d,depth_first,operation)
|
|
479
|
+
end
|
|
480
|
+
end
|
|
481
|
+
if depth_first then operation(doc.tag,doc) end
|
|
482
|
+
end
|
|
483
|
+
|
|
484
|
+
local escapes = { quot = "\"", apos = "'", lt = "<", gt = ">", amp = "&" }
|
|
485
|
+
local function unescape(str) return (str:gsub( "&(%a+);", escapes)); end
|
|
486
|
+
|
|
487
|
+
local function parseargs(s)
|
|
488
|
+
local arg = {}
|
|
489
|
+
s:gsub("([%w:]+)%s*=%s*([\"'])(.-)%2", function (w, _, a)
|
|
490
|
+
arg[w] = unescape(a)
|
|
491
|
+
end)
|
|
492
|
+
return arg
|
|
493
|
+
end
|
|
494
|
+
|
|
495
|
+
--- Parse a simple XML document using a pure Lua parser based on Robero Ierusalimschy's original version.
|
|
496
|
+
-- @param s the XML document to be parsed.
|
|
497
|
+
-- @param all_text if true, preserves all whitespace. Otherwise only text containing non-whitespace is included.
|
|
498
|
+
function _M.basic_parse(s,all_text)
|
|
499
|
+
local t_insert,t_remove = table.insert,table.remove
|
|
500
|
+
local s_find,s_sub = string.find,string.sub
|
|
501
|
+
local stack = {}
|
|
502
|
+
local top = {}
|
|
503
|
+
t_insert(stack, top)
|
|
504
|
+
local ni,c,label,xarg, empty
|
|
505
|
+
local i, j = 1, 1
|
|
506
|
+
-- we're not interested in <?xml version="1.0"?>
|
|
507
|
+
local _,istart = s_find(s,'^%s*<%?[^%?]+%?>%s*')
|
|
508
|
+
if istart then i = istart+1 end
|
|
509
|
+
while true do
|
|
510
|
+
ni,j,c,label,xarg, empty = s_find(s, "<(%/?)([%w:%-_]+)(.-)(%/?)>", i)
|
|
511
|
+
if not ni then break end
|
|
512
|
+
local text = s_sub(s, i, ni-1)
|
|
513
|
+
if all_text or not s_find(text, "^%s*$") then
|
|
514
|
+
t_insert(top, unescape(text))
|
|
515
|
+
end
|
|
516
|
+
if empty == "/" then -- empty element tag
|
|
517
|
+
t_insert(top, setmetatable({tag=label, attr=parseargs(xarg), empty=1},Doc))
|
|
518
|
+
elseif c == "" then -- start tag
|
|
519
|
+
top = setmetatable({tag=label, attr=parseargs(xarg)},Doc)
|
|
520
|
+
t_insert(stack, top) -- new level
|
|
521
|
+
else -- end tag
|
|
522
|
+
local toclose = t_remove(stack) -- remove top
|
|
523
|
+
top = stack[#stack]
|
|
524
|
+
if #stack < 1 then
|
|
525
|
+
error("nothing to close with "..label)
|
|
526
|
+
end
|
|
527
|
+
if toclose.tag ~= label then
|
|
528
|
+
error("trying to close "..toclose.tag.." with "..label)
|
|
529
|
+
end
|
|
530
|
+
t_insert(top, toclose)
|
|
531
|
+
end
|
|
532
|
+
i = j+1
|
|
533
|
+
end
|
|
534
|
+
local text = s_sub(s, i)
|
|
535
|
+
if all_text or not s_find(text, "^%s*$") then
|
|
536
|
+
t_insert(stack[#stack], unescape(text))
|
|
537
|
+
end
|
|
538
|
+
if #stack > 1 then
|
|
539
|
+
error("unclosed "..stack[#stack].tag)
|
|
540
|
+
end
|
|
541
|
+
local res = stack[1]
|
|
542
|
+
return type(res[1])=='string' and res[2] or res[1]
|
|
543
|
+
end
|
|
544
|
+
|
|
545
|
+
local function empty(attr) return not attr or not next(attr) end
|
|
546
|
+
local function is_text(s) return type(s) == 'string' end
|
|
547
|
+
local function is_element(d) return type(d) == 'table' and d.tag ~= nil end
|
|
548
|
+
|
|
549
|
+
-- returns the key,value pair from a table if it has exactly one entry
|
|
550
|
+
local function has_one_element(t)
|
|
551
|
+
local key,value = next(t)
|
|
552
|
+
if next(t,key) ~= nil then return false end
|
|
553
|
+
return key,value
|
|
554
|
+
end
|
|
555
|
+
|
|
556
|
+
local function append_capture(res,tbl)
|
|
557
|
+
if not empty(tbl) then -- no point in capturing empty tables...
|
|
558
|
+
local key
|
|
559
|
+
if tbl._ then -- if $_ was set then it is meant as the top-level key for the captured table
|
|
560
|
+
key = tbl._
|
|
561
|
+
tbl._ = nil
|
|
562
|
+
if empty(tbl) then return end
|
|
563
|
+
end
|
|
564
|
+
-- a table with only one pair {[0]=value} shall be reduced to that value
|
|
565
|
+
local numkey,val = has_one_element(tbl)
|
|
566
|
+
if numkey == 0 then tbl = val end
|
|
567
|
+
if key then
|
|
568
|
+
res[key] = tbl
|
|
569
|
+
else -- otherwise, we append the captured table
|
|
570
|
+
t_insert(res,tbl)
|
|
571
|
+
end
|
|
572
|
+
end
|
|
573
|
+
end
|
|
574
|
+
|
|
575
|
+
local function make_number(pat)
|
|
576
|
+
if pat:find '^%d+$' then -- $1 etc means use this as an array location
|
|
577
|
+
pat = tonumber(pat)
|
|
578
|
+
end
|
|
579
|
+
return pat
|
|
580
|
+
end
|
|
581
|
+
|
|
582
|
+
local function capture_attrib(res,pat,value)
|
|
583
|
+
pat = make_number(pat:sub(2))
|
|
584
|
+
res[pat] = value
|
|
585
|
+
return true
|
|
586
|
+
end
|
|
587
|
+
|
|
588
|
+
local match
|
|
589
|
+
function match(d,pat,res,keep_going)
|
|
590
|
+
local ret = true
|
|
591
|
+
if d == nil then return false end
|
|
592
|
+
-- attribute string matching is straight equality, except if the pattern is a $ capture,
|
|
593
|
+
-- which always succeeds.
|
|
594
|
+
if type(d) == 'string' then
|
|
595
|
+
if type(pat) ~= 'string' then return false end
|
|
596
|
+
if _M.debug then print(d,pat) end
|
|
597
|
+
if pat:find '^%$' then
|
|
598
|
+
return capture_attrib(res,pat,d)
|
|
599
|
+
else
|
|
600
|
+
return d == pat
|
|
601
|
+
end
|
|
602
|
+
else
|
|
603
|
+
if _M.debug then print(d.tag,pat.tag) end
|
|
604
|
+
-- this is an element node. For a match to succeed, the attributes must
|
|
605
|
+
-- match as well.
|
|
606
|
+
-- a tagname in the pattern ending with '-' is a wildcard and matches like an attribute
|
|
607
|
+
local tagpat = pat.tag:match '^(.-)%-$'
|
|
608
|
+
if tagpat then
|
|
609
|
+
tagpat = make_number(tagpat)
|
|
610
|
+
res[tagpat] = d.tag
|
|
611
|
+
end
|
|
612
|
+
if d.tag == pat.tag or tagpat then
|
|
613
|
+
|
|
614
|
+
if not empty(pat.attr) then
|
|
615
|
+
if empty(d.attr) then ret = false
|
|
616
|
+
else
|
|
617
|
+
for prop,pval in pairs(pat.attr) do
|
|
618
|
+
local dval = d.attr[prop]
|
|
619
|
+
if not match(dval,pval,res) then ret = false; break end
|
|
620
|
+
end
|
|
621
|
+
end
|
|
622
|
+
end
|
|
623
|
+
-- the pattern may have child nodes. We match partially, so that {P1,P2} shall match {X,P1,X,X,P2,..}
|
|
624
|
+
if ret and #pat > 0 then
|
|
625
|
+
local i,j = 1,1
|
|
626
|
+
local function next_elem()
|
|
627
|
+
j = j + 1 -- next child element of data
|
|
628
|
+
if is_text(d[j]) then j = j + 1 end
|
|
629
|
+
return j <= #d
|
|
630
|
+
end
|
|
631
|
+
repeat
|
|
632
|
+
local p = pat[i]
|
|
633
|
+
-- repeated {{<...>}} patterns shall match one or more elements
|
|
634
|
+
-- so e.g. {P+} will match {X,X,P,P,X,P,X,X,X}
|
|
635
|
+
if is_element(p) and p.repeated then
|
|
636
|
+
local found
|
|
637
|
+
repeat
|
|
638
|
+
local tbl = {}
|
|
639
|
+
ret = match(d[j],p,tbl,false)
|
|
640
|
+
if ret then
|
|
641
|
+
found = false --true
|
|
642
|
+
append_capture(res,tbl)
|
|
643
|
+
end
|
|
644
|
+
until not next_elem() or (found and not ret)
|
|
645
|
+
i = i + 1
|
|
646
|
+
else
|
|
647
|
+
ret = match(d[j],p,res,false)
|
|
648
|
+
if ret then i = i + 1 end
|
|
649
|
+
end
|
|
650
|
+
until not next_elem() or i > #pat -- run out of elements or patterns to match
|
|
651
|
+
-- if every element in our pattern matched ok, then it's been a successful match
|
|
652
|
+
if i > #pat then return true end
|
|
653
|
+
end
|
|
654
|
+
if ret then return true end
|
|
655
|
+
else
|
|
656
|
+
ret = false
|
|
657
|
+
end
|
|
658
|
+
-- keep going anyway - look at the children!
|
|
659
|
+
if keep_going then
|
|
660
|
+
for child in d:childtags() do
|
|
661
|
+
ret = match(child,pat,res,keep_going)
|
|
662
|
+
if ret then break end
|
|
663
|
+
end
|
|
664
|
+
end
|
|
665
|
+
end
|
|
666
|
+
return ret
|
|
667
|
+
end
|
|
668
|
+
|
|
669
|
+
function Doc:match(pat)
|
|
670
|
+
if is_text(pat) then
|
|
671
|
+
pat = _M.parse(pat,false,true)
|
|
672
|
+
end
|
|
673
|
+
_M.walk(pat,false,function(_,d)
|
|
674
|
+
if is_text(d[1]) and is_element(d[2]) and is_text(d[3]) and
|
|
675
|
+
d[1]:find '%s*{{' and d[3]:find '}}%s*' then
|
|
676
|
+
t_remove(d,1)
|
|
677
|
+
t_remove(d,2)
|
|
678
|
+
d[1].repeated = true
|
|
679
|
+
end
|
|
680
|
+
end)
|
|
681
|
+
|
|
682
|
+
local res = {}
|
|
683
|
+
local ret = match(self,pat,res,true)
|
|
684
|
+
return res,ret
|
|
685
|
+
end
|
|
686
|
+
|
|
687
|
+
|
|
688
|
+
return _M
|
|
689
|
+
|