/// <summary> /// Implement UnicodeMatcher /// </summary> /// public virtual String ToPattern(bool escapeUnprintable) { StringBuilder result = new StringBuilder(); StringBuilder quoteBuf = new StringBuilder(); if (segmentNumber > 0) // i.e., if this is a segment { result.Append('('); } for (int i = 0; i < pattern.Length; ++i) { char keyChar = pattern[i]; // OK; see note (1) above UnicodeMatcher m = data.LookupMatcher(keyChar); if (m == null) { IBM.ICU.Impl.Utility.AppendToRule(result, keyChar, false, escapeUnprintable, quoteBuf); } else { IBM.ICU.Impl.Utility.AppendToRule(result, m.ToPattern(escapeUnprintable), true, escapeUnprintable, quoteBuf); } } if (segmentNumber > 0) // i.e., if this is a segment { result.Append(')'); } // Flush quoteBuf out to result IBM.ICU.Impl.Utility.AppendToRule(result, -1, true, escapeUnprintable, quoteBuf); return(result.ToString()); }
/// <summary> /// Implement UnicodeMatcher API /// </summary> /// public virtual String ToPattern(bool escapeUnprintable) { StringBuilder result = new StringBuilder(); result.Append(matcher.ToPattern(escapeUnprintable)); if (minCount == 0) { if (maxCount == 1) { return(result.Append('?').ToString()); } else if (maxCount == MAX) { return(result.Append('*').ToString()); } // else fall through } else if (minCount == 1 && maxCount == MAX) { return(result.Append('+').ToString()); } result.Append('{'); IBM.ICU.Impl.Utility.AppendNumber(result, minCount); result.Append(','); if (maxCount != MAX) { IBM.ICU.Impl.Utility.AppendNumber(result, maxCount); } result.Append('}'); return(result.ToString()); }
/// <summary> /// Given a matcher reference, which may be null, append its pattern as a /// literal to the given rule. /// </summary> /// public static void AppendToRule(StringBuilder rule, UnicodeMatcher matcher, bool escapeUnprintable, StringBuilder quoteBuf) { if (matcher != null) { AppendToRule(rule, matcher.ToPattern(escapeUnprintable), true, escapeUnprintable, quoteBuf); } }