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,681 @@
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) 2007-2014, 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(json_convert,
37
+ [ prolog_to_json/2, % :Term, -JSON object
38
+ json_to_prolog/2, % +JSON, :Term
39
+ (json_object)/1, % +Definition
40
+ op(1150, fx, (json_object))
41
+ ]).
42
+ :- use_module(library(error)).
43
+ :- use_module(library(pairs)).
44
+ :- use_module(library(apply)).
45
+ :- use_module(json).
46
+
47
+ :- meta_predicate
48
+ prolog_to_json(:, -),
49
+ json_to_prolog(+, :).
50
+
51
+ :- public
52
+ clear_cache/0,
53
+ prolog_list_to_json/3, % +ListIn, -ListOut, +Module
54
+ prolog_to_json/3, % +In, -Out, +Module
55
+ prolog_bool_to_json/2. % +In, -Boolean
56
+
57
+ /** <module> Convert between JSON terms and Prolog application terms
58
+
59
+ The idea behind this module is to provide a flexible high-level mapping
60
+ between Prolog terms as you would like to see them in your application
61
+ and the standard representation of a JSON object as a Prolog term. For
62
+ example, an X-Y point may be represented in JSON as =|{"x":25,
63
+ "y":50}|=. Represented in Prolog this becomes json([x=25,y=50]), but
64
+ this is a pretty non-natural representation from the Prolog point of
65
+ view.
66
+
67
+ This module allows for defining records (just like library(record)) that
68
+ provide transparent two-way transformation between the two
69
+ representations.
70
+
71
+ ==
72
+ :- json_object
73
+ point(x:integer, y:integer).
74
+ ==
75
+
76
+ This declaration causes prolog_to_json/2 to translate the native Prolog
77
+ representation into a JSON Term:
78
+
79
+ ==
80
+ ?- prolog_to_json(point(25,50), X).
81
+
82
+ X = json([x=25, y=50])
83
+ ==
84
+
85
+ A json_object/1 declaration can define multiple objects separated by a
86
+ comma (,), similar to the dynamic/1 directive. Optionally, a declaration
87
+ can be qualified using a module. The conversion predicates
88
+ prolog_to_json/2 and json_to_prolog/2 first try a conversion associated
89
+ with the calling module. If not successful, they try conversions
90
+ associated with the module =user=.
91
+
92
+ JSON objects have no _type_. This can be solved by adding an extra field
93
+ to the JSON object, e.g. =|{"type":"point", "x":25, "y":50}|=. As Prolog
94
+ records are typed by their functor we need some notation to handle this
95
+ gracefully. This is achieved by adding +Fields to the declaration. I.e.
96
+
97
+ ==
98
+ :- json_object
99
+ point(x:integer, y:integer) + [type=point].
100
+ ==
101
+
102
+ Using this declaration, the conversion becomes:
103
+
104
+ ==
105
+ ?- prolog_to_json(point(25,50), X).
106
+
107
+ X = json([x=25, y=50, type=point])
108
+ ==
109
+
110
+ The predicate json_to_prolog/2 is often used after http_read_json/2 and
111
+ prolog_to_json/2 before reply_json/1. For now we consider them separate
112
+ predicates because the transformation may be too general, too slow or
113
+ not needed for dedicated applications. Using a separate step also
114
+ simplifies debugging this rather complicated process.
115
+
116
+ @tbd Ignore extra fields. Using a partial list of _extra_?
117
+ @tbd Consider a sensible default for handling JSON =null=. Conversion
118
+ to Prolog could translate @null into a variable if the desired type
119
+ is not =any=. Conversion to JSON could map variables to =null=,
120
+ though this may be unsafe. If the Prolog term is known to be
121
+ non-ground and JSON @null is a sensible mapping, we can also use
122
+ this simple snippet to deal with that fact.
123
+
124
+ ==
125
+ term_variables(Term, Vars),
126
+ maplist(=(@null), Vars).
127
+ ==
128
+ */
129
+
130
+ %! current_json_object(Term, Module, Fields)
131
+ %
132
+ % Multifile predicate computed from the json_object/1
133
+ % declarations. Term is the most general Prolog term representing
134
+ % the object. Module is the module in which the object is defined
135
+ % and Fields is a list of f(Name, Type, Default, Var), ordered by
136
+ % Name. Var is the corresponding variable in Term.
137
+
138
+ :- multifile
139
+ json_object_to_pairs/3, % Term, Module, Pairs
140
+ current_json_object/3. % Term, Module, Fields
141
+
142
+ %! json_object(+Declaration)
143
+ %
144
+ % Declare a JSON object. The declaration takes the same format as
145
+ % using in record/1 from library(record). E.g.
146
+ %
147
+ % ==
148
+ % ?- json_object
149
+ % point(x:int, y:int, z:int=0).
150
+ % ==
151
+ %
152
+ % The type arguments are either types as know to library(error) or
153
+ % functor names of other JSON objects. The constant =any=
154
+ % indicates an untyped argument. If this is a JSON term, it
155
+ % becomes subject to json_to_prolog/2. I.e., using the type
156
+ % list(any) causes the conversion to be executed on each element
157
+ % of the list.
158
+ %
159
+ % If a field has a default, the default is used if the field is
160
+ % not specified in the JSON object. Extending the record type
161
+ % definition, types can be of the form (Type1|Type2). The type
162
+ % =null= means that the field may _not_ be present.
163
+ %
164
+ % Conversion of JSON to Prolog applies if all non-defaulted
165
+ % arguments can be found in the JSON object. If multiple rules
166
+ % match, the term with the highest arity gets preference.
167
+
168
+ json_object(Declaration) :-
169
+ throw(error(context_error(nodirective, json_object(Declaration)), _)).
170
+
171
+
172
+ %! compile_json_objects(+Spec, -Clauses) is det.
173
+ %
174
+ % Compiles a :- json_object directive into Clauses. Clauses are of
175
+ % the form:
176
+ %
177
+ % ==
178
+ % json_object_to_pairs(Term, Module, Pairs) :-
179
+ % <type-checks on Term>,
180
+ % <make Pairs from Term>.
181
+ % ==
182
+
183
+ compile_json_objects(Spec, Clauses) :-
184
+ phrase(compile_objects(Spec), Clauses).
185
+
186
+ compile_objects(A) -->
187
+ { var(A),
188
+ !,
189
+ instantiation_error(A)
190
+ }.
191
+ compile_objects((A,B)) -->
192
+ !,
193
+ compile_objects(A),
194
+ compile_objects(B).
195
+ compile_objects(Term) -->
196
+ compile_object(Term).
197
+
198
+ compile_object(ObjectDef) -->
199
+ { prolog_load_context(module, CM),
200
+ strip_module(CM:ObjectDef, M, Def),
201
+ extra_defs(Def, Term, ExtraFields),
202
+ Term =.. [Constructor|Args],
203
+ defaults(Args, Defs, TypedArgs),
204
+ types(TypedArgs, Names, Types)
205
+ },
206
+ record_to_json_clause(Constructor, M, Types, Names, ExtraFields),
207
+ current_clause(Constructor, M, Types, Defs, Names, ExtraFields),
208
+ [ (:- json_convert:clear_cache) ].
209
+
210
+ extra_defs(Term+Extra0, Term, Extra) :-
211
+ !,
212
+ must_be(list, Extra0),
213
+ maplist(canonical_pair, Extra0, Extra).
214
+ extra_defs(Term, Term, []).
215
+
216
+
217
+ canonical_pair(Var, _) :-
218
+ var(Var),
219
+ !,
220
+ instantiation_error(Var).
221
+ canonical_pair(Name=Value, Name=Value) :-
222
+ !,
223
+ must_be(atom, Name).
224
+ canonical_pair(Name-Value, Name=Value) :-
225
+ !,
226
+ must_be(atom, Name).
227
+ canonical_pair(NameValue, Name=Value) :-
228
+ NameValue =.. [Name,Value],
229
+ !.
230
+ canonical_pair(Pair, _) :-
231
+ type_error(pair, Pair).
232
+
233
+
234
+ %! record_to_json_clause(+Constructor, +Module, +Type, +Names)
235
+ %
236
+ % Create a clause translating the record definition into a pairs
237
+ % representation.
238
+
239
+ record_to_json_clause(Constructor, Module, Types, Names, Extra) -->
240
+ { type_checks(Types, VarsHead, VarsBody, Body0, Module),
241
+ clean_body(Body0, Body),
242
+ Term =.. [Constructor|VarsHead],
243
+ make_pairs(Names, VarsBody, Pairs, Extra),
244
+ Head =.. [json_object_to_pairs,Term,Module,json(Pairs)]
245
+ },
246
+ [ (json_convert:(Head :- Body)) ].
247
+
248
+
249
+ %! type_checks(+Types, -VarsIn, -VarsOut, -Goal, +Module) is det.
250
+ %
251
+ % Goal is a body-term that validates Vars satisfy Types. In
252
+ % addition to the types accepted by must_be/2, it accepts =any=
253
+ % and Name/Arity. The latter demands a json_object term of the
254
+ % given Name and Arity.
255
+ %
256
+ % @tbd Compile list(Type) specification. Currently Type is
257
+ % handled like =any=
258
+
259
+ type_checks([], [], [], true, _).
260
+ type_checks([Type|T], [IV|IVars], [OV|OVars], (Goal, Body), M) :-
261
+ !,
262
+ type_check(Type, IV, OV, M, Goal),
263
+ type_checks(T, IVars, OVars, Body, M).
264
+
265
+ type_check(any, IV, OV, M, prolog_to_json(IV, OV, M)) :- !.
266
+ type_check(Name/Arity, IV, OV, M, prolog_to_json(IV, OV, M)) :-
267
+ !,
268
+ functor(IV, Name, Arity).
269
+ type_check(boolean, IV, OV, _, prolog_bool_to_json(IV, OV)) :- !.
270
+ type_check(list, IV, OV, M, prolog_list_to_json(IV, OV, M)) :- !.
271
+ type_check(list(any), IV, OV, M, prolog_list_to_json(IV, OV, M)) :- !.
272
+ type_check(list(_Type), IV, OV, M, prolog_list_to_json(IV, OV, M)) :- !.
273
+ type_check(Type, V, V, _, Goal) :-
274
+ type_goal(Type, V, Goal).
275
+
276
+
277
+ %! prolog_bool_to_json(+Prolog, -JSON) is semidet.
278
+ %
279
+ % JSON is the JSON boolean for Prolog. It is a flexible the Prolog
280
+ % notation for truth-value, accepting one of =true=, =on= or =1=
281
+ % for @true and one of =false=, =fail=, =off= or =0= for @false.
282
+ %
283
+ % @error instantiation_error if Prolog is unbound.
284
+
285
+ prolog_bool_to_json(Var, _) :-
286
+ var(Var),
287
+ instantiation_error(Var).
288
+ prolog_bool_to_json(true, @(true)).
289
+ prolog_bool_to_json(false, @(false)).
290
+ prolog_bool_to_json(fail, @(false)).
291
+ prolog_bool_to_json(0, @(false)).
292
+ prolog_bool_to_json(on, @(true)).
293
+ prolog_bool_to_json(off, @(false)).
294
+ prolog_bool_to_json(1, @(false)).
295
+ prolog_bool_to_json(@(True), True) :-
296
+ prolog_bool_to_json(True, True).
297
+
298
+
299
+ %! type_goal(+Type, +Var, -BodyTerm) is det.
300
+ %
301
+ % Inline type checking calls.
302
+
303
+ type_goal(Type, Var, Body) :-
304
+ current_type(Type, Var, Body0),
305
+ primitive(Body0, Body),
306
+ !.
307
+ type_goal(Type, Var, is_of_type(Type, Var)).
308
+
309
+ primitive((A0,B0), (A,B)) :-
310
+ !,
311
+ primitive(A0, A),
312
+ primitive(B0, B).
313
+ primitive((A0;B0), (A,B)) :-
314
+ !,
315
+ primitive(A0, A),
316
+ primitive(B0, B).
317
+ primitive((A0->B0), (A,B)) :-
318
+ !,
319
+ primitive(A0, A),
320
+ primitive(B0, B).
321
+ primitive(_:G, G) :-
322
+ !,
323
+ predicate_property(system:G, built_in).
324
+ primitive(G, G) :-
325
+ predicate_property(system:G, built_in).
326
+
327
+ non_json_type(Type) :-
328
+ current_type(Type, _, _),
329
+ !.
330
+
331
+
332
+ %! clean_body(+BodyIn, -BodyOut) is det.
333
+ %
334
+ % Cleanup a body goal. Eliminate redundant =true= statements and
335
+ % perform partial evaluation on some commonly constructs that are
336
+ % generated from the has_type/2 clauses in library(error).
337
+
338
+ clean_body(Var, Var) :-
339
+ var(Var),
340
+ !.
341
+ clean_body((A0,B0), G) :-
342
+ !,
343
+ clean_body(A0, A),
344
+ clean_body(B0, B),
345
+ conj(A, B, G).
346
+ clean_body(ground(X), true) :- % Generated from checking extra fields.
347
+ ground(X),
348
+ !.
349
+ clean_body(memberchk(V, Values), true) :- % generated from oneof(List)
350
+ ground(V), ground(Values),
351
+ memberchk(V, Values),
352
+ !.
353
+ clean_body((integer(Low) -> If ; Then), Goal) :- % generated from between(Low,High)
354
+ number(Low),
355
+ !,
356
+ ( integer(Low)
357
+ -> Goal = If
358
+ ; Goal = Then
359
+ ).
360
+ clean_body((A->true;fail), A) :- !. % nullable fields.
361
+ clean_body((fail->_;A), A) :- !.
362
+ clean_body(A, A).
363
+
364
+ conj(T, A, A) :- T == true, !.
365
+ conj(A, T, A) :- T == true, !.
366
+ conj(A, B, (A,B)).
367
+
368
+ make_pairs([], [], L, L).
369
+ make_pairs([N|TN], [V|TV], [N=V|T], Tail) :-
370
+ make_pairs(TN, TV, T, Tail).
371
+
372
+ %! current_clause(+Constructor, +Module, +Types, +Defs, +Names, +Extra)
373
+ %
374
+ % Create the clause current_json_object/3.
375
+
376
+ current_clause(Constructor, Module, Types, Defs, Names, Extra) -->
377
+ { length(Types, Arity),
378
+ functor(Term, Constructor, Arity),
379
+ extra_fields(Extra, EF),
380
+ Term =.. [_|Vars],
381
+ mk_fields(Names, Types, Defs, Vars, Fields0, EF),
382
+ sort(Fields0, Fields),
383
+ Head =.. [current_json_object, Term, Module, Fields]
384
+ },
385
+ [ json_convert:Head ].
386
+
387
+ extra_fields([], []).
388
+ extra_fields([Name=Value|T0], [f(Name, oneof([Value]), _, Value)|T]) :-
389
+ extra_fields(T0, T).
390
+
391
+ mk_fields([], [], [], [], Fields, Fields).
392
+ mk_fields([Name|TN], [Type|TT], [Def|DT], [Var|VT],
393
+ [f(Name, Type, Def, Var)|T], Tail) :-
394
+ mk_fields(TN, TT, DT, VT, T, Tail).
395
+
396
+
397
+ /* The code below is copied from library(record) */
398
+
399
+ %! defaults(+ArgsSpecs, -Defaults, -Args)
400
+ %
401
+ % Strip the default specification from the argument specification.
402
+
403
+ defaults([], [], []).
404
+ defaults([Arg=Default|T0], [Default|TD], [Arg|TA]) :-
405
+ !,
406
+ defaults(T0, TD, TA).
407
+ defaults([Arg|T0], [NoDefault|TD], [Arg|TA]) :-
408
+ no_default(NoDefault),
409
+ defaults(T0, TD, TA).
410
+
411
+ no_default('$no-default$').
412
+
413
+ %! types(+ArgsSpecs, -Defaults, -Args)
414
+ %
415
+ % Strip the default specification from the argument specification.
416
+
417
+ types([], [], []).
418
+ types([Name:Type|T0], [Name|TN], [Type|TT]) :-
419
+ !,
420
+ must_be(atom, Name),
421
+ types(T0, TN, TT).
422
+ types([Name|T0], [Name|TN], [any|TT]) :-
423
+ must_be(atom, Name),
424
+ types(T0, TN, TT).
425
+
426
+
427
+ /*******************************
428
+ * PROLOG --> JSON *
429
+ *******************************/
430
+
431
+ %! prolog_to_json(:Term, -JSONObject) is det.
432
+ %
433
+ % Translate a Prolog application Term into a JSON object term.
434
+ % This transformation is based on :- json_object/1 declarations.
435
+ % If a json_object/1 declaration declares a field of type
436
+ % =boolean=, commonly used truth-values in Prolog are converted
437
+ % to JSON booleans. Boolean translation accepts one of =true=,
438
+ % =on=, =1=, @true, =false=, =fail=, =off= or =0=, @false.
439
+ %
440
+ % @error type_error(json_term, X)
441
+ % @error instantiation_error
442
+
443
+ prolog_to_json(Module:Term, JSON) :-
444
+ prolog_to_json(Term, JSON, Module).
445
+
446
+ prolog_to_json(Var, _, _) :-
447
+ var(Var),
448
+ !,
449
+ instantiation_error(Var).
450
+ prolog_to_json(Atomic, Atomic, _) :-
451
+ atomic(Atomic),
452
+ !.
453
+ prolog_to_json(List, JSON, Module) :-
454
+ is_list(List),
455
+ !,
456
+ prolog_list_to_json(List, JSON, Module).
457
+ prolog_to_json(Record, JSON, Module) :-
458
+ record_to_pairs(Record, JSON, Module),
459
+ !.
460
+ prolog_to_json(Term, Term, _) :-
461
+ is_json_term(Term),
462
+ !.
463
+ prolog_to_json(Term, _, _) :-
464
+ type_error(json_term, Term).
465
+
466
+ record_to_pairs(T, _, _) :-
467
+ var(T),
468
+ !,
469
+ instantiation_error(T).
470
+ record_to_pairs(T, JSON, M) :-
471
+ object_module(M, Module),
472
+ json_object_to_pairs(T, Module, JSON),
473
+ !.
474
+
475
+ object_module(user, user) :- !.
476
+ object_module(M, M).
477
+ object_module(_, user).
478
+
479
+ prolog_list_to_json([], [], _).
480
+ prolog_list_to_json([H0|T0], [H|T], M) :-
481
+ prolog_to_json(H0, H, M),
482
+ prolog_list_to_json(T0, T, M).
483
+
484
+
485
+ /*******************************
486
+ * JSON --> PROLOG *
487
+ *******************************/
488
+
489
+ :- dynamic
490
+ json_to_prolog_rule/3, % Module, Pairs, Term
491
+ created_rules_for_pairs/2. % Module, Pairs
492
+
493
+ clear_cache :-
494
+ retractall(json_to_prolog_rule(_,_,_)),
495
+ retractall(created_rules_for_pairs(_,_)).
496
+
497
+ :- clear_cache.
498
+
499
+ %! json_to_prolog(+JSON, -Term) is det.
500
+ %
501
+ % Translate a JSON term into an application term. This
502
+ % transformation is based on :- json_object/1 declarations. An
503
+ % efficient transformation is non-trivial, but we rely on the
504
+ % assumption that, although the order of fields in JSON terms is
505
+ % irrelevant and can therefore vary a lot, practical applications
506
+ % will normally generate the JSON objects in a consistent order.
507
+ %
508
+ % If a field in a json_object is declared of type =boolean=, @true
509
+ % and @false are translated to =true= or =false=, the most
510
+ % commonly used Prolog representation for truth-values.
511
+
512
+ json_to_prolog(JSON, Module:Term) :-
513
+ json_to_prolog(JSON, Term, Module).
514
+
515
+ json_to_prolog(json(Pairs), Term, Module) :-
516
+ !,
517
+ ( pairs_to_term(Pairs, Term, Module)
518
+ -> true
519
+ ; json_pairs_to_prolog(Pairs, Prolog, Module),
520
+ Term = json(Prolog)
521
+ ).
522
+ json_to_prolog(List, Prolog, Module) :-
523
+ is_list(List),
524
+ !,
525
+ json_list_to_prolog(List, Prolog, Module).
526
+ json_to_prolog(@(Special), @(Special), _) :- !.
527
+ json_to_prolog(Atomic, Atomic, _).
528
+
529
+ json_pairs_to_prolog([], [], _).
530
+ json_pairs_to_prolog([Name=JSONValue|T0], [Name=PrologValue|T], Module) :-
531
+ json_to_prolog(JSONValue, PrologValue, Module),
532
+ json_pairs_to_prolog(T0, T, Module).
533
+
534
+ json_list_to_prolog([], [], _).
535
+ json_list_to_prolog([JSONValue|T0], [PrologValue|T], Module) :-
536
+ json_to_prolog(JSONValue, PrologValue, Module),
537
+ json_list_to_prolog(T0, T, Module).
538
+
539
+
540
+ %! pairs_to_term(+Pairs, ?Term, +Module) is semidet.
541
+ %
542
+ % Convert a Name=Value set into a Prolog application term based on
543
+ % json_object/1 declarations. If multiple rules can be created,
544
+ % make the one with the highest arity the preferred one.
545
+ %
546
+ % @tbd Ignore extra pairs if term is partially given?
547
+
548
+ pairs_to_term(Pairs, Term, Module) :-
549
+ object_module(Module, M),
550
+ ( json_to_prolog_rule(M, Pairs, Term)
551
+ -> !
552
+ ; created_rules_for_pairs(M, Pairs)
553
+ -> !, fail
554
+ ; pairs_args(Pairs, PairArgs),
555
+ sort(PairArgs, SortedPairArgs),
556
+ findall(Q-Rule,
557
+ ( create_rule(SortedPairArgs, Module, M, Term0, Body, Q),
558
+ Rule = (json_to_prolog_rule(M, PairArgs, Term0) :- Body)
559
+ ),
560
+ RulePairs),
561
+ keysort(RulePairs, ByQuality),
562
+ pairs_values(ByQuality, Rules),
563
+ maplist(asserta, Rules),
564
+ asserta(created_rules_for_pairs(M, PairArgs)),
565
+ json_to_prolog_rule(M, Pairs, Term), !
566
+ ).
567
+
568
+ pairs_args([], []).
569
+ pairs_args([Name=_Value|T0], [Name=_|T]) :-
570
+ pairs_args(T0, T).
571
+
572
+ %! create_rule(+PairArgs, +Module, -ObjectM, -Term, -Body,
573
+ %! -Quality) is det.
574
+ %
575
+ % Create a new rule for dealing with Pairs, a Name=Value list of a
576
+ % particular order. Here is an example rule:
577
+ %
578
+ % ==
579
+ % json_to_prolog_rule([x=X, y=Y], point(X,Y)) :-
580
+ % integer(X),
581
+ % integer(Y).
582
+ % ==
583
+ %
584
+ % @arg PairArgs is an ordered list of Name=Variable pairs
585
+ % @arg Module is the module requesting the conversion
586
+ % @arg ObjectM is the module where the object is defined
587
+ % @arg Term is the converted term (with variable arguments)
588
+ % @arg Body is a Prolog goal that validates the types and
589
+ % converts arguments.
590
+ % @arg Quality is a number that indicates the matching quality.
591
+ % Larger values are better. Max is 0. There is a penalty
592
+ % of 1 for applying a default value and a penalty of 2 for
593
+ % ignoring a value in the JSON term.
594
+
595
+ create_rule(PairArgs, Module, M, Term, Body, Quality) :-
596
+ current_json_object(Term, M, Fields),
597
+ match_fields(PairArgs, Fields, Body0, Module, 0, Quality),
598
+ clean_body(Body0, Body).
599
+
600
+ match_fields(Ignored, [], true, _, Q0, Q) :-
601
+ !,
602
+ length(Ignored, Len),
603
+ Q is Q0-2*Len.
604
+ match_fields([Name=JSON|TP], [f(Name, Type, _, Prolog)|TF], (Goal,Body),
605
+ M, Q0, Q) :-
606
+ !,
607
+ match_field(Type, JSON, Prolog, M, Goal),
608
+ match_fields(TP, TF, Body, M, Q0, Q).
609
+ match_fields([Name=JSON|TP], [f(OptName, Type, Def, Prolog)|TF], Body,
610
+ M, Q0, Q) :-
611
+ OptName @< Name,
612
+ !,
613
+ ( nullable(Type)
614
+ -> true
615
+ ; no_default(NoDef),
616
+ Def \== NoDef
617
+ -> Prolog = Def
618
+ ),
619
+ Q1 is Q0-1,
620
+ match_fields([Name=JSON|TP], TF, Body, M, Q1, Q).
621
+ match_fields([], [f(_OptName, Type, Def, Prolog)|TF], Body,
622
+ M, Q0, Q) :-
623
+ !,
624
+ ( nullable(Type)
625
+ -> true
626
+ ; no_default(NoDef),
627
+ Def \== NoDef
628
+ -> Prolog = Def
629
+ ),
630
+ Q1 is Q0-1,
631
+ match_fields([], TF, Body, M, Q1, Q).
632
+ match_fields([Name=_|TP], [F|TF], Body, M, Q0, Q) :-
633
+ arg(1, F, Next),
634
+ Name @< Next,
635
+ Q1 is Q0-2,
636
+ match_fields(TP, [F|TF], Body, M, Q1, Q).
637
+
638
+ nullable(null).
639
+ nullable((A|B)) :- ( nullable(A) -> true ; nullable(B) ).
640
+
641
+ match_field((A|B), JSON, Prolog, M, (BodyA->true;BodyB)) :-
642
+ !,
643
+ match_field(A, JSON, Prolog, M, BodyA),
644
+ match_field(B, JSON, Prolog, M, BodyB).
645
+ match_field(null, _, _, _, fail) :- !.
646
+ match_field(any, JSON, Prolog, M, json_to_prolog(JSON,Prolog,M)) :- !.
647
+ match_field(F/A, JSON, Prolog, M, json_to_prolog(JSON,Prolog,M)) :-
648
+ !,
649
+ functor(Prolog, F, A).
650
+ match_field(boolean, JSON, Prolog, _, json_bool_to_prolog(JSON, Prolog)) :- !.
651
+ match_field(list(Type), JSON, Prolog, M, json_list_to_prolog(JSON, Prolog, M)) :-
652
+ !,
653
+ ( Type = _Funcor/_Arity
654
+ -> true
655
+ ; non_json_type(Type)
656
+ -> true
657
+ ; current_json_object(Term, M, _Fields),
658
+ functor(Term, Type, _)
659
+ ).
660
+ match_field(list, JSON, Prolog, M, Goal) :-
661
+ !,
662
+ match_field(list(any), JSON, Prolog, M, Goal).
663
+ match_field(Type, Var, Var, _, Goal) :-
664
+ type_goal(Type, Var, Goal).
665
+
666
+ :- public json_bool_to_prolog/2.
667
+
668
+ json_bool_to_prolog(@(True), True).
669
+
670
+
671
+ /*******************************
672
+ * EXPANSION *
673
+ *******************************/
674
+
675
+ :- multifile
676
+ system:term_expansion/2.
677
+ :- dynamic
678
+ system:term_expansion/2.
679
+
680
+ system:term_expansion((:- json_object(Spec)), Clauses) :-
681
+ compile_json_objects(Spec, Clauses).