void AssertLastIndexOf (string message, int expected, string source, string target, int idx, int len, CompareOptions opt, CompareInfo ci) { Assert.AreEqual (expected, ci.LastIndexOf (source, target, idx, len, opt), message); }
private static int AsteriskSkip(string Pattern, string Source, int SourceEndIndex, CompareMethod CompareOption, CompareInfo ci) { int num2; int num4; int num3 = Strings.Len(Pattern); while (num4 < num3) { bool flag; bool flag2; bool flag3; switch (Pattern[num4]) { case '-': if (Pattern[num4 + 1] == ']') { flag2 = true; } break; case '!': if (Pattern[num4 + 1] == ']') { flag2 = true; } else { flag3 = true; } break; case '[': if (flag) { flag2 = true; } else { flag = true; } break; case ']': if (flag2 || !flag) { num2++; flag3 = true; } flag2 = false; flag = false; break; case '*': if (num2 > 0) { CompareOptions ordinal; if (flag3) { num2 = MultipleAsteriskSkip(Pattern, Source, num2, CompareOption); return (SourceEndIndex - num2); } string str = Pattern.Substring(0, num4); if (CompareOption == CompareMethod.Binary) { ordinal = CompareOptions.Ordinal; } else { ordinal = CompareOptions.IgnoreWidth | CompareOptions.IgnoreKanaType | CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase; } return ci.LastIndexOf(Source, str, ordinal); } break; case '?': case '#': if (flag) { flag2 = true; } else { num2++; flag3 = true; } break; default: if (flag) { flag2 = true; } else { num2++; } break; } num4++; } return (SourceEndIndex - num2); }
// Returns the index and length of the first or last occurance of one string // within another string. private static int StandardMatchIndexCalculation(string textString, string findPattern, bool matchWholeWord, bool matchLast, bool ignoreCase, CompareInfo compareInfo, bool hasPreceedingSeparatorChar, bool hasFollowingSeparatorChar, out int matchLength) { CompareOptions options = ignoreCase ? CompareOptions.IgnoreCase : 0; int matchIndex = -1; int searchStart = 0; int searchLength = textString.Length; matchLength = 0; while (searchLength > 0) { matchIndex = matchLast ? compareInfo.LastIndexOf(textString, findPattern, searchStart + searchLength - 1, searchLength, options) : compareInfo.IndexOf(textString, findPattern, searchStart, searchLength, options); matchLength = findPattern.Length; if (matchIndex == -1) { break; } if (!matchWholeWord || IsAtWordBoundary(textString, matchIndex, matchLength, hasPreceedingSeparatorChar, hasFollowingSeparatorChar)) { break; } if (matchLast) { searchStart = 0; searchLength = matchIndex + matchLength - 1; } else { searchStart = matchIndex + 1; searchLength = textString.Length - searchStart; } matchIndex = -1; } return matchIndex; }
void AssertLastIndexOf (string message, int expected, string source, char target, int idx, int len, CompareOptions opt, CompareInfo ci) { AssertEquals (message, expected, ci.LastIndexOf (source, target, idx, len, opt)); }