예제 #1
0
        /// <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());
        }
예제 #2
0
        /// <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());
        }
예제 #3
0
 /// <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);
     }
 }