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,620 @@
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) 2009-2023, University of Amsterdam
7
+ VU University Amsterdam
8
+ CWI, Amsterdam
9
+ SWI-Prolog Solutions b.v.
10
+ All rights reserved.
11
+
12
+ Redistribution and use in source and binary forms, with or without
13
+ modification, are permitted provided that the following conditions
14
+ are met:
15
+
16
+ 1. Redistributions of source code must retain the above copyright
17
+ notice, this list of conditions and the following disclaimer.
18
+
19
+ 2. Redistributions in binary form must reproduce the above copyright
20
+ notice, this list of conditions and the following disclaimer in
21
+ the documentation and/or other materials provided with the
22
+ distribution.
23
+
24
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
27
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
28
+ COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
29
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
30
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
32
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
34
+ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35
+ POSSIBILITY OF SUCH DAMAGE.
36
+ */
37
+
38
+ :- module(xpath,
39
+ [ xpath/3, % +DOM, +Spec, -Value
40
+ xpath_chk/3, % +DOM, +Spec, -Value
41
+
42
+ op(400, fx, //),
43
+ op(400, fx, /),
44
+ op(200, fy, @)
45
+ ]).
46
+ :- use_module(library(record),[record/1, op(_,_,record)]).
47
+ :- use_module(library(debug),[assertion/1]).
48
+
49
+ :- autoload(library(error),[instantiation_error/1,must_be/2]).
50
+ :- autoload(library(lists),[member/2]).
51
+ :- autoload(library(sgml),[xsd_number_string/2]).
52
+
53
+ /** <module> Select nodes in an XML DOM
54
+
55
+ The library xpath.pl provides predicates to select nodes from an XML DOM
56
+ tree as produced by library(sgml) based on descriptions inspired by the
57
+ XPath language.
58
+
59
+ The predicate xpath/3 selects a sub-structure of the DOM
60
+ non-deterministically based on an XPath-like specification. Not all
61
+ selectors of XPath are implemented, but the ability to mix xpath/3 calls
62
+ with arbitrary Prolog code provides a powerful tool for extracting
63
+ information from XML parse-trees.
64
+
65
+ @see http://www.w3.org/TR/xpath
66
+ */
67
+
68
+ :- record
69
+ element(name, attributes, content).
70
+
71
+ %! xpath_chk(+DOM, +Spec, ?Content) is semidet.
72
+ %
73
+ % Semi-deterministic version of xpath/3.
74
+
75
+ xpath_chk(DOM, Spec, Content) :-
76
+ xpath(DOM, Spec, Content),
77
+ !.
78
+
79
+ %! xpath(+DOM, +Spec, ?Content) is nondet.
80
+ %
81
+ % Match an element in a DOM structure. The syntax is inspired by
82
+ % XPath, using () rather than [] to select inside an element.
83
+ % First we can construct paths using / and //:
84
+ %
85
+ % $ =|//|=Term :
86
+ % Select any node in the DOM matching term.
87
+ % $ =|/|=Term :
88
+ % Match the root against Term.
89
+ % $ Term :
90
+ % Select the immediate children of the root matching Term.
91
+ %
92
+ % The Terms above are of type _callable_. The functor specifies
93
+ % the element name. The element name '*' refers to any element.
94
+ % The name =self= refers to the top-element itself and is often
95
+ % used for processing matches of an earlier xpath/3 query. A term
96
+ % NS:Term refers to an XML name in the namespace NS. Optional
97
+ % arguments specify additional constraints and functions. The
98
+ % arguments are processed from left to right. Defined conditional
99
+ % argument values are:
100
+ %
101
+ % $ index(?Index) :
102
+ % True if the element is the Index-th child of its parent,
103
+ % where 1 denotes the first child. Index can be one of:
104
+ % $ `Var` :
105
+ % `Var` is unified with the index of the matched element.
106
+ % $ =last= :
107
+ % True for the last element.
108
+ % $ =last= - `IntExpr` :
109
+ % True for the last-minus-nth element. For example,
110
+ % `last-1` is the element directly preceding the last one.
111
+ % $ `IntExpr` :
112
+ % True for the element whose index equals `IntExpr`.
113
+ % $ Integer :
114
+ % The N-th element with the given name, with 1 denoting the
115
+ % first element. Same as index(Integer).
116
+ % $ =last= :
117
+ % The last element with the given name. Same as
118
+ % index(last).
119
+ % $ =last= - IntExpr :
120
+ % The IntExpr-th element before the last.
121
+ % Same as index(last-IntExpr).
122
+ %
123
+ % Defined function argument values are:
124
+ %
125
+ % $ =self= :
126
+ % Evaluate to the entire element
127
+ % $ =content= :
128
+ % Evaluate to the content of the element (a list)
129
+ % $ =text= :
130
+ % Evaluates to all text from the sub-tree as an atom
131
+ % $ `text(As)` :
132
+ % Evaluates to all text from the sub-tree according to
133
+ % `As`, which is either `atom` or `string`.
134
+ % $ =normalize_space= :
135
+ % As =text=, but uses normalize_space/2 to normalise
136
+ % white-space in the output
137
+ % $ =number= :
138
+ % Extract an integer or float from the value. Ignores
139
+ % leading and trailing white-space
140
+ % $ =|@|=Attribute :
141
+ % Evaluates to the value of the given attribute. Attribute
142
+ % can be a compound term. In this case the functor name
143
+ % denotes the attribute and arguments perform transformations
144
+ % on the attribute value. Defined transformations are:
145
+ %
146
+ % - number
147
+ % Translate the value into a number using
148
+ % xsd_number_string/2 from library(sgml).
149
+ % - integer
150
+ % As `number`, but subsequently transform the value
151
+ % into an integer using the round/1 function.
152
+ % - float
153
+ % As `number`, but subsequently transform the value
154
+ % into a float using the float/1 function.
155
+ % - atom
156
+ % Translate the value into a Prolog atom. Note that
157
+ % an atom is normally the default, so ``@href`` and
158
+ % ``@href(atom)`` are equivalent. The SGML parser
159
+ % can return attributes as strings using the
160
+ % attribute_value(string) option.
161
+ % - string
162
+ % Translate the value into a Prolog string.
163
+ % - lower
164
+ % Translate the value to lower case, preserving
165
+ % the type.
166
+ % - upper
167
+ % Translate the value to upper case, preserving
168
+ % the type.
169
+ %
170
+ % In addition, the argument-list can be _conditions_:
171
+ %
172
+ % $ Left = Right :
173
+ % Succeeds if the left-hand unifies with the right-hand.
174
+ % If the left-hand side is a function, this is evaluated.
175
+ % The right-hand side is _never_ evaluated, and thus the
176
+ % condition `content = content` defines that the content
177
+ % of the element is the atom `content`.
178
+ % The functions `lower_case` and `upper_case` can be applied
179
+ % to Right (see example below).
180
+ % $ contains(Haystack, Needle) :
181
+ % Succeeds if Needle is a sub-string of Haystack.
182
+ % $ XPath :
183
+ % Succeeds if XPath matches in the currently selected
184
+ % sub-DOM. For example, the following expression finds
185
+ % an =h3= element inside a =div= element, where the =div=
186
+ % element itself contains an =h2= child with a =strong=
187
+ % child.
188
+ %
189
+ % ==
190
+ % //div(h2/strong)/h3
191
+ % ==
192
+ %
193
+ % This is equivalent to the conjunction of XPath goals below.
194
+ %
195
+ % ==
196
+ % ...,
197
+ % xpath(DOM, //(div), Div),
198
+ % xpath(Div, h2/strong, _),
199
+ % xpath(Div, h3, Result)
200
+ % ==
201
+ %
202
+ % **Examples**:
203
+ %
204
+ % Match each table-row in DOM:
205
+ %
206
+ % ==
207
+ % xpath(DOM, //tr, TR)
208
+ % ==
209
+ %
210
+ % Match the last cell of each tablerow in DOM. This example
211
+ % illustrates that a result can be the input of subsequent xpath/3
212
+ % queries. Using multiple queries on the intermediate TR term
213
+ % guarantee that all results come from the same table-row:
214
+ %
215
+ % ==
216
+ % xpath(DOM, //tr, TR),
217
+ % xpath(TR, /td(last), TD)
218
+ % ==
219
+ %
220
+ % Match each =href= attribute in an <a> element
221
+ %
222
+ % ==
223
+ % xpath(DOM, //a(@href), HREF)
224
+ % ==
225
+ %
226
+ % Suppose we have a table containing rows where each first column
227
+ % is the name of a product with a link to details and the second
228
+ % is the price (a number). The following predicate matches the
229
+ % name, URL and price:
230
+ %
231
+ % ==
232
+ % product(DOM, Name, URL, Price) :-
233
+ % xpath(DOM, //tr, TR),
234
+ % xpath(TR, td(1), C1),
235
+ % xpath(C1, /self(normalize_space), Name),
236
+ % xpath(C1, a(@href), URL),
237
+ % xpath(TR, td(2, number), Price).
238
+ % ==
239
+ %
240
+ % Suppose we want to select books with genre="thriller" from a
241
+ % tree containing elements =|<book genre=...>|=
242
+ %
243
+ % ==
244
+ % thriller(DOM, Book) :-
245
+ % xpath(DOM, //book(@genre=thiller), Book).
246
+ % ==
247
+ %
248
+ % Match the elements =|<table align="center">|= _and_ =|<table
249
+ % align="CENTER">|=:
250
+ %
251
+ % ```prolog
252
+ % //table(@align(lower) = center)
253
+ % ```
254
+ %
255
+ % Get the `width` and `height` of a `div` element as a number,
256
+ % and the `div` node itself:
257
+ %
258
+ % ==
259
+ % xpath(DOM, //div(@width(number)=W, @height(number)=H), Div)
260
+ % ==
261
+ %
262
+ % Note that `div` is an infix operator, so parentheses must be
263
+ % used in cases like the following:
264
+ %
265
+ % ==
266
+ % xpath(DOM, //(div), Div)
267
+ % ==
268
+
269
+ xpath(DOM, Spec, Content) :-
270
+ in_dom(Spec, DOM, Content).
271
+
272
+ in_dom(//Spec, DOM, Value) :-
273
+ !,
274
+ element_spec(Spec, Name, Modifiers),
275
+ sub_dom(I, Len, Name, E, DOM),
276
+ modifiers(Modifiers, I, Len, E, Value).
277
+ in_dom(/Spec, E, Value) :-
278
+ !,
279
+ element_spec(Spec, Name, Modifiers),
280
+ ( Name == self
281
+ -> true
282
+ ; element_name(E, Name)
283
+ ),
284
+ modifiers(Modifiers, 1, 1, E, Value).
285
+ in_dom(A/B, DOM, Value) :-
286
+ !,
287
+ in_dom(A, DOM, Value0),
288
+ in_dom(B, Value0, Value).
289
+ in_dom(A//B, DOM, Value) :-
290
+ !,
291
+ in_dom(A, DOM, Value0),
292
+ in_dom(//B, Value0, Value).
293
+ in_dom(Spec, element(_, _, Content), Value) :-
294
+ element_spec(Spec, Name, Modifiers),
295
+ count_named_elements(Content, Name, CLen),
296
+ CLen > 0,
297
+ nth_element(N, Name, E, Content),
298
+ modifiers(Modifiers, N, CLen, E, Value).
299
+
300
+ element_spec(Var, _, _) :-
301
+ var(Var),
302
+ !,
303
+ instantiation_error(Var).
304
+ element_spec(NS:Term, NS:Name, Modifiers) :-
305
+ !,
306
+ callable_name_arguments(Term, Name0, Modifiers),
307
+ star(Name0, Name).
308
+ element_spec(Term, Name, Modifiers) :-
309
+ !,
310
+ callable_name_arguments(Term, Name0, Modifiers),
311
+ star(Name0, Name).
312
+
313
+ callable_name_arguments(Atom, Name, Arguments) :-
314
+ atom(Atom),
315
+ !,
316
+ Name = Atom, Arguments = [].
317
+ callable_name_arguments(Compound, Name, Arguments) :-
318
+ compound_name_arguments(Compound, Name, Arguments).
319
+
320
+
321
+ star(*, _) :- !.
322
+ star(Name, Name).
323
+
324
+
325
+ %! sub_dom(-Index, -Count, +Name, -Sub, +DOM) is nondet.
326
+ %
327
+ % Sub is a node in DOM with Name.
328
+ %
329
+ % @param Count is the total number of nodes in the content
330
+ % list Sub appears that have the same name.
331
+ % @param Index is the 1-based index of Sub of nodes with
332
+ % Name.
333
+
334
+ sub_dom(1, 1, Name, DOM, DOM) :-
335
+ element_name(DOM, Name0),
336
+ \+ Name \= Name0.
337
+ sub_dom(N, Len, Name, E, element(_,_,Content)) :-
338
+ !,
339
+ sub_dom_2(N, Len, Name, E, Content).
340
+ sub_dom(N, Len, Name, E, Content) :-
341
+ is_list(Content),
342
+ sub_dom_2(N, Len, Name, E, Content).
343
+
344
+ sub_dom_2(N, Len, Name, Element, Content) :-
345
+ ( count_named_elements(Content, Name, Len),
346
+ nth_element(N, Name, Element, Content)
347
+ ; member(element(_,_,C2), Content),
348
+ sub_dom_2(N, Len, Name, Element, C2)
349
+ ).
350
+
351
+
352
+ %! count_named_elements(+Content, +Name, -Count) is det.
353
+ %
354
+ % Count is the number of nodes with Name in Content.
355
+
356
+ count_named_elements(Content, Name, Count) :-
357
+ count_named_elements(Content, Name, 0, Count).
358
+
359
+ count_named_elements([], _, Count, Count).
360
+ count_named_elements([element(Name,_,_)|T], Name0, C0, C) :-
361
+ \+ Name \= Name0,
362
+ !,
363
+ C1 is C0+1,
364
+ count_named_elements(T, Name0, C1, C).
365
+ count_named_elements([_|T], Name, C0, C) :-
366
+ count_named_elements(T, Name, C0, C).
367
+
368
+
369
+ %! nth_element(?N, +Name, -Element, +Content:list) is nondet.
370
+ %
371
+ % True if Element is the N-th element with name in Content.
372
+
373
+ nth_element(N, Name, Element, Content) :-
374
+ nth_element_(1, N, Name, Element, Content).
375
+
376
+ nth_element_(I, N, Name, E, [H|T]) :-
377
+ element_name(H, Name0),
378
+ \+ Name \= Name0,
379
+ !,
380
+ ( N = I,
381
+ E = H
382
+ ; I2 is I + 1,
383
+ ( nonvar(N), I2 > N
384
+ -> !, fail
385
+ ; true
386
+ ),
387
+ nth_element_(I2, N, Name, E, T)
388
+ ).
389
+ nth_element_(I, N, Name, E, [_|T]) :-
390
+ nth_element_(I, N, Name, E, T).
391
+
392
+
393
+ %! modifiers(+Modifiers, +I, +Clen, +DOM, -Value)
394
+ %
395
+ %
396
+
397
+ modifiers([], _, _, Value, Value).
398
+ modifiers([H|T], I, L, Value0, Value) :-
399
+ modifier(H, I, L, Value0, Value1),
400
+ modifiers(T, I, L, Value1, Value).
401
+
402
+ modifier(M, _, _, _, _) :-
403
+ var(M),
404
+ !,
405
+ instantiation_error(M).
406
+ modifier(Index, I, L, Value0, Value) :-
407
+ implicit_index_modifier(Index),
408
+ !,
409
+ Value = Value0,
410
+ index_modifier(Index, I, L).
411
+ modifier(index(Index), I, L, Value, Value) :-
412
+ !,
413
+ index_modifier(Index, I, L).
414
+ modifier(Function, _, _, In, Out) :-
415
+ xpath_function(Function),
416
+ !,
417
+ xpath_function(Function, In, Out).
418
+ modifier(Function, _, _, In, Out) :-
419
+ xpath_condition(Function, In),
420
+ Out = In.
421
+
422
+ implicit_index_modifier(I) :-
423
+ integer(I),
424
+ !.
425
+ implicit_index_modifier(last).
426
+ implicit_index_modifier(last-_Expr).
427
+
428
+ index_modifier(Var, I, _L) :-
429
+ var(Var),
430
+ !,
431
+ Var = I.
432
+ index_modifier(last, I, L) :-
433
+ !,
434
+ I =:= L.
435
+ index_modifier(last-Expr, I, L) :-
436
+ !,
437
+ I =:= L-Expr.
438
+ index_modifier(N, I, _) :-
439
+ N =:= I.
440
+
441
+ xpath_function(self, DOM, Value) :- % self
442
+ !,
443
+ Value = DOM.
444
+ xpath_function(content, Element, Value) :- % content
445
+ !,
446
+ element_content(Element, Value).
447
+ xpath_function(text, DOM, Text) :- % text
448
+ !,
449
+ text_of_dom(DOM, atom, Text).
450
+ xpath_function(text(As), DOM, Text) :- % text(As)
451
+ !,
452
+ text_of_dom(DOM, As, Text).
453
+ xpath_function(normalize_space, DOM, Text) :- % normalize_space
454
+ !,
455
+ text_of_dom(DOM, string, Text0),
456
+ normalize_space(atom(Text), Text0).
457
+ xpath_function(number, DOM, Number) :- % number
458
+ !,
459
+ text_of_dom(DOM, string, Text0),
460
+ normalize_space(string(Text), Text0),
461
+ catch(xsd_number_string(Number, Text), _, fail).
462
+ xpath_function(@Name, element(_, Attrs, _), Value) :- % @Name
463
+ !,
464
+ ( atom(Name)
465
+ -> memberchk(Name=Value, Attrs)
466
+ ; compound(Name)
467
+ -> compound_name_arguments(Name, AName, AOps),
468
+ memberchk(AName=Value0, Attrs),
469
+ translate_attribute(AOps, Value0, Value)
470
+ ; member(Name=Value, Attrs)
471
+ ).
472
+ xpath_function(quote(Value), _, Value). % quote(Value)
473
+
474
+ xpath_function(self).
475
+ xpath_function(content).
476
+ xpath_function(text).
477
+ xpath_function(text(_)).
478
+ xpath_function(normalize_space).
479
+ xpath_function(number).
480
+ xpath_function(@_).
481
+ xpath_function(quote(_)).
482
+
483
+ translate_attribute([], Value, Value).
484
+ translate_attribute([H|T], Value0, Value) :-
485
+ translate_attr(H, Value0, Value1),
486
+ translate_attribute(T, Value1, Value).
487
+
488
+ translate_attr(number, Value0, Value) :-
489
+ xsd_number_string(Value, Value0).
490
+ translate_attr(integer, Value0, Value) :-
491
+ xsd_number_string(Value1, Value0),
492
+ Value is round(Value1).
493
+ translate_attr(float, Value0, Value) :-
494
+ xsd_number_string(Value1, Value0),
495
+ Value is float(Value1).
496
+ translate_attr(atom, Value0, Value) :-
497
+ atom_string(Value, Value0).
498
+ translate_attr(string, Value0, Value) :-
499
+ atom_string(Value0, Value).
500
+ translate_attr(lower, Value0, Value) :-
501
+ ( atom(Value0)
502
+ -> downcase_atom(Value0, Value)
503
+ ; string_lower(Value0, Value)
504
+ ).
505
+ translate_attr(upper, Value0, Value) :-
506
+ ( atom(Value0)
507
+ -> upcase_atom(Value0, Value)
508
+ ; string_upper(Value0, Value)
509
+ ).
510
+
511
+ xpath_condition(Left = Right, Value) :- % =
512
+ !,
513
+ var_or_function(Left, Value, LeftValue),
514
+ process_equality(LeftValue, Right).
515
+ xpath_condition(contains(Haystack, Needle), Value) :- % contains(Haystack, Needle)
516
+ !,
517
+ val_or_function(Haystack, Value, HaystackValue),
518
+ val_or_function(Needle, Value, NeedleValue),
519
+ atom(HaystackValue), atom(NeedleValue),
520
+ ( sub_atom(HaystackValue, _, _, _, NeedleValue)
521
+ -> true
522
+ ).
523
+ xpath_condition(Spec, Dom) :-
524
+ in_dom(Spec, Dom, _).
525
+
526
+
527
+ %! process_equality(+Left, +Right) is semidet.
528
+ %
529
+ % Provides (very) partial support for XSLT functions that can be
530
+ % applied according to the XPath 2 specification.
531
+ %
532
+ % For example the XPath expression in [1], and the equivalent
533
+ % Prolog expression in [2], would both match the HTML element in
534
+ % [3].
535
+ %
536
+ % ==
537
+ % [1] //table[align=lower-case(center)]
538
+ % [2] //table(@align=lower_case(center))
539
+ % [3] <table align="CENTER">
540
+ % ==
541
+
542
+ process_equality(Left, Right) :-
543
+ var(Right),
544
+ !,
545
+ Left = Right.
546
+ process_equality(Left, lower_case(Right)) :-
547
+ !,
548
+ downcase_atom(Left, Right).
549
+ process_equality(Left, upper_case(Right)) :-
550
+ !,
551
+ upcase_atom(Left, Right).
552
+ process_equality(Left, Right) :-
553
+ Left = Right,
554
+ !.
555
+ process_equality(Left, Right) :-
556
+ atom(Left),
557
+ atomic(Right),
558
+ \+ atom(Left),
559
+ atom_string(Left, Right).
560
+
561
+ var_or_function(Arg, _, Arg) :-
562
+ var(Arg),
563
+ !.
564
+ var_or_function(Func, Value0, Value) :-
565
+ xpath_function(Func),
566
+ !,
567
+ xpath_function(Func, Value0, Value).
568
+ var_or_function(Value, _, Value).
569
+
570
+ val_or_function(Arg, _, Arg) :-
571
+ var(Arg),
572
+ !,
573
+ instantiation_error(Arg).
574
+ val_or_function(Func, Value0, Value) :- % TBD
575
+ xpath_function(Func, Value0, Value),
576
+ !.
577
+ val_or_function(Value, _, Value).
578
+
579
+
580
+ %! text_of_dom(+DOM, +As, -Text:atom) is det.
581
+ %
582
+ % Text is the joined textual content of DOM.
583
+
584
+ text_of_dom(DOM, As, Text) :-
585
+ phrase(text_of(DOM), Tokens),
586
+ ( As == atom
587
+ -> atomic_list_concat(Tokens, Text)
588
+ ; As == string
589
+ -> atomics_to_string(Tokens, Text)
590
+ ; must_be(oneof([atom,string]), As)
591
+ ).
592
+
593
+ text_of(element(_,_,Content)) -->
594
+ text_of_list(Content).
595
+ text_of([]) -->
596
+ [].
597
+ text_of([H|T]) -->
598
+ text_of(H),
599
+ text_of(T).
600
+
601
+
602
+ text_of_list([]) -->
603
+ [].
604
+ text_of_list([H|T]) -->
605
+ text_of_1(H),
606
+ text_of_list(T).
607
+
608
+
609
+ text_of_1(element(_,_,Content)) -->
610
+ !,
611
+ text_of_list(Content).
612
+ text_of_1(Data) -->
613
+ { assertion(atom_or_string(Data)) },
614
+ [Data].
615
+
616
+ atom_or_string(Data) :-
617
+ ( atom(Data)
618
+ -> true
619
+ ; string(Data)
620
+ ).