kibi-swipl-linux-x64-gnu 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (550) hide show
  1. package/README.md +29 -0
  2. package/bin/swipl +0 -0
  3. package/bin/swipl-win +0 -0
  4. package/build-manifest.json +70 -0
  5. package/lib/cmake/swipl/SWIPLConfig.cmake +21 -0
  6. package/lib/cmake/swipl/SWIPLConfigVersion.cmake +65 -0
  7. package/lib/cmake/swipl/SWIPLTargets-release.cmake +28 -0
  8. package/lib/cmake/swipl/SWIPLTargets.cmake +109 -0
  9. package/lib/swipl/ABI +1 -0
  10. package/lib/swipl/LICENSE +41 -0
  11. package/lib/swipl/README.md +116 -0
  12. package/lib/swipl/app/README.md +25 -0
  13. package/lib/swipl/app/app.pl +87 -0
  14. package/lib/swipl/app/pack.pl +350 -0
  15. package/lib/swipl/app/qlf.pl +521 -0
  16. package/lib/swipl/app/splfr.pl +177 -0
  17. package/lib/swipl/app/sys.pl +310 -0
  18. package/lib/swipl/bin/swipl.home +1 -0
  19. package/lib/swipl/boot/apply.pl +73 -0
  20. package/lib/swipl/boot/attvar.pl +344 -0
  21. package/lib/swipl/boot/autoload.pl +1226 -0
  22. package/lib/swipl/boot/bags.pl +283 -0
  23. package/lib/swipl/boot/dcg.pl +388 -0
  24. package/lib/swipl/boot/dicts.pl +193 -0
  25. package/lib/swipl/boot/dwim.pl +485 -0
  26. package/lib/swipl/boot/engines.pl +152 -0
  27. package/lib/swipl/boot/expand.pl +1628 -0
  28. package/lib/swipl/boot/gc.pl +65 -0
  29. package/lib/swipl/boot/history.pl +304 -0
  30. package/lib/swipl/boot/init.pl +4682 -0
  31. package/lib/swipl/boot/iri.pl +64 -0
  32. package/lib/swipl/boot/license.pl +390 -0
  33. package/lib/swipl/boot/load.pl +81 -0
  34. package/lib/swipl/boot/messages.pl +2521 -0
  35. package/lib/swipl/boot/packs.pl +306 -0
  36. package/lib/swipl/boot/predopts.pl +154 -0
  37. package/lib/swipl/boot/qlf.pl +141 -0
  38. package/lib/swipl/boot/rc.pl +263 -0
  39. package/lib/swipl/boot/syspred.pl +1634 -0
  40. package/lib/swipl/boot/tabling.pl +2321 -0
  41. package/lib/swipl/boot/threads.pl +42 -0
  42. package/lib/swipl/boot/toplevel.pl +2248 -0
  43. package/lib/swipl/boot/topvars.pl +261 -0
  44. package/lib/swipl/boot.prc +0 -0
  45. package/lib/swipl/cmake/swipl.cmake +131 -0
  46. package/lib/swipl/customize/README.md +23 -0
  47. package/lib/swipl/customize/edit +101 -0
  48. package/lib/swipl/customize/init.pl +164 -0
  49. package/lib/swipl/demo/README.md +33 -0
  50. package/lib/swipl/demo/likes.pl +44 -0
  51. package/lib/swipl/doc/packages/examples/chr/bool.chr +281 -0
  52. package/lib/swipl/doc/packages/examples/chr/chrdif.chr +87 -0
  53. package/lib/swipl/doc/packages/examples/chr/chrfreeze.chr +6 -0
  54. package/lib/swipl/doc/packages/examples/chr/family.chr +116 -0
  55. package/lib/swipl/doc/packages/examples/chr/fib.chr +24 -0
  56. package/lib/swipl/doc/packages/examples/chr/fibonacci.chr +31 -0
  57. package/lib/swipl/doc/packages/examples/chr/gcd.chr +28 -0
  58. package/lib/swipl/doc/packages/examples/chr/leq.chr +34 -0
  59. package/lib/swipl/doc/packages/examples/chr/listdom.chr +138 -0
  60. package/lib/swipl/doc/packages/examples/chr/primes.chr +29 -0
  61. package/lib/swipl/doc/packages/examples/http/README.md +98 -0
  62. package/lib/swipl/doc/packages/examples/http/calc.pl +92 -0
  63. package/lib/swipl/doc/packages/examples/http/demo_body.pl +232 -0
  64. package/lib/swipl/doc/packages/examples/http/demo_client.pl +165 -0
  65. package/lib/swipl/doc/packages/examples/http/demo_daemon.pl +38 -0
  66. package/lib/swipl/doc/packages/examples/http/demo_files.pl +50 -0
  67. package/lib/swipl/doc/packages/examples/http/demo_hello.pl +15 -0
  68. package/lib/swipl/doc/packages/examples/http/demo_login.pl +280 -0
  69. package/lib/swipl/doc/packages/examples/http/demo_openid.pl +177 -0
  70. package/lib/swipl/doc/packages/examples/http/demo_pwp.pl +20 -0
  71. package/lib/swipl/doc/packages/examples/http/demo_rest.pl +56 -0
  72. package/lib/swipl/doc/packages/examples/http/demo_threads.pl +52 -0
  73. package/lib/swipl/doc/packages/examples/http/linux-init-script +126 -0
  74. package/lib/swipl/doc/packages/examples/http/pwp/context.pwp +23 -0
  75. package/lib/swipl/doc/packages/examples/http/pwp/index.pwp +25 -0
  76. package/lib/swipl/doc/packages/examples/http/pwp/pwp1.pwp +12 -0
  77. package/lib/swipl/doc/packages/examples/http/pwp/pwp2.pwp +10 -0
  78. package/lib/swipl/doc/packages/examples/http/pwp/pwp3.pwp +25 -0
  79. package/lib/swipl/doc/packages/examples/http/pwp/pwp4.pwp +23 -0
  80. package/lib/swipl/doc/packages/examples/http/pwp/pwp5.pwp +11 -0
  81. package/lib/swipl/doc/packages/examples/http/pwp/pwp6.pwp +3 -0
  82. package/lib/swipl/doc/packages/examples/http/pwp/pwp7.pwp +3 -0
  83. package/lib/swipl/doc/packages/examples/http/pwp/pwp8.pwp +3 -0
  84. package/lib/swipl/doc/packages/examples/http/pwp/pwpdb.pl +12 -0
  85. package/lib/swipl/doc/packages/examples/http/systemd-script.service +18 -0
  86. package/lib/swipl/doc/packages/examples/http/upstart-script.conf +20 -0
  87. package/lib/swipl/doc/packages/examples/plunit/read.pl +17 -0
  88. package/lib/swipl/doc/packages/examples/plunit/simple.pl +33 -0
  89. package/lib/swipl/doc/packages/examples/ssl/client.pl +83 -0
  90. package/lib/swipl/doc/packages/examples/ssl/etc/README +52 -0
  91. package/lib/swipl/doc/packages/examples/ssl/etc/client/client-cert.p12 +0 -0
  92. package/lib/swipl/doc/packages/examples/ssl/etc/client/client-cert.pem +85 -0
  93. package/lib/swipl/doc/packages/examples/ssl/etc/client/client-key.pem +30 -0
  94. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/cacert.pem +82 -0
  95. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/careq.pem +18 -0
  96. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/crlnumber +1 -0
  97. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/index.txt +3 -0
  98. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/index.txt.attr +1 -0
  99. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/newcerts/9DC08797A0F63F7C.pem +85 -0
  100. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/newcerts/9DC08797A0F63F7D.pem +85 -0
  101. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/private/cakey.pem +30 -0
  102. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/serial +1 -0
  103. package/lib/swipl/doc/packages/examples/ssl/etc/server/server-cert.pem +85 -0
  104. package/lib/swipl/doc/packages/examples/ssl/etc/server/server-key.pem +30 -0
  105. package/lib/swipl/doc/packages/examples/ssl/https.pl +267 -0
  106. package/lib/swipl/doc/packages/examples/ssl/server.pl +106 -0
  107. package/lib/swipl/include/SWI-Prolog.h +1544 -0
  108. package/lib/swipl/include/SWI-Stream.h +537 -0
  109. package/lib/swipl/include/Yap/YapInterface.h +283 -0
  110. package/lib/swipl/include/sicstus/sicstus.h +452 -0
  111. package/lib/swipl/lib/x86_64-linux/cgi.so +0 -0
  112. package/lib/swipl/lib/x86_64-linux/crypt.so +0 -0
  113. package/lib/swipl/lib/x86_64-linux/crypto4pl.so +0 -0
  114. package/lib/swipl/lib/x86_64-linux/double_metaphone.so +0 -0
  115. package/lib/swipl/lib/x86_64-linux/files.so +0 -0
  116. package/lib/swipl/lib/x86_64-linux/hashstream.so +0 -0
  117. package/lib/swipl/lib/x86_64-linux/http_stream.so +0 -0
  118. package/lib/swipl/lib/x86_64-linux/isub.so +0 -0
  119. package/lib/swipl/lib/x86_64-linux/json.so +0 -0
  120. package/lib/swipl/lib/x86_64-linux/libswipl.so.10 +0 -0
  121. package/lib/swipl/lib/x86_64-linux/mallocinfo.so +0 -0
  122. package/lib/swipl/lib/x86_64-linux/md54pl.so +0 -0
  123. package/lib/swipl/lib/x86_64-linux/memfile.so +0 -0
  124. package/lib/swipl/lib/x86_64-linux/ntriples.so +0 -0
  125. package/lib/swipl/lib/x86_64-linux/pcre4pl.so +0 -0
  126. package/lib/swipl/lib/x86_64-linux/porter_stem.so +0 -0
  127. package/lib/swipl/lib/x86_64-linux/process.so +0 -0
  128. package/lib/swipl/lib/x86_64-linux/prolog_stream.so +0 -0
  129. package/lib/swipl/lib/x86_64-linux/rdf_db.so +0 -0
  130. package/lib/swipl/lib/x86_64-linux/readutil.so +0 -0
  131. package/lib/swipl/lib/x86_64-linux/rlimit.so +0 -0
  132. package/lib/swipl/lib/x86_64-linux/sched.so +0 -0
  133. package/lib/swipl/lib/x86_64-linux/sgml2pl.so +0 -0
  134. package/lib/swipl/lib/x86_64-linux/sha4pl.so +0 -0
  135. package/lib/swipl/lib/x86_64-linux/snowball.so +0 -0
  136. package/lib/swipl/lib/x86_64-linux/socket.so +0 -0
  137. package/lib/swipl/lib/x86_64-linux/ssl4pl.so +0 -0
  138. package/lib/swipl/lib/x86_64-linux/streaminfo.so +0 -0
  139. package/lib/swipl/lib/x86_64-linux/syslog.so +0 -0
  140. package/lib/swipl/lib/x86_64-linux/time.so +0 -0
  141. package/lib/swipl/lib/x86_64-linux/turtle.so +0 -0
  142. package/lib/swipl/lib/x86_64-linux/uid.so +0 -0
  143. package/lib/swipl/lib/x86_64-linux/unix.so +0 -0
  144. package/lib/swipl/lib/x86_64-linux/uri.so +0 -0
  145. package/lib/swipl/lib/x86_64-linux/websocket.so +0 -0
  146. package/lib/swipl/lib/x86_64-linux/zlib4pl.so +0 -0
  147. package/lib/swipl/library/INDEX.pl +1020 -0
  148. package/lib/swipl/library/aggregate.pl +755 -0
  149. package/lib/swipl/library/ansi_term.pl +653 -0
  150. package/lib/swipl/library/apply.pl +426 -0
  151. package/lib/swipl/library/apply_macros.pl +497 -0
  152. package/lib/swipl/library/arithmetic.pl +320 -0
  153. package/lib/swipl/library/assoc.pl +522 -0
  154. package/lib/swipl/library/atom.pl +169 -0
  155. package/lib/swipl/library/backcomp.pl +688 -0
  156. package/lib/swipl/library/base32.pl +291 -0
  157. package/lib/swipl/library/base64.pl +441 -0
  158. package/lib/swipl/library/broadcast.pl +161 -0
  159. package/lib/swipl/library/build/cmake.pl +137 -0
  160. package/lib/swipl/library/build/conan.pl +232 -0
  161. package/lib/swipl/library/build/make.pl +168 -0
  162. package/lib/swipl/library/build/tools.pl +825 -0
  163. package/lib/swipl/library/charsio.pl +195 -0
  164. package/lib/swipl/library/check.pl +1097 -0
  165. package/lib/swipl/library/check_installation.pl +912 -0
  166. package/lib/swipl/library/clp/INDEX.pl +157 -0
  167. package/lib/swipl/library/clp/bounds.pl +2036 -0
  168. package/lib/swipl/library/clp/clp_distinct.pl +263 -0
  169. package/lib/swipl/library/clp/clp_events.pl +92 -0
  170. package/lib/swipl/library/clp/clpb.pl +1896 -0
  171. package/lib/swipl/library/clp/clpfd.pl +7906 -0
  172. package/lib/swipl/library/clp/simplex.pl +1580 -0
  173. package/lib/swipl/library/codesio.pl +182 -0
  174. package/lib/swipl/library/coinduction.pl +183 -0
  175. package/lib/swipl/library/console_input.pl +289 -0
  176. package/lib/swipl/library/csv.pl +611 -0
  177. package/lib/swipl/library/ctypes.pl +161 -0
  178. package/lib/swipl/library/date.pl +370 -0
  179. package/lib/swipl/library/dcg/INDEX.pl +35 -0
  180. package/lib/swipl/library/dcg/basics.pl +514 -0
  181. package/lib/swipl/library/dcg/high_order.pl +227 -0
  182. package/lib/swipl/library/debug.pl +499 -0
  183. package/lib/swipl/library/dialect/bim.pl +186 -0
  184. package/lib/swipl/library/dialect/commons.pl +77 -0
  185. package/lib/swipl/library/dialect/eclipse/test_util_iso.pl +355 -0
  186. package/lib/swipl/library/dialect/hprolog/format.pl +44 -0
  187. package/lib/swipl/library/dialect/hprolog.pl +314 -0
  188. package/lib/swipl/library/dialect/ifprolog.pl +1317 -0
  189. package/lib/swipl/library/dialect/iso/iso_predicates.pl +277 -0
  190. package/lib/swipl/library/dialect/sicstus/README.TXT +1 -0
  191. package/lib/swipl/library/dialect/sicstus/arrays.pl +121 -0
  192. package/lib/swipl/library/dialect/sicstus/block.pl +278 -0
  193. package/lib/swipl/library/dialect/sicstus/lists.pl +167 -0
  194. package/lib/swipl/library/dialect/sicstus/ordsets.pl +52 -0
  195. package/lib/swipl/library/dialect/sicstus/sockets.pl +174 -0
  196. package/lib/swipl/library/dialect/sicstus/system.pl +262 -0
  197. package/lib/swipl/library/dialect/sicstus/terms.pl +57 -0
  198. package/lib/swipl/library/dialect/sicstus/timeout.pl +92 -0
  199. package/lib/swipl/library/dialect/sicstus.pl +582 -0
  200. package/lib/swipl/library/dialect/sicstus4/aggregate.pl +60 -0
  201. package/lib/swipl/library/dialect/sicstus4/between.pl +62 -0
  202. package/lib/swipl/library/dialect/sicstus4/clpfd.pl +75 -0
  203. package/lib/swipl/library/dialect/sicstus4/file_systems.pl +413 -0
  204. package/lib/swipl/library/dialect/sicstus4/lists.pl +274 -0
  205. package/lib/swipl/library/dialect/sicstus4/ordsets.pl +54 -0
  206. package/lib/swipl/library/dialect/sicstus4/samsort.pl +86 -0
  207. package/lib/swipl/library/dialect/sicstus4/sets.pl +124 -0
  208. package/lib/swipl/library/dialect/sicstus4/sockets.pl +164 -0
  209. package/lib/swipl/library/dialect/sicstus4/system.pl +80 -0
  210. package/lib/swipl/library/dialect/sicstus4/terms.pl +89 -0
  211. package/lib/swipl/library/dialect/sicstus4/timeout.pl +43 -0
  212. package/lib/swipl/library/dialect/sicstus4/types.pl +103 -0
  213. package/lib/swipl/library/dialect/sicstus4.pl +200 -0
  214. package/lib/swipl/library/dialect/swi/syspred_options.pl +250 -0
  215. package/lib/swipl/library/dialect/xsb/README.md +20 -0
  216. package/lib/swipl/library/dialect/xsb/basics.pl +318 -0
  217. package/lib/swipl/library/dialect/xsb/consult.pl +87 -0
  218. package/lib/swipl/library/dialect/xsb/curr_sym.pl +57 -0
  219. package/lib/swipl/library/dialect/xsb/error_handler.pl +111 -0
  220. package/lib/swipl/library/dialect/xsb/gensym.pl +53 -0
  221. package/lib/swipl/library/dialect/xsb/gpp.pl +138 -0
  222. package/lib/swipl/library/dialect/xsb/intern.pl +48 -0
  223. package/lib/swipl/library/dialect/xsb/lists.pl +47 -0
  224. package/lib/swipl/library/dialect/xsb/machine.pl +295 -0
  225. package/lib/swipl/library/dialect/xsb/ordsets.pl +53 -0
  226. package/lib/swipl/library/dialect/xsb/setof.pl +54 -0
  227. package/lib/swipl/library/dialect/xsb/source.pl +308 -0
  228. package/lib/swipl/library/dialect/xsb/standard.pl +169 -0
  229. package/lib/swipl/library/dialect/xsb/storage.pl +70 -0
  230. package/lib/swipl/library/dialect/xsb/string.pl +76 -0
  231. package/lib/swipl/library/dialect/xsb/thread.pl +62 -0
  232. package/lib/swipl/library/dialect/xsb/timed_call.pl +158 -0
  233. package/lib/swipl/library/dialect/xsb.pl +688 -0
  234. package/lib/swipl/library/dialect/yap/README.TXT +8 -0
  235. package/lib/swipl/library/dialect/yap.pl +283 -0
  236. package/lib/swipl/library/dialect.pl +123 -0
  237. package/lib/swipl/library/dicts.pl +399 -0
  238. package/lib/swipl/library/dif.pl +426 -0
  239. package/lib/swipl/library/edinburgh.pl +138 -0
  240. package/lib/swipl/library/edit.pl +783 -0
  241. package/lib/swipl/library/error.pl +495 -0
  242. package/lib/swipl/library/exceptions.pl +231 -0
  243. package/lib/swipl/library/explain.pl +543 -0
  244. package/lib/swipl/library/ext/RDF/INDEX.pl +25 -0
  245. package/lib/swipl/library/ext/RDF/rdf.pl +450 -0
  246. package/lib/swipl/library/ext/RDF/rdf_parser.pl +649 -0
  247. package/lib/swipl/library/ext/RDF/rdf_triple.pl +448 -0
  248. package/lib/swipl/library/ext/RDF/rdf_write.pl +701 -0
  249. package/lib/swipl/library/ext/RDF/rewrite_term.pl +177 -0
  250. package/lib/swipl/library/ext/chr/chr/a_star.pl +80 -0
  251. package/lib/swipl/library/ext/chr/chr/binomialheap.pl +142 -0
  252. package/lib/swipl/library/ext/chr/chr/builtins.pl +629 -0
  253. package/lib/swipl/library/ext/chr/chr/chr_compiler_errors.pl +179 -0
  254. package/lib/swipl/library/ext/chr/chr/chr_compiler_options.pl +382 -0
  255. package/lib/swipl/library/ext/chr/chr/chr_compiler_utility.pl +338 -0
  256. package/lib/swipl/library/ext/chr/chr/chr_debug.pl +59 -0
  257. package/lib/swipl/library/ext/chr/chr/chr_hashtable_store.pl +425 -0
  258. package/lib/swipl/library/ext/chr/chr/chr_integertable_store.pl +139 -0
  259. package/lib/swipl/library/ext/chr/chr/chr_messages.pl +176 -0
  260. package/lib/swipl/library/ext/chr/chr/chr_op.pl +53 -0
  261. package/lib/swipl/library/ext/chr/chr/chr_runtime.pl +1016 -0
  262. package/lib/swipl/library/ext/chr/chr/chr_translate.pl +25424 -0
  263. package/lib/swipl/library/ext/chr/chr/clean_code.pl +252 -0
  264. package/lib/swipl/library/ext/chr/chr/find.pl +78 -0
  265. package/lib/swipl/library/ext/chr/chr/guard_entailment.pl +19432 -0
  266. package/lib/swipl/library/ext/chr/chr/listmap.pl +108 -0
  267. package/lib/swipl/library/ext/chr/chr/pairlist.pl +78 -0
  268. package/lib/swipl/library/ext/chr/chr.pl +686 -0
  269. package/lib/swipl/library/ext/clib/INDEX.pl +158 -0
  270. package/lib/swipl/library/ext/clib/cgi.pl +86 -0
  271. package/lib/swipl/library/ext/clib/crypt.pl +44 -0
  272. package/lib/swipl/library/ext/clib/filesex.pl +644 -0
  273. package/lib/swipl/library/ext/clib/hash_stream.pl +119 -0
  274. package/lib/swipl/library/ext/clib/mallocinfo.pl +138 -0
  275. package/lib/swipl/library/ext/clib/md5.pl +68 -0
  276. package/lib/swipl/library/ext/clib/memfile.pl +61 -0
  277. package/lib/swipl/library/ext/clib/process.pl +573 -0
  278. package/lib/swipl/library/ext/clib/prolog_server.pl +157 -0
  279. package/lib/swipl/library/ext/clib/prolog_stream.pl +80 -0
  280. package/lib/swipl/library/ext/clib/rlimit.pl +54 -0
  281. package/lib/swipl/library/ext/clib/sched.pl +85 -0
  282. package/lib/swipl/library/ext/clib/sha.pl +162 -0
  283. package/lib/swipl/library/ext/clib/socket.pl +1102 -0
  284. package/lib/swipl/library/ext/clib/streaminfo.pl +103 -0
  285. package/lib/swipl/library/ext/clib/streampool.pl +136 -0
  286. package/lib/swipl/library/ext/clib/syslog.pl +180 -0
  287. package/lib/swipl/library/ext/clib/time.pl +194 -0
  288. package/lib/swipl/library/ext/clib/udp_broadcast.pl +975 -0
  289. package/lib/swipl/library/ext/clib/uid.pl +220 -0
  290. package/lib/swipl/library/ext/clib/unix.pl +317 -0
  291. package/lib/swipl/library/ext/clib/uri.pl +530 -0
  292. package/lib/swipl/library/ext/clib/uuid.pl +207 -0
  293. package/lib/swipl/library/ext/http/http/INDEX.pl +266 -0
  294. package/lib/swipl/library/ext/http/http/README.md +34 -0
  295. package/lib/swipl/library/ext/http/http/ax.pl +189 -0
  296. package/lib/swipl/library/ext/http/http/dcg_basics.pl +49 -0
  297. package/lib/swipl/library/ext/http/http/graphql.pl +1367 -0
  298. package/lib/swipl/library/ext/http/http/html_decl.pl +416 -0
  299. package/lib/swipl/library/ext/http/http/html_head.pl +654 -0
  300. package/lib/swipl/library/ext/http/http/html_quasiquotations.pl +120 -0
  301. package/lib/swipl/library/ext/http/http/html_write.pl +1425 -0
  302. package/lib/swipl/library/ext/http/http/htmx.pl +139 -0
  303. package/lib/swipl/library/ext/http/http/http_authenticate.pl +364 -0
  304. package/lib/swipl/library/ext/http/http/http_client.pl +412 -0
  305. package/lib/swipl/library/ext/http/http/http_cookie.pl +245 -0
  306. package/lib/swipl/library/ext/http/http/http_cors.pl +176 -0
  307. package/lib/swipl/library/ext/http/http/http_digest.pl +820 -0
  308. package/lib/swipl/library/ext/http/http/http_dirindex.pl +296 -0
  309. package/lib/swipl/library/ext/http/http/http_dispatch.pl +1552 -0
  310. package/lib/swipl/library/ext/http/http/http_dyn_workers.pl +214 -0
  311. package/lib/swipl/library/ext/http/http/http_error.pl +126 -0
  312. package/lib/swipl/library/ext/http/http/http_exception.pl +225 -0
  313. package/lib/swipl/library/ext/http/http/http_files.pl +163 -0
  314. package/lib/swipl/library/ext/http/http/http_header.pl +2820 -0
  315. package/lib/swipl/library/ext/http/http/http_hook.pl +106 -0
  316. package/lib/swipl/library/ext/http/http/http_host.pl +204 -0
  317. package/lib/swipl/library/ext/http/http/http_load.pl +113 -0
  318. package/lib/swipl/library/ext/http/http/http_log.pl +738 -0
  319. package/lib/swipl/library/ext/http/http/http_multipart_plugin.pl +232 -0
  320. package/lib/swipl/library/ext/http/http/http_open.pl +1821 -0
  321. package/lib/swipl/library/ext/http/http/http_openid.pl +1561 -0
  322. package/lib/swipl/library/ext/http/http/http_parameters.pl +504 -0
  323. package/lib/swipl/library/ext/http/http/http_path.pl +380 -0
  324. package/lib/swipl/library/ext/http/http/http_proxy.pl +80 -0
  325. package/lib/swipl/library/ext/http/http/http_pwp.pl +351 -0
  326. package/lib/swipl/library/ext/http/http/http_redis_plugin.pl +332 -0
  327. package/lib/swipl/library/ext/http/http/http_server.pl +105 -0
  328. package/lib/swipl/library/ext/http/http/http_server_files.pl +126 -0
  329. package/lib/swipl/library/ext/http/http/http_server_health.pl +186 -0
  330. package/lib/swipl/library/ext/http/http/http_session.pl +1040 -0
  331. package/lib/swipl/library/ext/http/http/http_sgml_plugin.pl +137 -0
  332. package/lib/swipl/library/ext/http/http/http_stream.pl +376 -0
  333. package/lib/swipl/library/ext/http/http/http_unix_daemon.pl +989 -0
  334. package/lib/swipl/library/ext/http/http/http_wrapper.pl +559 -0
  335. package/lib/swipl/library/ext/http/http/hub.pl +600 -0
  336. package/lib/swipl/library/ext/http/http/js_write.pl +461 -0
  337. package/lib/swipl/library/ext/http/http/mimepack.pl +224 -0
  338. package/lib/swipl/library/ext/http/http/mimetype.pl +276 -0
  339. package/lib/swipl/library/ext/http/http/term_html.pl +797 -0
  340. package/lib/swipl/library/ext/http/http/thread_httpd.pl +1181 -0
  341. package/lib/swipl/library/ext/http/http/web/css/dirindex.css +24 -0
  342. package/lib/swipl/library/ext/http/http/web/css/openid.css +57 -0
  343. package/lib/swipl/library/ext/http/http/web/icons/back.png +0 -0
  344. package/lib/swipl/library/ext/http/http/web/icons/c.png +0 -0
  345. package/lib/swipl/library/ext/http/http/web/icons/compressed.png +0 -0
  346. package/lib/swipl/library/ext/http/http/web/icons/folder.png +0 -0
  347. package/lib/swipl/library/ext/http/http/web/icons/generic.png +0 -0
  348. package/lib/swipl/library/ext/http/http/web/icons/layout.png +0 -0
  349. package/lib/swipl/library/ext/http/http/web/icons/openid-logo-square.png +0 -0
  350. package/lib/swipl/library/ext/http/http/web/icons/openid-logo-tiny.png +0 -0
  351. package/lib/swipl/library/ext/http/http/websocket.pl +729 -0
  352. package/lib/swipl/library/ext/http/http/yadis.pl +205 -0
  353. package/lib/swipl/library/ext/json/INDEX.pl +36 -0
  354. package/lib/swipl/library/ext/json/http/INDEX.pl +16 -0
  355. package/lib/swipl/library/ext/json/http/http_json.pl +490 -0
  356. package/lib/swipl/library/ext/json/http/js_grammar.pl +53 -0
  357. package/lib/swipl/library/ext/json/http/json.pl +48 -0
  358. package/lib/swipl/library/ext/json/http/json_convert.pl +48 -0
  359. package/lib/swipl/library/ext/json/json.pl +1215 -0
  360. package/lib/swipl/library/ext/json/json_convert.pl +681 -0
  361. package/lib/swipl/library/ext/json/json_grammar.pl +349 -0
  362. package/lib/swipl/library/ext/json/json_rpc_client.pl +423 -0
  363. package/lib/swipl/library/ext/json/json_rpc_common.pl +104 -0
  364. package/lib/swipl/library/ext/json/json_rpc_server.pl +489 -0
  365. package/lib/swipl/library/ext/json/json_schema.pl +2111 -0
  366. package/lib/swipl/library/ext/nlp/INDEX.pl +15 -0
  367. package/lib/swipl/library/ext/nlp/double_metaphone.pl +86 -0
  368. package/lib/swipl/library/ext/nlp/isub.pl +162 -0
  369. package/lib/swipl/library/ext/nlp/porter_stem.pl +50 -0
  370. package/lib/swipl/library/ext/nlp/snowball.pl +97 -0
  371. package/lib/swipl/library/ext/pcre/INDEX.pl +17 -0
  372. package/lib/swipl/library/ext/pcre/pcre.pl +974 -0
  373. package/lib/swipl/library/ext/plunit/INDEX.pl +20 -0
  374. package/lib/swipl/library/ext/plunit/plunit.pl +2631 -0
  375. package/lib/swipl/library/ext/plunit/test_wizard.pl +249 -0
  376. package/lib/swipl/library/ext/semweb/semweb/INDEX.pl +288 -0
  377. package/lib/swipl/library/ext/semweb/semweb/rdf11.pl +2106 -0
  378. package/lib/swipl/library/ext/semweb/semweb/rdf11_containers.pl +299 -0
  379. package/lib/swipl/library/ext/semweb/semweb/rdf_cache.pl +278 -0
  380. package/lib/swipl/library/ext/semweb/semweb/rdf_compare.pl +132 -0
  381. package/lib/swipl/library/ext/semweb/semweb/rdf_db.pl +3468 -0
  382. package/lib/swipl/library/ext/semweb/semweb/rdf_edit.pl +1145 -0
  383. package/lib/swipl/library/ext/semweb/semweb/rdf_http_plugin.pl +274 -0
  384. package/lib/swipl/library/ext/semweb/semweb/rdf_library.pl +1021 -0
  385. package/lib/swipl/library/ext/semweb/semweb/rdf_litindex.pl +1035 -0
  386. package/lib/swipl/library/ext/semweb/semweb/rdf_ntriples.pl +422 -0
  387. package/lib/swipl/library/ext/semweb/semweb/rdf_persistency.pl +1576 -0
  388. package/lib/swipl/library/ext/semweb/semweb/rdf_portray.pl +182 -0
  389. package/lib/swipl/library/ext/semweb/semweb/rdf_prefixes.pl +681 -0
  390. package/lib/swipl/library/ext/semweb/semweb/rdf_sandbox.pl +153 -0
  391. package/lib/swipl/library/ext/semweb/semweb/rdf_turtle.pl +54 -0
  392. package/lib/swipl/library/ext/semweb/semweb/rdf_turtle_write.pl +1587 -0
  393. package/lib/swipl/library/ext/semweb/semweb/rdf_zlib_plugin.pl +52 -0
  394. package/lib/swipl/library/ext/semweb/semweb/rdfa.pl +1510 -0
  395. package/lib/swipl/library/ext/semweb/semweb/rdfs.pl +475 -0
  396. package/lib/swipl/library/ext/semweb/semweb/sparql_client.pl +643 -0
  397. package/lib/swipl/library/ext/semweb/semweb/turtle.pl +455 -0
  398. package/lib/swipl/library/ext/sgml/DTD/HTML4.dcl +88 -0
  399. package/lib/swipl/library/ext/sgml/DTD/HTML4.dtd +1092 -0
  400. package/lib/swipl/library/ext/sgml/DTD/HTML4.soc +6 -0
  401. package/lib/swipl/library/ext/sgml/DTD/HTML5.dtd +906 -0
  402. package/lib/swipl/library/ext/sgml/DTD/HTMLlat1.ent +195 -0
  403. package/lib/swipl/library/ext/sgml/DTD/HTMLspec.ent +77 -0
  404. package/lib/swipl/library/ext/sgml/DTD/HTMLsym.ent +241 -0
  405. package/lib/swipl/library/ext/sgml/INDEX.pl +64 -0
  406. package/lib/swipl/library/ext/sgml/c14n2.pl +203 -0
  407. package/lib/swipl/library/ext/sgml/iso_639.pl +631 -0
  408. package/lib/swipl/library/ext/sgml/pwp.pl +705 -0
  409. package/lib/swipl/library/ext/sgml/sgml.pl +815 -0
  410. package/lib/swipl/library/ext/sgml/sgml_write.pl +1003 -0
  411. package/lib/swipl/library/ext/sgml/xpath.pl +620 -0
  412. package/lib/swipl/library/ext/sgml/xsdp_types.pl +232 -0
  413. package/lib/swipl/library/ext/ssl/INDEX.pl +60 -0
  414. package/lib/swipl/library/ext/ssl/crypto.pl +1015 -0
  415. package/lib/swipl/library/ext/ssl/http/INDEX.pl +5 -0
  416. package/lib/swipl/library/ext/ssl/http/http_ssl_plugin.pl +296 -0
  417. package/lib/swipl/library/ext/ssl/saml.pl +609 -0
  418. package/lib/swipl/library/ext/ssl/ssl.pl +647 -0
  419. package/lib/swipl/library/ext/ssl/xmldsig.pl +391 -0
  420. package/lib/swipl/library/ext/ssl/xmlenc.pl +354 -0
  421. package/lib/swipl/library/ext/zlib/INDEX.pl +8 -0
  422. package/lib/swipl/library/ext/zlib/zlib.pl +112 -0
  423. package/lib/swipl/library/fastrw.pl +105 -0
  424. package/lib/swipl/library/files.pl +80 -0
  425. package/lib/swipl/library/gensym.pl +111 -0
  426. package/lib/swipl/library/git.pl +1027 -0
  427. package/lib/swipl/library/hashtable.pl +365 -0
  428. package/lib/swipl/library/heaps.pl +252 -0
  429. package/lib/swipl/library/hotfix.pl +239 -0
  430. package/lib/swipl/library/http/jquery.pl +103 -0
  431. package/lib/swipl/library/http/web/js/jquery-3.6.0.min.js +2 -0
  432. package/lib/swipl/library/increval.pl +217 -0
  433. package/lib/swipl/library/intercept.pl +263 -0
  434. package/lib/swipl/library/iostream.pl +237 -0
  435. package/lib/swipl/library/iri_scheme/file.pl +70 -0
  436. package/lib/swipl/library/lazy_lists.pl +481 -0
  437. package/lib/swipl/library/listing.pl +1362 -0
  438. package/lib/swipl/library/lists.pl +860 -0
  439. package/lib/swipl/library/lynx/INDEX.pl +14 -0
  440. package/lib/swipl/library/lynx/format.pl +380 -0
  441. package/lib/swipl/library/lynx/html_style.pl +129 -0
  442. package/lib/swipl/library/lynx/html_text.pl +865 -0
  443. package/lib/swipl/library/lynx/pldoc_style.pl +87 -0
  444. package/lib/swipl/library/macros.pl +451 -0
  445. package/lib/swipl/library/main.pl +1200 -0
  446. package/lib/swipl/library/make.pl +197 -0
  447. package/lib/swipl/library/modules.pl +129 -0
  448. package/lib/swipl/library/nb_rbtrees.pl +267 -0
  449. package/lib/swipl/library/nb_set.pl +203 -0
  450. package/lib/swipl/library/obfuscate.pl +115 -0
  451. package/lib/swipl/library/occurs.pl +241 -0
  452. package/lib/swipl/library/operators.pl +182 -0
  453. package/lib/swipl/library/option.pl +388 -0
  454. package/lib/swipl/library/optparse.pl +966 -0
  455. package/lib/swipl/library/ordsets.pl +518 -0
  456. package/lib/swipl/library/oset.pl +160 -0
  457. package/lib/swipl/library/pairs.pl +187 -0
  458. package/lib/swipl/library/persistency.pl +713 -0
  459. package/lib/swipl/library/pio.pl +47 -0
  460. package/lib/swipl/library/portray_text.pl +277 -0
  461. package/lib/swipl/library/pprint.pl +940 -0
  462. package/lib/swipl/library/predicate_options.pl +975 -0
  463. package/lib/swipl/library/prolog_autoload.pl +233 -0
  464. package/lib/swipl/library/prolog_breakpoints.pl +396 -0
  465. package/lib/swipl/library/prolog_clause.pl +1104 -0
  466. package/lib/swipl/library/prolog_code.pl +416 -0
  467. package/lib/swipl/library/prolog_codewalk.pl +1248 -0
  468. package/lib/swipl/library/prolog_colour.pl +3301 -0
  469. package/lib/swipl/library/prolog_colour.qlf +0 -0
  470. package/lib/swipl/library/prolog_config.pl +154 -0
  471. package/lib/swipl/library/prolog_coverage.pl +1333 -0
  472. package/lib/swipl/library/prolog_debug.pl +404 -0
  473. package/lib/swipl/library/prolog_deps.pl +675 -0
  474. package/lib/swipl/library/prolog_evaluable.pl +234 -0
  475. package/lib/swipl/library/prolog_format.pl +219 -0
  476. package/lib/swipl/library/prolog_history.pl +161 -0
  477. package/lib/swipl/library/prolog_jiti.pl +333 -0
  478. package/lib/swipl/library/prolog_locale.pl +61 -0
  479. package/lib/swipl/library/prolog_metainference.pl +307 -0
  480. package/lib/swipl/library/prolog_pack.pl +3906 -0
  481. package/lib/swipl/library/prolog_profile.pl +346 -0
  482. package/lib/swipl/library/prolog_qlfmake.pl +533 -0
  483. package/lib/swipl/library/prolog_source.pl +1188 -0
  484. package/lib/swipl/library/prolog_stack.pl +794 -0
  485. package/lib/swipl/library/prolog_trace.pl +365 -0
  486. package/lib/swipl/library/prolog_versions.pl +347 -0
  487. package/lib/swipl/library/prolog_wrap.pl +164 -0
  488. package/lib/swipl/library/prolog_xref.pl +3090 -0
  489. package/lib/swipl/library/prolog_xref.qlf +0 -0
  490. package/lib/swipl/library/pure_input.pl +266 -0
  491. package/lib/swipl/library/qpforeign.pl +695 -0
  492. package/lib/swipl/library/qsave.pl +1516 -0
  493. package/lib/swipl/library/quasi_quotations.pl +300 -0
  494. package/lib/swipl/library/quintus.pl +437 -0
  495. package/lib/swipl/library/random.pl +459 -0
  496. package/lib/swipl/library/rbtrees.pl +1153 -0
  497. package/lib/swipl/library/readln.pl +256 -0
  498. package/lib/swipl/library/readutil.pl +304 -0
  499. package/lib/swipl/library/record.pl +544 -0
  500. package/lib/swipl/library/rwlocks.pl +172 -0
  501. package/lib/swipl/library/sandbox.pl +1384 -0
  502. package/lib/swipl/library/semweb/dc.rdfs +198 -0
  503. package/lib/swipl/library/semweb/eor.rdfs +95 -0
  504. package/lib/swipl/library/semweb/owl.owl +287 -0
  505. package/lib/swipl/library/semweb/rdf_library.ttl +90 -0
  506. package/lib/swipl/library/semweb/rdfs.rdfs +251 -0
  507. package/lib/swipl/library/settings.pl +755 -0
  508. package/lib/swipl/library/shell.pl +462 -0
  509. package/lib/swipl/library/shlib.pl +670 -0
  510. package/lib/swipl/library/solution_sequences.pl +439 -0
  511. package/lib/swipl/library/sort.pl +119 -0
  512. package/lib/swipl/library/statistics.pl +541 -0
  513. package/lib/swipl/library/streams.pl +118 -0
  514. package/lib/swipl/library/strings.pl +469 -0
  515. package/lib/swipl/library/system.pl +95 -0
  516. package/lib/swipl/library/tables.pl +381 -0
  517. package/lib/swipl/library/tableutil.pl +771 -0
  518. package/lib/swipl/library/tabling.pl +42 -0
  519. package/lib/swipl/library/terms.pl +457 -0
  520. package/lib/swipl/library/theme/auto.pl +61 -0
  521. package/lib/swipl/library/theme/dark.pl +455 -0
  522. package/lib/swipl/library/theme/light.pl +45 -0
  523. package/lib/swipl/library/thread.pl +810 -0
  524. package/lib/swipl/library/thread_pool.pl +508 -0
  525. package/lib/swipl/library/threadutil.pl +574 -0
  526. package/lib/swipl/library/tty.pl +316 -0
  527. package/lib/swipl/library/ugraphs.pl +644 -0
  528. package/lib/swipl/library/unicode/INDEX.pl +6 -0
  529. package/lib/swipl/library/unicode/blocks.pl +414 -0
  530. package/lib/swipl/library/url.pl +1129 -0
  531. package/lib/swipl/library/utf8.pl +145 -0
  532. package/lib/swipl/library/varnumbers.pl +221 -0
  533. package/lib/swipl/library/vm.pl +251 -0
  534. package/lib/swipl/library/wfs.pl +205 -0
  535. package/lib/swipl/library/when.pl +263 -0
  536. package/lib/swipl/library/writef.pl +278 -0
  537. package/lib/swipl/library/www_browser.pl +251 -0
  538. package/lib/swipl/library/yall.pl +574 -0
  539. package/lib/swipl/library/zip.pl +211 -0
  540. package/lib/swipl/swipl.home +1 -0
  541. package/lib/vendor/libcrypto.so.3 +0 -0
  542. package/lib/vendor/libpcre2-8.so.0 +0 -0
  543. package/lib/vendor/libssl.so.3 +0 -0
  544. package/lib/vendor/libz.so.1 +0 -0
  545. package/licenses/OpenSSL-LICENSE.txt +177 -0
  546. package/licenses/PCRE2-COPYING +5 -0
  547. package/licenses/README.md +12 -0
  548. package/licenses/SWI-Prolog-LICENSE +41 -0
  549. package/licenses/zlib-LICENSE +22 -0
  550. package/package.json +27 -0
@@ -0,0 +1,461 @@
1
+ /* Part of SWI-Prolog
2
+
3
+ Author: Jan Wielemaker, Michiel Hildebrand
4
+ E-mail: J.Wielemaker@uva.nl
5
+ WWW: http://www.swi-prolog.org
6
+ Copyright (c) 2010-2025, University of Amsterdam
7
+ VU University Amsterdam
8
+ SWI-Prolog Solutions b.v.
9
+ All rights reserved.
10
+
11
+ Redistribution and use in source and binary forms, with or without
12
+ modification, are permitted provided that the following conditions
13
+ are met:
14
+
15
+ 1. Redistributions of source code must retain the above copyright
16
+ notice, this list of conditions and the following disclaimer.
17
+
18
+ 2. Redistributions in binary form must reproduce the above copyright
19
+ notice, this list of conditions and the following disclaimer in
20
+ the documentation and/or other materials provided with the
21
+ distribution.
22
+
23
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
26
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
27
+ COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
28
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
29
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
33
+ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34
+ POSSIBILITY OF SUCH DAMAGE.
35
+ */
36
+
37
+ :- module(javascript,
38
+ [ js_script//1, % +Content
39
+
40
+ js_call//1, % +Function(Arg..)
41
+ js_new//2, % +Id, +Function(+Args)
42
+ js_expression//1, % +Expression
43
+ js_arg_list//1, % +ListOfExpressions
44
+ js_arg//1, % +Arg
45
+ js_args//1, % +Args
46
+
47
+ javascript/4 % Quasi Quotation handler
48
+ ]).
49
+
50
+ :- use_module(library(http/html_write)).
51
+ :- use_module(library(json)).
52
+ :- use_module(library(apply)).
53
+ :- use_module(library(error)).
54
+ :- use_module(library(lists)).
55
+ :- use_module(library(debug)).
56
+ :- use_module(library(quasi_quotations)).
57
+ :- use_module(library(dcg/basics)).
58
+ :- use_module(library(json_grammar)).
59
+
60
+ :- html_meta
61
+ js_script(html, ?, ?).
62
+
63
+ :- quasi_quotation_syntax(javascript).
64
+
65
+ /** <module> Utilities for including JavaScript
66
+
67
+ This library is a supplement to library(http/html_write) for producing
68
+ JavaScript fragments. Its main role is to be able to call JavaScript
69
+ functions with valid arguments constructed from Prolog data. For
70
+ example, suppose you want to call a JavaScript functions to process a
71
+ list of names represented as Prolog atoms. This can be done using the
72
+ call below, while without this library you would have to be careful to
73
+ properly escape special characters.
74
+
75
+ ==
76
+ numbers_script(Names) -->
77
+ html(script(type('text/javascript'),
78
+ [ \js_call('ProcessNumbers'(Names)
79
+ ]),
80
+ ==
81
+
82
+ The accepted arguments are described with js_expression//1.
83
+ */
84
+
85
+ %! js_script(+Content)// is det.
86
+ %
87
+ % Generate a JavaScript =script= element with the given content.
88
+
89
+ js_script(Content) -->
90
+ html(script(type('text/javascript'),
91
+ Content)).
92
+
93
+
94
+ /*******************************
95
+ * QUASI QUOTATION *
96
+ *******************************/
97
+
98
+ %! javascript(+Content, +Vars, +VarDict, -DOM) is det.
99
+ %
100
+ % Quasi quotation parser for JavaScript that allows for embedding
101
+ % Prolog variables to substitude _identifiers_ in the JavaScript
102
+ % snippet. Parameterizing a JavaScript string is achieved using
103
+ % the JavaScript `+` operator, which results in concatenation at
104
+ % the client side.
105
+ %
106
+ % ==
107
+ % ...,
108
+ % js_script({|javascript(Id, Config)||
109
+ % $(document).ready(function() {
110
+ % $("#"+Id).tagit(Config);
111
+ % });
112
+ % |}),
113
+ % ...
114
+ % ==
115
+ %
116
+ % The current implementation tokenizes the JavaScript input and
117
+ % yields syntax errors on unterminated comments, strings, etc. No
118
+ % further parsing is implemented, which makes it possible to
119
+ % produce syntactically incorrect and partial JavaScript. Future
120
+ % versions are likely to include a full parser, generating syntax
121
+ % errors.
122
+ %
123
+ % The parser produces a term `\List`, which is suitable for
124
+ % js_script//1 and html//1. Embedded variables are mapped to
125
+ % `\js_expression(Var)`, while the remaining text is mapped to
126
+ % atoms.
127
+ %
128
+ % @tbd Implement a full JavaScript parser. Users should _not_
129
+ % rely on the ability to generate partial JavaScript
130
+ % snippets.
131
+
132
+ javascript(Content, Vars, Dict, \Parts) :-
133
+ include(qq_var(Vars), Dict, QQDict),
134
+ phrase_from_quasi_quotation(
135
+ js(QQDict, Parts),
136
+ Content).
137
+
138
+ qq_var(Vars, _=Var) :-
139
+ member(V, Vars),
140
+ V == Var,
141
+ !.
142
+
143
+ js(Dict, [Pre, Subst|More]) -->
144
+ here(Here0),
145
+ js_tokens(_),
146
+ here(Here1),
147
+ json_token(identifier(Name)),
148
+ { memberchk(Name=Var, Dict),
149
+ !,
150
+ Subst = \js_expression(Var),
151
+ diff_to_atom(Here0, Here1, Pre)
152
+ },
153
+ js(Dict, More).
154
+ js(_, [Last]) -->
155
+ string(Codes),
156
+ \+ [_],
157
+ !,
158
+ { atom_codes(Last, Codes) }.
159
+
160
+ js_tokens([]) --> [].
161
+ js_tokens([H|T]) -->
162
+ json_token(H),
163
+ js_tokens(T).
164
+
165
+
166
+ % diff_to_atom(+Start, +End, -Atom)
167
+ %
168
+ % True when Atom is an atom that represents the characters between
169
+ % Start and End, where End must be in the tail of the list Start.
170
+
171
+ diff_to_atom(Start, End, Atom) :-
172
+ diff_list(Start, End, List),
173
+ atom_codes(Atom, List).
174
+
175
+ diff_list(Start, End, List) :-
176
+ Start == End,
177
+ !,
178
+ List = [].
179
+ diff_list([H|Start], End, [H|List]) :-
180
+ diff_list(Start, End, List).
181
+
182
+ here(Here, Here, Here).
183
+
184
+
185
+ /*******************************
186
+ * PROLOG --> JAVASCRIPT *
187
+ *******************************/
188
+
189
+ %! js_call(+Term)// is det.
190
+ %
191
+ % Emit a call to a Javascript function. The Prolog functor is the
192
+ % name of the function. The arguments are converted from Prolog to
193
+ % JavaScript using js_arg_list//1. Please not that Prolog functors can
194
+ % be quoted atom and thus the following is legal:
195
+ %
196
+ % ==
197
+ % ...
198
+ % html(script(type('text/javascript'),
199
+ % [ \js_call('x.y.z'(hello, 42))
200
+ % ]),
201
+ % ==
202
+
203
+ js_call(Term) -->
204
+ { Term =.. [Function|Args] },
205
+ html(Function), js_arg_list(Args), [';\n'].
206
+
207
+
208
+ %! js_new(+Id, +Term)// is det.
209
+ %
210
+ % Emit a call to a Javascript object declaration. This is the same
211
+ % as:
212
+ %
213
+ % ==
214
+ % ['var ', Id, ' = new ', \js_call(Term)]
215
+ % ==
216
+
217
+
218
+ js_new(Id, Term) -->
219
+ { Term =.. [Function|Args] },
220
+ html(['var ', Id, ' = new ', Function]), js_arg_list(Args), [';\n'].
221
+
222
+ %! js_arg_list(+Expressions:list)// is det.
223
+ %
224
+ % Write javascript (function) arguments. This writes "(", Arg,
225
+ % ..., ")". See js_expression//1 for valid argument values.
226
+
227
+
228
+ js_arg_list(Args) -->
229
+ ['('], js_args(Args), [')'].
230
+
231
+ js_args([]) -->
232
+ [].
233
+ js_args([H|T]) -->
234
+ js_expression(H),
235
+ ( { T == [] }
236
+ -> []
237
+ ; html(', '),
238
+ js_args(T)
239
+ ).
240
+
241
+ %! js_expression(+Expression)// is det.
242
+ %
243
+ % Emit a single JSON argument. Expression is one of:
244
+ %
245
+ % $ Variable :
246
+ % Emitted as Javascript =null=
247
+ % $ List :
248
+ % Produces a Javascript list, where each element is processed
249
+ % by this library.
250
+ % $ object(Attributes) :
251
+ % Where Attributes is a Key-Value list where each pair can be
252
+ % written as Key-Value, Key=Value or Key(Value), accommodating
253
+ % all common constructs for this used in Prolog.<
254
+ % $ { K:V, ... }
255
+ % Same as object(Attributes), providing a more JavaScript-like
256
+ % syntax. This may be useful if the object appears literally
257
+ % in the source-code, but is generally less friendly to produce
258
+ % as a result from a computation.
259
+ % $ Dict :
260
+ % Emit a dict as a JSON object using json_write_dict/3.
261
+ % $ json(Term) :
262
+ % Emits a term using json_write/3.
263
+ % $ @(Atom) :
264
+ % Emits these constants without quotes. Normally used for the
265
+ % symbols =true=, =false= and =null=, but can also be use for
266
+ % emitting JavaScript symbols (i.e. function- or variable
267
+ % names).
268
+ % $ Number :
269
+ % Emitted literally
270
+ % $ symbol(Atom) :
271
+ % Synonym for @(Atom). Deprecated.
272
+ % $ Atom or String :
273
+ % Emitted as quoted JavaScript string.
274
+
275
+ js_expression(Expr) -->
276
+ js_arg(Expr),
277
+ !.
278
+ js_expression(Expr) -->
279
+ { type_error(js(expression), Expr) }.
280
+
281
+ %! js_arg(+Expression)// is semidet.
282
+ %
283
+ % Same as js_expression//1, but fails if Expression is invalid,
284
+ % where js_expression//1 raises an error.
285
+ %
286
+ % @deprecated New code should use js_expression//1.
287
+
288
+ js_arg(H) -->
289
+ { var(H) },
290
+ !,
291
+ [null].
292
+ js_arg(object(H)) -->
293
+ { is_list(H) },
294
+ !,
295
+ html([ '{', \js_kv_list(H), '}' ]).
296
+ js_arg({}(Attrs)) -->
297
+ !,
298
+ html([ '{', \js_kv_cslist(Attrs), '}' ]).
299
+ js_arg(@(Id)) --> js_identifier(Id).
300
+ js_arg(symbol(Id)) --> js_identifier(Id).
301
+ js_arg(json(Term)) -->
302
+ { json_to_string(json(Term), String),
303
+ debug(json_arg, '~w~n', String)
304
+ },
305
+ [ String ].
306
+ js_arg(Dict) -->
307
+ { is_dict(Dict),
308
+ !,
309
+ with_output_to(string(String),
310
+ json_write_dict(current_output, Dict, [width(0)]))
311
+ },
312
+ [ String ].
313
+ js_arg(H) -->
314
+ { is_list(H) },
315
+ !,
316
+ html([ '[', \js_args(H), ']' ]).
317
+ js_arg(H) -->
318
+ { number(H) },
319
+ !,
320
+ [H].
321
+ js_arg(H) -->
322
+ { atomic(H),
323
+ !,
324
+ js_quoted_string(H, Q)
325
+ },
326
+ [ '"', Q, '"'
327
+ ].
328
+
329
+ js_kv_list([]) --> [].
330
+ js_kv_list([H|T]) -->
331
+ ( js_kv(H)
332
+ -> ( { T == [] }
333
+ -> []
334
+ ; html(', '),
335
+ js_kv_list(T)
336
+ )
337
+ ; { type_error(javascript_key_value, H) }
338
+ ).
339
+
340
+ js_kv(Key:Value) -->
341
+ !,
342
+ js_key(Key), [:], js_expression(Value).
343
+ js_kv(Key-Value) -->
344
+ !,
345
+ js_key(Key), [:], js_expression(Value).
346
+ js_kv(Key=Value) -->
347
+ !,
348
+ js_key(Key), [:], js_expression(Value).
349
+ js_kv(Term) -->
350
+ { compound(Term),
351
+ Term =.. [Key,Value]
352
+ },
353
+ !,
354
+ js_key(Key), [:], js_expression(Value).
355
+
356
+ js_key(Key) -->
357
+ ( { must_be(atom, Key),
358
+ js_identifier(Key)
359
+ }
360
+ -> [Key]
361
+ ; { js_quoted_string(Key, QKey) },
362
+ html(['\'', QKey, '\''])
363
+ ).
364
+
365
+ js_kv_cslist((A,B)) -->
366
+ !,
367
+ js_kv(A),
368
+ html(', '),
369
+ js_kv_cslist(B).
370
+ js_kv_cslist(A) -->
371
+ js_kv(A).
372
+
373
+ %! js_quoted_string(+Raw, -Quoted)
374
+ %
375
+ % Quote text for use in JavaScript. Quoted does _not_ include the
376
+ % leading and trailing quotes.
377
+ %
378
+ % @tbd Join with json stuff.
379
+
380
+ js_quoted_string(Raw, Quoted) :-
381
+ atom_codes(Raw, Codes),
382
+ phrase(js_quote_codes(Codes), QuotedCodes),
383
+ atom_codes(Quoted, QuotedCodes).
384
+
385
+ js_quote_codes([]) -->
386
+ [].
387
+ js_quote_codes([0'\r,0'\n|T]) -->
388
+ !,
389
+ "\\n",
390
+ js_quote_codes(T).
391
+ js_quote_codes([0'<,0'/|T]) --> % Avoid XSS scripting hacks
392
+ !,
393
+ "<\\/",
394
+ js_quote_codes(T).
395
+ js_quote_codes([H|T]) -->
396
+ js_quote_code(H),
397
+ js_quote_codes(T).
398
+
399
+ js_quote_code(0'') -->
400
+ !,
401
+ "\\'".
402
+ js_quote_code(0'") -->
403
+ !,
404
+ "\\\"".
405
+ js_quote_code(0'\\) -->
406
+ !,
407
+ "\\\\".
408
+ js_quote_code(0'\n) -->
409
+ !,
410
+ "\\n".
411
+ js_quote_code(0'\r) -->
412
+ !,
413
+ "\\r".
414
+ js_quote_code(0'\t) -->
415
+ !,
416
+ "\\t".
417
+ js_quote_code(C) -->
418
+ [C].
419
+
420
+ %! js_identifier(+Id:atom)// is det.
421
+ %
422
+ % Emit an identifier if it is a valid one
423
+
424
+ js_identifier(Id) -->
425
+ { must_be(atom, Id),
426
+ js_identifier(Id)
427
+ },
428
+ !,
429
+ [ Id ].
430
+ js_identifier(Id) -->
431
+ { domain_error(js(identifier), Id)
432
+ }.
433
+
434
+ %! js_identifier(+Id:atom) is semidet.
435
+ %
436
+ % True if Id is a valid identifier. In traditional JavaScript,
437
+ % this means it starts with [$_:letter:] and is followed by
438
+ % [$_:letter:digit:]
439
+
440
+ js_identifier(Id) :-
441
+ sub_atom(Id, 0, 1, _, First),
442
+ char_type(First, csymf),
443
+ forall(sub_atom(Id, _, 1, _, Char), char_type(Char, csym)).
444
+
445
+
446
+ %! json_to_string(+JSONTerm, -String)
447
+ %
448
+ % Write JSONTerm to String.
449
+
450
+ json_to_string(JSON, String) :-
451
+ with_output_to(string(String),
452
+ json_write(current_output,JSON,[width(0)])).
453
+
454
+
455
+ /*******************************
456
+ * SANDBOX *
457
+ *******************************/
458
+
459
+ :- multifile sandbox:safe_primitive/1.
460
+
461
+ sandbox:safe_primitive(javascript:javascript(_,_,_,_)).
@@ -0,0 +1,224 @@
1
+ /* Part of SWI-Prolog
2
+
3
+ Author: Jan Wielemaker
4
+ E-mail: J.Wielemaker@vu.nl
5
+ WWW: http://www.swi-prolog.org
6
+ Copyright (c) 2002-2020, University of Amsterdam
7
+ VU University Amsterdam
8
+ All rights reserved.
9
+
10
+ Redistribution and use in source and binary forms, with or without
11
+ modification, are permitted provided that the following conditions
12
+ are met:
13
+
14
+ 1. Redistributions of source code must retain the above copyright
15
+ notice, this list of conditions and the following disclaimer.
16
+
17
+ 2. Redistributions in binary form must reproduce the above copyright
18
+ notice, this list of conditions and the following disclaimer in
19
+ the documentation and/or other materials provided with the
20
+ distribution.
21
+
22
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26
+ COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
32
+ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33
+ POSSIBILITY OF SUCH DAMAGE.
34
+ */
35
+
36
+ :- module(mime_pack,
37
+ [ mime_pack/3 % +Input, +Stream, ?Boundary
38
+ ]).
39
+ :- autoload(html_write,[print_html/2]).
40
+ :- autoload(mimetype,[file_mime_type/2]).
41
+ :- autoload(library(error),[instantiation_error/1]).
42
+ :- autoload(library(lists),[select/3]).
43
+
44
+ /** <module> Create a MIME message
45
+
46
+ Simple and partial implementation of MIME encoding. MIME is covered by
47
+ RFC 2045. This library is used by e.g., http_post_data/3 when using the
48
+ form_data(+ListOfData) input specification.
49
+
50
+ MIME decoding is now arranged through library(mime) from the clib
51
+ package, based on the external librfc2045 library. Most likely the
52
+ functionality of this package will be moved to the same library someday.
53
+ Packing however is a lot simpler then parsing.
54
+ */
55
+
56
+ %! mime_pack(+Inputs, +Out:stream, ?Boundary) is det.
57
+ %
58
+ % Pack a number of inputs into a MIME package using a specified or
59
+ % generated boundary. The generated boundary consists of the
60
+ % current time in milliseconds since the epoch and 10 random
61
+ % hexadecimal numbers. Inputs is a list of _documents_ that is
62
+ % added to the mime message. Each element is one of:
63
+ %
64
+ % * Name = Value
65
+ % Name the document. This emits a header of the form below. The
66
+ % =filename= is present if Value is of the form file(File).
67
+ % Value may be any of remaining value specifications.
68
+ %
69
+ % ==
70
+ % Content-Disposition: form-data; name="Name"[; filename="<File>"
71
+ % ==
72
+ %
73
+ % * html(Tokens)
74
+ % Tokens is a list of HTML tokens as produced by html//1. The
75
+ % token list is emitted using print_html/1.
76
+ %
77
+ % * file(File)
78
+ % Emit the contents of File. The =|Content-type|= is derived
79
+ % from the File using file_mime_type/2. If the content-type
80
+ % is =|text/_|=, the file data is copied in text mode, which
81
+ % implies that it is read in the default encoding of the system
82
+ % and written using the encoding of the Out stream. Otherwise
83
+ % the file data is copied binary.
84
+ %
85
+ % * stream(In, Len)
86
+ % Content is the next Len units from In. Data is copied using
87
+ % copy_stream_data/3. Units is bytes for binary streams and
88
+ % characters codes for text streams.
89
+ %
90
+ % * stream(In)
91
+ % Content of the stream In, copied using copy_stream_data/2.
92
+ % This is often used with memory files (see new_memory_file/1).
93
+ %
94
+ % * mime(Attributes, Value, [])
95
+ % Create a MIME header from Attributes and add Value, which can
96
+ % be any of remaining values of this list. Attributes may
97
+ % contain type(ContentType) and/or character_set(CharSet). This
98
+ % can be used to give a content-type to values that otherwise
99
+ % do not have a content-type. For example:
100
+ %
101
+ % ==
102
+ % mime([type(text/html)], '<b>Hello World</b>', [])
103
+ % ==
104
+ %
105
+ % * mime([], '', Parts)
106
+ % Creates a nested multipart MIME message. Parts is passed
107
+ % as Inputs to a recursive call to mime_pack/2.
108
+ %
109
+ % * Atomic
110
+ % Atomic values are passed to write/1. This embeds simple atoms
111
+ % and numbers.
112
+ %
113
+ % @param Out is a stream opened for writing. Typically, it should
114
+ % be opened in text mode using UTF-8 encoding.
115
+ %
116
+ % @bug Does not validate that the boundary does not appear in
117
+ % any of the input documents.
118
+
119
+ mime_pack(Inputs, OutputStream, Boundary) :-
120
+ make_boundary(Inputs, Boundary),
121
+ pack_list(Inputs, OutputStream, Boundary).
122
+
123
+ pack_list([], Out, Boundary) :-
124
+ format(Out, '--~w--\r\n', [Boundary]).
125
+ pack_list([H|T], Out, Boundary) :-
126
+ format(Out, '--~w\r\n', [Boundary]),
127
+ pack(H, Out),
128
+ format(Out, '\r\n', []),
129
+ pack_list(T, Out, Boundary).
130
+
131
+ pack(X, _Out) :-
132
+ var(X),
133
+ !,
134
+ instantiation_error(X).
135
+ pack(Name=Value, Out) :-
136
+ !,
137
+ ( Value = file(FileName)
138
+ -> format(Out, 'Content-Disposition: form-data; name="~w"; filename="~w"\r\n',
139
+ [Name, FileName])
140
+ ; format(Out, 'Content-Disposition: form-data; name="~w"\r\n', [Name])
141
+ ),
142
+ pack(Value, Out).
143
+ pack(html(HTML), Out) :-
144
+ !,
145
+ format(Out, 'Content-Type: text/html\r\n\r\n', []),
146
+ print_html(Out, HTML).
147
+ pack(file(File), Out) :-
148
+ !,
149
+ ( file_mime_type(File, Type)
150
+ -> true
151
+ ; Type = text/plain
152
+ ),
153
+ format(Out, 'Content-Type: ~w\r\n\r\n', [Type]),
154
+ ( Type = text/_
155
+ -> setup_call_cleanup(
156
+ open(File, read, In),
157
+ copy_stream_data(In, Out),
158
+ close(In))
159
+ ; stream_property(Out, encoding(OldEncoding)),
160
+ setup_call_cleanup(
161
+ set_stream(Out, encoding(octet)),
162
+ setup_call_cleanup(
163
+ open(File, read, In, [type(binary)]),
164
+ copy_stream_data(In, Out),
165
+ close(In)),
166
+ set_stream(Out, encoding(OldEncoding)))
167
+ ).
168
+ pack(stream(In, Len), Out) :-
169
+ !,
170
+ format(Out, '\r\n', []),
171
+ copy_stream_data(In, Out, Len).
172
+ pack(stream(In), Out) :-
173
+ !,
174
+ format(Out, '\r\n', []),
175
+ copy_stream_data(In, Out).
176
+ pack(mime(Atts, Data, []), Out) :- % mime_parse compatibility
177
+ !,
178
+ write_mime_attributes(Atts, Out),
179
+ pack(Data, Out).
180
+ pack(mime(_Atts, '', Parts), Out) :-
181
+ make_boundary(Parts, Boundary),
182
+ format('Content-type: multipart/mixed; boundary=~w\r\n\r\n',
183
+ [Boundary]),
184
+ mime_pack(Parts, Out, Boundary).
185
+ pack(Atom, Out) :-
186
+ atomic(Atom),
187
+ !,
188
+ format(Out, '\r\n', []),
189
+ write(Out, Atom).
190
+ pack(Value, _) :-
191
+ throw(error(type_error(mime_part, Value), _)).
192
+
193
+ write_mime_attributes([], _) :- !.
194
+ write_mime_attributes(Atts, Out) :-
195
+ select(type(Type), Atts, A1),
196
+ !,
197
+ ( select(character_set(CharSet), A1, A2)
198
+ -> format(Out, 'Content-type: ~w; charset=~w\r\n', [Type, CharSet]),
199
+ write_mime_attributes(A2, Out)
200
+ ; format(Out, 'Content-type: ~w\r\n', [Type]),
201
+ write_mime_attributes(A1, Out)
202
+ ).
203
+ write_mime_attributes([_|T], Out) :-
204
+ write_mime_attributes(T, Out).
205
+
206
+
207
+ %! make_boundary(+Inputs, ?Boundary) is det.
208
+ %
209
+ % Generate a boundary. This should check all input sources whether
210
+ % the boundary is enclosed.
211
+
212
+ make_boundary(_, Boundary) :-
213
+ atomic(Boundary),
214
+ !.
215
+ make_boundary(_, Boundary) :-
216
+ get_time(Now),
217
+ A is random(1<<16),
218
+ B is random(1<<16),
219
+ C is random(1<<16),
220
+ D is random(1<<16),
221
+ E is random(1<<16),
222
+ format(atom(Boundary), '------~3f~16r~16r~16r~16r~16r',
223
+ [Now, A, B, C, D, E]).
224
+