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,103 @@
1
+ --- A template preprocessor.
2
+ -- Originally by [Ricki Lake](http://lua-users.org/wiki/SlightlyLessSimpleLuaPreprocessor)
3
+ --
4
+ -- There are two rules:
5
+ --
6
+ -- * lines starting with # are Lua
7
+ -- * otherwise, `$(expr)` is the result of evaluating `expr`
8
+ --
9
+ -- Example:
10
+ --
11
+ -- # for i = 1,3 do
12
+ -- $(i) Hello, Word!
13
+ -- # end
14
+ -- ===>
15
+ -- 1 Hello, Word!
16
+ -- 2 Hello, Word!
17
+ -- 3 Hello, Word!
18
+ --
19
+ -- Other escape characters can be used, when the defaults conflict
20
+ -- with the output language.
21
+ --
22
+ -- > for _,n in pairs{'one','two','three'} do
23
+ -- static int l_${n} (luaState *state);
24
+ -- > end
25
+ --
26
+ -- See @{03-strings.md.Another_Style_of_Template|the Guide}.
27
+ --
28
+ -- Dependencies: `pl.utils`
29
+ -- @module pl.template
30
+
31
+ local utils = require 'pl.utils'
32
+ local append,format = table.insert,string.format
33
+
34
+ local function parseHashLines(chunk,brackets,esc)
35
+ local exec_pat = "()$(%b"..brackets..")()"
36
+
37
+ local function parseDollarParen(pieces, chunk, s, e)
38
+ local s = 1
39
+ for term, executed, e in chunk:gmatch (exec_pat) do
40
+ executed = '('..executed:sub(2,-2)..')'
41
+ append(pieces,
42
+ format("%q..(%s or '')..",chunk:sub(s, term - 1), executed))
43
+ s = e
44
+ end
45
+ append(pieces, format("%q", chunk:sub(s)))
46
+ end
47
+
48
+ local esc_pat = esc.."+([^\n]*\n?)"
49
+ local esc_pat1, esc_pat2 = "^"..esc_pat, "\n"..esc_pat
50
+ local pieces, s = {"return function(_put) ", n = 1}, 1
51
+ while true do
52
+ local ss, e, lua = chunk:find (esc_pat1, s)
53
+ if not e then
54
+ ss, e, lua = chunk:find(esc_pat2, s)
55
+ append(pieces, "_put(")
56
+ parseDollarParen(pieces, chunk:sub(s, ss))
57
+ append(pieces, ")")
58
+ if not e then break end
59
+ end
60
+ append(pieces, lua)
61
+ s = e + 1
62
+ end
63
+ append(pieces, " end")
64
+ return table.concat(pieces)
65
+ end
66
+
67
+ local template = {}
68
+
69
+ --- expand the template using the specified environment.
70
+ -- @param str the template string
71
+ -- @param env the environment (by default empty). <br>
72
+ -- There are three special fields in the environment table <ul>
73
+ -- <li><code>_parent</code> continue looking up in this table</li>
74
+ -- <li><code>_brackets</code>; default is '()', can be any suitable bracket pair</li>
75
+ -- <li><code>_escape</code>; default is '#' </li>
76
+ -- </ul>
77
+ function template.substitute(str,env)
78
+ env = env or {}
79
+ if rawget(env,"_parent") then
80
+ setmetatable(env,{__index = env._parent})
81
+ end
82
+ local brackets = rawget(env,"_brackets") or '()'
83
+ local escape = rawget(env,"_escape") or '#'
84
+ local code = parseHashLines(str,brackets,escape)
85
+ local fn,err = utils.load(code,'TMP','t',env)
86
+ if not fn then return nil,err end
87
+ fn = fn()
88
+ local out = {}
89
+ local res,err = xpcall(function() fn(function(s)
90
+ out[#out+1] = s
91
+ end) end,debug.traceback)
92
+ if not res then
93
+ if env._debug then print(code) end
94
+ return nil,err
95
+ end
96
+ return table.concat(out)
97
+ end
98
+
99
+ return template
100
+
101
+
102
+
103
+
@@ -0,0 +1,135 @@
1
+ --- Useful test utilities.
2
+ --
3
+ -- test.asserteq({1,2},{1,2}) -- can compare tables
4
+ -- test.asserteq(1.2,1.19,0.02) -- compare FP numbers within precision
5
+ -- T = test.tuple -- used for comparing multiple results
6
+ -- test.asserteq(T(string.find(" me","me")),T(2,3))
7
+ --
8
+ -- Dependencies: `pl.utils`, `pl.tablex`, `pl.pretty`, `pl.path`, `debug`
9
+ -- @module pl.test
10
+
11
+ local tablex = require 'pl.tablex'
12
+ local utils = require 'pl.utils'
13
+ local pretty = require 'pl.pretty'
14
+ local path = require 'pl.path'
15
+ local print,type = print,type
16
+ local clock = os.clock
17
+ local debug = require 'debug'
18
+ local io,debug = io,debug
19
+
20
+ local function dump(x)
21
+ if type(x) == 'table' and not (getmetatable(x) and getmetatable(x).__tostring) then
22
+ return pretty.write(x,' ',true)
23
+ elseif type(x) == 'string' then
24
+ return '"'..x..'"'
25
+ else
26
+ return tostring(x)
27
+ end
28
+ end
29
+
30
+ local test = {}
31
+
32
+ local function complain (x,y,msg)
33
+ local i = debug.getinfo(3)
34
+ local err = io.stderr
35
+ err:write(path.basename(i.short_src)..':'..i.currentline..': assertion failed\n')
36
+ err:write("got:\t",dump(x),'\n')
37
+ err:write("needed:\t",dump(y),'\n')
38
+ utils.quit(1,msg or "these values were not equal")
39
+ end
40
+
41
+ --- general test complain message.
42
+ -- Useful for composing new test functions (see tests/tablex.lua for an example)
43
+ -- @param x a value
44
+ -- @param y value to compare first value against
45
+ -- @param msg message
46
+ test.complain = complain
47
+
48
+ --- like assert, except takes two arguments that must be equal and can be tables.
49
+ -- If they are plain tables, it will use tablex.deepcompare.
50
+ -- @param x any value
51
+ -- @param y a value equal to x
52
+ -- @param eps an optional tolerance for numerical comparisons
53
+ function test.asserteq (x,y,eps)
54
+ local res = x == y
55
+ if not res then
56
+ res = tablex.deepcompare(x,y,true,eps)
57
+ end
58
+ if not res then
59
+ complain(x,y)
60
+ end
61
+ end
62
+
63
+ --- assert that the first string matches the second.
64
+ -- @param s1 a string
65
+ -- @param s2 a string
66
+ function test.assertmatch (s1,s2)
67
+ if not s1:match(s2) then
68
+ complain (s1,s2,"these strings did not match")
69
+ end
70
+ end
71
+
72
+ --- assert that the function raises a particular error.
73
+ -- @param fn a table of the form {function,arg1,...}
74
+ -- @param e a string to match the error against
75
+ function test.assertraise(fn,e)
76
+ local ok, err = pcall(unpack(fn))
77
+ if not err or err:match(e)==nil then
78
+ complain (err,e,"these errors did not match")
79
+ end
80
+ end
81
+
82
+ --- a version of asserteq that takes two pairs of values.
83
+ -- <code>x1==y1 and x2==y2</code> must be true. Useful for functions that naturally
84
+ -- return two values.
85
+ -- @param x1 any value
86
+ -- @param x2 any value
87
+ -- @param y1 any value
88
+ -- @param y2 any value
89
+ function test.asserteq2 (x1,x2,y1,y2)
90
+ if x1 ~= y1 then complain(x1,y1) end
91
+ if x2 ~= y2 then complain(x2,y2) end
92
+ end
93
+
94
+ -- tuple type --
95
+
96
+ local tuple_mt = {}
97
+
98
+ function tuple_mt.__tostring(self)
99
+ local ts = {}
100
+ for i=1, self.n do
101
+ local s = self[i]
102
+ ts[i] = type(s) == 'string' and string.format('%q', s) or tostring(s)
103
+ end
104
+ return 'tuple(' .. table.concat(ts, ', ') .. ')'
105
+ end
106
+
107
+ function tuple_mt.__eq(a, b)
108
+ if a.n ~= b.n then return false end
109
+ for i=1, a.n do
110
+ if a[i] ~= b[i] then return false end
111
+ end
112
+ return true
113
+ end
114
+
115
+ --- encode an arbitrary argument list as a tuple.
116
+ -- This can be used to compare to other argument lists, which is
117
+ -- very useful for testing functions which return a number of values.
118
+ -- @usage asserteq(tuple( ('ab'):find 'a'), tuple(1,1))
119
+ function test.tuple(...)
120
+ return setmetatable({n=select('#', ...), ...}, tuple_mt)
121
+ end
122
+
123
+ --- Time a function. Call the function a given number of times, and report the number of seconds taken,
124
+ -- together with a message. Any extra arguments will be passed to the function.
125
+ -- @param msg a descriptive message
126
+ -- @param n number of times to call the function
127
+ -- @param fun the function
128
+ -- @param ... optional arguments to fun
129
+ function test.timer(msg,n,fun,...)
130
+ local start = clock()
131
+ for i = 1,n do fun(...) end
132
+ utils.printf("%s: took %7.2f sec\n",msg,clock()-start)
133
+ end
134
+
135
+ return test
@@ -0,0 +1,243 @@
1
+ --- Text processing utilities.
2
+ --
3
+ -- This provides a Template class (modeled after the same from the Python
4
+ -- libraries, see string.Template). It also provides similar functions to those
5
+ -- found in the textwrap module.
6
+ --
7
+ -- See @{03-strings.md.String_Templates|the Guide}.
8
+ --
9
+ -- Calling `text.format_operator()` overloads the % operator for strings to give Python/Ruby style formated output.
10
+ -- This is extended to also do template-like substitution for map-like data.
11
+ --
12
+ -- > require 'pl.text'.format_operator()
13
+ -- > = '%s = %5.3f' % {'PI',math.pi}
14
+ -- PI = 3.142
15
+ -- > = '$name = $value' % {name='dog',value='Pluto'}
16
+ -- dog = Pluto
17
+ --
18
+ -- Dependencies: `pl.utils`
19
+ -- @module pl.text
20
+
21
+ local gsub = string.gsub
22
+ local concat,append = table.concat,table.insert
23
+ local utils = require 'pl.utils'
24
+ local bind1,usplit,assert_arg,is_callable = utils.bind1,utils.split,utils.assert_arg,utils.is_callable
25
+
26
+ local function lstrip(str) return (str:gsub('^%s+','')) end
27
+ local function strip(str) return (lstrip(str):gsub('%s+$','')) end
28
+ local function make_list(l) return setmetatable(l,utils.stdmt.List) end
29
+ local function split(s,delim) return make_list(usplit(s,delim)) end
30
+
31
+ local function imap(f,t,...)
32
+ local res = {}
33
+ for i = 1,#t do res[i] = f(t[i],...) end
34
+ return res
35
+ end
36
+
37
+ --[[
38
+ module ('pl.text',utils._module)
39
+ ]]
40
+
41
+ local text = {}
42
+
43
+ local function _indent (s,sp)
44
+ local sl = split(s,'\n')
45
+ return concat(imap(bind1('..',sp),sl),'\n')..'\n'
46
+ end
47
+
48
+ --- indent a multiline string.
49
+ -- @param s the string
50
+ -- @param n the size of the indent
51
+ -- @param ch the character to use when indenting (default ' ')
52
+ -- @return indented string
53
+ function text.indent (s,n,ch)
54
+ assert_arg(1,s,'string')
55
+ assert_arg(2,s,'number')
56
+ return _indent(s,string.rep(ch or ' ',n))
57
+ end
58
+
59
+ --- dedent a multiline string by removing any initial indent.
60
+ -- useful when working with [[..]] strings.
61
+ -- @param s the string
62
+ -- @return a string with initial indent zero.
63
+ function text.dedent (s)
64
+ assert_arg(1,s,'string')
65
+ local sl = split(s,'\n')
66
+ local i1,i2 = sl[1]:find('^%s*')
67
+ sl = imap(string.sub,sl,i2+1)
68
+ return concat(sl,'\n')..'\n'
69
+ end
70
+
71
+ --- format a paragraph into lines so that they fit into a line width.
72
+ -- It will not break long words, so lines can be over the length
73
+ -- to that extent.
74
+ -- @param s the string
75
+ -- @param width the margin width, default 70
76
+ -- @return a list of lines
77
+ function text.wrap (s,width)
78
+ assert_arg(1,s,'string')
79
+ width = width or 70
80
+ s = s:gsub('\n',' ')
81
+ local i,nxt = 1
82
+ local lines,line = {}
83
+ while i < #s do
84
+ nxt = i+width
85
+ if s:find("[%w']",nxt) then -- inside a word
86
+ nxt = s:find('%W',nxt+1) -- so find word boundary
87
+ end
88
+ line = s:sub(i,nxt)
89
+ i = i + #line
90
+ append(lines,strip(line))
91
+ end
92
+ return make_list(lines)
93
+ end
94
+
95
+ --- format a paragraph so that it fits into a line width.
96
+ -- @param s the string
97
+ -- @param width the margin width, default 70
98
+ -- @return a string
99
+ -- @see wrap
100
+ function text.fill (s,width)
101
+ return concat(text.wrap(s,width),'\n') .. '\n'
102
+ end
103
+
104
+ local Template = {}
105
+ text.Template = Template
106
+ Template.__index = Template
107
+ setmetatable(Template, {
108
+ __call = function(obj,tmpl)
109
+ return Template.new(tmpl)
110
+ end})
111
+
112
+ function Template.new(tmpl)
113
+ assert_arg(1,tmpl,'string')
114
+ local res = {}
115
+ res.tmpl = tmpl
116
+ setmetatable(res,Template)
117
+ return res
118
+ end
119
+
120
+ local function _substitute(s,tbl,safe)
121
+ local subst
122
+ if is_callable(tbl) then
123
+ subst = tbl
124
+ else
125
+ function subst(f)
126
+ local s = tbl[f]
127
+ if not s then
128
+ if safe then
129
+ return f
130
+ else
131
+ error("not present in table "..f)
132
+ end
133
+ else
134
+ return s
135
+ end
136
+ end
137
+ end
138
+ local res = gsub(s,'%${([%w_]+)}',subst)
139
+ return (gsub(res,'%$([%w_]+)',subst))
140
+ end
141
+
142
+ --- substitute values into a template, throwing an error.
143
+ -- This will throw an error if no name is found.
144
+ -- @param tbl a table of name-value pairs.
145
+ function Template:substitute(tbl)
146
+ assert_arg(1,tbl,'table')
147
+ return _substitute(self.tmpl,tbl,false)
148
+ end
149
+
150
+ --- substitute values into a template.
151
+ -- This version just passes unknown names through.
152
+ -- @param tbl a table of name-value pairs.
153
+ function Template:safe_substitute(tbl)
154
+ assert_arg(1,tbl,'table')
155
+ return _substitute(self.tmpl,tbl,true)
156
+ end
157
+
158
+ --- substitute values into a template, preserving indentation. <br>
159
+ -- If the value is a multiline string _or_ a template, it will insert
160
+ -- the lines at the correct indentation. <br>
161
+ -- Furthermore, if a template, then that template will be subsituted
162
+ -- using the same table.
163
+ -- @param tbl a table of name-value pairs.
164
+ function Template:indent_substitute(tbl)
165
+ assert_arg(1,tbl,'table')
166
+ if not self.strings then
167
+ self.strings = split(self.tmpl,'\n')
168
+ end
169
+ -- the idea is to substitute line by line, grabbing any spaces as
170
+ -- well as the $var. If the value to be substituted contains newlines,
171
+ -- then we split that into lines and adjust the indent before inserting.
172
+ local function subst(line)
173
+ return line:gsub('(%s*)%$([%w_]+)',function(sp,f)
174
+ local subtmpl
175
+ local s = tbl[f]
176
+ if not s then error("not present in table "..f) end
177
+ if getmetatable(s) == Template then
178
+ subtmpl = s
179
+ s = s.tmpl
180
+ else
181
+ s = tostring(s)
182
+ end
183
+ if s:find '\n' then
184
+ s = _indent(s,sp)
185
+ end
186
+ if subtmpl then return _substitute(s,tbl)
187
+ else return s
188
+ end
189
+ end)
190
+ end
191
+ local lines = imap(subst,self.strings)
192
+ return concat(lines,'\n')..'\n'
193
+ end
194
+
195
+ ------- Python-style formatting operator ------
196
+ -- (see <a href="http://lua-users.org/wiki/StringInterpolation">the lua-users wiki</a>) --
197
+
198
+ function text.format_operator()
199
+
200
+ local format = string.format
201
+
202
+ -- a more forgiving version of string.format, which applies
203
+ -- tostring() to any value with a %s format.
204
+ local function formatx (fmt,...)
205
+ local args = {...}
206
+ local i = 1
207
+ for p in fmt:gmatch('%%.') do
208
+ if p == '%s' and type(args[i]) ~= 'string' then
209
+ args[i] = tostring(args[i])
210
+ end
211
+ i = i + 1
212
+ end
213
+ return format(fmt,unpack(args))
214
+ end
215
+
216
+ local function basic_subst(s,t)
217
+ return (s:gsub('%$([%w_]+)',t))
218
+ end
219
+
220
+ -- Note this goes further than the original, and will allow these cases:
221
+ -- 1. a single value
222
+ -- 2. a list of values
223
+ -- 3. a map of var=value pairs
224
+ -- 4. a function, as in gsub
225
+ -- For the second two cases, it uses $-variable substituion.
226
+ getmetatable("").__mod = function(a, b)
227
+ if b == nil then
228
+ return a
229
+ elseif type(b) == "table" and getmetatable(b) == nil then
230
+ if #b == 0 then -- assume a map-like table
231
+ return _substitute(a,b,true)
232
+ else
233
+ return formatx(a,unpack(b))
234
+ end
235
+ elseif type(b) == 'function' then
236
+ return basic_subst(a,b)
237
+ else
238
+ return formatx(a,b)
239
+ end
240
+ end
241
+ end
242
+
243
+ return text