00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef XAPIAN_INCLUDED_QUERYPARSER_INTERNAL_H
00023 #define XAPIAN_INCLUDED_QUERYPARSER_INTERNAL_H
00024
00025 #include <xapian/base.h>
00026 #include <xapian/database.h>
00027 #include <xapian/query.h>
00028 #include <xapian/queryparser.h>
00029 #include <xapian/stem.h>
00030
00031 #include <list>
00032 #include <map>
00033
00034 using namespace std;
00035
00036 class State;
00037
00039 struct PrefixInfo {
00041 bool filter;
00042
00044 list<string> prefixes;
00045
00046 PrefixInfo(bool filter_, const string & prefix)
00047 : filter(filter_)
00048 {
00049 prefixes.push_back(prefix);
00050 }
00051 };
00052
00053 namespace Xapian {
00054
00055 class Utf8Iterator;
00056
00057 class QueryParser::Internal : public Xapian::Internal::RefCntBase {
00058 friend class QueryParser;
00059 friend class ::State;
00060 Stem stemmer;
00061 stem_strategy stem_action;
00062 const Stopper * stopper;
00063 Query::op default_op;
00064 const char * errmsg;
00065 Database db;
00066 list<string> stoplist;
00067 multimap<string, string> unstem;
00068
00069
00070
00071 map<string, PrefixInfo> prefixmap;
00072
00073 list<ValueRangeProcessor *> valrangeprocs;
00074
00075 string corrected_query;
00076
00077 void add_prefix(const string &field, const string &prefix, bool filter);
00078
00079 std::string parse_term(Utf8Iterator &it, const Utf8Iterator &end,
00080 bool &was_acronym);
00081
00082 public:
00083 Internal() : stem_action(STEM_NONE), stopper(NULL),
00084 default_op(Query::OP_OR), errmsg(NULL) { }
00085 Query parse_query(const string & query_string, unsigned int flags, const string & default_prefix);
00086 };
00087
00088 }
00089
00090 #endif // XAPIAN_INCLUDED_QUERYPARSER_INTERNAL_H