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,71 @@
1
+ // Index each paragraph of a text file as a Xapian document.
2
+ //
3
+ // Copyright (c) 2003 James Aylett
4
+ // Copyright (c) 2004,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
+ using System;
22
+
23
+ class SimpleIndex {
24
+ public static void Main(string[] argv) {
25
+ if (argv.Length != 1) {
26
+ Console.Error.WriteLine("Usage: SimpleIndex PATH_TO_DATABASE");
27
+ Environment.Exit(1);
28
+ }
29
+
30
+ try {
31
+ // Open the database for update, creating a new database if
32
+ // necessary.
33
+ Xapian.WritableDatabase database;
34
+ database = new Xapian.WritableDatabase(argv[0], Xapian.Xapian.DB_CREATE_OR_OPEN);
35
+
36
+ Xapian.TermGenerator indexer = new Xapian.TermGenerator();
37
+ Xapian.Stem stemmer = new Xapian.Stem("english");
38
+ indexer.SetStemmer(stemmer);
39
+
40
+ string para = "";
41
+ while (true) {
42
+ string line = Console.In.ReadLine();
43
+ if (line == null) {
44
+ if (para == "") break;
45
+ line = "";
46
+ }
47
+ line = line.Trim();
48
+ if (line == "") {
49
+ if (para != "") {
50
+ // We've reached the end of a paragraph, so index it.
51
+ Xapian.Document doc = new Xapian.Document();
52
+ doc.SetData(para);
53
+
54
+ indexer.SetDocument(doc);
55
+ indexer.IndexText(para);
56
+
57
+ // Add the document to the database.
58
+ database.AddDocument(doc);
59
+ para = "";
60
+ }
61
+ } else {
62
+ if (para != "") para += " ";
63
+ para += line;
64
+ }
65
+ }
66
+ } catch (Exception e) {
67
+ Console.Error.WriteLine("Exception: " + e.ToString());
68
+ Environment.Exit(1);
69
+ }
70
+ }
71
+ }
@@ -0,0 +1,78 @@
1
+ // Simple command-line search utility.
2
+ //
3
+ // Copyright (c) 2003 James Aylett
4
+ // Copyright (c) 2004,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
+ using System;
22
+
23
+ class SimpleIndex {
24
+ public static void Main(string[] argv) {
25
+ // We require at least two command line arguments.
26
+ if (argv.Length < 2) {
27
+ Console.Error.WriteLine("Usage: SimpleSearch PATH_TO_DATABASE QUERY");
28
+ Environment.Exit(1);
29
+ }
30
+
31
+ try {
32
+ // Open the database for searching.
33
+ Xapian.Database database = new Xapian.Database(argv[0]);
34
+
35
+ // Start an enquire session.
36
+ Xapian.Enquire enquire = new Xapian.Enquire(database);
37
+
38
+ // Combine the rest of the command line arguments with spaces
39
+ // between them, so that simple queries don't have to be quoted at
40
+ // the shell level.
41
+ string query_string = argv[1];
42
+ for (int i = 2; i < argv.Length; ++i) {
43
+ query_string += ' ';
44
+ query_string += argv[i];
45
+ }
46
+
47
+ // Parse the query string to produce a Xapian::Query object.
48
+ Xapian.QueryParser qp = new Xapian.QueryParser();
49
+ Xapian.Stem stemmer = new Xapian.Stem("english");
50
+ qp.SetStemmer(stemmer);
51
+ qp.SetDatabase(database);
52
+ qp.SetStemmingStrategy(Xapian.QueryParser.stem_strategy.STEM_SOME);
53
+ Xapian.Query query = qp.ParseQuery(query_string);
54
+ Console.WriteLine("Parsed query is: " + query.GetDescription());
55
+
56
+ // Find the top 10 results for the query.
57
+ enquire.SetQuery(query);
58
+ Xapian.MSet matches = enquire.GetMSet(0, 10);
59
+
60
+ // Display the results.
61
+ Console.WriteLine("{0} results found.", matches.GetMatchesEstimated());
62
+ Console.WriteLine("Matches 1-{0}:", matches.Size());
63
+
64
+ Xapian.MSetIterator m = matches.Begin();
65
+ while (m != matches.End()) {
66
+ Console.WriteLine("{0}: {1}% docid={2} [{3}]\n",
67
+ m.GetRank() + 1,
68
+ m.GetPercent(),
69
+ m.GetDocId(),
70
+ m.GetDocument().GetData());
71
+ ++m;
72
+ }
73
+ } catch (Exception e) {
74
+ Console.Error.WriteLine("Exception: " + e.ToString());
75
+ Environment.Exit(1);
76
+ }
77
+ }
78
+ }
@@ -0,0 +1,211 @@
1
+ <html><head><title>C# bindings for Xapian</title></head>
2
+ <body>
3
+ <h1>C# bindings for Xapian</h1>
4
+
5
+ <p>
6
+ The C# 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. C# strings and other types 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
+ C# bindings based on the simple examples from <code>xapian-examples</code>:
15
+ <a href="examples/SimpleIndex.cs">SimpleIndex.cs</a>,
16
+ <a href="examples/SimpleSearch.cs">SimpleSearch.cs</a>,
17
+ <a href="examples/SimpleExpand.cs">SimpleExpand.cs</a>.
18
+ </p>
19
+
20
+ <p>
21
+ Note: the passing of strings from C# into Xapian and back isn't currently
22
+ zero byte safe. If you try to handle string containing zero bytes, you'll
23
+ find they get truncated at the zero byte.
24
+ </p>
25
+
26
+ <h2>Unicode Support</h2>
27
+
28
+ <p>
29
+ In Xapian 1.0.0 and later, the Xapian::Stem, Xapian::QueryParser, and
30
+ Xapian::TermGenerator classes all assume text is in UTF-8. If you're
31
+ using Mono on UNIX with a UTF-8 locale (which is the default on most
32
+ modern Linux distributions), then Xapian appears to get passed Unicode
33
+ strings as UTF-8, so it should just work. We tested with Mono 1.2.3.1
34
+ using the Mono C# 2.0 compiler (gmcs).
35
+ </p>
36
+
37
+ <p>
38
+ However, Microsoft and Mono's C# implementations apparently take
39
+ rather different approaches to Unicode, and we've not tested with
40
+ Microsoft's implementation. If you try it, please report how well
41
+ it works (or how badly it fails...)
42
+ </p>
43
+
44
+ <h2>Method Naming Conventions</h2>
45
+
46
+ <p>
47
+ Methods are renamed to use the "CamelCase" capitalisation convention which C#
48
+ normally uses. So in C# you use <code>GetDescription</code> instead of
49
+ <code>get_description</code>.
50
+ </p>
51
+
52
+ <h2>Exceptions</h2>
53
+
54
+ <p>
55
+ Exceptions are thrown as SWIG exceptions instead of Xapian
56
+ exceptions. This isn't done well at the moment; in future we will
57
+ throw wrapped Xapian exceptions. For now, it's probably easier to
58
+ catch all exceptions and try to take appropriate action based on
59
+ their associated string.
60
+ </p>
61
+
62
+ <h2>Iterators</h2>
63
+
64
+ <p>
65
+ The C#-wrapped iterators work much like their C++ counterparts, with
66
+ operators "++", "--", "==", and "!=" overloaded. E.g.:
67
+ </p>
68
+
69
+ <pre>
70
+ Xapian.MSetIterator m = mset.begin();
71
+ while (m != mset.end()) {
72
+ // do something
73
+ ++m;
74
+ }
75
+ </pre>
76
+
77
+ <h2>Iterator dereferencing</h2>
78
+
79
+ <p>
80
+ C++ iterators are often dereferenced to get information, eg
81
+ <code>(*it)</code>. In C# these are all mapped to named methods, as
82
+ follows:
83
+ </p>
84
+
85
+ <table title='Iterator deferencing methods'>
86
+ <thead><td>Iterator</td><td>Dereferencing method</td></thead>
87
+ <tr><td>PositionIterator</td> <td><code>GetTermPos()</code></td></tr>
88
+ <tr><td>PostingIterator</td> <td><code>GetDocId()</code></td></tr>
89
+ <tr><td>TermIterator</td> <td><code>GetTerm()</code></td></tr>
90
+ <tr><td>ValueIterator</td> <td><code>GetValue()</code></td></tr>
91
+ <tr><td>MSetIterator</td> <td><code>GetDocId()</code></td></tr>
92
+ <tr><td>ESetIterator</td> <td><code>GetTerm()</code></td></tr>
93
+ </table>
94
+
95
+ <p>
96
+ Other methods, such as <code>MSetIterator.GetDocument()</code>, are
97
+ available unchanged.
98
+ </p>
99
+
100
+ <h2>MSet</h2>
101
+
102
+ <p>
103
+ MSet objects have some additional methods to simplify access (these
104
+ work using the C++ array dereferencing):
105
+ </p>
106
+
107
+ <table title='MSet additional methods'>
108
+ <thead><td>Method name</td><td>Explanation</td></thead>
109
+ <tr><td><code>GetHit(index)</code></td><td>returns MSetIterator at index</td></tr>
110
+ <tr><td><code>GetDocumentPercentage(index)</code></td><td><code>ConvertToPercent(GetHit(index))</code></td></tr>
111
+ <tr><td><code>GetDocument(index)</code></td><td><code>GetHit(index).GetDocument()</code></td></tr>
112
+ <tr><td><code>GetDocumentId(index)</code></td><td><code>GetHit(index).GetDocId()</code></td></tr>
113
+ </table>
114
+
115
+ <h2>Non-Class Functions</h2>
116
+
117
+ <p>The C++ API contains a few non-class functions (the Database factory
118
+ functions, and some functions reporting version information), but C# doesn't
119
+ allow functions which aren't in a class so these are wrapped as static
120
+ member functions of abstract classes like so:
121
+ <ul>
122
+ <ul>
123
+ <li> <code>Xapian::version_string()</code> is wrapped as <code>Xapian.Version.String()</code>
124
+ <li> <code>Xapian::major_version()</code> is wrapped as <code>Xapian.Version.Major()</code>
125
+ <li> <code>Xapian::minor_version()</code> is wrapped as <code>Xapian.Version.Minor()</code>
126
+ <li> <code>Xapian::revision()</code> is wrapped as <code>Xapian.Version.Revision()</code>
127
+ </ul>
128
+ <ul>
129
+ <li> <code>Xapian::Auto::open_stub()</code> is wrapped as <code>Xapian.Auto.OpenStub()</code>
130
+ <li> <code>Xapian::Flint::open()</code> is wrapped as <code>Xapian.Flint.Open()</code>
131
+ <li> <code>Xapian::InMemory::open()</code> is wrapped as <code>Xapian.InMemory.Open()</code>
132
+ <li> <code>Xapian::Quartz::open()</code> is wrapped as <code>Xapian.Quartz.Open()</code>
133
+ <li> <code>Xapian::Remote::open()</code> is wrapped as <code>Xapian.Remote.Open()</code> (both
134
+ the TCP and "program" versions are wrapped - the SWIG wrapper checks the parameter list to
135
+ decide which to call).
136
+ <li> <code>Xapian::Remote::open_writable()</code> is wrapped as <code>Xapian.Remote.OpenWritable()</code> (both
137
+ the TCP and "program" versions are wrapped - the SWIG wrapper checks the parameter list to
138
+ decide which to call).
139
+ </ul>
140
+ </ul>
141
+
142
+ <h2>Constants</h2>
143
+
144
+ <p>
145
+ The <code>Xapian::DB_*</code> constants are currently wrapped in a Xapian
146
+ class within the Xapian namespace, so have a double Xapian prefix!
147
+ So <code>Xapian::DB_CREATE_OR_OPEN</code> is available as
148
+ <code>Xapian.Xapian.DB_CREATE_OR_OPEN</code>.
149
+ The <code>Query::OP_*</code> constants are wrapped a little oddly too:
150
+ <code>Query::OP_OR</code> is wrapped as <code>Xapian.Query.op.OP_OR</code>.
151
+ Similarly, <code>QueryParser::STEM_SOME</code> as
152
+ <code>Xapian.QueryParser.stem_strategy.STEM_SOME</code>.
153
+ The naming here needs sorting out...
154
+ </p>
155
+
156
+ <h2>Query</h2>
157
+
158
+ <p>
159
+ In C++ there's a Xapian::Query constructor which takes a query operator and
160
+ start/end iterators specifying a number of terms or queries, plus an optional
161
+ parameter.
162
+ This isn't currently wrapped in C#.
163
+ <!-- FIXME implement this wrapping!
164
+
165
+ In C#, this is wrapped to accept any C# sequence (for
166
+ example a list or tuple) to give the terms/queries, and you can specify
167
+ a mixture of terms and queries if you wish. For example:
168
+ -->
169
+ </p>
170
+
171
+ <!--
172
+ <pre>
173
+ subq = xapian.Query(xapian.Query.OP_AND, "hello", "world")
174
+ q = xapian.Query(xapian.Query.OP_AND, [subq, "foo", xapian.Query("bar", 2)])
175
+ </pre>
176
+ -->
177
+
178
+ <!-- FIXME: Need to define the custom output typemap to handle this if it
179
+ actually seems useful...
180
+ <h2>Enquire</h2>
181
+
182
+ <p>
183
+ There is an additional method <code>GetMatchingTerms()</code> which takes
184
+ an MSetIterator and returns a list of terms in the current query which
185
+ match the document given by that iterator. You may find this
186
+ more convenient than using the TermIterator directly.
187
+ </p>
188
+ -->
189
+
190
+ <h2>MatchDecider</h2>
191
+
192
+ <p>
193
+ Custom MatchDeciders can be created in C#; simply subclass
194
+ Xapian.MatchDecider, and define an
195
+ Apply method that will do the work. The simplest example (which does nothing
196
+ useful) would be as follows:
197
+ </p>
198
+
199
+ <pre>
200
+ class MyMatchDecider : Xapian.MatchDecider {
201
+ public override bool Apply(Xapian.Document doc) {
202
+ return true;
203
+ }
204
+ }
205
+ </pre>
206
+
207
+ <address>
208
+ Last updated $Date: 2005-12-12T02:56:23.742308Z $
209
+ </address>
210
+ </body>
211
+ </html>
data/csharp/util.i ADDED
@@ -0,0 +1,233 @@
1
+ %{
2
+ /* csharp/util.i: custom C# typemaps for xapian-bindings
3
+ *
4
+ * Copyright (c) 2005,2006 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
+ // In C#, we don't get SWIG_exception in the generated C++ wrapper sources.
23
+ #define XapianException(TYPE, MSG) SWIG_CSharpException(TYPE, (MSG).c_str())
24
+ %}
25
+
26
+ // Use SWIG directors for C# wrappers.
27
+ #define XAPIAN_SWIG_DIRECTORS
28
+
29
+ // Rename function and method names to match C# conventions (e.g. from
30
+ // get_description() to GetDescription()).
31
+ %rename("%(camelcase)s",%$isfunction) "";
32
+
33
+ // Fix up API methods which aren't split by '_' on word boundaries.
34
+ %rename("GetTermPos") get_termpos;
35
+ %rename("GetTermFreq") get_termfreq;
36
+ %rename("GetTermWeight") get_termweight;
37
+ %rename("GetTermName") get_termname;
38
+ %rename("GetDocCount") get_doccount;
39
+ %rename("GetDocId") get_docid;
40
+ %rename("GetDocLength") get_doclength;
41
+ %rename("GetDocumentId") get_document_id;
42
+ %rename("PositionListBegin") positionlist_begin;
43
+ %rename("PositionListEnd") positionlist_end;
44
+ %rename("GetValueNo") get_valueno;
45
+ %rename("TermListCount") termlist_count;
46
+ %rename("TermListBegin") termlist_begin;
47
+ %rename("TermListEnd") termlist_end;
48
+ %rename("GetFirstItem") get_firstitem;
49
+ %rename("GetSumPart") get_sumpart;
50
+ %rename("GetMaxPart") get_maxpart;
51
+ %rename("GetSumExtra") get_sumextra;
52
+ %rename("GetMaxExtra") get_maxextra;
53
+ %rename("GetSumPartNeedsDocLength") get_sumpart_needs_doclength;
54
+ %rename("PostListBegin") postlist_begin;
55
+ %rename("PostListEnd") postlist_end;
56
+ %rename("AllTermsBegin") allterms_begin;
57
+ %rename("AllTermsEnd") allterms_end;
58
+ %rename("GetLastDocId") get_lastdocid;
59
+ %rename("GetAvLength") get_avlength;
60
+ %rename("StopListBegin") stoplist_begin;
61
+ %rename("StopListEnd") stoplist_end;
62
+ %rename("GetMSet") get_mset;
63
+ %rename("GetESet") get_eset;
64
+
65
+ %ignore ValueRangeProcessor::operator();
66
+
67
+ %inline {
68
+ namespace Xapian {
69
+
70
+ // Wrap Xapian::version_string as Xapian.Version.String() as C# can't have
71
+ // functions outside a class and we don't want Xapian.Xapian.VersionString()!
72
+ class Version {
73
+ private:
74
+ Version();
75
+ ~Version();
76
+ public:
77
+ static const char * String() { return Xapian::version_string(); }
78
+ static int Major() { return Xapian::major_version(); }
79
+ static int Minor() { return Xapian::minor_version(); }
80
+ static int Revision() { return Xapian::revision(); }
81
+ };
82
+
83
+ }
84
+ }
85
+
86
+ namespace Xapian {
87
+
88
+ %ignore version_string;
89
+ %ignore major_version;
90
+ %ignore minor_version;
91
+ %ignore revision;
92
+
93
+ %typemap(cscode) class MSetIterator %{
94
+ public static MSetIterator operator++(MSetIterator it) {
95
+ return it.Next();
96
+ }
97
+ public static MSetIterator operator--(MSetIterator it) {
98
+ return it.Prev();
99
+ }
100
+ public override bool Equals(object o) {
101
+ return o is MSetIterator && Equals((MSetIterator)o);
102
+ }
103
+ public static bool operator==(MSetIterator a, MSetIterator b) {
104
+ if ((object)a == (object)b) return true;
105
+ if ((object)a == null || (object)b == null) return false;
106
+ return a.Equals(b);
107
+ }
108
+ public static bool operator!=(MSetIterator a, MSetIterator b) {
109
+ if ((object)a == (object)b) return false;
110
+ if ((object)a == null || (object)b == null) return true;
111
+ return !a.Equals(b);
112
+ }
113
+ // Implementing GetHashCode() to always return 0 is rather lame, but
114
+ // using iterators as keys in a hash table would be rather strange.
115
+ public override int GetHashCode() { return 0; }
116
+ %}
117
+
118
+ %typemap(cscode) ESetIterator %{
119
+ public static ESetIterator operator++(ESetIterator it) {
120
+ return it.Next();
121
+ }
122
+ public static ESetIterator operator--(ESetIterator it) {
123
+ return it.Prev();
124
+ }
125
+ public override bool Equals(object o) {
126
+ return o is ESetIterator && Equals((ESetIterator)o);
127
+ }
128
+ public static bool operator==(ESetIterator a, ESetIterator b) {
129
+ if ((object)a == (object)b) return true;
130
+ if ((object)a == null || (object)b == null) return false;
131
+ return a.Equals(b);
132
+ }
133
+ public static bool operator!=(ESetIterator a, ESetIterator b) {
134
+ if ((object)a == (object)b) return false;
135
+ if ((object)a == null || (object)b == null) return true;
136
+ return !a.Equals(b);
137
+ }
138
+ // Implementing GetHashCode() to always return 0 is rather lame, but
139
+ // using iterators as keys in a hash table would be rather strange.
140
+ public override int GetHashCode() { return 0; }
141
+ %}
142
+
143
+ %typemap(cscode) TermIterator %{
144
+ public static TermIterator operator++(TermIterator it) {
145
+ return it.Next();
146
+ }
147
+ public override bool Equals(object o) {
148
+ return o is TermIterator && Equals((TermIterator)o);
149
+ }
150
+ public static bool operator==(TermIterator a, TermIterator b) {
151
+ if ((object)a == (object)b) return true;
152
+ if ((object)a == null || (object)b == null) return false;
153
+ return a.Equals(b);
154
+ }
155
+ public static bool operator!=(TermIterator a, TermIterator b) {
156
+ if ((object)a == (object)b) return false;
157
+ if ((object)a == null || (object)b == null) return true;
158
+ return !a.Equals(b);
159
+ }
160
+ // Implementing GetHashCode() to always return 0 is rather lame, but
161
+ // using iterators as keys in a hash table would be rather strange.
162
+ public override int GetHashCode() { return 0; }
163
+ %}
164
+
165
+ %typemap(cscode) ValueIterator %{
166
+ public static ValueIterator operator++(ValueIterator it) {
167
+ return it.Next();
168
+ }
169
+ public override bool Equals(object o) {
170
+ return o is ValueIterator && Equals((ValueIterator)o);
171
+ }
172
+ public static bool operator==(ValueIterator a, ValueIterator b) {
173
+ if ((object)a == (object)b) return true;
174
+ if ((object)a == null || (object)b == null) return false;
175
+ return a.Equals(b);
176
+ }
177
+ public static bool operator!=(ValueIterator a, ValueIterator b) {
178
+ if ((object)a == (object)b) return false;
179
+ if ((object)a == null || (object)b == null) return true;
180
+ return !a.Equals(b);
181
+ }
182
+ // Implementing GetHashCode() to always return 0 is rather lame, but
183
+ // using iterators as keys in a hash table would be rather strange.
184
+ public override int GetHashCode() { return 0; }
185
+ %}
186
+
187
+ %typemap(cscode) PostingIterator %{
188
+ public static PostingIterator operator++(PostingIterator it) {
189
+ return it.Next();
190
+ }
191
+ public override bool Equals(object o) {
192
+ return o is PostingIterator && Equals((PostingIterator)o);
193
+ }
194
+ public static bool operator==(PostingIterator a, PostingIterator b) {
195
+ if ((object)a == (object)b) return true;
196
+ if ((object)a == null || (object)b == null) return false;
197
+ return a.Equals(b);
198
+ }
199
+ public static bool operator!=(PostingIterator a, PostingIterator b) {
200
+ if ((object)a == (object)b) return false;
201
+ if ((object)a == null || (object)b == null) return true;
202
+ return !a.Equals(b);
203
+ }
204
+ // Implementing GetHashCode() to always return 0 is rather lame, but
205
+ // using iterators as keys in a hash table would be rather strange.
206
+ public override int GetHashCode() { return 0; }
207
+ %}
208
+
209
+ %typemap(cscode) PositionIterator %{
210
+ public static PositionIterator operator++(PositionIterator it) {
211
+ return it.Next();
212
+ }
213
+ public override bool Equals(object o) {
214
+ return o is PositionIterator && Equals((PositionIterator)o);
215
+ }
216
+ public static bool operator==(PositionIterator a, PositionIterator b) {
217
+ if ((object)a == (object)b) return true;
218
+ if ((object)a == null || (object)b == null) return false;
219
+ return a.Equals(b);
220
+ }
221
+ public static bool operator!=(PositionIterator a, PositionIterator b) {
222
+ if ((object)a == (object)b) return false;
223
+ if ((object)a == null || (object)b == null) return true;
224
+ return !a.Equals(b);
225
+ }
226
+ // Implementing GetHashCode() to always return 0 is rather lame, but
227
+ // using iterators as keys in a hash table would be rather strange.
228
+ public override int GetHashCode() { return 0; }
229
+ %}
230
+
231
+ }
232
+
233
+ /* vim:set syntax=cpp:set noexpandtab: */