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,173 @@
1
+ --- Iterators for extracting words or numbers from an input source.
2
+ --
3
+ -- require 'pl'
4
+ -- local total,n = seq.sum(input.numbers())
5
+ -- print('average',total/n)
6
+ --
7
+ -- See @{06-data.md.Reading_Unstructured_Text_Data|here}
8
+ --
9
+ -- Dependencies: `pl.utils`
10
+ -- @module pl.input
11
+ local strfind = string.find
12
+ local strsub = string.sub
13
+ local strmatch = string.match
14
+ local utils = require 'pl.utils'
15
+ local pairs,type,unpack,tonumber = pairs,type,unpack or table.unpack,tonumber
16
+ local patterns = utils.patterns
17
+ local io = io
18
+ local assert_arg = utils.assert_arg
19
+
20
+ --[[
21
+ module ('pl.input',utils._module)
22
+ ]]
23
+
24
+ local input = {}
25
+
26
+ --- create an iterator over all tokens.
27
+ -- based on allwords from PiL, 7.1
28
+ -- @param getter any function that returns a line of text
29
+ -- @param pattern
30
+ -- @param fn Optionally can pass a function to process each token as it/s found.
31
+ -- @return an iterator
32
+ function input.alltokens (getter,pattern,fn)
33
+ local line = getter() -- current line
34
+ local pos = 1 -- current position in the line
35
+ return function () -- iterator function
36
+ while line do -- repeat while there are lines
37
+ local s, e = strfind(line, pattern, pos)
38
+ if s then -- found a word?
39
+ pos = e + 1 -- next position is after this token
40
+ local res = strsub(line, s, e) -- return the token
41
+ if fn then res = fn(res) end
42
+ return res
43
+ else
44
+ line = getter() -- token not found; try next line
45
+ pos = 1 -- restart from first position
46
+ end
47
+ end
48
+ return nil -- no more lines: end of traversal
49
+ end
50
+ end
51
+ local alltokens = input.alltokens
52
+
53
+ -- question: shd this _split_ a string containing line feeds?
54
+
55
+ --- create a function which grabs the next value from a source. If the source is a string, then the getter
56
+ -- will return the string and thereafter return nil. If not specified then the source is assumed to be stdin.
57
+ -- @param f a string or a file-like object (i.e. has a read() method which returns the next line)
58
+ -- @return a getter function
59
+ function input.create_getter(f)
60
+ if f then
61
+ if type(f) == 'string' then
62
+ local ls = utils.split(f,'\n')
63
+ local i,n = 0,#ls
64
+ return function()
65
+ i = i + 1
66
+ if i > n then return nil end
67
+ return ls[i]
68
+ end
69
+ else
70
+ -- anything that supports the read() method!
71
+ if not f.read then error('not a file-like object') end
72
+ return function() return f:read() end
73
+ end
74
+ else
75
+ return io.read -- i.e. just read from stdin
76
+ end
77
+ end
78
+
79
+ --- generate a sequence of numbers from a source.
80
+ -- @param f A source
81
+ -- @return An iterator
82
+ function input.numbers(f)
83
+ return alltokens(input.create_getter(f),
84
+ '('..patterns.FLOAT..')',tonumber)
85
+ end
86
+
87
+ --- generate a sequence of words from a source.
88
+ -- @param f A source
89
+ -- @return An iterator
90
+ function input.words(f)
91
+ return alltokens(input.create_getter(f),"%w+")
92
+ end
93
+
94
+ local function apply_tonumber (no_fail,...)
95
+ local args = {...}
96
+ for i = 1,#args do
97
+ local n = tonumber(args[i])
98
+ if n == nil then
99
+ if not no_fail then return nil,args[i] end
100
+ else
101
+ args[i] = n
102
+ end
103
+ end
104
+ return args
105
+ end
106
+
107
+ --- parse an input source into fields.
108
+ -- By default, will fail if it cannot convert a field to a number.
109
+ -- @param ids a list of field indices, or a maximum field index
110
+ -- @param delim delimiter to parse fields (default space)
111
+ -- @param f a source @see create_getter
112
+ -- @param opts option table, {no_fail=true}
113
+ -- @return an iterator with the field values
114
+ -- @usage for x,y in fields {2,3} do print(x,y) end -- 2nd and 3rd fields from stdin
115
+ function input.fields (ids,delim,f,opts)
116
+ local sep
117
+ local s
118
+ local getter = input.create_getter(f)
119
+ local no_fail = opts and opts.no_fail
120
+ local no_convert = opts and opts.no_convert
121
+ if not delim or delim == ' ' then
122
+ delim = '%s'
123
+ sep = '%s+'
124
+ s = '%s*'
125
+ else
126
+ sep = delim
127
+ s = ''
128
+ end
129
+ local max_id = 0
130
+ if type(ids) == 'table' then
131
+ for i,id in pairs(ids) do
132
+ if id > max_id then max_id = id end
133
+ end
134
+ else
135
+ max_id = ids
136
+ ids = {}
137
+ for i = 1,max_id do ids[#ids+1] = i end
138
+ end
139
+ local pat = '[^'..delim..']*'
140
+ local k = 1
141
+ for i = 1,max_id do
142
+ if ids[k] == i then
143
+ k = k + 1
144
+ s = s..'('..pat..')'
145
+ else
146
+ s = s..pat
147
+ end
148
+ if i < max_id then
149
+ s = s..sep
150
+ end
151
+ end
152
+ local linecount = 1
153
+ return function()
154
+ local line,results,err
155
+ repeat
156
+ line = getter()
157
+ linecount = linecount + 1
158
+ if not line then return nil end
159
+ if no_convert then
160
+ results = {strmatch(line,s)}
161
+ else
162
+ results,err = apply_tonumber(no_fail,strmatch(line,s))
163
+ if not results then
164
+ utils.quit("line "..(linecount-1)..": cannot convert '"..err.."' to number")
165
+ end
166
+ end
167
+ until #results > 0
168
+ return unpack(results)
169
+ end
170
+ end
171
+
172
+ return input
173
+
@@ -0,0 +1,407 @@
1
+ --- Simple command-line parsing using human-readable specification.
2
+ -- Supports GNU-style parameters.
3
+ --
4
+ -- lapp = require 'pl.lapp'
5
+ -- local args = lapp [[
6
+ -- Does some calculations
7
+ -- -o,--offset (default 0.0) Offset to add to scaled number
8
+ -- -s,--scale (number) Scaling factor
9
+ -- &lt;number&gt; (number ) Number to be scaled
10
+ -- ]]
11
+ --
12
+ -- print(args.offset + args.scale * args.number)
13
+ --
14
+ -- Lines begining with '-' are flags; there may be a short and a long name;
15
+ -- lines begining wih '<var>' are arguments. Anything in parens after
16
+ -- the flag/argument is either a default, a type name or a range constraint.
17
+ --
18
+ -- >See @{08-additional.md.Command_line_Programs_with_Lapp|the Guide}
19
+ --
20
+ -- Dependencies: `pl.sip`
21
+ -- @module pl.lapp
22
+
23
+ local status,sip = pcall(require,'pl.sip')
24
+ if not status then
25
+ sip = require 'sip'
26
+ end
27
+ local match = sip.match_at_start
28
+ local append,tinsert = table.insert,table.insert
29
+
30
+ sip.custom_pattern('X','(%a[%w_%-]*)')
31
+
32
+ local function lines(s) return s:gmatch('([^\n]*)\n') end
33
+ local function lstrip(str) return str:gsub('^%s+','') end
34
+ local function strip(str) return lstrip(str):gsub('%s+$','') end
35
+ local function at(s,k) return s:sub(k,k) end
36
+ local function isdigit(s) return s:find('^%d+$') == 1 end
37
+
38
+ local lapp = {}
39
+
40
+ local open_files,parms,aliases,parmlist,usage,windows,script
41
+
42
+ lapp.callback = false -- keep Strict happy
43
+
44
+ local filetypes = {
45
+ stdin = {io.stdin,'file-in'}, stdout = {io.stdout,'file-out'},
46
+ stderr = {io.stderr,'file-out'}
47
+ }
48
+
49
+ --- controls whether to dump usage on error.
50
+ -- Defaults to true
51
+ lapp.show_usage_error = true
52
+
53
+ --- quit this script immediately.
54
+ -- @param msg optional message
55
+ -- @param no_usage suppress 'usage' display
56
+ function lapp.quit(msg,no_usage)
57
+ if no_usage == 'throw' then
58
+ error(msg)
59
+ end
60
+ if msg then
61
+ io.stderr:write(msg..'\n\n')
62
+ end
63
+ if not no_usage then
64
+ io.stderr:write(usage)
65
+ end
66
+ os.exit(1)
67
+ end
68
+
69
+ --- print an error to stderr and quit.
70
+ -- @param msg a message
71
+ -- @param no_usage suppress 'usage' display
72
+ function lapp.error(msg,no_usage)
73
+ if not lapp.show_usage_error then
74
+ no_usage = true
75
+ elseif lapp.show_usage_error == 'throw' then
76
+ no_usage = 'throw'
77
+ end
78
+ lapp.quit(script..': '..msg,no_usage)
79
+ end
80
+
81
+ --- open a file.
82
+ -- This will quit on error, and keep a list of file objects for later cleanup.
83
+ -- @param file filename
84
+ -- @param opt same as second parameter of <code>io.open</code>
85
+ function lapp.open (file,opt)
86
+ local val,err = io.open(file,opt)
87
+ if not val then lapp.error(err,true) end
88
+ append(open_files,val)
89
+ return val
90
+ end
91
+
92
+ --- quit if the condition is false.
93
+ -- @param condn a condition
94
+ -- @param msg an optional message
95
+ function lapp.assert(condn,msg)
96
+ if not condn then
97
+ lapp.error(msg)
98
+ end
99
+ end
100
+
101
+ local function range_check(x,min,max,parm)
102
+ lapp.assert(min <= x and max >= x,parm..' out of range')
103
+ end
104
+
105
+ local function xtonumber(s)
106
+ local val = tonumber(s)
107
+ if not val then lapp.error("unable to convert to number: "..s) end
108
+ return val
109
+ end
110
+
111
+ local types
112
+
113
+ local builtin_types = {string=true,number=true,['file-in']='file',['file-out']='file',boolean=true}
114
+
115
+ local function convert_parameter(ps,val)
116
+ if ps.converter then
117
+ val = ps.converter(val)
118
+ end
119
+ if ps.type == 'number' then
120
+ val = xtonumber(val)
121
+ elseif builtin_types[ps.type] == 'file' then
122
+ val = lapp.open(val,(ps.type == 'file-in' and 'r') or 'w' )
123
+ elseif ps.type == 'boolean' then
124
+ val = true
125
+ end
126
+ if ps.constraint then
127
+ ps.constraint(val)
128
+ end
129
+ return val
130
+ end
131
+
132
+ --- add a new type to Lapp. These appear in parens after the value like
133
+ -- a range constraint, e.g. '<ival> (integer) Process PID'
134
+ -- @param name name of type
135
+ -- @param converter either a function to convert values, or a Lua type name.
136
+ -- @param constraint optional function to verify values, should use lapp.error
137
+ -- if failed.
138
+ function lapp.add_type (name,converter,constraint)
139
+ types[name] = {converter=converter,constraint=constraint}
140
+ end
141
+
142
+ local function force_short(short)
143
+ lapp.assert(#short==1,short..": short parameters should be one character")
144
+ end
145
+
146
+ local function process_default (sval,vtype)
147
+ local val
148
+ if not vtype or vtype == 'number' then
149
+ val = tonumber(sval)
150
+ end
151
+ if val then -- we have a number!
152
+ return val,'number'
153
+ elseif filetypes[sval] then
154
+ local ft = filetypes[sval]
155
+ return ft[1],ft[2]
156
+ else
157
+ if sval:match '^["\']' then sval = sval:sub(2,-2) end
158
+ return sval,vtype or 'string'
159
+ end
160
+ end
161
+
162
+ --- process a Lapp options string.
163
+ -- Usually called as lapp().
164
+ -- @param str the options text
165
+ -- @param args a table of arguments (default is `_G.arg`)
166
+ -- @return a table with parameter-value pairs
167
+ function lapp.process_options_string(str,args)
168
+ local results = {}
169
+ local opts = {at_start=true}
170
+ local varargs
171
+ local arg = args or _G.arg
172
+ open_files = {}
173
+ parms = {}
174
+ aliases = {}
175
+ parmlist = {}
176
+ types = {}
177
+
178
+ local function check_varargs(s)
179
+ local res,cnt = s:gsub('^%.%.%.%s*','')
180
+ return res, (cnt > 0)
181
+ end
182
+
183
+ local function set_result(ps,parm,val)
184
+ parm = type(parm) == "string" and parm:gsub("%W", "_") or parm -- so foo-bar becomes foo_bar in Lua
185
+ if not ps.varargs then
186
+ results[parm] = val
187
+ else
188
+ if not results[parm] then
189
+ results[parm] = { val }
190
+ else
191
+ append(results[parm],val)
192
+ end
193
+ end
194
+ end
195
+
196
+ usage = str
197
+
198
+ for line in lines(str) do
199
+ local res = {}
200
+ local optspec,optparm,i1,i2,defval,vtype,constraint,rest
201
+ line = lstrip(line)
202
+ local function check(str)
203
+ return match(str,line,res)
204
+ end
205
+
206
+ -- flags: either '-<short>', '-<short>,--<long>' or '--<long>'
207
+ if check '-$v{short}, --$o{long} $' or check '-$v{short} $' or check '--$o{long} $' then
208
+ if res.long then
209
+ optparm = res.long:gsub('[^%w%-]','_') -- I'm not sure the $o pattern will let anything else through?
210
+ if res.short then aliases[res.short] = optparm end
211
+ else
212
+ optparm = res.short
213
+ end
214
+ if res.short then force_short(res.short) end
215
+ res.rest, varargs = check_varargs(res.rest)
216
+ elseif check '$<{name} $' then -- is it <parameter_name>?
217
+ -- so <input file...> becomes input_file ...
218
+ optparm,rest = res.name:match '([^%.]+)(.*)'
219
+ optparm = optparm:gsub('%A','_')
220
+ varargs = rest == '...'
221
+ append(parmlist,optparm)
222
+ end
223
+ -- this is not a pure doc line and specifies the flag/parameter type
224
+ if res.rest then
225
+ line = res.rest
226
+ res = {}
227
+ local optional
228
+ -- do we have ([optional] [<type>] [default <val>])?
229
+ if match('$({def} $',line,res) or match('$({def}',line,res) then
230
+ local typespec = strip(res.def)
231
+ local ftype, rest = typespec:match('^(%S+)(.*)$')
232
+ rest = strip(rest)
233
+ if ftype == 'optional' then
234
+ ftype, rest = rest:match('^(%S+)(.*)$')
235
+ rest = strip(rest)
236
+ optional = true
237
+ end
238
+ local default
239
+ if ftype == 'default' then
240
+ default = true
241
+ if rest == '' then lapp.error("value must follow default") end
242
+ else -- a type specification
243
+ if match('$f{min}..$f{max}',ftype,res) then
244
+ -- a numerical range like 1..10
245
+ local min,max = res.min,res.max
246
+ vtype = 'number'
247
+ constraint = function(x)
248
+ range_check(x,min,max,optparm)
249
+ end
250
+ elseif not ftype:match '|' then -- plain type
251
+ vtype = ftype
252
+ else
253
+ -- 'enum' type is a string which must belong to
254
+ -- one of several distinct values
255
+ local enums = ftype
256
+ local enump = '|' .. enums .. '|'
257
+ vtype = 'string'
258
+ constraint = function(s)
259
+ lapp.assert(enump:match('|'..s..'|'),
260
+ "value '"..s.."' not in "..enums
261
+ )
262
+ end
263
+ end
264
+ end
265
+ res.rest = rest
266
+ typespec = res.rest
267
+ -- optional 'default value' clause. Type is inferred as
268
+ -- 'string' or 'number' if there's no explicit type
269
+ if default or match('default $r{rest}',typespec,res) then
270
+ defval,vtype = process_default(res.rest,vtype)
271
+ end
272
+ --print('val',optparm,defval,vtype)
273
+ else -- must be a plain flag, no extra parameter required
274
+ defval = false
275
+ vtype = 'boolean'
276
+ end
277
+ local ps = {
278
+ type = vtype,
279
+ defval = defval,
280
+ required = defval == nil and not optional,
281
+ comment = res.rest or optparm,
282
+ constraint = constraint,
283
+ varargs = varargs
284
+ }
285
+ varargs = nil
286
+ if types[vtype] then
287
+ local converter = types[vtype].converter
288
+ if type(converter) == 'string' then
289
+ ps.type = converter
290
+ else
291
+ ps.converter = converter
292
+ end
293
+ ps.constraint = types[vtype].constraint
294
+ elseif not builtin_types[vtype] then
295
+ lapp.error(vtype.." is unknown type")
296
+ end
297
+ parms[optparm] = ps
298
+ end
299
+ end
300
+ -- cool, we have our parms, let's parse the command line args
301
+ local iparm = 1
302
+ local iextra = 1
303
+ local i = 1
304
+ local parm,ps,val
305
+
306
+ local function check_parm (parm)
307
+ local eqi = parm:find '='
308
+ if eqi then
309
+ tinsert(arg,i+1,parm:sub(eqi+1))
310
+ parm = parm:sub(1,eqi-1)
311
+ end
312
+ return parm,eqi
313
+ end
314
+
315
+ while i <= #arg do
316
+ local theArg = arg[i]
317
+ local res = {}
318
+ -- look for a flag, -<short flags> or --<long flag>
319
+ if match('--$S{long}',theArg,res) or match('-$S{short}',theArg,res) then
320
+ if res.long then -- long option
321
+ parm = check_parm(res.long)
322
+ elseif #res.short == 1 then
323
+ parm = res.short
324
+ else
325
+ local parmstr,eq = check_parm(res.short)
326
+ if not eq then
327
+ parm = at(parmstr,1)
328
+ if isdigit(at(parmstr,2)) then
329
+ -- a short option followed by a digit is an exception (for AW;))
330
+ -- push ahead into the arg array
331
+ tinsert(arg,i+1,parmstr:sub(2))
332
+ else
333
+ -- push multiple flags into the arg array!
334
+ for k = 2,#parmstr do
335
+ tinsert(arg,i+k-1,'-'..at(parmstr,k))
336
+ end
337
+ end
338
+ else
339
+ parm = parmstr
340
+ end
341
+ end
342
+ if parm == 'h' or parm == 'help' then
343
+ lapp.quit()
344
+ end
345
+ if aliases[parm] then parm = aliases[parm] end
346
+ else -- a parameter
347
+ parm = parmlist[iparm]
348
+ if not parm then
349
+ -- extra unnamed parameters are indexed starting at 1
350
+ parm = iextra
351
+ ps = { type = 'string' }
352
+ parms[parm] = ps
353
+ iextra = iextra + 1
354
+ else
355
+ ps = parms[parm]
356
+ end
357
+ if not ps.varargs then
358
+ iparm = iparm + 1
359
+ end
360
+ val = theArg
361
+ end
362
+ ps = parms[parm]
363
+ if not ps then lapp.error("unrecognized parameter: "..parm) end
364
+ if ps.type ~= 'boolean' then -- we need a value! This should follow
365
+ if not val then
366
+ i = i + 1
367
+ val = arg[i]
368
+ end
369
+ lapp.assert(val,parm.." was expecting a value")
370
+ end
371
+ ps.used = true
372
+ val = convert_parameter(ps,val)
373
+ set_result(ps,parm,val)
374
+ if builtin_types[ps.type] == 'file' then
375
+ set_result(ps,parm..'_name',theArg)
376
+ end
377
+ if lapp.callback then
378
+ lapp.callback(parm,theArg,res)
379
+ end
380
+ i = i + 1
381
+ val = nil
382
+ end
383
+ -- check unused parms, set defaults and check if any required parameters were missed
384
+ for parm,ps in pairs(parms) do
385
+ if not ps.used then
386
+ if ps.required then lapp.error("missing required parameter: "..parm) end
387
+ set_result(ps,parm,ps.defval)
388
+ end
389
+ end
390
+ return results
391
+ end
392
+
393
+ if arg then
394
+ script = arg[0]:gsub('.+[\\/]',''):gsub('%.%a+$','')
395
+ else
396
+ script = "inter"
397
+ end
398
+
399
+
400
+ setmetatable(lapp, {
401
+ __call = function(tbl,str,args) return lapp.process_options_string(str,args) end,
402
+ })
403
+
404
+
405
+ return lapp
406
+
407
+