summaryrefslogtreecommitdiffstats
path: root/debian/htdig/htdig-3.2.0b6/htsearch/QueryLexer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'debian/htdig/htdig-3.2.0b6/htsearch/QueryLexer.cc')
-rw-r--r--debian/htdig/htdig-3.2.0b6/htsearch/QueryLexer.cc84
1 files changed, 84 insertions, 0 deletions
diff --git a/debian/htdig/htdig-3.2.0b6/htsearch/QueryLexer.cc b/debian/htdig/htdig-3.2.0b6/htsearch/QueryLexer.cc
new file mode 100644
index 00000000..ea57e3ce
--- /dev/null
+++ b/debian/htdig/htdig-3.2.0b6/htsearch/QueryLexer.cc
@@ -0,0 +1,84 @@
+//
+// QueryLexer.cc
+//
+// QueryLexer: (abstract) a lexical analyzer used by a QueryParser.
+// This class defines the common public interface of this
+// family of lexers. It implements a tokenizer, and also
+// the definition of the 'quote' and 'end' terminal symbols.
+//
+// Part of the ht://Dig package <http://www.htdig.org/>
+// Copyright (c) 1995-2004 The ht://Dig Group
+// For copyright details, see the file COPYING in your distribution
+// or the GNU Library General Public License (LGPL) version 2 or later
+// <http://www.gnu.org/copyleft/lgpl.html>
+//
+// $Id: QueryLexer.cc,v 1.4 2004/05/28 13:15:24 lha Exp $
+//
+
+#include "QueryLexer.h"
+#include "defaults.h"
+#include "WordType.h"
+
+
+extern int debug;
+
+QueryLexer::QueryLexer()
+{
+ HtConfiguration* config= HtConfiguration::config();
+ prefix_match = config->Find("prefix_match_character");
+}
+
+void
+QueryLexer::Set(const String &query_string)
+{
+ query = query_string;
+ current_char = 0;
+ Next();
+}
+
+void
+QueryLexer::Next()
+{
+ HtConfiguration* config= HtConfiguration::config();
+ unsigned char text = query[current_char];
+ WordType type(*config);
+ current = "";
+
+ while (text
+ && !current.length()
+ && !type.IsStrictChar(text))
+ {
+ if (text == '(' || text == ')' || text == '\"' || text == '/')
+ {
+ current << text;
+ if (debug) cerr << "lexer symbol: " << current << endl;
+ }
+ text = query[++current_char];
+ }
+
+ if (!current.length() && text)
+ {
+ while (text
+ && (type.IsChar(text) && text != '/'
+ || prefix_match.indexOf(text, 0) != -1))
+ {
+ current << text;
+ text = query[++current_char];
+ }
+ }
+ current.lowercase();
+ if (debug) cerr << "lexer current word: " << current << endl;
+}
+
+bool
+QueryLexer::IsEnd() const
+{
+ return current == String("");
+}
+
+bool
+QueryLexer::IsQuote() const
+{
+ return current == String("\"");
+}
+