mhs-xapian 1.0.18a

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 (328) hide show
  1. data/.gitignore +3 -0
  2. data/AUTHORS +1 -0
  3. data/COPYING +340 -0
  4. data/ChangeLog +5876 -0
  5. data/HACKING +101 -0
  6. data/INSTALL +293 -0
  7. data/Makefile +722 -0
  8. data/Makefile.am +26 -0
  9. data/Makefile.in +722 -0
  10. data/NEWS +2110 -0
  11. data/README +59 -0
  12. data/Rakefile +51 -0
  13. data/TODO +47 -0
  14. data/aclocal.m4 +7675 -0
  15. data/config.guess +1501 -0
  16. data/config.h +56 -0
  17. data/config.h.in +55 -0
  18. data/config.status +1298 -0
  19. data/config.sub +1705 -0
  20. data/configure +18536 -0
  21. data/configure.ac +944 -0
  22. data/csharp/.deps/xapian_wrap.Plo +1 -0
  23. data/csharp/AssemblyInfo.cs +40 -0
  24. data/csharp/AssemblyInfo.cs.in +40 -0
  25. data/csharp/Auto.cs +46 -0
  26. data/csharp/BM25Weight.cs +107 -0
  27. data/csharp/BoolWeight.cs +103 -0
  28. data/csharp/Database.cs +275 -0
  29. data/csharp/DateValueRangeProcessor.cs +61 -0
  30. data/csharp/Document.cs +177 -0
  31. data/csharp/ESet.cs +94 -0
  32. data/csharp/ESetIterator.cs +117 -0
  33. data/csharp/Enquire.cs +274 -0
  34. data/csharp/ExpandDecider.cs +76 -0
  35. data/csharp/Flint.cs +58 -0
  36. data/csharp/InMemory.cs +46 -0
  37. data/csharp/MSet.cs +193 -0
  38. data/csharp/MSetIterator.cs +141 -0
  39. data/csharp/Makefile +868 -0
  40. data/csharp/Makefile.am +106 -0
  41. data/csharp/Makefile.in +868 -0
  42. data/csharp/MatchDecider.cs +76 -0
  43. data/csharp/MultiValueSorter.cs +63 -0
  44. data/csharp/NumberValueRangeProcessor.cs +61 -0
  45. data/csharp/PositionIterator.cs +101 -0
  46. data/csharp/PostingIterator.cs +125 -0
  47. data/csharp/Quartz.cs +58 -0
  48. data/csharp/Query.cs +150 -0
  49. data/csharp/QueryParser.cs +174 -0
  50. data/csharp/RSet.cs +102 -0
  51. data/csharp/Remote.cs +100 -0
  52. data/csharp/SWIGTYPE_p_std__string.cs +30 -0
  53. data/csharp/SWIGTYPE_p_std__vectorTXapian__Query_t.cs +30 -0
  54. data/csharp/SWIGTYPE_p_std__vectorTstd__string_t.cs +30 -0
  55. data/csharp/SimpleStopper.cs +64 -0
  56. data/csharp/SmokeTest.cs +178 -0
  57. data/csharp/Sorter.cs +76 -0
  58. data/csharp/Stem.cs +66 -0
  59. data/csharp/Stopper.cs +91 -0
  60. data/csharp/StringValueRangeProcessor.cs +53 -0
  61. data/csharp/TermGenerator.cs +152 -0
  62. data/csharp/TermIterator.cs +125 -0
  63. data/csharp/TradWeight.cs +107 -0
  64. data/csharp/ValueIterator.cs +102 -0
  65. data/csharp/ValueRangeProcessor.cs +76 -0
  66. data/csharp/Version.cs +60 -0
  67. data/csharp/Weight.cs +93 -0
  68. data/csharp/WritableDatabase.cs +153 -0
  69. data/csharp/Xapian.cs +65 -0
  70. data/csharp/XapianPINVOKE.cs +1527 -0
  71. data/csharp/docs/Makefile +450 -0
  72. data/csharp/docs/Makefile.am +16 -0
  73. data/csharp/docs/Makefile.in +450 -0
  74. data/csharp/docs/examples/SimpleExpand.cs +109 -0
  75. data/csharp/docs/examples/SimpleIndex.cs +71 -0
  76. data/csharp/docs/examples/SimpleSearch.cs +78 -0
  77. data/csharp/docs/index.html +211 -0
  78. data/csharp/util.i +233 -0
  79. data/csharp/xapian_wrap.cc +10338 -0
  80. data/csharp/xapian_wrap.h +93 -0
  81. data/depcomp +632 -0
  82. data/extconf.rb +20 -0
  83. data/generic/except.i +80 -0
  84. data/generic/generic.mk +48 -0
  85. data/install-sh +520 -0
  86. data/java-swig/.deps/xapian_wrap.Plo +1 -0
  87. data/java-swig/Auto.java +35 -0
  88. data/java-swig/BM25Weight.java +81 -0
  89. data/java-swig/BoolWeight.java +77 -0
  90. data/java-swig/Database.java +195 -0
  91. data/java-swig/DateValueRangeProcessor.java +51 -0
  92. data/java-swig/Document.java +135 -0
  93. data/java-swig/ESet.java +71 -0
  94. data/java-swig/ESetIterator.java +71 -0
  95. data/java-swig/Enquire.java +246 -0
  96. data/java-swig/ExpandDecider.java +59 -0
  97. data/java-swig/Flint.java +43 -0
  98. data/java-swig/InMemory.java +35 -0
  99. data/java-swig/MSet.java +143 -0
  100. data/java-swig/MSetIterator.java +87 -0
  101. data/java-swig/Makefile +781 -0
  102. data/java-swig/Makefile.am +132 -0
  103. data/java-swig/Makefile.in +781 -0
  104. data/java-swig/MatchDecider.java +59 -0
  105. data/java-swig/MultiValueSorter.java +51 -0
  106. data/java-swig/NumberValueRangeProcessor.java +51 -0
  107. data/java-swig/PositionIterator.java +63 -0
  108. data/java-swig/PostingIterator.java +83 -0
  109. data/java-swig/Quartz.java +43 -0
  110. data/java-swig/Query.java +189 -0
  111. data/java-swig/QueryParser.java +214 -0
  112. data/java-swig/RSet.java +79 -0
  113. data/java-swig/Remote.java +71 -0
  114. data/java-swig/SWIGTYPE_p_std__string.java +25 -0
  115. data/java-swig/SimpleStopper.java +51 -0
  116. data/java-swig/SmokeTest.java +161 -0
  117. data/java-swig/Sorter.java +59 -0
  118. data/java-swig/Stem.java +51 -0
  119. data/java-swig/Stopper.java +63 -0
  120. data/java-swig/StringValueRangeProcessor.java +43 -0
  121. data/java-swig/TermGenerator.java +158 -0
  122. data/java-swig/TermIterator.java +83 -0
  123. data/java-swig/TradWeight.java +81 -0
  124. data/java-swig/ValueIterator.java +67 -0
  125. data/java-swig/ValueRangeProcessor.java +59 -0
  126. data/java-swig/Version.java +47 -0
  127. data/java-swig/Weight.java +68 -0
  128. data/java-swig/WritableDatabase.java +123 -0
  129. data/java-swig/Xapian.java +39 -0
  130. data/java-swig/XapianConstants.java +15 -0
  131. data/java-swig/XapianJNI.java +508 -0
  132. data/java-swig/run-java-test +6 -0
  133. data/java-swig/xapian_wrap.cc +12594 -0
  134. data/java-swig/xapian_wrap.h +91 -0
  135. data/java/Makefile +660 -0
  136. data/java/Makefile.am +35 -0
  137. data/java/Makefile.in +660 -0
  138. data/java/README +76 -0
  139. data/java/SmokeTest.java +148 -0
  140. data/java/native/.deps/Database.Plo +1 -0
  141. data/java/native/.deps/Document.Plo +1 -0
  142. data/java/native/.deps/ESet.Plo +1 -0
  143. data/java/native/.deps/ESetIterator.Plo +1 -0
  144. data/java/native/.deps/Enquire.Plo +1 -0
  145. data/java/native/.deps/MSet.Plo +1 -0
  146. data/java/native/.deps/MSetIterator.Plo +1 -0
  147. data/java/native/.deps/PositionIterator.Plo +1 -0
  148. data/java/native/.deps/Query.Plo +1 -0
  149. data/java/native/.deps/RSet.Plo +1 -0
  150. data/java/native/.deps/Stem.Plo +1 -0
  151. data/java/native/.deps/TermIterator.Plo +1 -0
  152. data/java/native/.deps/WritableDatabase.Plo +1 -0
  153. data/java/native/.deps/org_xapian_XapianJNI.Plo +1 -0
  154. data/java/native/.deps/utils.Plo +1 -0
  155. data/java/native/Database.cc +222 -0
  156. data/java/native/Document.cc +173 -0
  157. data/java/native/ESet.cc +79 -0
  158. data/java/native/ESetIterator.cc +82 -0
  159. data/java/native/Enquire.cc +271 -0
  160. data/java/native/MSet.cc +169 -0
  161. data/java/native/MSetIterator.cc +107 -0
  162. data/java/native/Makefile +594 -0
  163. data/java/native/Makefile.am +51 -0
  164. data/java/native/Makefile.in +594 -0
  165. data/java/native/PositionIterator.cc +64 -0
  166. data/java/native/Query.cc +180 -0
  167. data/java/native/RSet.cc +98 -0
  168. data/java/native/Stem.cc +75 -0
  169. data/java/native/TermIterator.cc +107 -0
  170. data/java/native/WritableDatabase.cc +118 -0
  171. data/java/native/XapianObjectHolder.h +115 -0
  172. data/java/native/org_xapian_XapianJNI.cc +78 -0
  173. data/java/native/org_xapian_XapianJNI.h +1369 -0
  174. data/java/native/utils.cc +51 -0
  175. data/java/native/xapian_jni.h +116 -0
  176. data/java/org/xapian/Database.java +148 -0
  177. data/java/org/xapian/Document.java +135 -0
  178. data/java/org/xapian/ESet.java +66 -0
  179. data/java/org/xapian/ESetIterator.java +97 -0
  180. data/java/org/xapian/Enquire.java +136 -0
  181. data/java/org/xapian/ExpandDecider.java +30 -0
  182. data/java/org/xapian/MSet.java +104 -0
  183. data/java/org/xapian/MSetIterator.java +132 -0
  184. data/java/org/xapian/Makefile +580 -0
  185. data/java/org/xapian/Makefile.am +38 -0
  186. data/java/org/xapian/Makefile.in +580 -0
  187. data/java/org/xapian/MatchDecider.java +30 -0
  188. data/java/org/xapian/PositionIterator.java +89 -0
  189. data/java/org/xapian/Query.java +190 -0
  190. data/java/org/xapian/RSet.java +89 -0
  191. data/java/org/xapian/Stem.java +80 -0
  192. data/java/org/xapian/TermIterator.java +142 -0
  193. data/java/org/xapian/WritableDatabase.java +92 -0
  194. data/java/org/xapian/Xapian.java +114 -0
  195. data/java/org/xapian/XapianJNI.java +444 -0
  196. data/java/org/xapian/errors/AssertionError.java +40 -0
  197. data/java/org/xapian/errors/DatabaseCorruptError.java +40 -0
  198. data/java/org/xapian/errors/DatabaseError.java +40 -0
  199. data/java/org/xapian/errors/DatabaseLockError.java +40 -0
  200. data/java/org/xapian/errors/DatabaseModifiedError.java +40 -0
  201. data/java/org/xapian/errors/DatabaseOpeningError.java +40 -0
  202. data/java/org/xapian/errors/DocNotFoundError.java +40 -0
  203. data/java/org/xapian/errors/FeatureUnavailableError.java +40 -0
  204. data/java/org/xapian/errors/InternalError.java +40 -0
  205. data/java/org/xapian/errors/InvalidArgumentError.java +40 -0
  206. data/java/org/xapian/errors/InvalidOperationError.java +40 -0
  207. data/java/org/xapian/errors/LogicError.java +40 -0
  208. data/java/org/xapian/errors/Makefile +416 -0
  209. data/java/org/xapian/errors/Makefile.am +32 -0
  210. data/java/org/xapian/errors/Makefile.in +416 -0
  211. data/java/org/xapian/errors/NetworkError.java +40 -0
  212. data/java/org/xapian/errors/NetworkTimeoutError.java +40 -0
  213. data/java/org/xapian/errors/RangeError.java +40 -0
  214. data/java/org/xapian/errors/RuntimeError.java +40 -0
  215. data/java/org/xapian/errors/UnimplementedError.java +40 -0
  216. data/java/org/xapian/errors/XapianError.java +40 -0
  217. data/java/org/xapian/errors/XapianRuntimeError.java +49 -0
  218. data/java/org/xapian/examples/Makefile +391 -0
  219. data/java/org/xapian/examples/Makefile.am +8 -0
  220. data/java/org/xapian/examples/Makefile.in +391 -0
  221. data/java/org/xapian/examples/SimpleIndex.java +68 -0
  222. data/java/org/xapian/examples/SimpleSearch.java +71 -0
  223. data/java/run-java-test +6 -0
  224. data/libtool +7618 -0
  225. data/ltmain.sh +6956 -0
  226. data/mhs-xapian.gemspec +368 -0
  227. data/missing +378 -0
  228. data/php/.deps/xapian_wrap.Plo +1 -0
  229. data/php/Makefile +871 -0
  230. data/php/Makefile.am +82 -0
  231. data/php/Makefile.in +871 -0
  232. data/php/docs/Makefile +453 -0
  233. data/php/docs/Makefile.am +19 -0
  234. data/php/docs/Makefile.in +453 -0
  235. data/php/docs/examples/simpleexpand.php4 +108 -0
  236. data/php/docs/examples/simpleexpand.php5 +104 -0
  237. data/php/docs/examples/simpleindex.php4 +76 -0
  238. data/php/docs/examples/simpleindex.php5 +73 -0
  239. data/php/docs/examples/simplesearch.php4 +75 -0
  240. data/php/docs/examples/simplesearch.php5 +72 -0
  241. data/php/docs/index.html +313 -0
  242. data/php/except.i +98 -0
  243. data/php/php4/php_xapian.h +323 -0
  244. data/php/php4/xapian.php +32 -0
  245. data/php/php4/xapian_wrap.cc +27656 -0
  246. data/php/php5/php_xapian.h +319 -0
  247. data/php/php5/xapian.php +1566 -0
  248. data/php/php5/xapian_wrap.cc +24330 -0
  249. data/php/smoketest.php +246 -0
  250. data/php/smoketest4.php +84 -0
  251. data/php/smoketest5.php +79 -0
  252. data/php/util.i +187 -0
  253. data/python/.deps/xapian_wrap.Plo +1 -0
  254. data/python/Makefile +891 -0
  255. data/python/Makefile.am +105 -0
  256. data/python/Makefile.in +891 -0
  257. data/python/doccomments.i +5134 -0
  258. data/python/docs/Makefile +448 -0
  259. data/python/docs/Makefile.am +14 -0
  260. data/python/docs/Makefile.in +448 -0
  261. data/python/docs/examples/simpleexpand.py +98 -0
  262. data/python/docs/examples/simpleindex.py +65 -0
  263. data/python/docs/examples/simplematchdecider.py +78 -0
  264. data/python/docs/examples/simplesearch.py +65 -0
  265. data/python/docs/index.html +420 -0
  266. data/python/except.i +290 -0
  267. data/python/extra.i +1048 -0
  268. data/python/extracomments.i +28 -0
  269. data/python/generate-python-exceptions +189 -0
  270. data/python/generate-python-exceptions.in +189 -0
  271. data/python/modern/xapian.py +5662 -0
  272. data/python/modern/xapian_wrap.cc +35170 -0
  273. data/python/modern/xapian_wrap.h +244 -0
  274. data/python/pythontest.py +1110 -0
  275. data/python/smoketest.py +328 -0
  276. data/python/testsuite.py +382 -0
  277. data/python/util.i +517 -0
  278. data/ruby/.deps/xapian_wrap.Plo +494 -0
  279. data/ruby/.libs/_xapian.bundle +0 -0
  280. data/ruby/.libs/_xapian.bundle.dSYM/Contents/Info.plist +25 -0
  281. data/ruby/.libs/_xapian.bundle.dSYM/Contents/Resources/DWARF/_xapian.bundle +0 -0
  282. data/ruby/.libs/_xapian.la +35 -0
  283. data/ruby/.libs/_xapian.lai +35 -0
  284. data/ruby/Makefile +854 -0
  285. data/ruby/Makefile.am +62 -0
  286. data/ruby/Makefile.in +854 -0
  287. data/ruby/_xapian.la +35 -0
  288. data/ruby/docs/Makefile +487 -0
  289. data/ruby/docs/Makefile.am +50 -0
  290. data/ruby/docs/Makefile.in +487 -0
  291. data/ruby/docs/examples/simpleexpand.rb +98 -0
  292. data/ruby/docs/examples/simpleindex.rb +60 -0
  293. data/ruby/docs/examples/simplematchdecider.rb +74 -0
  294. data/ruby/docs/examples/simplesearch.rb +63 -0
  295. data/ruby/docs/index.html +197 -0
  296. data/ruby/smoketest.rb +211 -0
  297. data/ruby/util.i +232 -0
  298. data/ruby/xapian.rb +280 -0
  299. data/ruby/xapian_wrap.cc +25837 -0
  300. data/ruby/xapian_wrap.h +65 -0
  301. data/ruby/xapian_wrap.lo +12 -0
  302. data/skiptest +2 -0
  303. data/stamp-h1 +1 -0
  304. data/tcl8/.deps/xapian_wrap.Plo +1 -0
  305. data/tcl8/Makefile +835 -0
  306. data/tcl8/Makefile.am +49 -0
  307. data/tcl8/Makefile.in +835 -0
  308. data/tcl8/docs/Makefile +448 -0
  309. data/tcl8/docs/Makefile.am +14 -0
  310. data/tcl8/docs/Makefile.in +448 -0
  311. data/tcl8/docs/examples/simpleexpand.tcl +104 -0
  312. data/tcl8/docs/examples/simpleindex.tcl +68 -0
  313. data/tcl8/docs/examples/simplesearch.tcl +66 -0
  314. data/tcl8/docs/index.html +208 -0
  315. data/tcl8/except.i +48 -0
  316. data/tcl8/pkgIndex.tcl +1 -0
  317. data/tcl8/pkgIndex.tcl.in +1 -0
  318. data/tcl8/run-tcl-test +15 -0
  319. data/tcl8/runtest.tcl +29 -0
  320. data/tcl8/smoketest.tcl +155 -0
  321. data/tcl8/util.i +76 -0
  322. data/tcl8/xapian_wrap.cc +20900 -0
  323. data/xapian-bindings.spec +206 -0
  324. data/xapian-bindings.spec.in +206 -0
  325. data/xapian-version.h +1 -0
  326. data/xapian-version.h.in +1 -0
  327. data/xapian.i +939 -0
  328. metadata +395 -0
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env tclsh
2
+ # Tcl script to index each paragraph of a text file as a Xapian document.
3
+ #
4
+ # Copyright (C) 2004,2006,2007 Olly Betts
5
+ # Copyright (C) 2004 Michael Schlenker
6
+ #
7
+ # This program is free software; you can redistribute it and/or modify
8
+ # it under the terms of the GNU General Public License as published by
9
+ # the Free Software Foundation; either version 2 of the License, or
10
+ # (at your option) any later version.
11
+ #
12
+ # This program is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU General Public License
18
+ # along with this program; if not, write to the Free Software
19
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20
+
21
+ # We need at least Tcl version 8.1.
22
+ package require Tcl 8.1
23
+
24
+ # We need at least Xapian 1.0.0 for TermGenerator.
25
+ package require xapian 1.0.0
26
+
27
+ if {[llength $argv] != 1} {
28
+ puts "Usage: $argv0 PATH_TO_DATABASE"
29
+ exit 1
30
+ }
31
+
32
+ if {[catch {
33
+ set dbpath [lindex $argv 0]
34
+ xapian::WritableDatabase database $dbpath $xapian::DB_CREATE_OR_OPEN
35
+ xapian::TermGenerator indexer
36
+ xapian::Stem stemmer "english"
37
+ indexer set_stemmer stemmer
38
+
39
+ set para ""
40
+ while {![eof stdin]} {
41
+ gets stdin line
42
+ set line [string trim $line]
43
+ if {[string equal $line ""] && [string compare $para ""]} {
44
+ # We've reached the end of a paragraph, so index it.
45
+ xapian::Document doc
46
+ doc set_data $para
47
+
48
+ indexer set_document doc
49
+ indexer index_text $para
50
+
51
+ # Add the document to the database.
52
+ database add_document doc
53
+ set para ""
54
+ } else {
55
+ if {[string equal $para ""]} {
56
+ set para $line
57
+ } else {
58
+ set para "$para $line"
59
+ }
60
+ }
61
+ }
62
+ # We *must* delete the database so that the destructor gets called so
63
+ # pending changes are flushed and the lock file is removed.
64
+ database -delete
65
+ } exception]} {
66
+ puts stderr "Exception: $errorCode $exception"
67
+ exit 1
68
+ }
@@ -0,0 +1,66 @@
1
+ #!/usr/bin/env tclsh
2
+ # Simple command-line search Tcl script.
3
+ #
4
+ # Copyright (C) 2004,2006,2007 Olly Betts
5
+ # Copyright (C) 2004 Michael Schlenker
6
+ #
7
+ # This program is free software; you can redistribute it and/or modify
8
+ # it under the terms of the GNU General Public License as published by
9
+ # the Free Software Foundation; either version 2 of the License, or
10
+ # (at your option) any later version.
11
+ #
12
+ # This program is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU General Public License
18
+ # along with this program; if not, write to the Free Software
19
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20
+
21
+ # We need at least Tcl version 8.1.
22
+ package require Tcl 8.1
23
+ # We need only actually need Xapian 0.9.3 (for the query from list constructor
24
+ # wrapper), but "package require" doesn't accept differing major versions.
25
+ package require xapian 1.0.0
26
+
27
+ if {[llength $argv] < 2} {
28
+ puts "Usage: $argv0 PATH_TO_DATABASE QUERY"
29
+ exit 1
30
+ }
31
+
32
+ if {[catch {
33
+ xapian::Database database [lindex $argv 0]
34
+
35
+ # Start an enquire session.
36
+ xapian::Enquire enquire database
37
+
38
+ # Combine the rest of the command line arguments with spaces between
39
+ # them, so that simple queries don't have to be quoted at the shell
40
+ # level.
41
+ set query_string [join [lrange $argv 1 end]]
42
+ xapian::QueryParser qp
43
+ xapian::Stem stemmer "english"
44
+ qp set_stemmer stemmer
45
+ qp set_database database
46
+ qp set_stemming_strategy $xapian::QueryParser_STEM_SOME
47
+ set query [qp parse_query $query_string]
48
+ puts "Parsed query is: [$query get_description]"
49
+
50
+ # Find the top 10 results for the query.
51
+ enquire set_query $query
52
+ set matches [enquire get_mset 0 10]
53
+
54
+ # Display the results.
55
+ puts "[$matches get_matches_estimated] results found:"
56
+
57
+ for {set i [$matches begin]} {![$i equals [$matches end]]} {$i next} {
58
+ xapian::Document document [$i get_document]
59
+ set rank [expr [$i get_rank] + 1]
60
+ puts [format {%s: %s%% docid=%s [%s]} \
61
+ $rank [$i get_percent] [$i get_docid] [document get_data]]
62
+ }
63
+ } exception]} {
64
+ puts stderr "Exception: $errorCode $exception"
65
+ exit 1
66
+ }
@@ -0,0 +1,208 @@
1
+ <html><head><title>Tcl8 bindings for Xapian</title></head>
2
+ <body>
3
+ <h1>Tcl8 bindings for Xapian</h1>
4
+
5
+ <p>
6
+ The Tcl8 bindings for Xapian are packaged in the <code>xapian</code> namespace,
7
+ and largely follow the C++ API, with the following differences and
8
+ additions. Tcl8 strings and lists, etc., are converted automatically
9
+ in the bindings, so generally it should just work as expected.
10
+ </p>
11
+
12
+ <p>
13
+ The <code>examples</code> subdirectory contains examples showing how to use the
14
+ Tcl8 bindings based on the simple examples from <code>xapian-examples</code>:
15
+ <a href="examples/simpleindex.tcl">simpleindex.tcl</a>,
16
+ <a href="examples/simplesearch.tcl">simplesearch.tcl</a>,
17
+ <a href="examples/simpleexpand.tcl">simpleexpand.tcl</a>.
18
+ </p>
19
+
20
+ <h2>Unicode Support</h2>
21
+
22
+ <p>
23
+ In Xapian 1.0.0 and later, the Xapian::Stem, Xapian::QueryParser, and
24
+ Xapian::TermGenerator classes all assume text is in UTF-8. Tcl8 uses
25
+ UTF-8 as its internal representation, except that ASCII nul (character value
26
+ 0) is represented as the overlong (and thus invalid) UTF-8 sequence
27
+ <code>\xc0\x80</code>. We don't current convert this to/from
28
+ <code>\x00</code> so you should avoid passing strings containing ASCII nul
29
+ to/from Xapian from Tcl8.
30
+ </p>
31
+
32
+ <h2>Destructors</h2>
33
+
34
+ <p>
35
+ To destroy an object <code><i>obj</i></code>, you need to use one of
36
+ <code><i>obj</i> -delete</code> or <code>rename <i>obj</i> ""</code>
37
+ (either should work, but see below).
38
+ </p>
39
+
40
+ <p>
41
+ SWIG's Tcl wrapping doesn't handle an object returned by a factory function
42
+ correctly. This only matters for the Xapian::WritableDatabase class, and we
43
+ avoid wrapping the problematic factory functions to avoid setting a
44
+ trap for the unwary - these are the WritableDatabase versions of
45
+ <code>Xapian::Flint::open</code>, <code>Xapian::Quartz::open</code> and
46
+ <code>Xapian::Auto::open</code>. The latter is deprecated anyway, and
47
+ you can just use a <code>Xapian::WritableDatabase</code> constructor
48
+ instead. Use of quartz is also deprecated, and the
49
+ <code>Xapian::WritableDatabase</code> constructor creates flint databases
50
+ in 1.0 releases anyway.
51
+ </p>
52
+
53
+ <p>
54
+ Michael Schlenker reports that this form works (i.e. the destructor gets
55
+ called):
56
+
57
+ <blockquote><pre>
58
+ xapian::WritableDatabase xapiandb testdir $::xapian::DB_CREATE_OR_OVERWRITE
59
+ rename xapiandb ""
60
+ </pre></blockquote>
61
+
62
+ However, apparently none of these forms works:
63
+
64
+ <blockquote><pre>
65
+ xapian::WritableDatabase xapiandb testdir $::xapian::DB_CREATE_OR_OVERWRITE
66
+ set db xapiandb
67
+ $db -delete
68
+
69
+ set db [xapian::WritableDatabase xapiandb testdir $::xapian::DB_CREATE_OR_OVERWRITE]
70
+ $db -delete
71
+
72
+ set db [xapian::WritableDatabase xapiandb testdir $::xapian::DB_CREATE_OR_OVERWRITE]
73
+ rename $db ""
74
+ </pre></blockquote>
75
+ </p>
76
+
77
+ <h2>Exceptions</h2>
78
+
79
+ <p>
80
+ Xapian::Error exceptions can be handled in Tcl like so:
81
+ </p>
82
+
83
+ <pre>
84
+ if [catch {
85
+ # Code which might throw an exception.
86
+ } msg] {
87
+ # Code to handle exceptions.
88
+ # $errorCode is "XAPIAN <error_class>" (e.g. "XAPIAN DocNotFoundError".)
89
+ # $msg is the result of calling get_msg() on the Xapian::Error object.
90
+ }
91
+ </pre>
92
+
93
+ <h2>Iterators</h2>
94
+
95
+ <p>
96
+ All iterators support <code>next</code> and <code>equals</code> methods
97
+ to move through and test iterators (as for all language bindings).
98
+ MSetIterator and ESetIterator also support <code>prev</code>.
99
+ </p>
100
+
101
+ <h2>Iterator dereferencing</h2>
102
+
103
+ <p>
104
+ C++ iterators are often dereferenced to get information, eg
105
+ <code>(*it)</code>. With Tcl8 these are all mapped to named methods, as
106
+ follows:
107
+ </p>
108
+
109
+ <table title='Iterator deferencing methods'>
110
+ <thead><td>Iterator</td><td>Dereferencing method</td></thead>
111
+ <tr><td>PositionIterator</td> <td><code>get_termpos</code></td></tr>
112
+ <tr><td>PostingIterator</td> <td><code>get_docid</code></td></tr>
113
+ <tr><td>TermIterator</td> <td><code>get_term</code></td></tr>
114
+ <tr><td>ValueIterator</td> <td><code>get_value</code></td></tr>
115
+ <tr><td>MSetIterator</td> <td><code>get_docid</code></td></tr>
116
+ <tr><td>ESetIterator</td> <td><code>get_term</code></td></tr>
117
+ </table>
118
+
119
+ <p>
120
+ Other methods, such as <code>MSetIterator::get_document</code>, are
121
+ available under the same names.
122
+ </p>
123
+
124
+ <h2>MSet</h2>
125
+
126
+ <p>
127
+ MSet objects have some additional methods to simplify access (these
128
+ work using the C++ array dereferencing):
129
+ </p>
130
+
131
+ <table title='MSet additional methods'>
132
+ <thead><td>Method name</td><td>Explanation</td></thead>
133
+ <tr><td><code>mset get_hit index</code></td><td>returns MSetIterator at index</td></tr>
134
+ <tr><td><code>mset get_document_percentage index</code></td><td><code>mset convert_to_percent [mset get_hit index]</code></td></tr>
135
+ <tr><td><code>mset get_document index</code></td><td><code>[mset get_hit index] get_document</code></td></tr>
136
+ <tr><td><code>mset get_docid index</code></td><td><code>[mset get_hit index] get_docid</code></td></tr>
137
+ </table>
138
+
139
+ <h2>Non-Class Functions</h2>
140
+
141
+ <p>The C++ API contains a few non-class functions (the Database factory
142
+ functions, and some functions reporting version information), which are
143
+ wrapped like so for Tcl:
144
+ <ul>
145
+ <ul>
146
+ <li> <code>Xapian::version_string()</code> is wrapped as <code>xapian::version_string</code>
147
+ <li> <code>Xapian::major_version()</code> is wrapped as <code>xapian::major_version</code>
148
+ <li> <code>Xapian::minor_version()</code> is wrapped as <code>xapian::minor_version</code>
149
+ <li> <code>Xapian::revision()</code> is wrapped as <code>xapian::revision</code>
150
+ </ul>
151
+
152
+ <ul>
153
+ <li> <code>Xapian::Auto::open_stub()</code> is wrapped as <code>xapian::open_stub</code>
154
+ <li> <code>Xapian::Flint::open()</code> is wrapped as <code>xapian::flint_open</code> (but note that the WritableDatabase version isn't wrapped - see
155
+ the 'Destructors' section above for an explanation).
156
+ <li> <code>Xapian::Quartz::open()</code> is wrapped as <code>xapian::quartz_open</code> (but note that the WritableDatabase version isn't wrapped - see
157
+ the 'Destructors' section above for an explanation).
158
+ <li> <code>Xapian::InMemory::open()</code> is wrapped as <code>xapian::inmemory_open</code>
159
+ <li> <code>Xapian::Remote::open()</code> is wrapped as <code>xapian::remote_open</code> (both
160
+ the TCP and "program" versions are wrapped - the SWIG wrapper checks the parameter list to
161
+ decide which to call).
162
+ <li> <code>Xapian::Remote::open_writable()</code> is wrapped as <code>xapian::remote_open_writable</code> (both
163
+ the TCP and "program" versions are wrapped - the SWIG wrapper checks the parameter list to
164
+ decide which to call).
165
+ </ul>
166
+ </ul>
167
+
168
+ <h2>Constants</h2>
169
+
170
+ <p>
171
+ For Tcl, constants are wrapped as <code>$xapian::<i>CONSTANT_NAME</i></code>
172
+ or <code>$xapian::<i>ClassName<i>_<i>CONSTANT_NAME</i></code>.
173
+ So <code>Xapian::DB_CREATE_OR_OPEN</code> is available as
174
+ <code>$xapian::DB_CREATE_OR_OPEN</code>, <code>Xapian::Query::OP_OR</code> is
175
+ available as <code>$xapian::Query_OP_OR</code>, and so on.
176
+ </p>
177
+
178
+ <h2>Query</h2>
179
+
180
+ <p>
181
+ In C++ there's a Xapian::Query constructor which takes a query operator and
182
+ start/end iterators specifying a number of terms or queries, plus an optional
183
+ parameter. In Tcl, this is wrapped to accept a Tcl list
184
+ to give the terms/queries, and you can specify
185
+ a mixture of terms and queries if you wish. For example:
186
+ </p>
187
+
188
+ <pre>
189
+ set terms [list "hello" "world"]
190
+ xapian::Query subq $xapian::Query_OP_AND $terms
191
+ xapian::Query bar_term "bar" 2
192
+ xapian::Query query $xapian::Query_OP_AND [list subq "foo" bar_term]
193
+ </pre>
194
+
195
+ <h2>Enquire</h2>
196
+
197
+ <p>
198
+ There is an additional method <code>get_matching_terms</code> which takes
199
+ an MSetIterator and returns a list of terms in the current query which
200
+ match the document given by that iterator. You may find this
201
+ more convenient than using the TermIterator directly.
202
+ </p>
203
+
204
+ <address>
205
+ Last updated $Date: 2008-06-26 23:02:05 +0100 (Thu, 26 Jun 2008) $
206
+ </address>
207
+ </body>
208
+ </html>
data/tcl8/except.i ADDED
@@ -0,0 +1,48 @@
1
+ %{
2
+ /* tcl8/except.i: Custom tcl8 exception handling.
3
+ *
4
+ * Copyright (c) 2006,2007 Olly Betts
5
+ *
6
+ * This program is free software; you can redistribute it and/or
7
+ * modify it under the terms of the GNU General Public License as
8
+ * published by the Free Software Foundation; either version 2 of the
9
+ * License, or (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License
17
+ * along with this program; if not, write to the Free Software
18
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
19
+ * USA
20
+ */
21
+
22
+ static int XapianTclHandleError(Tcl_Interp * interp, const Xapian::Error &e) {
23
+ Tcl_ResetResult(interp);
24
+ Tcl_SetErrorCode(interp, "XAPIAN", e.get_type(), NULL);
25
+ Tcl_AppendResult(interp, e.get_msg().c_str(), NULL);
26
+ return TCL_ERROR;
27
+ }
28
+
29
+ static int XapianTclHandleError(Tcl_Interp * interp) {
30
+ Tcl_ResetResult(interp);
31
+ Tcl_SetErrorCode(interp, "XAPIAN ?", NULL);
32
+ Tcl_AppendResult(interp, "Unknown Error", NULL);
33
+ return TCL_ERROR;
34
+ }
35
+
36
+ %}
37
+
38
+ %exception {
39
+ try {
40
+ $function
41
+ } catch (const Xapian::Error &e) {
42
+ return XapianTclHandleError(interp, e);
43
+ } catch (...) {
44
+ return XapianTclHandleError(interp);
45
+ }
46
+ }
47
+
48
+ /* vim:set syntax=cpp:set noexpandtab: */
data/tcl8/pkgIndex.tcl ADDED
@@ -0,0 +1 @@
1
+ package ifneeded xapian 1.0.18 [list load [file join $dir xapian[info sharedlibextension]]]
@@ -0,0 +1 @@
1
+ package ifneeded xapian @VERSION_NO_SNAPSHOT@ [list load [file join $dir xapian[info sharedlibextension]]]
data/tcl8/run-tcl-test ADDED
@@ -0,0 +1,15 @@
1
+ #!/bin/sh
2
+ ${LIBTOOL-../libtool} --config > libtoolconfig.$$
3
+ . ./libtoolconfig.$$
4
+ rm -f libtoolconfig.$$
5
+ module=yes
6
+ eval shlibext=$shrext_cmds
7
+
8
+ tclshlibext=`echo 'puts [info sharedlibextension]'|${TCLSH-tclsh}`
9
+
10
+ rm -f xapian$tclshlibext
11
+ ln -s $objdir/xapian$shlibext xapian$tclshlibext
12
+ ${TCLSH-tclsh} ${srcdir-.}/runtest.tcl ${srcdir-.}/smoketest.tcl
13
+ rc=$?
14
+ rm -f xapian$tclshlibext
15
+ exit $rc
data/tcl8/runtest.tcl ADDED
@@ -0,0 +1,29 @@
1
+ # Allow a tcl script to be run against an uninstalled libtool-built tcl module
2
+ #
3
+ # Copyright (C) 2006,2007 Olly Betts
4
+ #
5
+ # This program is free software; you can redistribute it and/or
6
+ # modify it under the terms of the GNU General Public License as
7
+ # published by the Free Software Foundation; either version 2 of the
8
+ # License, or (at your option) any later version.
9
+ #
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU General Public License
16
+ # along with this program; if not, write to the Free Software
17
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
18
+ # USA
19
+
20
+ # Syntax: runtest.tcl SCRIPT.TCL [ARGS]
21
+
22
+ # We need at least Tcl version 8
23
+ package require Tcl 8
24
+
25
+ lappend auto_path "."
26
+
27
+ set argv0 [lindex $argv 0]
28
+ set argv [lrange $argv 1 end]
29
+ exit [expr [source $argv0] +0]