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.
- data/.gitignore +3 -0
- data/AUTHORS +1 -0
- data/COPYING +340 -0
- data/ChangeLog +5876 -0
- data/HACKING +101 -0
- data/INSTALL +293 -0
- data/Makefile +722 -0
- data/Makefile.am +26 -0
- data/Makefile.in +722 -0
- data/NEWS +2110 -0
- data/README +59 -0
- data/Rakefile +51 -0
- data/TODO +47 -0
- data/aclocal.m4 +7675 -0
- data/config.guess +1501 -0
- data/config.h +56 -0
- data/config.h.in +55 -0
- data/config.status +1298 -0
- data/config.sub +1705 -0
- data/configure +18536 -0
- data/configure.ac +944 -0
- data/csharp/.deps/xapian_wrap.Plo +1 -0
- data/csharp/AssemblyInfo.cs +40 -0
- data/csharp/AssemblyInfo.cs.in +40 -0
- data/csharp/Auto.cs +46 -0
- data/csharp/BM25Weight.cs +107 -0
- data/csharp/BoolWeight.cs +103 -0
- data/csharp/Database.cs +275 -0
- data/csharp/DateValueRangeProcessor.cs +61 -0
- data/csharp/Document.cs +177 -0
- data/csharp/ESet.cs +94 -0
- data/csharp/ESetIterator.cs +117 -0
- data/csharp/Enquire.cs +274 -0
- data/csharp/ExpandDecider.cs +76 -0
- data/csharp/Flint.cs +58 -0
- data/csharp/InMemory.cs +46 -0
- data/csharp/MSet.cs +193 -0
- data/csharp/MSetIterator.cs +141 -0
- data/csharp/Makefile +868 -0
- data/csharp/Makefile.am +106 -0
- data/csharp/Makefile.in +868 -0
- data/csharp/MatchDecider.cs +76 -0
- data/csharp/MultiValueSorter.cs +63 -0
- data/csharp/NumberValueRangeProcessor.cs +61 -0
- data/csharp/PositionIterator.cs +101 -0
- data/csharp/PostingIterator.cs +125 -0
- data/csharp/Quartz.cs +58 -0
- data/csharp/Query.cs +150 -0
- data/csharp/QueryParser.cs +174 -0
- data/csharp/RSet.cs +102 -0
- data/csharp/Remote.cs +100 -0
- data/csharp/SWIGTYPE_p_std__string.cs +30 -0
- data/csharp/SWIGTYPE_p_std__vectorTXapian__Query_t.cs +30 -0
- data/csharp/SWIGTYPE_p_std__vectorTstd__string_t.cs +30 -0
- data/csharp/SimpleStopper.cs +64 -0
- data/csharp/SmokeTest.cs +178 -0
- data/csharp/Sorter.cs +76 -0
- data/csharp/Stem.cs +66 -0
- data/csharp/Stopper.cs +91 -0
- data/csharp/StringValueRangeProcessor.cs +53 -0
- data/csharp/TermGenerator.cs +152 -0
- data/csharp/TermIterator.cs +125 -0
- data/csharp/TradWeight.cs +107 -0
- data/csharp/ValueIterator.cs +102 -0
- data/csharp/ValueRangeProcessor.cs +76 -0
- data/csharp/Version.cs +60 -0
- data/csharp/Weight.cs +93 -0
- data/csharp/WritableDatabase.cs +153 -0
- data/csharp/Xapian.cs +65 -0
- data/csharp/XapianPINVOKE.cs +1527 -0
- data/csharp/docs/Makefile +450 -0
- data/csharp/docs/Makefile.am +16 -0
- data/csharp/docs/Makefile.in +450 -0
- data/csharp/docs/examples/SimpleExpand.cs +109 -0
- data/csharp/docs/examples/SimpleIndex.cs +71 -0
- data/csharp/docs/examples/SimpleSearch.cs +78 -0
- data/csharp/docs/index.html +211 -0
- data/csharp/util.i +233 -0
- data/csharp/xapian_wrap.cc +10338 -0
- data/csharp/xapian_wrap.h +93 -0
- data/depcomp +632 -0
- data/extconf.rb +20 -0
- data/generic/except.i +80 -0
- data/generic/generic.mk +48 -0
- data/install-sh +520 -0
- data/java-swig/.deps/xapian_wrap.Plo +1 -0
- data/java-swig/Auto.java +35 -0
- data/java-swig/BM25Weight.java +81 -0
- data/java-swig/BoolWeight.java +77 -0
- data/java-swig/Database.java +195 -0
- data/java-swig/DateValueRangeProcessor.java +51 -0
- data/java-swig/Document.java +135 -0
- data/java-swig/ESet.java +71 -0
- data/java-swig/ESetIterator.java +71 -0
- data/java-swig/Enquire.java +246 -0
- data/java-swig/ExpandDecider.java +59 -0
- data/java-swig/Flint.java +43 -0
- data/java-swig/InMemory.java +35 -0
- data/java-swig/MSet.java +143 -0
- data/java-swig/MSetIterator.java +87 -0
- data/java-swig/Makefile +781 -0
- data/java-swig/Makefile.am +132 -0
- data/java-swig/Makefile.in +781 -0
- data/java-swig/MatchDecider.java +59 -0
- data/java-swig/MultiValueSorter.java +51 -0
- data/java-swig/NumberValueRangeProcessor.java +51 -0
- data/java-swig/PositionIterator.java +63 -0
- data/java-swig/PostingIterator.java +83 -0
- data/java-swig/Quartz.java +43 -0
- data/java-swig/Query.java +189 -0
- data/java-swig/QueryParser.java +214 -0
- data/java-swig/RSet.java +79 -0
- data/java-swig/Remote.java +71 -0
- data/java-swig/SWIGTYPE_p_std__string.java +25 -0
- data/java-swig/SimpleStopper.java +51 -0
- data/java-swig/SmokeTest.java +161 -0
- data/java-swig/Sorter.java +59 -0
- data/java-swig/Stem.java +51 -0
- data/java-swig/Stopper.java +63 -0
- data/java-swig/StringValueRangeProcessor.java +43 -0
- data/java-swig/TermGenerator.java +158 -0
- data/java-swig/TermIterator.java +83 -0
- data/java-swig/TradWeight.java +81 -0
- data/java-swig/ValueIterator.java +67 -0
- data/java-swig/ValueRangeProcessor.java +59 -0
- data/java-swig/Version.java +47 -0
- data/java-swig/Weight.java +68 -0
- data/java-swig/WritableDatabase.java +123 -0
- data/java-swig/Xapian.java +39 -0
- data/java-swig/XapianConstants.java +15 -0
- data/java-swig/XapianJNI.java +508 -0
- data/java-swig/run-java-test +6 -0
- data/java-swig/xapian_wrap.cc +12594 -0
- data/java-swig/xapian_wrap.h +91 -0
- data/java/Makefile +660 -0
- data/java/Makefile.am +35 -0
- data/java/Makefile.in +660 -0
- data/java/README +76 -0
- data/java/SmokeTest.java +148 -0
- data/java/native/.deps/Database.Plo +1 -0
- data/java/native/.deps/Document.Plo +1 -0
- data/java/native/.deps/ESet.Plo +1 -0
- data/java/native/.deps/ESetIterator.Plo +1 -0
- data/java/native/.deps/Enquire.Plo +1 -0
- data/java/native/.deps/MSet.Plo +1 -0
- data/java/native/.deps/MSetIterator.Plo +1 -0
- data/java/native/.deps/PositionIterator.Plo +1 -0
- data/java/native/.deps/Query.Plo +1 -0
- data/java/native/.deps/RSet.Plo +1 -0
- data/java/native/.deps/Stem.Plo +1 -0
- data/java/native/.deps/TermIterator.Plo +1 -0
- data/java/native/.deps/WritableDatabase.Plo +1 -0
- data/java/native/.deps/org_xapian_XapianJNI.Plo +1 -0
- data/java/native/.deps/utils.Plo +1 -0
- data/java/native/Database.cc +222 -0
- data/java/native/Document.cc +173 -0
- data/java/native/ESet.cc +79 -0
- data/java/native/ESetIterator.cc +82 -0
- data/java/native/Enquire.cc +271 -0
- data/java/native/MSet.cc +169 -0
- data/java/native/MSetIterator.cc +107 -0
- data/java/native/Makefile +594 -0
- data/java/native/Makefile.am +51 -0
- data/java/native/Makefile.in +594 -0
- data/java/native/PositionIterator.cc +64 -0
- data/java/native/Query.cc +180 -0
- data/java/native/RSet.cc +98 -0
- data/java/native/Stem.cc +75 -0
- data/java/native/TermIterator.cc +107 -0
- data/java/native/WritableDatabase.cc +118 -0
- data/java/native/XapianObjectHolder.h +115 -0
- data/java/native/org_xapian_XapianJNI.cc +78 -0
- data/java/native/org_xapian_XapianJNI.h +1369 -0
- data/java/native/utils.cc +51 -0
- data/java/native/xapian_jni.h +116 -0
- data/java/org/xapian/Database.java +148 -0
- data/java/org/xapian/Document.java +135 -0
- data/java/org/xapian/ESet.java +66 -0
- data/java/org/xapian/ESetIterator.java +97 -0
- data/java/org/xapian/Enquire.java +136 -0
- data/java/org/xapian/ExpandDecider.java +30 -0
- data/java/org/xapian/MSet.java +104 -0
- data/java/org/xapian/MSetIterator.java +132 -0
- data/java/org/xapian/Makefile +580 -0
- data/java/org/xapian/Makefile.am +38 -0
- data/java/org/xapian/Makefile.in +580 -0
- data/java/org/xapian/MatchDecider.java +30 -0
- data/java/org/xapian/PositionIterator.java +89 -0
- data/java/org/xapian/Query.java +190 -0
- data/java/org/xapian/RSet.java +89 -0
- data/java/org/xapian/Stem.java +80 -0
- data/java/org/xapian/TermIterator.java +142 -0
- data/java/org/xapian/WritableDatabase.java +92 -0
- data/java/org/xapian/Xapian.java +114 -0
- data/java/org/xapian/XapianJNI.java +444 -0
- data/java/org/xapian/errors/AssertionError.java +40 -0
- data/java/org/xapian/errors/DatabaseCorruptError.java +40 -0
- data/java/org/xapian/errors/DatabaseError.java +40 -0
- data/java/org/xapian/errors/DatabaseLockError.java +40 -0
- data/java/org/xapian/errors/DatabaseModifiedError.java +40 -0
- data/java/org/xapian/errors/DatabaseOpeningError.java +40 -0
- data/java/org/xapian/errors/DocNotFoundError.java +40 -0
- data/java/org/xapian/errors/FeatureUnavailableError.java +40 -0
- data/java/org/xapian/errors/InternalError.java +40 -0
- data/java/org/xapian/errors/InvalidArgumentError.java +40 -0
- data/java/org/xapian/errors/InvalidOperationError.java +40 -0
- data/java/org/xapian/errors/LogicError.java +40 -0
- data/java/org/xapian/errors/Makefile +416 -0
- data/java/org/xapian/errors/Makefile.am +32 -0
- data/java/org/xapian/errors/Makefile.in +416 -0
- data/java/org/xapian/errors/NetworkError.java +40 -0
- data/java/org/xapian/errors/NetworkTimeoutError.java +40 -0
- data/java/org/xapian/errors/RangeError.java +40 -0
- data/java/org/xapian/errors/RuntimeError.java +40 -0
- data/java/org/xapian/errors/UnimplementedError.java +40 -0
- data/java/org/xapian/errors/XapianError.java +40 -0
- data/java/org/xapian/errors/XapianRuntimeError.java +49 -0
- data/java/org/xapian/examples/Makefile +391 -0
- data/java/org/xapian/examples/Makefile.am +8 -0
- data/java/org/xapian/examples/Makefile.in +391 -0
- data/java/org/xapian/examples/SimpleIndex.java +68 -0
- data/java/org/xapian/examples/SimpleSearch.java +71 -0
- data/java/run-java-test +6 -0
- data/libtool +7618 -0
- data/ltmain.sh +6956 -0
- data/mhs-xapian.gemspec +368 -0
- data/missing +378 -0
- data/php/.deps/xapian_wrap.Plo +1 -0
- data/php/Makefile +871 -0
- data/php/Makefile.am +82 -0
- data/php/Makefile.in +871 -0
- data/php/docs/Makefile +453 -0
- data/php/docs/Makefile.am +19 -0
- data/php/docs/Makefile.in +453 -0
- data/php/docs/examples/simpleexpand.php4 +108 -0
- data/php/docs/examples/simpleexpand.php5 +104 -0
- data/php/docs/examples/simpleindex.php4 +76 -0
- data/php/docs/examples/simpleindex.php5 +73 -0
- data/php/docs/examples/simplesearch.php4 +75 -0
- data/php/docs/examples/simplesearch.php5 +72 -0
- data/php/docs/index.html +313 -0
- data/php/except.i +98 -0
- data/php/php4/php_xapian.h +323 -0
- data/php/php4/xapian.php +32 -0
- data/php/php4/xapian_wrap.cc +27656 -0
- data/php/php5/php_xapian.h +319 -0
- data/php/php5/xapian.php +1566 -0
- data/php/php5/xapian_wrap.cc +24330 -0
- data/php/smoketest.php +246 -0
- data/php/smoketest4.php +84 -0
- data/php/smoketest5.php +79 -0
- data/php/util.i +187 -0
- data/python/.deps/xapian_wrap.Plo +1 -0
- data/python/Makefile +891 -0
- data/python/Makefile.am +105 -0
- data/python/Makefile.in +891 -0
- data/python/doccomments.i +5134 -0
- data/python/docs/Makefile +448 -0
- data/python/docs/Makefile.am +14 -0
- data/python/docs/Makefile.in +448 -0
- data/python/docs/examples/simpleexpand.py +98 -0
- data/python/docs/examples/simpleindex.py +65 -0
- data/python/docs/examples/simplematchdecider.py +78 -0
- data/python/docs/examples/simplesearch.py +65 -0
- data/python/docs/index.html +420 -0
- data/python/except.i +290 -0
- data/python/extra.i +1048 -0
- data/python/extracomments.i +28 -0
- data/python/generate-python-exceptions +189 -0
- data/python/generate-python-exceptions.in +189 -0
- data/python/modern/xapian.py +5662 -0
- data/python/modern/xapian_wrap.cc +35170 -0
- data/python/modern/xapian_wrap.h +244 -0
- data/python/pythontest.py +1110 -0
- data/python/smoketest.py +328 -0
- data/python/testsuite.py +382 -0
- data/python/util.i +517 -0
- data/ruby/.deps/xapian_wrap.Plo +494 -0
- data/ruby/.libs/_xapian.bundle +0 -0
- data/ruby/.libs/_xapian.bundle.dSYM/Contents/Info.plist +25 -0
- data/ruby/.libs/_xapian.bundle.dSYM/Contents/Resources/DWARF/_xapian.bundle +0 -0
- data/ruby/.libs/_xapian.la +35 -0
- data/ruby/.libs/_xapian.lai +35 -0
- data/ruby/Makefile +854 -0
- data/ruby/Makefile.am +62 -0
- data/ruby/Makefile.in +854 -0
- data/ruby/_xapian.la +35 -0
- data/ruby/docs/Makefile +487 -0
- data/ruby/docs/Makefile.am +50 -0
- data/ruby/docs/Makefile.in +487 -0
- data/ruby/docs/examples/simpleexpand.rb +98 -0
- data/ruby/docs/examples/simpleindex.rb +60 -0
- data/ruby/docs/examples/simplematchdecider.rb +74 -0
- data/ruby/docs/examples/simplesearch.rb +63 -0
- data/ruby/docs/index.html +197 -0
- data/ruby/smoketest.rb +211 -0
- data/ruby/util.i +232 -0
- data/ruby/xapian.rb +280 -0
- data/ruby/xapian_wrap.cc +25837 -0
- data/ruby/xapian_wrap.h +65 -0
- data/ruby/xapian_wrap.lo +12 -0
- data/skiptest +2 -0
- data/stamp-h1 +1 -0
- data/tcl8/.deps/xapian_wrap.Plo +1 -0
- data/tcl8/Makefile +835 -0
- data/tcl8/Makefile.am +49 -0
- data/tcl8/Makefile.in +835 -0
- data/tcl8/docs/Makefile +448 -0
- data/tcl8/docs/Makefile.am +14 -0
- data/tcl8/docs/Makefile.in +448 -0
- data/tcl8/docs/examples/simpleexpand.tcl +104 -0
- data/tcl8/docs/examples/simpleindex.tcl +68 -0
- data/tcl8/docs/examples/simplesearch.tcl +66 -0
- data/tcl8/docs/index.html +208 -0
- data/tcl8/except.i +48 -0
- data/tcl8/pkgIndex.tcl +1 -0
- data/tcl8/pkgIndex.tcl.in +1 -0
- data/tcl8/run-tcl-test +15 -0
- data/tcl8/runtest.tcl +29 -0
- data/tcl8/smoketest.tcl +155 -0
- data/tcl8/util.i +76 -0
- data/tcl8/xapian_wrap.cc +20900 -0
- data/xapian-bindings.spec +206 -0
- data/xapian-bindings.spec.in +206 -0
- data/xapian-version.h +1 -0
- data/xapian-version.h.in +1 -0
- data/xapian.i +939 -0
- 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]
|