You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by sy...@apache.org on 2016/09/11 21:31:05 UTC
[34/50] [abbrv] lucenenet git commit: Moved Lucene.Net.QueryParser
and Lucene.Net.Tests.QueryParser projects into src\ directory.
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/679ad24c/Lucene.Net.QueryParser/Classic/QueryParserTokenManager.cs
----------------------------------------------------------------------
diff --git a/Lucene.Net.QueryParser/Classic/QueryParserTokenManager.cs b/Lucene.Net.QueryParser/Classic/QueryParserTokenManager.cs
deleted file mode 100644
index aac1505..0000000
--- a/Lucene.Net.QueryParser/Classic/QueryParserTokenManager.cs
+++ /dev/null
@@ -1,1356 +0,0 @@
-using System;
-using System.Diagnostics.CodeAnalysis;
-using System.IO;
-
-namespace Lucene.Net.QueryParser.Classic
-{
- /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
- /// <summary>Token Manager. </summary>
- public class QueryParserTokenManager //: QueryParserConstants
- {
- private void InitBlock()
- {
- StreamWriter temp_writer;
- temp_writer = new StreamWriter(Console.OpenStandardOutput(), Console.Out.Encoding);
- temp_writer.AutoFlush = true;
- debugStream = temp_writer;
- }
-
- /// <summary>Debug output. </summary>
- public StreamWriter debugStream;
- /// <summary>Set debug output. </summary>
- public virtual void SetDebugStream(StreamWriter ds)
- {
- debugStream = ds;
- }
- private int JjStopStringLiteralDfa_2(int pos, long active0)
- {
- switch (pos)
- {
-
- default:
- return - 1;
-
- }
- }
- private int JjStartNfa_2(int pos, long active0)
- {
- return JjMoveNfa_2(JjStopStringLiteralDfa_2(pos, active0), pos + 1);
- }
- private int JjStopAtPos(int pos, int kind)
- {
- jjmatchedKind = kind;
- jjmatchedPos = pos;
- return pos + 1;
- }
- private int JjMoveStringLiteralDfa0_2()
- {
- switch (curChar)
- {
-
- case (char) (40):
- return JjStopAtPos(0, 14);
-
- case (char) (41):
- return JjStopAtPos(0, 15);
-
- case (char) (42):
- return JjStartNfaWithStates_2(0, 17, 49);
-
- case (char) (43):
- return JjStartNfaWithStates_2(0, 11, 15);
-
- case (char) (45):
- return JjStartNfaWithStates_2(0, 12, 15);
-
- case (char) (58):
- return JjStopAtPos(0, 16);
-
- case (char) (91):
- return JjStopAtPos(0, 25);
-
- case (char) (94):
- return JjStopAtPos(0, 18);
-
- case (char) (123):
- return JjStopAtPos(0, 26);
-
- default:
- return JjMoveNfa_2(0, 0);
-
- }
- }
- private int JjStartNfaWithStates_2(int pos, int kind, int state)
- {
- jjmatchedKind = kind;
- jjmatchedPos = pos;
- try
- {
- curChar = input_stream.ReadChar();
- }
- catch (IOException)
- {
- return pos + 1;
- }
- return JjMoveNfa_2(state, pos + 1);
- }
- internal static readonly ulong[] jjbitVec0 = new ulong[]{0x1L, 0x0L, 0x0L, 0x0L};
- internal static readonly ulong[] jjbitVec1 = new ulong[]{0xfffffffffffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL};
- internal static readonly ulong[] jjbitVec3 = new ulong[]{0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL};
- internal static readonly ulong[] jjbitVec4 = new ulong[]{0xfffefffffffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL};
- private int JjMoveNfa_2(int startState, int curPos)
- {
- int startsAt = 0;
- jjnewStateCnt = 49;
- int i = 1;
- jjstateSet[0] = startState;
- int kind = 0x7fffffff;
- for (; ; )
- {
- if (++jjround == 0x7fffffff)
- ReInitRounds();
- if (curChar < 64)
- {
- ulong l = (ulong) (1L << (int) curChar);
- do
- {
- switch (jjstateSet[--i])
- {
-
- case 49:
- case 33:
- if ((0xfbff7cf8ffffd9ffL & l) == (ulong)0L)
- break;
- if (kind > 23)
- kind = 23;
- JjCheckNAddTwoStates(33, 34);
- break;
-
- case 0:
- if ((0xfbff54f8ffffd9ffL & l) != (ulong)0L)
- {
- if (kind > 23)
- kind = 23;
- JjCheckNAddTwoStates(33, 34);
- }
- else if ((0x100002600L & l) != 0L)
- {
- if (kind > 7)
- kind = 7;
- }
- else if ((0x280200000000L & l) != 0L)
- jjstateSet[jjnewStateCnt++] = 15;
- else if (curChar == 47)
- JjCheckNAddStates(0, 2);
- else if (curChar == 34)
- JjCheckNAddStates(3, 5);
- if ((0x7bff50f8ffffd9ffL & l) != 0L)
- {
- if (kind > 20)
- kind = 20;
- JjCheckNAddStates(6, 10);
- }
- else if (curChar == 42)
- {
- if (kind > 22)
- kind = 22;
- }
- else if (curChar == 33)
- {
- if (kind > 10)
- kind = 10;
- }
- if (curChar == 38)
- jjstateSet[jjnewStateCnt++] = 4;
- break;
-
- case 4:
- if (curChar == 38 && kind > 8)
- kind = 8;
- break;
-
- case 5:
- if (curChar == 38)
- jjstateSet[jjnewStateCnt++] = 4;
- break;
-
- case 13:
- if (curChar == 33 && kind > 10)
- kind = 10;
- break;
-
- case 14:
- if ((0x280200000000L & l) != 0L)
- jjstateSet[jjnewStateCnt++] = 15;
- break;
- case 15:
- if ((0x100002600L & l) != 0L && kind > 13)
- kind = 13;
- break;
- case 16:
- if (curChar == 34)
- JjCheckNAddStates(3, 5);
- break;
- case 17:
- if ((0xfffffffbffffffffL & l) != (ulong) 0L)
- JjCheckNAddStates(3, 5);
- break;
-
- case 19:
- JjCheckNAddStates(3, 5);
- break;
-
- case 20:
- if (curChar == 34 && kind > 19)
- kind = 19;
- break;
-
- case 22:
- if ((0x3ff000000000000L & l) == 0L)
- break;
- if (kind > 21)
- kind = 21;
- JjCheckNAddStates(11, 14);
- break;
-
- case 23:
- if (curChar == 46)
- JjCheckNAdd(24);
- break;
-
- case 24:
- if ((0x3ff000000000000L & l) == 0L)
- break;
- if (kind > 21)
- kind = 21;
- JjCheckNAddStates(15, 17);
- break;
-
- case 25:
- if ((0x7bff78f8ffffd9ffL & l) == (ulong)0L)
- break;
- if (kind > 21)
- kind = 21;
- JjCheckNAddTwoStates(25, 26);
- break;
-
- case 27:
- if (kind > 21)
- kind = 21;
- JjCheckNAddTwoStates(25, 26);
- break;
-
- case 28:
- if ((0x7bff78f8ffffd9ffL & l) == 0L)
- break;
- if (kind > 21)
- kind = 21;
- JjCheckNAddTwoStates(28, 29);
- break;
-
- case 30:
- if (kind > 21)
- kind = 21;
- JjCheckNAddTwoStates(28, 29);
- break;
-
- case 31:
- if (curChar == 42 && kind > 22)
- kind = 22;
- break;
-
- case 32:
- if ((0xfbff54f8ffffd9ffL & l) == (ulong)0L)
- break;
- if (kind > 23)
- kind = 23;
- JjCheckNAddTwoStates(33, 34);
- break;
- case 35:
- if (kind > 23)
- kind = 23;
- JjCheckNAddTwoStates(33, 34);
- break;
- case 36:
- case 38:
- if (curChar == 47)
- JjCheckNAddStates(0, 2);
- break;
- case 37:
- if ((0xffff7fffffffffffL & l) != (ulong)0L)
- JjCheckNAddStates(0, 2);
- break;
- case 40:
- if (curChar == 47 && kind > 24)
- kind = 24;
- break;
- case 41:
- if ((0x7bff50f8ffffd9ffL & l) == 0L)
- break;
- if (kind > 20)
- kind = 20;
- JjCheckNAddStates(6, 10);
- break;
- case 42:
- if ((0x7bff78f8ffffd9ffL & l) == 0L)
- break;
- if (kind > 20)
- kind = 20;
- JjCheckNAddTwoStates(42, 43);
- break;
- case 44:
- if (kind > 20)
- kind = 20;
- JjCheckNAddTwoStates(42, 43);
- break;
- case 45:
- if ((0x7bff78f8ffffd9ffL & l) != 0L)
- JjCheckNAddStates(18, 20);
- break;
- case 47:
- JjCheckNAddStates(18, 20);
- break;
-
- default: break;
-
- }
- }
- while (i != startsAt);
- }
- else if (curChar < 128)
- {
- // NOTE: This didn't change in Java from 3.0.1 to 4.8.0, but it is different in .NET.
- // But changing it back made more tests pass, so I am working under the assumption 63
- // is the correct value.
- //ulong l = (ulong)(1L << (curChar & 077));
- ulong l = (ulong) (1L << (curChar & 63));
- do
- {
- switch (jjstateSet[--i])
- {
-
- case 49:
- if ((0x97ffffff87ffffffL & l) != (ulong) 0L)
- {
- if (kind > 23)
- kind = 23;
- JjCheckNAddTwoStates(33, 34);
- }
- else if (curChar == 92)
- JjCheckNAddTwoStates(35, 35);
- break;
-
- case 0:
- if ((0x97ffffff87ffffffL & l) != (ulong) 0L)
- {
- if (kind > 20)
- kind = 20;
- JjCheckNAddStates(6, 10);
- }
- else if (curChar == 92)
- JjCheckNAddStates(21, 23);
- else if (curChar == 126)
- {
- if (kind > 21)
- kind = 21;
- JjCheckNAddStates(24, 26);
- }
- if ((0x97ffffff87ffffffL & l) != (ulong) 0L)
- {
- if (kind > 23)
- kind = 23;
- JjCheckNAddTwoStates(33, 34);
- }
- if (curChar == 78)
- jjstateSet[jjnewStateCnt++] = 11;
- else if (curChar == 124)
- jjstateSet[jjnewStateCnt++] = 8;
- else if (curChar == 79)
- jjstateSet[jjnewStateCnt++] = 6;
- else if (curChar == 65)
- jjstateSet[jjnewStateCnt++] = 2;
- break;
-
- case 1:
- if (curChar == 68 && kind > 8)
- kind = 8;
- break;
-
- case 2:
- if (curChar == 78)
- jjstateSet[jjnewStateCnt++] = 1;
- break;
-
- case 3:
- if (curChar == 65)
- jjstateSet[jjnewStateCnt++] = 2;
- break;
-
- case 6:
- if (curChar == 82 && kind > 9)
- kind = 9;
- break;
-
- case 7:
- if (curChar == 79)
- jjstateSet[jjnewStateCnt++] = 6;
- break;
-
- case 8:
- if (curChar == 124 && kind > 9)
- kind = 9;
- break;
-
- case 9:
- if (curChar == 124)
- jjstateSet[jjnewStateCnt++] = 8;
- break;
-
- case 10:
- if (curChar == 84 && kind > 10)
- kind = 10;
- break;
-
- case 11:
- if (curChar == 79)
- jjstateSet[jjnewStateCnt++] = 10;
- break;
-
- case 12:
- if (curChar == 78)
- jjstateSet[jjnewStateCnt++] = 11;
- break;
-
- case 17:
- if ((0xffffffffefffffffL & l) != (ulong) 0L)
- JjCheckNAddStates(3, 5);
- break;
-
- case 18:
- if (curChar == 92)
- jjstateSet[jjnewStateCnt++] = 19;
- break;
-
- case 19:
- JjCheckNAddStates(3, 5);
- break;
-
- case 21:
- if (curChar != 126)
- break;
- if (kind > 21)
- kind = 21;
- JjCheckNAddStates(24, 26);
- break;
-
- case 25:
- if ((0x97ffffff87ffffffL & l) == (ulong) 0L)
- break;
- if (kind > 21)
- kind = 21;
- JjCheckNAddTwoStates(25, 26);
- break;
-
- case 26:
- if (curChar == 92)
- JjAddStates(27, 28);
- break;
-
- case 27:
- if (kind > 21)
- kind = 21;
- JjCheckNAddTwoStates(25, 26);
- break;
-
- case 28:
- if ((0x97ffffff87ffffffL & l) == (ulong) 0L)
- break;
- if (kind > 21)
- kind = 21;
- JjCheckNAddTwoStates(28, 29);
- break;
-
- case 29:
- if (curChar == 92)
- JjAddStates(29, 30);
- break;
- case 30:
- if (kind > 21)
- kind = 21;
- JjCheckNAddTwoStates(28, 29);
- break;
- case 32:
- if ((0x97ffffff87ffffffL & l) == (ulong)0L)
- break;
- if (kind > 23)
- kind = 23;
- JjCheckNAddTwoStates(33, 34);
- break;
- case 33:
- if ((0x97ffffff87ffffffL & l) == (ulong)0L)
- break;
- if (kind > 23)
- kind = 23;
- JjCheckNAddTwoStates(33, 34);
- break;
- case 34:
- if (curChar == 92)
- JjCheckNAddTwoStates(35, 35);
- break;
- case 35:
- if (kind > 23)
- kind = 23;
- JjCheckNAddTwoStates(33, 34);
- break;
- case 37:
- JjAddStates(0, 2);
- break;
- case 39:
- if (curChar == 92)
- jjstateSet[jjnewStateCnt++] = 38;
- break;
- case 41:
- if ((0x97ffffff87ffffffL & l) == (ulong)0L)
- break;
- if (kind > 20)
- kind = 20;
- JjCheckNAddStates(6, 10);
- break;
- case 42:
- if ((0x97ffffff87ffffffL & l) == (ulong)0L)
- break;
- if (kind > 20)
- kind = 20;
- JjCheckNAddTwoStates(42, 43);
- break;
- case 43:
- if (curChar == 92)
- JjCheckNAddTwoStates(44, 44);
- break;
- case 44:
- if (kind > 20)
- kind = 20;
- JjCheckNAddTwoStates(42, 43);
- break;
- case 45:
- if ((0x97ffffff87ffffffL & l) != (ulong)0L)
- JjCheckNAddStates(18, 20);
- break;
- case 46:
- if (curChar == 92)
- JjCheckNAddTwoStates(47, 47);
- break;
- case 47:
- JjCheckNAddStates(18, 20);
- break;
- case 48:
- if (curChar == 92)
- JjCheckNAddStates(21, 23);
- break;
-
- default: break;
-
- }
- }
- while (i != startsAt);
- }
- else
- {
- int hiByte = (int) (curChar >> 8);
- int i1 = hiByte >> 6;
- ulong l1 = (ulong) (1L << (hiByte & 63));
- int i2 = (curChar & 0xff) >> 6;
- ulong l2 = (ulong) (1L << (curChar & 63));
- do
- {
- switch (jjstateSet[--i])
- {
-
- case 49:
- case 33:
- if (!JjCanMove_2(hiByte, i1, i2, l1, l2))
- break;
- if (kind > 23)
- kind = 23;
- JjCheckNAddTwoStates(33, 34);
- break;
-
- case 0:
- if (JjCanMove_0(hiByte, i1, i2, l1, l2))
- {
- if (kind > 7)
- kind = 7;
- }
- if (JjCanMove_2(hiByte, i1, i2, l1, l2))
- {
- if (kind > 23)
- kind = 23;
- JjCheckNAddTwoStates(33, 34);
- }
- if (JjCanMove_2(hiByte, i1, i2, l1, l2))
- {
- if (kind > 20)
- kind = 20;
- JjCheckNAddStates(6, 10);
- }
- break;
-
- case 15:
- if (JjCanMove_0(hiByte, i1, i2, l1, l2) && kind > 13)
- kind = 13;
- break;
- case 17:
- case 19:
- if (JjCanMove_1(hiByte, i1, i2, l1, l2))
- JjCheckNAddStates(3, 5);
- break;
-
- case 25:
- if (!JjCanMove_2(hiByte, i1, i2, l1, l2))
- break;
- if (kind > 21)
- kind = 21;
- JjCheckNAddTwoStates(25, 26);
- break;
-
- case 27:
- if (!JjCanMove_1(hiByte, i1, i2, l1, l2))
- break;
- if (kind > 21)
- kind = 21;
- JjCheckNAddTwoStates(25, 26);
- break;
-
- case 28:
- if (!JjCanMove_2(hiByte, i1, i2, l1, l2))
- break;
- if (kind > 21)
- kind = 21;
- JjCheckNAddTwoStates(28, 29);
- break;
- case 30:
- if (!JjCanMove_1(hiByte, i1, i2, l1, l2))
- break;
- if (kind > 21)
- kind = 21;
- JjCheckNAddTwoStates(28, 29);
- break;
- case 32:
- if (!JjCanMove_2(hiByte, i1, i2, l1, l2))
- break;
- if (kind > 23)
- kind = 23;
- JjCheckNAddTwoStates(33, 34);
- break;
-
- case 35:
- if (!JjCanMove_1(hiByte, i1, i2, l1, l2))
- break;
- if (kind > 23)
- kind = 23;
- JjCheckNAddTwoStates(33, 34);
- break;
-
- case 37:
- if (JjCanMove_1(hiByte, i1, i2, l1, l2))
- JjAddStates(0, 2);
- break;
- case 41:
- if (!JjCanMove_2(hiByte, i1, i2, l1, l2))
- break;
- if (kind > 20)
- kind = 20;
- JjCheckNAddStates(6, 10);
- break;
- case 42:
- if (!JjCanMove_2(hiByte, i1, i2, l1, l2))
- break;
- if (kind > 20)
- kind = 20;
- JjCheckNAddTwoStates(42, 43);
- break;
- case 44:
- if (!JjCanMove_1(hiByte, i1, i2, l1, l2))
- break;
- if (kind > 20)
- kind = 20;
- JjCheckNAddTwoStates(42, 43);
- break;
- case 45:
- if (JjCanMove_2(hiByte, i1, i2, l1, l2))
- JjCheckNAddStates(18, 20);
- break;
-
- case 47:
- if (JjCanMove_1(hiByte, i1, i2, l1, l2))
- JjCheckNAddStates(18, 20);
- break;
-
- default: break;
-
- }
- }
- while (i != startsAt);
- }
- if (kind != 0x7fffffff)
- {
- jjmatchedKind = kind;
- jjmatchedPos = curPos;
- kind = 0x7fffffff;
- }
- ++curPos;
- if ((i = jjnewStateCnt) == (startsAt = 49 - (jjnewStateCnt = startsAt)))
- return curPos;
- try
- {
- curChar = input_stream.ReadChar();
- }
- catch (System.IO.IOException)
- {
- return curPos;
- }
- }
- }
- private int JjMoveStringLiteralDfa0_0()
- {
- return JjMoveNfa_0(0, 0);
- }
- private int JjMoveNfa_0(int startState, int curPos)
- {
- int startsAt = 0;
- jjnewStateCnt = 3;
- int i = 1;
- jjstateSet[0] = startState;
- int kind = 0x7fffffff;
- for (; ; )
- {
- if (++jjround == 0x7fffffff)
- ReInitRounds();
- if (curChar < 64)
- {
- ulong l = (ulong) (1L << (int) curChar);
- do
- {
- switch (jjstateSet[--i])
- {
-
- case 0:
- if ((0x3ff000000000000L & l) == 0L)
- break;
- if (kind > 27)
- kind = 27;
- JjAddStates(31, 32);
- break;
-
- case 1:
- if (curChar == 46)
- JjCheckNAdd(2);
- break;
-
- case 2:
- if ((0x3ff000000000000L & l) == 0L)
- break;
- if (kind > 27)
- kind = 27;
- JjCheckNAdd(2);
- break;
-
- default: break;
-
- }
- }
- while (i != startsAt);
- }
- else if (curChar < 128)
- {
- ulong l = (ulong) (1L << (curChar & 63));
- do
- {
- switch (jjstateSet[--i])
- {
-
- default: break;
-
- }
- }
- while (i != startsAt);
- }
- else
- {
- int hiByte = (int) (curChar >> 8);
- int i1 = hiByte >> 6;
- long l1 = 1L << (hiByte & 63);
- int i2 = (curChar & 0xff) >> 6;
- long l2 = 1L << (curChar & 63);
- do
- {
- switch (jjstateSet[--i])
- {
-
- default: break;
-
- }
- }
- while (i != startsAt);
- }
- if (kind != 0x7fffffff)
- {
- jjmatchedKind = kind;
- jjmatchedPos = curPos;
- kind = 0x7fffffff;
- }
- ++curPos;
- if ((i = jjnewStateCnt) == (startsAt = 3 - (jjnewStateCnt = startsAt)))
- return curPos;
- try
- {
- curChar = input_stream.ReadChar();
- }
- catch (System.IO.IOException)
- {
- return curPos;
- }
- }
- }
- private int JjStopStringLiteralDfa_1(int pos, long active0)
- {
- switch (pos)
- {
-
- case 0:
- if ((active0 & 0x10000000L) != 0L)
- {
- jjmatchedKind = 32;
- return 6;
- }
- return - 1;
-
- default:
- return - 1;
-
- }
- }
- private int JjStartNfa_1(int pos, long active0)
- {
- return JjMoveNfa_1(JjStopStringLiteralDfa_1(pos, active0), pos + 1);
- }
- private int JjMoveStringLiteralDfa0_1()
- {
- switch (curChar)
- {
-
- case (char)84:
- return JjMoveStringLiteralDfa1_1(0x10000000L);
-
- case (char)93:
- return JjStopAtPos(0, 29);
-
- case (char)125:
- return JjStopAtPos(0, 30);
-
- default:
- return JjMoveNfa_1(0, 0);
-
- }
- }
- private int JjMoveStringLiteralDfa1_1(long active0)
- {
- try
- {
- curChar = input_stream.ReadChar();
- }
- catch (System.IO.IOException)
- {
- JjStopStringLiteralDfa_1(0, active0);
- return 1;
- }
- switch (curChar)
- {
-
- case (char) (79):
- if ((active0 & 0x10000000L) != 0L)
- return JjStartNfaWithStates_1(1, 28, 6);
- break;
-
- default:
- break;
-
- }
- return JjStartNfa_1(0, active0);
- }
- private int JjStartNfaWithStates_1(int pos, int kind, int state)
- {
- jjmatchedKind = kind;
- jjmatchedPos = pos;
- try
- {
- curChar = input_stream.ReadChar();
- }
- catch (System.IO.IOException)
- {
- return pos + 1;
- }
- return JjMoveNfa_1(state, pos + 1);
- }
- private int JjMoveNfa_1(int startState, int curPos)
- {
- int startsAt = 0;
- jjnewStateCnt = 7;
- int i = 1;
- jjstateSet[0] = startState;
- int kind = 0x7fffffff;
- for (; ; )
- {
- if (++jjround == 0x7fffffff)
- ReInitRounds();
- if (curChar < 64)
- {
- ulong l = (ulong) (1L << (int) curChar);
- do
- {
- switch (jjstateSet[--i])
- {
-
- case 0:
- if ((0xfffffffeffffffffL & l) != (ulong)0L)
- {
- if (kind > 32)
- kind = 32;
- JjCheckNAdd(6);
- }
- if ((0x100002600L & l) != 0L)
- {
- if (kind > 7)
- kind = 7;
- }
- else if (curChar == 34)
- JjCheckNAddTwoStates(2, 4);
- break;
-
- case 1:
- if (curChar == 34)
- JjCheckNAddTwoStates(2, 4);
- break;
-
- case 2:
- if ((0xfffffffbffffffffL & l) != (ulong)0L)
- JjCheckNAddStates(33, 35);
- break;
-
- case 3:
- if (curChar == 34)
- JjCheckNAddStates(33, 35);
- break;
-
- case 5:
- if (curChar == 34 && kind > 31)
- kind = 31;
- break;
-
- case 6:
- if ((0xfffffffeffffffffL & l) == (ulong)0L)
- break;
- if (kind > 32)
- kind = 32;
- JjCheckNAdd(6);
- break;
-
- default: break;
-
- }
- }
- while (i != startsAt);
- }
- else if (curChar < 128)
- {
- ulong l = (ulong) (1L << (curChar & 63));
- do
- {
- switch (jjstateSet[--i])
- {
-
- case 0:
- case 6:
- if ((0xdfffffffdfffffffL & l) == (ulong)0L)
- break;
- if (kind > 32)
- kind = 32;
- JjCheckNAdd(6);
- break;
-
- case 2:
- JjAddStates(33, 35);
- break;
-
- case 4:
- if (curChar == 92)
- jjstateSet[jjnewStateCnt++] = 3;
- break;
-
- default: break;
-
- }
- }
- while (i != startsAt);
- }
- else
- {
- int hiByte = (int) (curChar >> 8);
- int i1 = hiByte >> 6;
- ulong l1 = (ulong) (1L << (hiByte & 63));
- int i2 = (curChar & 0xff) >> 6;
- ulong l2 = (ulong) (1L << (curChar & 63));
- do
- {
- switch (jjstateSet[--i])
- {
-
- case 0:
- if (JjCanMove_0(hiByte, i1, i2, l1, l2))
- {
- if (kind > 7)
- kind = 7;
- }
- if (JjCanMove_1(hiByte, i1, i2, l1, l2))
- {
- if (kind > 32)
- kind = 32;
- JjCheckNAdd(6);
- }
- break;
-
- case 2:
- if (JjCanMove_1(hiByte, i1, i2, l1, l2))
- JjAddStates(33, 35);
- break;
-
- case 6:
- if (!JjCanMove_1(hiByte, i1, i2, l1, l2))
- break;
- if (kind > 32)
- kind = 32;
- JjCheckNAdd(6);
- break;
-
- default: break;
-
- }
- }
- while (i != startsAt);
- }
- if (kind != 0x7fffffff)
- {
- jjmatchedKind = kind;
- jjmatchedPos = curPos;
- kind = 0x7fffffff;
- }
- ++curPos;
- if ((i = jjnewStateCnt) == (startsAt = 7 - (jjnewStateCnt = startsAt)))
- return curPos;
- try
- {
- curChar = input_stream.ReadChar();
- }
- catch (System.IO.IOException)
- {
- return curPos;
- }
- }
- }
- internal static readonly int[] jjnextStates = new int[]{
- 37, 39, 40, 17, 18, 20, 42, 45, 31, 46, 43, 22, 23, 25, 26, 24,
- 25, 26, 45, 31, 46, 44, 47, 35, 22, 28, 29, 27, 27, 30, 30, 0,
- 1, 2, 4, 5
- };
- private static bool JjCanMove_0(int hiByte, int i1, int i2, ulong l1, ulong l2)
- {
- switch (hiByte)
- {
-
- case 48:
- return ((jjbitVec0[i2] & l2) != (ulong) 0L);
-
- default:
- return false;
-
- }
- }
- private static bool JjCanMove_1(int hiByte, int i1, int i2, ulong l1, ulong l2)
- {
- switch (hiByte)
- {
-
- case 0:
- return ((jjbitVec3[i2] & l2) != (ulong) 0L);
-
- default:
- if ((jjbitVec1[i1] & l1) != (ulong) 0L)
- return true;
- return false;
-
- }
- }
- private static bool JjCanMove_2(int hiByte, int i1, int i2, ulong l1, ulong l2)
- {
- switch (hiByte)
- {
-
- case 0:
- return ((jjbitVec3[i2] & l2) != (ulong) 0L);
-
- case 48:
- return ((jjbitVec1[i2] & l2) != (ulong) 0L);
-
- default:
- if ((jjbitVec4[i1] & l1) != (ulong) 0L)
- return true;
- return false;
-
- }
- }
-
- ///// <summary>Token literal values. </summary>
- //public static readonly string[] jjstrLiteralImages = new string[] {
- // "", null, null, null, null, null, null, null, null, null, null, "\x002B", "\x002D",
- // "\x0028", "\x0029", "\x003A", "\x002A", "\x005E", null, null, null, null, null, "\x005B", "\x007B",
- // null, "\x0054\x004F", "\x005D", null, null, "\x0054\x004F", "\x007D", null, null };
-
-
- /// <summary>Token literal values. </summary>
- public static readonly string[] jjstrLiteralImages = new string[]{
- "", null, null, null, null, null, null, null, null, null, null, "\x002B", "\x002D",
- null, "\x0028", "\x0029", "\x003A", "\x002A", "\x005E", null, null, null, null, null, null,
- "\x005B", "\x007B", null, "\x0054\x004F", "\x005D", "\x007D", null, null };
-
- /// <summary>Lexer state names. </summary>
- public static readonly string[] lexStateNames = new string[] {
- "Boost",
- "Range",
- "DEFAULT"
- };
-
- /// <summary>Lex State array. </summary>
- public static readonly int[] jjnewLexState = new int[] {
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1,
- 1, 1, 2, -1, 2, 2, -1, -1
- };
- internal static readonly ulong[] jjtoToken = new ulong[] { 0x1ffffff01L };
- internal static readonly long[] jjtoSkip = new long[] { 0x80L };
- protected internal ICharStream input_stream;
- private uint[] jjrounds = new uint[49];
- private int[] jjstateSet = new int[98];
- protected internal char curChar;
- /// <summary>Constructor. </summary>
- public QueryParserTokenManager(ICharStream stream)
- {
- InitBlock();
- input_stream = stream;
- }
-
- /// <summary>Constructor. </summary>
- public QueryParserTokenManager(ICharStream stream, int lexState):this(stream)
- {
- SwitchTo(lexState);
- }
-
- /// <summary>Reinitialise parser. </summary>
- public virtual void ReInit(ICharStream stream)
- {
- jjmatchedPos = jjnewStateCnt = 0;
- curLexState = defaultLexState;
- input_stream = stream;
- ReInitRounds();
- }
- private void ReInitRounds()
- {
- int i;
- jjround = 0x80000001;
- for (i = 49; i-- > 0; )
- jjrounds[i] = 0x80000000;
- }
-
- /// <summary>Reinitialise parser. </summary>
- public virtual void ReInit(ICharStream stream, int lexState)
- {
- ReInit(stream);
- SwitchTo(lexState);
- }
-
- /// <summary>Switch to specified lex state. </summary>
- public virtual void SwitchTo(int lexState)
- {
- if (lexState >= 3 || lexState < 0)
- throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE);
- else
- curLexState = lexState;
- }
-
- protected internal virtual Token JjFillToken()
- {
- Token t;
- System.String curTokenImage;
- int beginLine;
- int endLine;
- int beginColumn;
- int endColumn;
- System.String im = jjstrLiteralImages[jjmatchedKind];
- curTokenImage = (im == null)?input_stream.Image:im;
- beginLine = input_stream.BeginLine;
- beginColumn = input_stream.BeginColumn;
- endLine = input_stream.EndLine;
- endColumn = input_stream.EndColumn;
- t = Token.NewToken(jjmatchedKind, curTokenImage);
-
- t.beginLine = beginLine;
- t.endLine = endLine;
- t.beginColumn = beginColumn;
- t.endColumn = endColumn;
-
- return t;
- }
-
- internal int curLexState = 2;
- internal int defaultLexState = 2;
- internal int jjnewStateCnt;
- internal uint jjround;
- internal int jjmatchedPos;
- internal int jjmatchedKind;
-
- /// <summary>Get the next Token. </summary>
- [SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")]
- public virtual Token GetNextToken()
- {
- Token matchedToken;
- int curPos = 0;
-
- for (; ; )
- {
- try
- {
- curChar = input_stream.BeginToken();
- }
- catch (IOException)
- {
- jjmatchedKind = 0;
- matchedToken = JjFillToken();
- return matchedToken;
- }
-
- switch (curLexState)
- {
-
- case 0:
- jjmatchedKind = 0x7fffffff;
- jjmatchedPos = 0;
- curPos = JjMoveStringLiteralDfa0_0();
- break;
-
- case 1:
- jjmatchedKind = 0x7fffffff;
- jjmatchedPos = 0;
- curPos = JjMoveStringLiteralDfa0_1();
- break;
-
- case 2:
- jjmatchedKind = 0x7fffffff;
- jjmatchedPos = 0;
- curPos = JjMoveStringLiteralDfa0_2();
- break;
- }
- if (jjmatchedKind != 0x7fffffff)
- {
- if (jjmatchedPos + 1 < curPos)
- input_stream.Backup(curPos - jjmatchedPos - 1);
- if ((jjtoToken[jjmatchedKind >> 6] & ((ulong) 1L << (jjmatchedKind & 63))) != (ulong) 0L)
- {
- matchedToken = JjFillToken();
- if (jjnewLexState[jjmatchedKind] != - 1)
- curLexState = jjnewLexState[jjmatchedKind];
- return matchedToken;
- }
- else
- {
- if (jjnewLexState[jjmatchedKind] != - 1)
- curLexState = jjnewLexState[jjmatchedKind];
- goto EOFLoop;
- }
- }
- int error_line = input_stream.EndLine;
- int error_column = input_stream.EndColumn;
- System.String error_after = null;
- bool EOFSeen = false;
- try
- {
- input_stream.ReadChar(); input_stream.Backup(1);
- }
- catch (IOException)
- {
- EOFSeen = true;
- error_after = curPos <= 1?"":input_stream.Image;
- if (curChar == '\n' || curChar == '\r')
- {
- error_line++;
- error_column = 0;
- }
- else
- error_column++;
- }
- if (!EOFSeen)
- {
- input_stream.Backup(1);
- error_after = curPos <= 1?"":input_stream.Image;
- }
- throw new TokenMgrError(EOFSeen, curLexState, error_line, error_column, error_after, curChar, TokenMgrError.LEXICAL_ERROR);
-
-EOFLoop: ;
- }
- }
-
- private void JjCheckNAdd(int state)
- {
- if (jjrounds[state] != jjround)
- {
- jjstateSet[jjnewStateCnt++] = state;
- jjrounds[state] = jjround;
- }
- }
- private void JjAddStates(int start, int end)
- {
- do
- {
- jjstateSet[jjnewStateCnt++] = jjnextStates[start];
- }
- while (start++ != end);
- }
- private void JjCheckNAddTwoStates(int state1, int state2)
- {
- JjCheckNAdd(state1);
- JjCheckNAdd(state2);
- }
-
- private void JjCheckNAddStates(int start, int end)
- {
- do
- {
- JjCheckNAdd(jjnextStates[start]);
- }
- while (start++ != end);
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/679ad24c/Lucene.Net.QueryParser/Classic/Token.cs
----------------------------------------------------------------------
diff --git a/Lucene.Net.QueryParser/Classic/Token.cs b/Lucene.Net.QueryParser/Classic/Token.cs
deleted file mode 100644
index 389e7b3..0000000
--- a/Lucene.Net.QueryParser/Classic/Token.cs
+++ /dev/null
@@ -1,142 +0,0 @@
-using System;
-
-namespace Lucene.Net.QueryParser.Classic
-{
- /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
- /// <summary>
- /// Describes the input token stream.
- /// </summary>
- [Serializable]
- public class Token
- {
-
- /// <summary>
- /// An integer that describes the kind of this token. This numbering
- /// system is determined by JavaCCParser, and a table of these numbers is
- /// stored in the file ...Constants.java.
- /// </summary>
- public int kind;
-
- /// <summary>The line number of the first character of this Token. </summary>
- public int beginLine;
- /// <summary>The column number of the first character of this Token. </summary>
- public int beginColumn;
- /// <summary>The line number of the last character of this Token. </summary>
- public int endLine;
- /// <summary>The column number of the last character of this Token. </summary>
- public int endColumn;
-
- /// <summary>The string image of the token.</summary>
- public string image;
-
- /// <summary>
- /// A reference to the next regular (non-special) token from the input
- /// stream. If this is the last token from the input stream, or if the
- /// token manager has not read tokens beyond this one, this field is
- /// set to null. This is true only if this token is also a regular
- /// token. Otherwise, see below for a description of the contents of
- /// this field.
- /// </summary>
- public Token next;
-
- /// <summary>
- /// This field is used to access special tokens that occur prior to this
- /// token, but after the immediately preceding regular (non-special) token.
- /// If there are no such special tokens, this field is set to null.
- /// When there are more than one such special token, this field refers
- /// to the last of these special tokens, which in turn refers to the next
- /// previous special token through its specialToken field, and so on
- /// until the first special token (whose specialToken field is null).
- /// The next fields of special tokens refer to other special tokens that
- /// immediately follow it (without an intervening regular token). If there
- /// is no such token, this field is null.
- /// </summary>
- public Token specialToken;
-
- /// <summary>
- /// An optional attribute value of the Token.
- /// Tokens which are not used as syntactic sugar will often contain
- /// meaningful values that will be used later on by the compiler or
- /// interpreter. This attribute value is often different from the image.
- /// Any subclass of Token that actually wants to return a non-null value can
- /// override this method as appropriate.
- /// </summary>
- public virtual object Value
- {
- get { return null; }
- }
-
- /// <summary>
- /// No-argument constructor
- /// </summary>
- public Token()
- {
- }
-
- /// <summary>
- /// Constructs a new token for the specified Image.
- /// </summary>
- public Token(int kind)
- : this(kind, null)
- {
- }
-
- /// <summary>
- /// Constructs a new token for the specified Image and Kind.
- /// </summary>
- public Token(int kind, string image)
- {
- this.kind = kind;
- this.image = image;
- }
-
- /// <summary>
- /// Returns the image.
- /// </summary>
- public override string ToString()
- {
- return image;
- }
-
- /// <summary>
- /// Returns a new Token object, by default. However, if you want, you
- /// can create and return subclass objects based on the value of ofKind.
- /// Simply add the cases to the switch for all those special cases.
- /// For example, if you have a subclass of Token called IDToken that
- /// you want to create if ofKind is ID, simply add something like :
- ///
- /// case MyParserConstants.ID : return new IDToken(ofKind, image);
- ///
- /// to the following switch statement. Then you can cast matchedToken
- /// variable to the appropriate type and use sit in your lexical actions.
- /// </summary>
- public static Token NewToken(int ofKind, string image)
- {
- switch (ofKind)
- {
- default: return new Token(ofKind, image);
- }
- }
-
- public static Token NewToken(int ofKind)
- {
- return NewToken(ofKind, null);
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/679ad24c/Lucene.Net.QueryParser/Classic/TokenMgrError.cs
----------------------------------------------------------------------
diff --git a/Lucene.Net.QueryParser/Classic/TokenMgrError.cs b/Lucene.Net.QueryParser/Classic/TokenMgrError.cs
deleted file mode 100644
index 2f69e13..0000000
--- a/Lucene.Net.QueryParser/Classic/TokenMgrError.cs
+++ /dev/null
@@ -1,170 +0,0 @@
-using System;
-using System.Text;
-
-namespace Lucene.Net.QueryParser.Classic
-{
- /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
- /// <summary>Token Manager Error. </summary>
- [Serializable]
- public class TokenMgrError : Exception
- {
- /*
- * Ordinals for various reasons why an Error of this type can be thrown.
- */
-
- /// <summary> Lexical error occurred.</summary>
- internal const int LEXICAL_ERROR = 0;
-
- /// <summary> An attempt was made to create a second instance of a static token manager.</summary>
- internal const int STATIC_LEXER_ERROR = 1;
-
- /// <summary> Tried to change to an invalid lexical state.</summary>
- internal const int INVALID_LEXICAL_STATE = 2;
-
- /// <summary> Detected (and bailed out of) an infinite loop in the token manager.</summary>
- internal const int LOOP_DETECTED = 3;
-
- /// <summary> Indicates the reason why the exception is thrown. It will have
- /// one of the above 4 values.
- /// </summary>
- internal int errorCode;
-
- /// <summary>
- /// Replaces unprintable characters by their escaped (or unicode escaped)
- /// equivalents in the given string
- /// </summary>
- protected internal static string AddEscapes(string str)
- {
- StringBuilder retval = new StringBuilder();
- char ch;
- for (int i = 0; i < str.Length; i++)
- {
- switch (str[i])
- {
-
- case (char)(0):
- continue;
-
- case '\b':
- retval.Append("\\b");
- continue;
-
- case '\t':
- retval.Append("\\t");
- continue;
-
- case '\n':
- retval.Append("\\n");
- continue;
-
- case '\f':
- retval.Append("\\f");
- continue;
-
- case '\r':
- retval.Append("\\r");
- continue;
-
- case '\"':
- retval.Append("\\\"");
- continue;
-
- case '\'':
- retval.Append("\\\'");
- continue;
-
- case '\\':
- retval.Append("\\\\");
- continue;
-
- default:
- if ((ch = str[i]) < 0x20 || ch > 0x7e)
- {
- string s = "0000" + Convert.ToString(ch, 16);
- retval.Append("\\u" + s.Substring(s.Length - 4, (s.Length) - (s.Length - 4)));
- }
- else
- {
- retval.Append(ch);
- }
- continue;
-
- }
- }
- return retval.ToString();
- }
-
- /// <summary>
- /// Returns a detailed message for the Error when it is thrown by the
- /// token manager to indicate a lexical error.
- /// </summary>
- /// <remarks>You can customize the lexical error message by modifying this method.</remarks>
- /// <param name="EOFSeen">indicates if EOF caused the lexical error</param>
- /// <param name="lexState">lexical state in which this error occurred</param>
- /// <param name="errorLine">line number when the error occurred</param>
- /// <param name="errorColumn">column number when the error occurred</param>
- /// <param name="errorAfter">prefix that was seen before this error occurred</param>
- /// <param name="curChar">the offending character</param>
- /// <returns>Detailed error message</returns>
- protected internal static string LexicalError(bool EOFSeen, int lexState, int errorLine, int errorColumn, string errorAfter, char curChar)
- {
- return ("Lexical error at line " +
- errorLine + ", column " +
- errorColumn + ". Encountered: " +
- (EOFSeen ? "<EOF> " : ("\"" + AddEscapes(Convert.ToString(curChar)) + "\"") + " (" + (int)curChar + "), ") +
- "after : \"" + AddEscapes(errorAfter) + "\"");
- }
-
- /// <summary>
- /// You can also modify the body of this method to customize your error messages.
- /// For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not
- /// of end-users concern, so you can return something like :
- ///
- /// "Internal Error : Please file a bug report .... "
- ///
- /// from this method for such cases in the release version of your parser.
- /// </summary>
- public override string Message
- {
- get { return base.Message; }
- }
-
- /*
- * Constructors of various flavors follow.
- */
-
- /// <summary>No arg constructor. </summary>
- public TokenMgrError()
- {
- }
-
- /// <summary>Constructor with message and reason. </summary>
- public TokenMgrError(string message, int reason)
- : base(message)
- {
- errorCode = reason;
- }
-
- /// <summary>Full Constructor. </summary>
- public TokenMgrError(bool EOFSeen, int lexState, int errorLine, int errorColumn, string errorAfter, char curChar, int reason)
- : this(LexicalError(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar), reason)
- {
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/679ad24c/Lucene.Net.QueryParser/ComplexPhrase/ComplexPhraseQueryParser.cs
----------------------------------------------------------------------
diff --git a/Lucene.Net.QueryParser/ComplexPhrase/ComplexPhraseQueryParser.cs b/Lucene.Net.QueryParser/ComplexPhrase/ComplexPhraseQueryParser.cs
deleted file mode 100644
index 0ac7c5b..0000000
--- a/Lucene.Net.QueryParser/ComplexPhrase/ComplexPhraseQueryParser.cs
+++ /dev/null
@@ -1,468 +0,0 @@
-\ufeffusing Lucene.Net.Analysis;
-using Lucene.Net.Index;
-using Lucene.Net.QueryParser.Classic;
-using Lucene.Net.Search;
-using Lucene.Net.Search.Spans;
-using Lucene.Net.Util;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-
-namespace Lucene.Net.QueryParser.ComplexPhrase
-{
- /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
- /// <summary>
- /// QueryParser which permits complex phrase query syntax eg "(john jon
- /// jonathan~) peters*".
- /// <p>
- /// Performs potentially multiple passes over Query text to parse any nested
- /// logic in PhraseQueries. - First pass takes any PhraseQuery content between
- /// quotes and stores for subsequent pass. All other query content is parsed as
- /// normal - Second pass parses any stored PhraseQuery content, checking all
- /// embedded clauses are referring to the same field and therefore can be
- /// rewritten as Span queries. All PhraseQuery clauses are expressed as
- /// ComplexPhraseQuery objects
- /// </p>
- /// <p>
- /// This could arguably be done in one pass using a new QueryParser but here I am
- /// working within the constraints of the existing parser as a base class. This
- /// currently simply feeds all phrase content through an analyzer to select
- /// phrase terms - any "special" syntax such as * ~ * etc are not given special
- /// status
- /// </p>
- /// </summary>
- public class ComplexPhraseQueryParser : Classic.QueryParser
- {
- private List<ComplexPhraseQuery> complexPhrases = null;
-
- private bool isPass2ResolvingPhrases;
-
- /// <summary>
- /// When <code>inOrder</code> is true, the search terms must
- /// exists in the documents as the same order as in query.
- /// Choose between ordered (true) or un-ordered (false) proximity search.
- /// </summary>
- public bool InOrder { get; set; }
-
- private ComplexPhraseQuery currentPhraseQuery = null;
-
- public ComplexPhraseQueryParser(LuceneVersion matchVersion, string f, Analyzer a)
- : base(matchVersion, f, a)
- {
- // set property defaults
- this.InOrder = true;
- }
-
- protected internal override Query GetFieldQuery(string field, string queryText, int slop)
- {
- ComplexPhraseQuery cpq = new ComplexPhraseQuery(field, queryText, slop, InOrder);
- complexPhrases.Add(cpq); // add to list of phrases to be parsed once
- // we
- // are through with this pass
- return cpq;
- }
-
- public override Query Parse(string query)
- {
- if (isPass2ResolvingPhrases)
- {
- MultiTermQuery.RewriteMethod oldMethod = MultiTermRewriteMethod;
- try
- {
- // Temporarily force BooleanQuery rewrite so that Parser will
- // generate visible
- // collection of terms which we can convert into SpanQueries.
- // ConstantScoreRewrite mode produces an
- // opaque ConstantScoreQuery object which cannot be interrogated for
- // terms in the same way a BooleanQuery can.
- // QueryParser is not guaranteed threadsafe anyway so this temporary
- // state change should not
- // present an issue
- MultiTermRewriteMethod = MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE;
- return base.Parse(query);
- }
- finally
- {
- MultiTermRewriteMethod = oldMethod;
- }
- }
-
- // First pass - parse the top-level query recording any PhraseQuerys
- // which will need to be resolved
- complexPhrases = new List<ComplexPhraseQuery>();
- Query q = base.Parse(query);
-
- // Perform second pass, using this QueryParser to parse any nested
- // PhraseQueries with different
- // set of syntax restrictions (i.e. all fields must be same)
- isPass2ResolvingPhrases = true;
- try
- {
- foreach (var currentPhraseQuery in complexPhrases)
- {
- this.currentPhraseQuery = currentPhraseQuery;
- // in each phrase, now parse the contents between quotes as a
- // separate parse operation
- currentPhraseQuery.ParsePhraseElements(this);
- }
- }
- finally
- {
- isPass2ResolvingPhrases = false;
- }
- return q;
- }
-
- // There is No "getTermQuery throws ParseException" method to override so
- // unfortunately need
- // to throw a runtime exception here if a term for another field is embedded
- // in phrase query
- protected override Query NewTermQuery(Term term)
- {
- if (isPass2ResolvingPhrases)
- {
- try
- {
- CheckPhraseClauseIsForSameField(term.Field);
- }
- catch (ParseException pe)
- {
- throw new Exception("Error parsing complex phrase", pe);
- }
- }
- return base.NewTermQuery(term);
- }
-
- // Helper method used to report on any clauses that appear in query syntax
- private void CheckPhraseClauseIsForSameField(string field)
- {
- if (!field.Equals(currentPhraseQuery.Field))
- {
- throw new ParseException("Cannot have clause for field \"" + field
- + "\" nested in phrase " + " for field \"" + currentPhraseQuery.Field
- + "\"");
- }
- }
-
- protected internal override Query GetWildcardQuery(string field, string termStr)
- {
- if (isPass2ResolvingPhrases)
- {
- CheckPhraseClauseIsForSameField(field);
- }
- return base.GetWildcardQuery(field, termStr);
- }
-
- protected internal override Query GetRangeQuery(string field, string part1, string part2, bool startInclusive, bool endInclusive)
- {
- if (isPass2ResolvingPhrases)
- {
- CheckPhraseClauseIsForSameField(field);
- }
- return base.GetRangeQuery(field, part1, part2, startInclusive, endInclusive);
- }
-
- protected internal override Query NewRangeQuery(string field, string part1, string part2, bool startInclusive, bool endInclusive)
- {
- if (isPass2ResolvingPhrases)
- {
- // Must use old-style RangeQuery in order to produce a BooleanQuery
- // that can be turned into SpanOr clause
- TermRangeQuery rangeQuery = TermRangeQuery.NewStringRange(field, part1, part2, startInclusive, endInclusive);
- rangeQuery.SetRewriteMethod(MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE);
- return rangeQuery;
- }
- return base.NewRangeQuery(field, part1, part2, startInclusive, endInclusive);
- }
-
- protected internal override Query GetFuzzyQuery(string field, string termStr, float minSimilarity)
- {
- if (isPass2ResolvingPhrases)
- {
- CheckPhraseClauseIsForSameField(field);
- }
- return base.GetFuzzyQuery(field, termStr, minSimilarity);
- }
-
- /// <summary>
- /// Used to handle the query content in between quotes and produced Span-based
- /// interpretations of the clauses.
- /// </summary>
- public class ComplexPhraseQuery : Query
- {
- private readonly string field;
- private readonly string phrasedQueryStringContents;
- private readonly int slopFactor;
- private readonly bool inOrder;
- private Query contents;
-
- public ComplexPhraseQuery(string field, string phrasedQueryStringContents,
- int slopFactor, bool inOrder)
- {
- this.field = field;
- this.phrasedQueryStringContents = phrasedQueryStringContents;
- this.slopFactor = slopFactor;
- this.inOrder = inOrder;
- }
-
- public string Field
- {
- get { return field; }
- }
-
- // Called by ComplexPhraseQueryParser for each phrase after the main
- // parse
- // thread is through
- protected internal void ParsePhraseElements(ComplexPhraseQueryParser qp)
- {
- // TODO ensure that field-sensitivity is preserved ie the query
- // string below is parsed as
- // field+":("+phrasedQueryStringContents+")"
- // but this will need code in rewrite to unwrap the first layer of
- // boolean query
-
- string oldDefaultParserField = qp.Field;
- try
- {
- //temporarily set the QueryParser to be parsing the default field for this phrase e.g author:"fred* smith"
- qp.field = this.field;
- contents = qp.Parse(phrasedQueryStringContents);
- }
- finally
- {
- qp.field = oldDefaultParserField;
- }
- }
-
- public override Query Rewrite(IndexReader reader)
- {
- // ArrayList spanClauses = new ArrayList();
- if (contents is TermQuery)
- {
- return contents;
- }
- // Build a sequence of Span clauses arranged in a SpanNear - child
- // clauses can be complex
- // Booleans e.g. nots and ors etc
- int numNegatives = 0;
- if (!(contents is BooleanQuery))
- {
- throw new ArgumentException("Unknown query type \""
- + contents.GetType().Name
- + "\" found in phrase query string \"" + phrasedQueryStringContents
- + "\"");
- }
- BooleanQuery bq = (BooleanQuery)contents;
- BooleanClause[] bclauses = bq.Clauses;
- SpanQuery[] allSpanClauses = new SpanQuery[bclauses.Length];
- // For all clauses e.g. one* two~
- for (int i = 0; i < bclauses.Length; i++)
- {
- // HashSet bclauseterms=new HashSet();
- Query qc = bclauses[i].Query;
- // Rewrite this clause e.g one* becomes (one OR onerous)
- qc = qc.Rewrite(reader);
- if (bclauses[i].Occur_.Equals(BooleanClause.Occur.MUST_NOT))
- {
- numNegatives++;
- }
-
- if (qc is BooleanQuery)
- {
- List<SpanQuery> sc = new List<SpanQuery>();
- AddComplexPhraseClause(sc, (BooleanQuery)qc);
- if (sc.Count > 0)
- {
- allSpanClauses[i] = sc.ElementAt(0);
- }
- else
- {
- // Insert fake term e.g. phrase query was for "Fred Smithe*" and
- // there were no "Smithe*" terms - need to
- // prevent match on just "Fred".
- allSpanClauses[i] = new SpanTermQuery(new Term(field,
- "Dummy clause because no terms found - must match nothing"));
- }
- }
- else
- {
- if (qc is TermQuery)
- {
- TermQuery tq = (TermQuery)qc;
- allSpanClauses[i] = new SpanTermQuery(tq.Term);
- }
- else
- {
- throw new ArgumentException("Unknown query type \""
- + qc.GetType().Name
- + "\" found in phrase query string \""
- + phrasedQueryStringContents + "\"");
- }
-
- }
- }
- if (numNegatives == 0)
- {
- // The simple case - no negative elements in phrase
- return new SpanNearQuery(allSpanClauses, slopFactor, inOrder);
- }
- // Complex case - we have mixed positives and negatives in the
- // sequence.
- // Need to return a SpanNotQuery
- List<SpanQuery> positiveClauses = new List<SpanQuery>();
- for (int j = 0; j < allSpanClauses.Length; j++)
- {
- if (!bclauses[j].Occur_.Equals(BooleanClause.Occur.MUST_NOT))
- {
- positiveClauses.Add(allSpanClauses[j]);
- }
- }
-
- SpanQuery[] includeClauses = positiveClauses
- .ToArray();
-
- SpanQuery include = null;
- if (includeClauses.Length == 1)
- {
- include = includeClauses[0]; // only one positive clause
- }
- else
- {
- // need to increase slop factor based on gaps introduced by
- // negatives
- include = new SpanNearQuery(includeClauses, slopFactor + numNegatives,
- inOrder);
- }
- // Use sequence of positive and negative values as the exclude.
- SpanNearQuery exclude = new SpanNearQuery(allSpanClauses, slopFactor,
- inOrder);
- SpanNotQuery snot = new SpanNotQuery(include, exclude);
- return snot;
- }
-
- private void AddComplexPhraseClause(List<SpanQuery> spanClauses, BooleanQuery qc)
- {
- List<SpanQuery> ors = new List<SpanQuery>();
- List<SpanQuery> nots = new List<SpanQuery>();
- BooleanClause[] bclauses = qc.Clauses;
-
- // For all clauses e.g. one* two~
- for (int i = 0; i < bclauses.Length; i++)
- {
- Query childQuery = bclauses[i].Query;
-
- // select the list to which we will add these options
- List<SpanQuery> chosenList = ors;
- if (bclauses[i].Occur_ == BooleanClause.Occur.MUST_NOT)
- {
- chosenList = nots;
- }
-
- if (childQuery is TermQuery)
- {
- TermQuery tq = (TermQuery)childQuery;
- SpanTermQuery stq = new SpanTermQuery(tq.Term);
- stq.Boost = tq.Boost;
- chosenList.Add(stq);
- }
- else if (childQuery is BooleanQuery)
- {
- BooleanQuery cbq = (BooleanQuery)childQuery;
- AddComplexPhraseClause(chosenList, cbq);
- }
- else
- {
- // LUCENETODO alternatively could call extract terms here?
- throw new ArgumentException("Unknown query type:"
- + childQuery.GetType().Name);
- }
- }
- if (ors.Count == 0)
- {
- return;
- }
- SpanOrQuery soq = new SpanOrQuery(ors
- .ToArray());
- if (nots.Count == 0)
- {
- spanClauses.Add(soq);
- }
- else
- {
- SpanOrQuery snqs = new SpanOrQuery(nots
- .ToArray());
- SpanNotQuery snq = new SpanNotQuery(soq, snqs);
- spanClauses.Add(snq);
- }
- }
-
- public override string ToString(string field)
- {
- return "\"" + phrasedQueryStringContents + "\"";
- }
-
- public override int GetHashCode()
- {
- int prime = 31;
- int result = base.GetHashCode();
- result = prime * result + ((field == null) ? 0 : field.GetHashCode());
- result = prime
- * result
- + ((phrasedQueryStringContents == null) ? 0
- : phrasedQueryStringContents.GetHashCode());
- result = prime * result + slopFactor;
- result = prime * result + (inOrder ? 1 : 0);
- return result;
- }
-
- public override bool Equals(object obj)
- {
- if (this == obj)
- return true;
- if (obj == null)
- return false;
- if (GetType() != obj.GetType())
- return false;
- if (!base.Equals(obj))
- {
- return false;
- }
- ComplexPhraseQuery other = (ComplexPhraseQuery)obj;
- if (field == null)
- {
- if (other.field != null)
- return false;
- }
- else if (!field.Equals(other.field))
- return false;
- if (phrasedQueryStringContents == null)
- {
- if (other.phrasedQueryStringContents != null)
- return false;
- }
- else if (!phrasedQueryStringContents
- .Equals(other.phrasedQueryStringContents))
- return false;
- if (slopFactor != other.slopFactor)
- return false;
- return inOrder == other.inOrder;
- }
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/679ad24c/Lucene.Net.QueryParser/Ext/ExtendableQueryParser.cs
----------------------------------------------------------------------
diff --git a/Lucene.Net.QueryParser/Ext/ExtendableQueryParser.cs b/Lucene.Net.QueryParser/Ext/ExtendableQueryParser.cs
deleted file mode 100644
index 6418f87..0000000
--- a/Lucene.Net.QueryParser/Ext/ExtendableQueryParser.cs
+++ /dev/null
@@ -1,131 +0,0 @@
-\ufeffusing Lucene.Net.Analysis;
-using Lucene.Net.Search;
-using Lucene.Net.Util;
-using System;
-
-namespace Lucene.Net.QueryParser.Ext
-{
- /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
- /// <summary>
- /// The <see cref="ExtendableQueryParser"/> enables arbitrary query parser extension
- /// based on a customizable field naming scheme. The lucene query syntax allows
- /// implicit and explicit field definitions as query prefix followed by a colon
- /// (':') character. The <see cref="ExtendableQueryParser"/> allows to encode extension
- /// keys into the field symbol associated with a registered instance of
- /// <see cref="ParserExtension"/>. A customizable separation character separates the
- /// extension key from the actual field symbol. The <see cref="ExtendableQueryParser"/>
- /// splits (<see cref="Extensions.SplitExtensionField(String, String)"/>) the
- /// extension key from the field symbol and tries to resolve the associated
- /// <see cref="ParserExtension"/>. If the parser can't resolve the key or the field
- /// token does not contain a separation character, <see cref="ExtendableQueryParser"/>
- /// yields the same behavior as its super class <see cref="QueryParser"/>. Otherwise,
- /// if the key is associated with a <see cref="ParserExtension"/> instance, the parser
- /// builds an instance of <see cref="ExtensionQuery"/> to be processed by
- /// <see cref="ParserExtension.Parse(ExtensionQuery)"/>.If a extension field does not
- /// contain a field part the default field for the query will be used.
- /// <p>
- /// To guarantee that an extension field is processed with its associated
- /// extension, the extension query part must escape any special characters like
- /// '*' or '['. If the extension query contains any whitespace characters, the
- /// extension query part must be enclosed in quotes.
- /// Example ('_' used as separation character):
- /// <pre>
- /// title_customExt:"Apache Lucene\?" OR content_customExt:prefix\*
- /// </pre>
- ///
- /// Search on the default field:
- /// <pre>
- /// _customExt:"Apache Lucene\?" OR _customExt:prefix\*
- /// </pre>
- /// </p>
- /// <p>
- /// The <see cref="ExtendableQueryParser"/> itself does not implement the logic how
- /// field and extension key are separated or ordered. All logic regarding the
- /// extension key and field symbol parsing is located in <see cref="Extensions"/>.
- /// Customized extension schemes should be implemented by sub-classing
- /// <see cref="Extensions"/>.
- /// </p>
- /// <p>
- /// For details about the default encoding scheme see <see cref="Extensions"/>.
- /// </p>
- ///
- /// <see cref="Extensions"/>
- /// <see cref="ParserExtension"/>
- /// <see cref="ExtensionQuery"/>
- /// </summary>
- public class ExtendableQueryParser : Classic.QueryParser
- {
- private readonly string defaultField;
- private readonly Extensions extensions;
-
-
- /// <summary>
- /// Default empty extensions instance
- /// </summary>
- private static readonly Extensions DEFAULT_EXTENSION = new Extensions();
-
- /// <summary>
- /// Creates a new <see cref="ExtendableQueryParser"/> instance
- /// </summary>
- /// <param name="matchVersion">the lucene version to use.</param>
- /// <param name="f">the default query field</param>
- /// <param name="a">the analyzer used to find terms in a query string</param>
- public ExtendableQueryParser(LuceneVersion matchVersion, string f, Analyzer a)
- : base(matchVersion, f, a)
- {
- }
-
- /// <summary>
- /// Creates a new <see cref="ExtendableQueryParser"/> instance
- /// </summary>
- /// <param name="matchVersion">the lucene version to use.</param>
- /// <param name="f">the default query field</param>
- /// <param name="a">the analyzer used to find terms in a query string</param>
- /// <param name="ext">the query parser extensions</param>
- public ExtendableQueryParser(LuceneVersion matchVersion, string f, Analyzer a, Extensions ext)
- : base(matchVersion, f, a)
- {
- this.defaultField = f;
- this.extensions = ext;
- }
-
- /// <summary>
- /// Returns the extension field delimiter character.
- /// </summary>
- /// <returns>the extension field delimiter character.</returns>
- public char ExtensionFieldDelimiter
- {
- get { return extensions.ExtensionFieldDelimiter; }
- }
-
- protected internal override Query GetFieldQuery(string field, string queryText, bool quoted)
- {
- Tuple<string, string> splitExtensionField = this.extensions
- .SplitExtensionField(defaultField, field);
- ParserExtension extension = this.extensions
- .GetExtension(splitExtensionField.Item2);
- if (extension != null)
- {
- return extension.Parse(new ExtensionQuery(this, splitExtensionField.Item1,
- queryText));
- }
- return base.GetFieldQuery(field, queryText, quoted);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/679ad24c/Lucene.Net.QueryParser/Ext/ExtensionQuery.cs
----------------------------------------------------------------------
diff --git a/Lucene.Net.QueryParser/Ext/ExtensionQuery.cs b/Lucene.Net.QueryParser/Ext/ExtensionQuery.cs
deleted file mode 100644
index 610e4ad..0000000
--- a/Lucene.Net.QueryParser/Ext/ExtensionQuery.cs
+++ /dev/null
@@ -1,54 +0,0 @@
-\ufeffnamespace Lucene.Net.QueryParser.Ext
-{
- /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
- /// <summary>
- /// <see cref="ExtensionQuery"/> holds all query components extracted from the original
- /// query string like the query field and the extension query string.
- /// </summary>
- public class ExtensionQuery
- {
- /// <summary>
- /// Creates a new <see cref="ExtensionQuery"/>
- /// </summary>
- /// <param name="topLevelParser"></param>
- /// <param name="field">the query field</param>
- /// <param name="rawQueryString">the raw extension query string</param>
- public ExtensionQuery(Classic.QueryParser topLevelParser, string field, string rawQueryString)
- {
- this.Field = field;
- this.RawQueryString = rawQueryString;
- this.TopLevelParser = topLevelParser;
- }
-
- /// <summary>
- /// Returns the query field
- /// </summary>
- public string Field { get; protected set; }
-
- /// <summary>
- /// Returns the raw extension query string
- /// </summary>
- public string RawQueryString { get; protected set; }
-
- /// <summary>
- /// Returns the top level parser which created this <see cref="ExtensionQuery"/>
- /// </summary>
- public Classic.QueryParser TopLevelParser { get; protected set; }
- }
-}
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/679ad24c/Lucene.Net.QueryParser/Ext/Extensions.cs
----------------------------------------------------------------------
diff --git a/Lucene.Net.QueryParser/Ext/Extensions.cs b/Lucene.Net.QueryParser/Ext/Extensions.cs
deleted file mode 100644
index 6895268..0000000
--- a/Lucene.Net.QueryParser/Ext/Extensions.cs
+++ /dev/null
@@ -1,167 +0,0 @@
-\ufeffusing Lucene.Net.QueryParser.Classic;
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace Lucene.Net.QueryParser.Ext
-{
- /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
- public class Extensions
- {
- private readonly IDictionary<string, ParserExtension> extensions = new Dictionary<string, ParserExtension>();
- private readonly char extensionFieldDelimiter;
-
- /// <summary>
- /// The default extension field delimiter character. This constant is set to ':'
- /// </summary>
- public static readonly char DEFAULT_EXTENSION_FIELD_DELIMITER = ':';
-
- /// <summary>
- /// Creates a new <see cref="Extensions"/> instance with the
- /// <see cref="#DEFAULT_EXTENSION_FIELD_DELIMITER"/> as a delimiter character.
- /// </summary>
- public Extensions()
- : this(DEFAULT_EXTENSION_FIELD_DELIMITER)
- {
- }
-
- /// <summary>
- /// Creates a new <see cref="Extensions"/> instance
- /// </summary>
- /// <param name="extensionFieldDelimiter">the extensions field delimiter character</param>
- public Extensions(char extensionFieldDelimiter)
- {
- this.extensionFieldDelimiter = extensionFieldDelimiter;
- }
-
- /// <summary>
- /// Adds a new <see cref="ParserExtension"/> instance associated with the given key.
- /// </summary>
- /// <param name="key">the parser extension key</param>
- /// <param name="extension">the parser extension</param>
- public virtual void Add(string key, ParserExtension extension)
- {
- this.extensions[key] = extension;
- }
-
- /// <summary>
- /// Returns the <see cref="ParserExtension"/> instance for the given key or
- /// <code>null</code> if no extension can be found for the key.
- /// </summary>
- /// <param name="key">the extension key</param>
- /// <returns>the <see cref="ParserExtension"/> instance for the given key or
- /// <code>null</code> if no extension can be found for the key.</returns>
- public ParserExtension GetExtension(string key)
- {
- if (key == null || !this.extensions.ContainsKey(key)) return null;
- return this.extensions[key];
- }
-
- /// <summary>
- /// Returns the extension field delimiter
- /// </summary>
- public virtual char ExtensionFieldDelimiter
- {
- get { return extensionFieldDelimiter; }
- }
-
- /// <summary>
- /// Splits a extension field and returns the field / extension part as a
- /// <see cref="Tuple{String,String}"/>. This method tries to split on the first occurrence of the
- /// extension field delimiter, if the delimiter is not present in the string
- /// the result will contain a <code>null</code> value for the extension key and
- /// the given field string as the field value. If the given extension field
- /// string contains no field identifier the result pair will carry the given
- /// default field as the field value.
- /// </summary>
- /// <param name="defaultField">the default query field</param>
- /// <param name="field">the extension field string</param>
- /// <returns>a {<see cref="Tuple{String,String}"/> with the field name as the <see cref="Tuple{String,String}.Item1"/> and the
- /// extension key as the <see cref="Tuple{String,String}.Item2"/></returns>
- public Tuple<string, string> SplitExtensionField(string defaultField, string field)
- {
- int indexOf = field.IndexOf(this.extensionFieldDelimiter);
- if (indexOf < 0)
- return new Tuple<string, string>(field, null);
- string indexField = indexOf == 0 ? defaultField : field.Substring(0, indexOf);
- string extensionKey = field.Substring(indexOf + 1);
- return new Tuple<string, string>(indexField, extensionKey);
- }
-
- /// <summary>
- /// Escapes an extension field. The default implementation is equivalent to
- /// <see cref="QueryParser.Escape(String)"/>.
- /// </summary>
- /// <param name="extfield">the extension field identifier</param>
- /// <returns>the extension field identifier with all special chars escaped with
- /// a backslash character.</returns>
- public string EscapeExtensionField(string extfield)
- {
- return QueryParserBase.Escape(extfield);
- }
-
- /// <summary>
- /// Builds an extension field string from a given extension key and the default
- /// query field. The default field and the key are delimited with the extension
- /// field delimiter character. This method makes no assumption about the order
- /// of the extension key and the field. By default the extension key is
- /// appended to the end of the returned string while the field is added to the
- /// beginning. Special Query characters are escaped in the result.
- /// <p>
- /// Note: <see cref="Extensions"/> subclasses must maintain the contract between
- /// <see cref="M:BuildExtensionField(String)"/> and
- /// <see cref="M:BuildExtensionField(String, String)"/> where the latter inverts the
- /// former.
- /// </p>
- /// </summary>
- /// <param name="extensionKey">the extension key</param>
- /// <returns>escaped extension field identifier</returns>
- public string BuildExtensionField(string extensionKey)
- {
- return BuildExtensionField(extensionKey, "");
- }
-
- /// <summary>
- /// Builds an extension field string from a given extension key and the default
- /// query field. The default field and the key are delimited with the extension
- /// field delimiter character. This method makes no assumption about the order
- /// of the extension key and the field. By default the extension key is
- /// appended to the end of the returned string while the field is added to the
- /// beginning. Special Query characters are escaped in the result.
- /// <p>
- /// Note: <see cref="Extensions"/> subclasses must maintain the contract between
- /// <see cref="M:BuildExtensionField(String)"/> and
- /// <see cref="M:BuildExtensionField(String, String)"/> where the latter inverts the
- /// former.
- /// </summary>
- /// <param name="extensionKey">the extension key</param>
- /// <param name="field">the field to apply the extension on.</param>
- /// <returns>escaped extension field identifier</returns>
- /// <remarks>See <see cref="M:BuildExtensionField(String)"/> to use the default query field</remarks>
- public string BuildExtensionField(string extensionKey, string field)
- {
- StringBuilder builder = new StringBuilder(field);
- builder.Append(this.extensionFieldDelimiter);
- builder.Append(extensionKey);
- return EscapeExtensionField(builder.ToString());
- }
-
- // NOTE: Pair<T, T> was eliminated in favor of the built in Tuple<T, T> type.
- }
-}