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.
Files changed (459) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +69 -0
  6. data/Rakefile +1 -0
  7. data/lib/rufus/lua/win.rb +18 -0
  8. data/lib/rufus/lua/win/version.rb +7 -0
  9. data/rufus-lua-win.gemspec +23 -0
  10. data/vendor/lua/bin/liblua.dll +0 -0
  11. data/vendor/lua/lib/lua/LuaXml.lua +119 -0
  12. data/vendor/lua/lib/lua/alien.lua +250 -0
  13. data/vendor/lua/lib/lua/alien/core.dll +0 -0
  14. data/vendor/lua/lib/lua/alien/struct.dll +0 -0
  15. data/vendor/lua/lib/lua/base.lua +536 -0
  16. data/vendor/lua/lib/lua/bin.lua +20 -0
  17. data/vendor/lua/lib/lua/bit.dll +0 -0
  18. data/vendor/lua/lib/lua/cdlua.dll +0 -0
  19. data/vendor/lua/lib/lua/cdluacontextplus.dll +0 -0
  20. data/vendor/lua/lib/lua/cdluagl.dll +0 -0
  21. data/vendor/lua/lib/lua/cdluaim.dll +0 -0
  22. data/vendor/lua/lib/lua/cdluapdf.dll +0 -0
  23. data/vendor/lua/lib/lua/copas.lua +543 -0
  24. data/vendor/lua/lib/lua/coxpcall.lua +57 -0
  25. data/vendor/lua/lib/lua/date.lua +745 -0
  26. data/vendor/lua/lib/lua/debug_ext.lua +84 -0
  27. data/vendor/lua/lib/lua/debug_init.lua +2 -0
  28. data/vendor/lua/lib/lua/des56.dll +0 -0
  29. data/vendor/lua/lib/lua/dist/config.lua +109 -0
  30. data/vendor/lua/lib/lua/dist/constraints.lua +271 -0
  31. data/vendor/lua/lib/lua/dist/depends.lua +601 -0
  32. data/vendor/lua/lib/lua/dist/git.lua +307 -0
  33. data/vendor/lua/lib/lua/dist/init.lua +278 -0
  34. data/vendor/lua/lib/lua/dist/manifest.lua +225 -0
  35. data/vendor/lua/lib/lua/dist/package.lua +583 -0
  36. data/vendor/lua/lib/lua/dist/sys.lua +367 -0
  37. data/vendor/lua/lib/lua/dist/utils.lua +130 -0
  38. data/vendor/lua/lib/lua/ex.dll +0 -0
  39. data/vendor/lua/lib/lua/fstable.lua +116 -0
  40. data/vendor/lua/lib/lua/getopt.lua +273 -0
  41. data/vendor/lua/lib/lua/git.lua +5 -0
  42. data/vendor/lua/lib/lua/git/core.dll +0 -0
  43. data/vendor/lua/lib/lua/git/objects.lua +121 -0
  44. data/vendor/lua/lib/lua/git/pack.lua +316 -0
  45. data/vendor/lua/lib/lua/git/protocol.lua +188 -0
  46. data/vendor/lua/lib/lua/git/repo.lua +283 -0
  47. data/vendor/lua/lib/lua/git/util.lua +233 -0
  48. data/vendor/lua/lib/lua/gzio.dll +0 -0
  49. data/vendor/lua/lib/lua/gzip.lua +81 -0
  50. data/vendor/lua/lib/lua/iconv.dll +0 -0
  51. data/vendor/lua/lib/lua/imlua.dll +0 -0
  52. data/vendor/lua/lib/lua/imlua_fftw.dll +0 -0
  53. data/vendor/lua/lib/lua/imlua_jp2.dll +0 -0
  54. data/vendor/lua/lib/lua/imlua_process.dll +0 -0
  55. data/vendor/lua/lib/lua/imlua_process_omp.dll +0 -0
  56. data/vendor/lua/lib/lua/io_ext.lua +115 -0
  57. data/vendor/lua/lib/lua/iuplua.dll +0 -0
  58. data/vendor/lua/lib/lua/iuplua_mglplot.dll +0 -0
  59. data/vendor/lua/lib/lua/iuplua_pplot.dll +0 -0
  60. data/vendor/lua/lib/lua/iupluacd.dll +0 -0
  61. data/vendor/lua/lib/lua/iupluacontrols.dll +0 -0
  62. data/vendor/lua/lib/lua/iupluagl.dll +0 -0
  63. data/vendor/lua/lib/lua/iupluaim.dll +0 -0
  64. data/vendor/lua/lib/lua/iupluaimglib.dll +0 -0
  65. data/vendor/lua/lib/lua/iupluatuio.dll +0 -0
  66. data/vendor/lua/lib/lua/lanes-keeper.lua +302 -0
  67. data/vendor/lua/lib/lua/lanes.lua +591 -0
  68. data/vendor/lua/lib/lua/lanes/core.dll +0 -0
  69. data/vendor/lua/lib/lua/lcs.lua +55 -0
  70. data/vendor/lua/lib/lua/lemock.lua +659 -0
  71. data/vendor/lua/lib/lua/lfs.dll +0 -0
  72. data/vendor/lua/lib/lua/list.lua +375 -0
  73. data/vendor/lua/lib/lua/logging.lua +189 -0
  74. data/vendor/lua/lib/lua/logging/console.lua +22 -0
  75. data/vendor/lua/lib/lua/logging/email.lua +44 -0
  76. data/vendor/lua/lib/lua/logging/file.lua +55 -0
  77. data/vendor/lua/lib/lua/logging/rolling_file.lua +81 -0
  78. data/vendor/lua/lib/lua/logging/socket.lua +35 -0
  79. data/vendor/lua/lib/lua/logging/sql.lua +64 -0
  80. data/vendor/lua/lib/lua/loop/base.lua +68 -0
  81. data/vendor/lua/lib/lua/loop/cached.lua +312 -0
  82. data/vendor/lua/lib/lua/loop/collection/MapWithArrayOfKeys.lua +64 -0
  83. data/vendor/lua/lib/lua/loop/collection/ObjectCache.lua +39 -0
  84. data/vendor/lua/lib/lua/loop/collection/OrderedSet.lua +164 -0
  85. data/vendor/lua/lib/lua/loop/collection/PriorityQueue.lua +86 -0
  86. data/vendor/lua/lib/lua/loop/collection/UnorderedArray.lua +32 -0
  87. data/vendor/lua/lib/lua/loop/collection/UnorderedArraySet.lua +56 -0
  88. data/vendor/lua/lib/lua/loop/compiler/Arguments.lua +108 -0
  89. data/vendor/lua/lib/lua/loop/compiler/Conditional.lua +50 -0
  90. data/vendor/lua/lib/lua/loop/compiler/Expression.lua +215 -0
  91. data/vendor/lua/lib/lua/loop/component/base.lua +221 -0
  92. data/vendor/lua/lib/lua/loop/component/contained.lua +71 -0
  93. data/vendor/lua/lib/lua/loop/component/dynamic.lua +223 -0
  94. data/vendor/lua/lib/lua/loop/component/intercepted.lua +354 -0
  95. data/vendor/lua/lib/lua/loop/component/wrapped.lua +195 -0
  96. data/vendor/lua/lib/lua/loop/debug/Inspector.lua +521 -0
  97. data/vendor/lua/lib/lua/loop/debug/Matcher.lua +192 -0
  98. data/vendor/lua/lib/lua/loop/debug/Verbose.lua +266 -0
  99. data/vendor/lua/lib/lua/loop/debug/Viewer.lua +200 -0
  100. data/vendor/lua/lib/lua/loop/multiple.lua +105 -0
  101. data/vendor/lua/lib/lua/loop/object/Exception.lua +57 -0
  102. data/vendor/lua/lib/lua/loop/object/Publisher.lua +43 -0
  103. data/vendor/lua/lib/lua/loop/object/Wrapper.lua +39 -0
  104. data/vendor/lua/lib/lua/loop/scoped.lua +585 -0
  105. data/vendor/lua/lib/lua/loop/serial/FileStream.lua +48 -0
  106. data/vendor/lua/lib/lua/loop/serial/Serializer.lua +291 -0
  107. data/vendor/lua/lib/lua/loop/serial/SocketStream.lua +51 -0
  108. data/vendor/lua/lib/lua/loop/serial/StringStream.lua +47 -0
  109. data/vendor/lua/lib/lua/loop/simple.lua +75 -0
  110. data/vendor/lua/lib/lua/loop/table.lua +71 -0
  111. data/vendor/lua/lib/lua/loop/thread/CoSocket.lua +416 -0
  112. data/vendor/lua/lib/lua/loop/thread/IOScheduler.lua +170 -0
  113. data/vendor/lua/lib/lua/loop/thread/Scheduler.lua +327 -0
  114. data/vendor/lua/lib/lua/loop/thread/SocketScheduler.lua +88 -0
  115. data/vendor/lua/lib/lua/loop/thread/Timer.lua +54 -0
  116. data/vendor/lua/lib/lua/lpeg.dll +0 -0
  117. data/vendor/lua/lib/lua/ltn12.lua +292 -0
  118. data/vendor/lua/lib/lua/luaXML_lib.dll +0 -0
  119. data/vendor/lua/lib/lua/luacurl.dll +0 -0
  120. data/vendor/lua/lib/lua/luadoc/config.lua +34 -0
  121. data/vendor/lua/lib/lua/luadoc/doclet/debug.lua +46 -0
  122. data/vendor/lua/lib/lua/luadoc/doclet/formatter.lua +84 -0
  123. data/vendor/lua/lib/lua/luadoc/doclet/html.lua +289 -0
  124. data/vendor/lua/lib/lua/luadoc/doclet/html/file.lp +113 -0
  125. data/vendor/lua/lib/lua/luadoc/doclet/html/function.lp +64 -0
  126. data/vendor/lua/lib/lua/luadoc/doclet/html/index.lp +70 -0
  127. data/vendor/lua/lib/lua/luadoc/doclet/html/luadoc.css +286 -0
  128. data/vendor/lua/lib/lua/luadoc/doclet/html/menu.lp +55 -0
  129. data/vendor/lua/lib/lua/luadoc/doclet/html/module.lp +109 -0
  130. data/vendor/lua/lib/lua/luadoc/doclet/html/table.lp +15 -0
  131. data/vendor/lua/lib/lua/luadoc/doclet/raw.lua +12 -0
  132. data/vendor/lua/lib/lua/luadoc/init.lua +58 -0
  133. data/vendor/lua/lib/lua/luadoc/lp.lua +130 -0
  134. data/vendor/lua/lib/lua/luadoc/taglet/standard.lua +495 -0
  135. data/vendor/lua/lib/lua/luadoc/taglet/standard/tags.lua +171 -0
  136. data/vendor/lua/lib/lua/luadoc/util.lua +233 -0
  137. data/vendor/lua/lib/lua/luagl.dll +0 -0
  138. data/vendor/lua/lib/lua/luaglu.dll +0 -0
  139. data/vendor/lua/lib/lua/luaidl.lua +113 -0
  140. data/vendor/lua/lib/lua/luaidl/lex.lua +793 -0
  141. data/vendor/lua/lib/lua/luaidl/pre.lua +149 -0
  142. data/vendor/lua/lib/lua/luaidl/sin.lua +3631 -0
  143. data/vendor/lua/lib/lua/luarocks/add.lua +108 -0
  144. data/vendor/lua/lib/lua/luarocks/admin_remove.lua +87 -0
  145. data/vendor/lua/lib/lua/luarocks/build.lua +330 -0
  146. data/vendor/lua/lib/lua/luarocks/build/builtin.lua +253 -0
  147. data/vendor/lua/lib/lua/luarocks/build/cmake.lua +54 -0
  148. data/vendor/lua/lib/lua/luarocks/build/command.lua +32 -0
  149. data/vendor/lua/lib/lua/luarocks/build/make.lua +92 -0
  150. data/vendor/lua/lib/lua/luarocks/cache.lua +85 -0
  151. data/vendor/lua/lib/lua/luarocks/cfg.lua +449 -0
  152. data/vendor/lua/lib/lua/luarocks/command_line.lua +163 -0
  153. data/vendor/lua/lib/lua/luarocks/deps.lua +654 -0
  154. data/vendor/lua/lib/lua/luarocks/dir.lua +69 -0
  155. data/vendor/lua/lib/lua/luarocks/download.lua +90 -0
  156. data/vendor/lua/lib/lua/luarocks/fetch.lua +321 -0
  157. data/vendor/lua/lib/lua/luarocks/fetch/cvs.lua +44 -0
  158. data/vendor/lua/lib/lua/luarocks/fetch/git.lua +81 -0
  159. data/vendor/lua/lib/lua/luarocks/fetch/git_file.lua +17 -0
  160. data/vendor/lua/lib/lua/luarocks/fetch/hg.lua +54 -0
  161. data/vendor/lua/lib/lua/luarocks/fetch/sscm.lua +42 -0
  162. data/vendor/lua/lib/lua/luarocks/fetch/svn.lua +53 -0
  163. data/vendor/lua/lib/lua/luarocks/fs.lua +40 -0
  164. data/vendor/lua/lib/lua/luarocks/fs/lua.lua +676 -0
  165. data/vendor/lua/lib/lua/luarocks/fs/unix.lua +88 -0
  166. data/vendor/lua/lib/lua/luarocks/fs/unix/tools.lua +325 -0
  167. data/vendor/lua/lib/lua/luarocks/fs/win32.lua +107 -0
  168. data/vendor/lua/lib/lua/luarocks/fs/win32/tools.lua +334 -0
  169. data/vendor/lua/lib/lua/luarocks/help.lua +101 -0
  170. data/vendor/lua/lib/lua/luarocks/index.lua +172 -0
  171. data/vendor/lua/lib/lua/luarocks/install.lua +151 -0
  172. data/vendor/lua/lib/lua/luarocks/list.lua +35 -0
  173. data/vendor/lua/lib/lua/luarocks/loader.lua +228 -0
  174. data/vendor/lua/lib/lua/luarocks/make.lua +71 -0
  175. data/vendor/lua/lib/lua/luarocks/make_manifest.lua +34 -0
  176. data/vendor/lua/lib/lua/luarocks/manif.lua +360 -0
  177. data/vendor/lua/lib/lua/luarocks/manif_core.lua +75 -0
  178. data/vendor/lua/lib/lua/luarocks/new_version.lua +141 -0
  179. data/vendor/lua/lib/lua/luarocks/pack.lua +205 -0
  180. data/vendor/lua/lib/lua/luarocks/path.lua +315 -0
  181. data/vendor/lua/lib/lua/luarocks/persist.lua +173 -0
  182. data/vendor/lua/lib/lua/luarocks/refresh_cache.lua +30 -0
  183. data/vendor/lua/lib/lua/luarocks/remove.lua +135 -0
  184. data/vendor/lua/lib/lua/luarocks/rep.lua +313 -0
  185. data/vendor/lua/lib/lua/luarocks/require.lua +6 -0
  186. data/vendor/lua/lib/lua/luarocks/search.lua +399 -0
  187. data/vendor/lua/lib/lua/luarocks/show.lua +138 -0
  188. data/vendor/lua/lib/lua/luarocks/site_config.lua +23 -0
  189. data/vendor/lua/lib/lua/luarocks/tools/patch.lua +712 -0
  190. data/vendor/lua/lib/lua/luarocks/tools/tar.lua +144 -0
  191. data/vendor/lua/lib/lua/luarocks/tools/zip.lua +245 -0
  192. data/vendor/lua/lib/lua/luarocks/type_check.lua +267 -0
  193. data/vendor/lua/lib/lua/luarocks/unpack.lua +151 -0
  194. data/vendor/lua/lib/lua/luarocks/util.lua +420 -0
  195. data/vendor/lua/lib/lua/luarocks/validate.lua +164 -0
  196. data/vendor/lua/lib/lua/luars232.dll +0 -0
  197. data/vendor/lua/lib/lua/luasql/mysql.dll +0 -0
  198. data/vendor/lua/lib/lua/luasql/postgres.dll +0 -0
  199. data/vendor/lua/lib/lua/luasql/sqlite3.dll +0 -0
  200. data/vendor/lua/lib/lua/luaunit.lua +601 -0
  201. data/vendor/lua/lib/lua/lxp.dll +0 -0
  202. data/vendor/lua/lib/lua/lxp/lom.lua +60 -0
  203. data/vendor/lua/lib/lua/math_ext.lua +27 -0
  204. data/vendor/lua/lib/lua/mbox.lua +53 -0
  205. data/vendor/lua/lib/lua/md5.lua +19 -0
  206. data/vendor/lua/lib/lua/md5/core.dll +0 -0
  207. data/vendor/lua/lib/lua/metalua.lua +0 -0
  208. data/vendor/lua/lib/lua/metalua/ast_to_string.mlua +553 -0
  209. data/vendor/lua/lib/lua/metalua/base.lua +104 -0
  210. data/vendor/lua/lib/lua/metalua/bytecode.lua +0 -0
  211. data/vendor/lua/lib/lua/metalua/clopts.mlua +204 -0
  212. data/vendor/lua/lib/lua/metalua/compiler.lua +3 -0
  213. data/vendor/lua/lib/lua/metalua/dollar.mlua +24 -0
  214. data/vendor/lua/lib/lua/metalua/extension/H-runtime.mlua +216 -0
  215. data/vendor/lua/lib/lua/metalua/extension/H.mlua +22 -0
  216. data/vendor/lua/lib/lua/metalua/extension/anaphoric.mlua +54 -0
  217. data/vendor/lua/lib/lua/metalua/extension/clist.mlua +149 -0
  218. data/vendor/lua/lib/lua/metalua/extension/continue.mlua +53 -0
  219. data/vendor/lua/lib/lua/metalua/extension/localin.mlua +2 -0
  220. data/vendor/lua/lib/lua/metalua/extension/log.mlua +39 -0
  221. data/vendor/lua/lib/lua/metalua/extension/match.mlua +374 -0
  222. data/vendor/lua/lib/lua/metalua/extension/ternary.mlua +10 -0
  223. data/vendor/lua/lib/lua/metalua/extension/trycatch.mlua +189 -0
  224. data/vendor/lua/lib/lua/metalua/extension/types-runtime.mlua +159 -0
  225. data/vendor/lua/lib/lua/metalua/extension/types.mlua +352 -0
  226. data/vendor/lua/lib/lua/metalua/extension/withdo.mlua +30 -0
  227. data/vendor/lua/lib/lua/metalua/extension/xglobal-runtime.lua +41 -0
  228. data/vendor/lua/lib/lua/metalua/extension/xglobal.mlua +20 -0
  229. data/vendor/lua/lib/lua/metalua/extension/xloop.mlua +100 -0
  230. data/vendor/lua/lib/lua/metalua/extension/xmatch.mlua +216 -0
  231. data/vendor/lua/lib/lua/metalua/metaloop.mlua +76 -0
  232. data/vendor/lua/lib/lua/metalua/mlc.lua +0 -0
  233. data/vendor/lua/lib/lua/metalua/mlc_xcall.lua +119 -0
  234. data/vendor/lua/lib/lua/metalua/mlp.lua +0 -0
  235. data/vendor/lua/lib/lua/metalua/package2.lua +101 -0
  236. data/vendor/lua/lib/lua/metalua/runtime.lua +3 -0
  237. data/vendor/lua/lib/lua/metalua/string2.lua +44 -0
  238. data/vendor/lua/lib/lua/metalua/table2.lua +372 -0
  239. data/vendor/lua/lib/lua/metalua/walk.mlua +304 -0
  240. data/vendor/lua/lib/lua/metalua/walk/bindings.mlua +41 -0
  241. data/vendor/lua/lib/lua/metalua/walk/id.mlua +186 -0
  242. data/vendor/lua/lib/lua/metalua/walk/scope.lua +54 -0
  243. data/vendor/lua/lib/lua/mime.lua +87 -0
  244. data/vendor/lua/lib/lua/mime/core.dll +0 -0
  245. data/vendor/lua/lib/lua/mobdebug.lua +1484 -0
  246. data/vendor/lua/lib/lua/modules.lua +16 -0
  247. data/vendor/lua/lib/lua/object.lua +56 -0
  248. data/vendor/lua/lib/lua/oil/Exception.lua +26 -0
  249. data/vendor/lua/lib/lua/oil/arch.lua +27 -0
  250. data/vendor/lua/lib/lua/oil/arch/basic/client.lua +29 -0
  251. data/vendor/lua/lib/lua/oil/arch/basic/common.lua +13 -0
  252. data/vendor/lua/lib/lua/oil/arch/basic/server.lua +27 -0
  253. data/vendor/lua/lib/lua/oil/arch/cooperative/common.lua +10 -0
  254. data/vendor/lua/lib/lua/oil/arch/cooperative/server.lua +16 -0
  255. data/vendor/lua/lib/lua/oil/arch/corba/client.lua +39 -0
  256. data/vendor/lua/lib/lua/oil/arch/corba/common.lua +58 -0
  257. data/vendor/lua/lib/lua/oil/arch/corba/intercepted/client.lua +9 -0
  258. data/vendor/lua/lib/lua/oil/arch/corba/intercepted/server.lua +9 -0
  259. data/vendor/lua/lib/lua/oil/arch/corba/server.lua +35 -0
  260. data/vendor/lua/lib/lua/oil/arch/ludo/byref.lua +18 -0
  261. data/vendor/lua/lib/lua/oil/arch/ludo/client.lua +19 -0
  262. data/vendor/lua/lib/lua/oil/arch/ludo/common.lua +18 -0
  263. data/vendor/lua/lib/lua/oil/arch/ludo/server.lua +19 -0
  264. data/vendor/lua/lib/lua/oil/arch/typed/client.lua +27 -0
  265. data/vendor/lua/lib/lua/oil/arch/typed/common.lua +9 -0
  266. data/vendor/lua/lib/lua/oil/arch/typed/server.lua +18 -0
  267. data/vendor/lua/lib/lua/oil/assert.lua +87 -0
  268. data/vendor/lua/lib/lua/oil/builder.lua +45 -0
  269. data/vendor/lua/lib/lua/oil/builder/basic/client.lua +31 -0
  270. data/vendor/lua/lib/lua/oil/builder/basic/common.lua +11 -0
  271. data/vendor/lua/lib/lua/oil/builder/basic/server.lua +13 -0
  272. data/vendor/lua/lib/lua/oil/builder/cooperative/common.lua +11 -0
  273. data/vendor/lua/lib/lua/oil/builder/cooperative/server.lua +11 -0
  274. data/vendor/lua/lib/lua/oil/builder/corba/client.lua +13 -0
  275. data/vendor/lua/lib/lua/oil/builder/corba/common.lua +24 -0
  276. data/vendor/lua/lib/lua/oil/builder/corba/gencode.lua +13 -0
  277. data/vendor/lua/lib/lua/oil/builder/corba/intercepted/client.lua +11 -0
  278. data/vendor/lua/lib/lua/oil/builder/corba/intercepted/server.lua +11 -0
  279. data/vendor/lua/lib/lua/oil/builder/corba/server.lua +13 -0
  280. data/vendor/lua/lib/lua/oil/builder/lua/client.lua +11 -0
  281. data/vendor/lua/lib/lua/oil/builder/lua/server.lua +12 -0
  282. data/vendor/lua/lib/lua/oil/builder/ludo/byref.lua +13 -0
  283. data/vendor/lua/lib/lua/oil/builder/ludo/client.lua +13 -0
  284. data/vendor/lua/lib/lua/oil/builder/ludo/common.lua +14 -0
  285. data/vendor/lua/lib/lua/oil/builder/ludo/server.lua +13 -0
  286. data/vendor/lua/lib/lua/oil/builder/typed/client.lua +16 -0
  287. data/vendor/lua/lib/lua/oil/builder/typed/server.lua +12 -0
  288. data/vendor/lua/lib/lua/oil/compat.lua +846 -0
  289. data/vendor/lua/lib/lua/oil/component.lua +1 -0
  290. data/vendor/lua/lib/lua/oil/corba/giop.lua +301 -0
  291. data/vendor/lua/lib/lua/oil/corba/giop/Codec.lua +1568 -0
  292. data/vendor/lua/lib/lua/oil/corba/giop/CodecGen.lua +589 -0
  293. data/vendor/lua/lib/lua/oil/corba/giop/Exception.lua +25 -0
  294. data/vendor/lua/lib/lua/oil/corba/giop/Indexer.lua +63 -0
  295. data/vendor/lua/lib/lua/oil/corba/giop/Listener.lua +343 -0
  296. data/vendor/lua/lib/lua/oil/corba/giop/Messenger.lua +228 -0
  297. data/vendor/lua/lib/lua/oil/corba/giop/Referrer.lua +180 -0
  298. data/vendor/lua/lib/lua/oil/corba/giop/Requester.lua +462 -0
  299. data/vendor/lua/lib/lua/oil/corba/idl.lua +597 -0
  300. data/vendor/lua/lib/lua/oil/corba/idl/Compiler.lua +133 -0
  301. data/vendor/lua/lib/lua/oil/corba/idl/Importer.lua +235 -0
  302. data/vendor/lua/lib/lua/oil/corba/idl/Indexer.lua +95 -0
  303. data/vendor/lua/lib/lua/oil/corba/idl/Registry.lua +1821 -0
  304. data/vendor/lua/lib/lua/oil/corba/idl/ir.lua +847 -0
  305. data/vendor/lua/lib/lua/oil/corba/idl/sysex.lua +21 -0
  306. data/vendor/lua/lib/lua/oil/corba/iiop/Profiler.lua +200 -0
  307. data/vendor/lua/lib/lua/oil/corba/intercepted/Listener.lua +158 -0
  308. data/vendor/lua/lib/lua/oil/corba/intercepted/Requester.lua +181 -0
  309. data/vendor/lua/lib/lua/oil/corba/services/event.lua +126 -0
  310. data/vendor/lua/lib/lua/oil/corba/services/event/ConsumerAdmin.lua +50 -0
  311. data/vendor/lua/lib/lua/oil/corba/services/event/EventFactory.lua +15 -0
  312. data/vendor/lua/lib/lua/oil/corba/services/event/EventQueue.lua +37 -0
  313. data/vendor/lua/lib/lua/oil/corba/services/event/ProxyPushConsumer.lua +75 -0
  314. data/vendor/lua/lib/lua/oil/corba/services/event/ProxyPushSupplier.lua +62 -0
  315. data/vendor/lua/lib/lua/oil/corba/services/event/SingleDeferredDispatcher.lua +60 -0
  316. data/vendor/lua/lib/lua/oil/corba/services/event/SingleSynchronousDispatcher.lua +39 -0
  317. data/vendor/lua/lib/lua/oil/corba/services/event/SupplierAdmin.lua +50 -0
  318. data/vendor/lua/lib/lua/oil/corba/services/naming.lua +436 -0
  319. data/vendor/lua/lib/lua/oil/kernel/base/Acceptor.lua +268 -0
  320. data/vendor/lua/lib/lua/oil/kernel/base/Channels.lua +121 -0
  321. data/vendor/lua/lib/lua/oil/kernel/base/Connector.lua +147 -0
  322. data/vendor/lua/lib/lua/oil/kernel/base/Dispatcher.lua +99 -0
  323. data/vendor/lua/lib/lua/oil/kernel/base/Proxies.lua +86 -0
  324. data/vendor/lua/lib/lua/oil/kernel/base/Proxies/asynchronous.lua +56 -0
  325. data/vendor/lua/lib/lua/oil/kernel/base/Proxies/protected.lua +17 -0
  326. data/vendor/lua/lib/lua/oil/kernel/base/Proxies/synchronous.lua +17 -0
  327. data/vendor/lua/lib/lua/oil/kernel/base/Proxies/utils.lua +29 -0
  328. data/vendor/lua/lib/lua/oil/kernel/base/Receiver.lua +110 -0
  329. data/vendor/lua/lib/lua/oil/kernel/base/Servants.lua +207 -0
  330. data/vendor/lua/lib/lua/oil/kernel/base/Sockets.lua +44 -0
  331. data/vendor/lua/lib/lua/oil/kernel/cooperative/Receiver.lua +139 -0
  332. data/vendor/lua/lib/lua/oil/kernel/intercepted/Listener.lua +47 -0
  333. data/vendor/lua/lib/lua/oil/kernel/intercepted/Requester.lua +58 -0
  334. data/vendor/lua/lib/lua/oil/kernel/lua/Dispatcher.lua +76 -0
  335. data/vendor/lua/lib/lua/oil/kernel/lua/Proxies.lua +69 -0
  336. data/vendor/lua/lib/lua/oil/kernel/typed/Dispatcher.lua +91 -0
  337. data/vendor/lua/lib/lua/oil/kernel/typed/Proxies.lua +153 -0
  338. data/vendor/lua/lib/lua/oil/kernel/typed/Servants.lua +137 -0
  339. data/vendor/lua/lib/lua/oil/ludo/Codec.lua +66 -0
  340. data/vendor/lua/lib/lua/oil/ludo/CodecByRef.lua +103 -0
  341. data/vendor/lua/lib/lua/oil/ludo/Listener.lua +151 -0
  342. data/vendor/lua/lib/lua/oil/ludo/Referrer.lua +72 -0
  343. data/vendor/lua/lib/lua/oil/ludo/Requester.lua +107 -0
  344. data/vendor/lua/lib/lua/oil/oo.lua +1 -0
  345. data/vendor/lua/lib/lua/oil/port.lua +1 -0
  346. data/vendor/lua/lib/lua/oil/properties.lua +57 -0
  347. data/vendor/lua/lib/lua/oil/verbose.lua +133 -0
  348. data/vendor/lua/lib/lua/package_ext.lua +15 -0
  349. data/vendor/lua/lib/lua/parser.lua +268 -0
  350. data/vendor/lua/lib/lua/pl/Date.lua +555 -0
  351. data/vendor/lua/lib/lua/pl/List.lua +613 -0
  352. data/vendor/lua/lib/lua/pl/Map.lua +113 -0
  353. data/vendor/lua/lib/lua/pl/MultiMap.lua +62 -0
  354. data/vendor/lua/lib/lua/pl/OrderedMap.lua +151 -0
  355. data/vendor/lua/lib/lua/pl/Set.lua +153 -0
  356. data/vendor/lua/lib/lua/pl/app.lua +165 -0
  357. data/vendor/lua/lib/lua/pl/array2d.lua +501 -0
  358. data/vendor/lua/lib/lua/pl/class.lua +180 -0
  359. data/vendor/lua/lib/lua/pl/comprehension.lua +286 -0
  360. data/vendor/lua/lib/lua/pl/config.lua +176 -0
  361. data/vendor/lua/lib/lua/pl/data.lua +606 -0
  362. data/vendor/lua/lib/lua/pl/dir.lua +475 -0
  363. data/vendor/lua/lib/lua/pl/file.lua +70 -0
  364. data/vendor/lua/lib/lua/pl/func.lua +376 -0
  365. data/vendor/lua/lib/lua/pl/init.lua +68 -0
  366. data/vendor/lua/lib/lua/pl/input.lua +173 -0
  367. data/vendor/lua/lib/lua/pl/lapp.lua +407 -0
  368. data/vendor/lua/lib/lua/pl/lexer.lua +456 -0
  369. data/vendor/lua/lib/lua/pl/luabalanced.lua +264 -0
  370. data/vendor/lua/lib/lua/pl/operator.lua +201 -0
  371. data/vendor/lua/lib/lua/pl/path.lua +398 -0
  372. data/vendor/lua/lib/lua/pl/permute.lua +63 -0
  373. data/vendor/lua/lib/lua/pl/platf/luajava.lua +101 -0
  374. data/vendor/lua/lib/lua/pl/pretty.lua +285 -0
  375. data/vendor/lua/lib/lua/pl/seq.lua +551 -0
  376. data/vendor/lua/lib/lua/pl/sip.lua +344 -0
  377. data/vendor/lua/lib/lua/pl/strict.lua +70 -0
  378. data/vendor/lua/lib/lua/pl/stringio.lua +158 -0
  379. data/vendor/lua/lib/lua/pl/stringx.lua +440 -0
  380. data/vendor/lua/lib/lua/pl/tablex.lua +817 -0
  381. data/vendor/lua/lib/lua/pl/template.lua +103 -0
  382. data/vendor/lua/lib/lua/pl/test.lua +135 -0
  383. data/vendor/lua/lib/lua/pl/text.lua +243 -0
  384. data/vendor/lua/lib/lua/pl/utils.lua +550 -0
  385. data/vendor/lua/lib/lua/pl/xml.lua +689 -0
  386. data/vendor/lua/lib/lua/profiler.dll +0 -0
  387. data/vendor/lua/lib/lua/re.lua +248 -0
  388. data/vendor/lua/lib/lua/rex_onig.dll +0 -0
  389. data/vendor/lua/lib/lua/rex_pcre.dll +0 -0
  390. data/vendor/lua/lib/lua/rex_posix.dll +0 -0
  391. data/vendor/lua/lib/lua/rings.dll +0 -0
  392. data/vendor/lua/lib/lua/serialize.lua +193 -0
  393. data/vendor/lua/lib/lua/set.lua +149 -0
  394. data/vendor/lua/lib/lua/socket.lua +133 -0
  395. data/vendor/lua/lib/lua/socket/core.dll +0 -0
  396. data/vendor/lua/lib/lua/socket/ftp.lua +281 -0
  397. data/vendor/lua/lib/lua/socket/http.lua +350 -0
  398. data/vendor/lua/lib/lua/socket/smtp.lua +251 -0
  399. data/vendor/lua/lib/lua/socket/tp.lua +123 -0
  400. data/vendor/lua/lib/lua/socket/url.lua +297 -0
  401. data/vendor/lua/lib/lua/ssl.dll +0 -0
  402. data/vendor/lua/lib/lua/ssl.lua +93 -0
  403. data/vendor/lua/lib/lua/ssl/https.lua +138 -0
  404. data/vendor/lua/lib/lua/stable.lua +28 -0
  405. data/vendor/lua/lib/lua/std.lua +16 -0
  406. data/vendor/lua/lib/lua/strbuf.lua +32 -0
  407. data/vendor/lua/lib/lua/strict.lua +45 -0
  408. data/vendor/lua/lib/lua/string_ext.lua +274 -0
  409. data/vendor/lua/lib/lua/table_ext.lua +117 -0
  410. data/vendor/lua/lib/lua/tar.lua +262 -0
  411. data/vendor/lua/lib/lua/task.dll +0 -0
  412. data/vendor/lua/lib/lua/tree.lua +81 -0
  413. data/vendor/lua/lib/lua/unicode.dll +0 -0
  414. data/vendor/lua/lib/lua/verbose_require.lua +11 -0
  415. data/vendor/lua/lib/lua/vstruct.lua +86 -0
  416. data/vendor/lua/lib/lua/vstruct/ast.lua +192 -0
  417. data/vendor/lua/lib/lua/vstruct/ast/Bitpack.lua +33 -0
  418. data/vendor/lua/lib/lua/vstruct/ast/Generator.lua +174 -0
  419. data/vendor/lua/lib/lua/vstruct/ast/IO.lua +45 -0
  420. data/vendor/lua/lib/lua/vstruct/ast/List.lua +56 -0
  421. data/vendor/lua/lib/lua/vstruct/ast/Name.lua +20 -0
  422. data/vendor/lua/lib/lua/vstruct/ast/Repeat.lua +23 -0
  423. data/vendor/lua/lib/lua/vstruct/ast/Root.lua +19 -0
  424. data/vendor/lua/lib/lua/vstruct/ast/Table.lua +65 -0
  425. data/vendor/lua/lib/lua/vstruct/cursor.lua +81 -0
  426. data/vendor/lua/lib/lua/vstruct/io.lua +45 -0
  427. data/vendor/lua/lib/lua/vstruct/io/a.lua +24 -0
  428. data/vendor/lua/lib/lua/vstruct/io/b.lua +28 -0
  429. data/vendor/lua/lib/lua/vstruct/io/bigendian.lua +21 -0
  430. data/vendor/lua/lib/lua/vstruct/io/c.lua +25 -0
  431. data/vendor/lua/lib/lua/vstruct/io/defaults.lua +24 -0
  432. data/vendor/lua/lib/lua/vstruct/io/endianness.lua +41 -0
  433. data/vendor/lua/lib/lua/vstruct/io/f.lua +129 -0
  434. data/vendor/lua/lib/lua/vstruct/io/hostendian.lua +21 -0
  435. data/vendor/lua/lib/lua/vstruct/io/i.lua +42 -0
  436. data/vendor/lua/lib/lua/vstruct/io/littleendian.lua +21 -0
  437. data/vendor/lua/lib/lua/vstruct/io/m.lua +62 -0
  438. data/vendor/lua/lib/lua/vstruct/io/p.lua +23 -0
  439. data/vendor/lua/lib/lua/vstruct/io/s.lua +27 -0
  440. data/vendor/lua/lib/lua/vstruct/io/seekb.lua +18 -0
  441. data/vendor/lua/lib/lua/vstruct/io/seekf.lua +18 -0
  442. data/vendor/lua/lib/lua/vstruct/io/seekto.lua +18 -0
  443. data/vendor/lua/lib/lua/vstruct/io/u.lua +54 -0
  444. data/vendor/lua/lib/lua/vstruct/io/x.lua +34 -0
  445. data/vendor/lua/lib/lua/vstruct/io/z.lua +63 -0
  446. data/vendor/lua/lib/lua/vstruct/lexer.lua +100 -0
  447. data/vendor/lua/lib/lua/vstruct/pack.lua +142 -0
  448. data/vendor/lua/lib/lua/vstruct/test.lua +47 -0
  449. data/vendor/lua/lib/lua/vstruct/test/basic.lua +73 -0
  450. data/vendor/lua/lib/lua/vstruct/test/common.lua +100 -0
  451. data/vendor/lua/lib/lua/vstruct/test/fp-bigendian.lua +56 -0
  452. data/vendor/lua/lib/lua/vstruct/test/fp-littleendian.lua +56 -0
  453. data/vendor/lua/lib/lua/vstruct/test/struct-test-gen.lua +1230 -0
  454. data/vendor/lua/lib/lua/vstruct/unpack.lua +126 -0
  455. data/vendor/lua/lib/lua/wx.dll +0 -0
  456. data/vendor/lua/lib/lua/xml.lua +75 -0
  457. data/vendor/lua/lib/lua/zip.dll +0 -0
  458. data/vendor/lua/lib/lua/zlib.dll +0 -0
  459. 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 = { ["'"] = "&apos;", ["\""] = "&quot;", ["<"] = "&lt;", [">"] = "&gt;", ["&"] = "&amp;" };
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
+