public String[] split(CharSequence input, int limit) {
     int index = 0;
     boolean matchLimited = limit > 0;
     ArrayList<String> matchList = new ArrayList<String>();
     Matcher m = matcher(input);
     // Add segments before each match found
     while(m.find()) {
         if (!matchLimited || matchList.size() < limit - 1) {
             String match = input.subSequence(index, m.start()).toString();
             matchList.add(match);
             index = m.end();
         } else if (matchList.size() == limit - 1) { // last one
             String match = input.subSequence(index,
                                              input.length()).toString();
             matchList.add(match);
             index = m.end();
         }
     }
     // If no match was found, return this
     if (index == 0)
         return new String[] {input.toString()};
     // Add remaining segment
     if (!matchLimited || matchList.size() < limit)
         matchList.add(input.subSequence(index, input.length()).toString());
     // Construct result
     int resultSize = matchList.size();
     if (limit == 0)
         while (resultSize > 0 && matchList.get(resultSize-1).equals(""))
             resultSize--;
     String[] result = new String[resultSize];
     return matchList.subList(0, resultSize).toArray(result);
 }
 public Matcher matcher(CharSequence input) {
     if (!compiled) {
         lock(this) {
             if (!compiled)
                 compile();
         }
     }
     Matcher m = new Matcher(this, input);
     return m;
 }
 // Documentation in subclasses because of synchro difference
 public virtual AbstractStringBuilder append(CharSequence s)
 {
     if (s == null)
     s = new String("null");
     /*        if (s is String)
     return this.append((String)s);
     if (s is StringBuffer)
     return this.append((StringBuffer)s);*/
     return this.append(s, 0, s.length());
 }
 internal Matcher(Pattern parent, CharSequence text)
 {
     this.parentPattern = parent;
     this.text = text;
     // Allocate state storage
     int parentGroupCount = Math.max(parent.capturingGroupCount, 10);
     groups = new int[parentGroupCount * 2];
     locals = new int[parent.localCount];
     // Put fields into initial states
     reset();
 }
 public new StringBuffer append(CharSequence s)
 {
     // Note, synchronization achieved via other invocations
     if (s == null)
     s = new String("null");
     /*        if (s is String)
     return this.append((String)s);
     if (s is StringBuffer)
     return this.append((StringBuffer)s);*/
     return this.append(s, 0, s.length());
 }
 public virtual AbstractStringBuilder append(CharSequence s, int start, int end)
 {
     if (s == null)
     s = new String("null");
     if ((start < 0) || (start > end) || (end > s.length()))
     throw new IndexOutOfRangeException(
         "start " + start + ", end " + end + ", s.length() "
         + s.length());
     int len = end - start;
     ensureCapacityInternal(count + len);
     for (int i = start, j = count; i < end; i++, j++)
     value[j] = s.charAt(i);
     count += len;
     return this;
 }
 public new StringBuilder insert(int dstOffset, CharSequence s,
                         int start, int end)
 {
     base.insert(dstOffset, s, start, end);
     return this;
 }
 public new StringBuilder append(CharSequence s, int start, int end)
 {
     base.append(s, start, end);
     return this;
 }
 int check(Matcher matcher, int i, CharSequence seq) {
     int ch;
     boolean left = false;
     int startIndex = matcher.from;
     int endIndex = matcher.to;
     if (matcher.transparentBounds) {
         startIndex = 0;
         endIndex = matcher.getTextLength();
     }
     if (i > startIndex) {
         ch = Character.codePointBefore(seq, i);
         left = (isWord(ch) ||
             ((Character.getType(ch) == Character.NON_SPACING_MARK)
              && hasBaseCharacter(matcher, i-1, seq)));
     }
     boolean right = false;
     if (i < endIndex) {
         ch = Character.codePointAt(seq, i);
         right = (isWord(ch) ||
             ((Character.getType(ch) == Character.NON_SPACING_MARK)
              && hasBaseCharacter(matcher, i, seq)));
     } else {
         // Tried to access char past the end
         matcher._hitEnd = true;
         // The addition of another char could wreck a boundary
         matcher._requireEnd = true;
     }
     return ((left ^ right) ? (right ? LEFT : RIGHT) : NONE);
 }
 public Matcher reset(CharSequence input)
 {
     text = input;
     return reset();
 }
 public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3)
 {
 }
 internal override boolean match(Matcher matcher, int i, CharSequence seq)
 {
     int savedTo = matcher.to;
     boolean conditionMatched = false;
     // Relax transparent region boundaries for lookahead
     if (matcher.transparentBounds)
         matcher.to = matcher.getTextLength();
     try {
         conditionMatched = cond.match(matcher, i, seq);
     } finally {
         // Reinstate region boundaries
         matcher.to = savedTo;
     }
     return conditionMatched && next.match(matcher, i, seq);
 }
 public virtual AbstractStringBuilder insert(int dstOffset, CharSequence s)
 {
     if (s == null)
     s = new String("null");
     /*        if (s is String)
     return this.insert(dstOffset, (String)s);*/
     return this.insert(dstOffset, s, 0, s.length());
 }
 public static boolean matches(String regex, CharSequence input) {
     Pattern p = Pattern.compile(regex);
     Matcher m = p.matcher(input);
     return m.matches();
 }
 internal override boolean match(Matcher matcher, int i, CharSequence seq)
 {
     int savedFrom = matcher.from;
     boolean conditionMatched = false;
     int startIndex = (!matcher.transparentBounds) ?
                      matcher.from : 0;
     int from = Math.max(i - rmax, startIndex);
     // Set end boundary
     int savedLBT = matcher.lookbehindTo;
     matcher.lookbehindTo = i;
     // Relax transparent region boundaries for lookbehind
     if (matcher.transparentBounds)
         matcher.from = 0;
     for (int j = i - rmin; !conditionMatched && j >= from; j--) {
         conditionMatched = cond.match(matcher, j, seq);
     }
     matcher.from = savedFrom;
     matcher.lookbehindTo = savedLBT;
     return conditionMatched && next.match(matcher, i, seq);
 }
 internal override boolean match(Matcher matcher, int i, CharSequence seq)
 {
     int[] src = buffer;
     int patternLength = src.Length;
     int last = matcher.to - lengthInChars;
     // Loop over all possible match positions in text
     while (i <= last) {
         // Loop over pattern from right to left
         int ch;
         for (int j = countChars(seq, i, patternLength), x = patternLength - 1;
              j > 0; j -= Character.charCount(ch), x--) {
             ch = Character.codePointBefore(seq, i+j);
             if (ch != src[x]) {
                 // Shift search to the right by the maximum of the
                 // bad character shift and the good suffix shift
                 int n = Math.max(x + 1 - lastOcc[ch&0x7F], optoSft[x]);
                 i += countChars(seq, i, n);
                 goto continue5;
             }
         }
         // Entire pattern matched starting at i
         matcher.first = i;
         boolean ret = next.match(matcher, i + lengthInChars, seq);
         if (ret) {
             matcher.first = i;
             matcher.groups[0] = matcher.first;
             matcher.groups[1] = matcher.last;
             return true;
         }
         i += countChars(seq, i, 1);
     continue5:
         ;
     }
     matcher._hitEnd = true;
     return false;
 }
 internal override boolean match(Matcher matcher, int i, CharSequence seq)
 {
     int[] src = buffer;
     int patternLength = src.Length;
     int last = matcher.to - patternLength;
     // Loop over all possible match positions in text
     while (i <= last) {
         // Loop over pattern from right to left
         for (int j = patternLength - 1; j >= 0; j--) {
             int ch = seq.charAt(i+j);
             if (ch != src[j]) {
                 // Shift search to the right by the maximum of the
                 // bad character shift and the good suffix shift
                 i += Math.max(j + 1 - lastOcc[ch&0x7F], optoSft[j]);
                 goto continue4;
             }
         }
         // Entire pattern matched starting at i
         matcher.first = i;
         boolean ret = next.match(matcher, i + patternLength, seq);
         if (ret) {
             matcher.first = i;
             matcher.groups[0] = matcher.first;
             matcher.groups[1] = matcher.last;
             return true;
         }
         i++;
     continue4:
         ;
     }
     // BnM is only used as the leading node in the unanchored case,
     // and it replaced its Start() which always searches to the end
     // if it doesn't find what it's looking for, so hitEnd is true.
     matcher._hitEnd = true;
     return false;
 }
 private static boolean hasBaseCharacter(Matcher matcher, int i,
                                         CharSequence seq)
 {
     int start = (!matcher.transparentBounds) ?
         matcher.from : 0;
     for (int x=i; x >= start; x--) {
         int ch = Character.codePointAt(seq, x);
         if (Character.isLetterOrDigit(ch))
             return true;
         if (Character.getType(ch) == Character.NON_SPACING_MARK)
             continue;
         return false;
     }
     return false;
 }
 internal override boolean match(Matcher matcher, int i, CharSequence seq)
 {
     return (check(matcher, i, seq) & type) > 0
         && next.match(matcher, i, seq);
 }
 public StringBuilder(CharSequence seq)
     : base(seq.length() + 16)
 {
     append(seq);
 }
 public new StringBuilder append(CharSequence s)
 {
     if (s == null)
     s = new String("null");
     //if (s is String)
     //    return this.append((String)s);
     //if (s is StringBuffer)
     //    return this.append((StringBuffer)s);
     //if (s is StringBuilder)
     //    return this.append((StringBuilder)s);
     return this.append(s, 0, s.length());
 }
 internal override boolean match(Matcher matcher, int i, CharSequence seq)
 {
     int savedTo = matcher.to;
     boolean conditionMatched = false;
     // Relax transparent region boundaries for lookahead
     if (matcher.transparentBounds)
         matcher.to = matcher.getTextLength();
     try {
         if (i < matcher.to) {
             conditionMatched = !cond.match(matcher, i, seq);
         } else {
             // If a negative lookahead succeeds then more input
             // could cause it to fail!
             matcher._requireEnd = true;
             conditionMatched = !cond.match(matcher, i, seq);
         }
     } finally {
         // Reinstate region boundaries
         matcher.to = savedTo;
     }
     return conditionMatched && next.match(matcher, i, seq);
 }
 public virtual AbstractStringBuilder insert(int dstOffset, CharSequence s,
                                  int start, int end)
 {
     if (s == null)
     s = new String("null");
     if ((dstOffset < 0) || (dstOffset > this.length()))
     throw new IndexOutOfRangeException("dstOffset "+dstOffset);
     if ((start < 0) || (end < 0) || (start > end) || (end > s.length()))
     throw new IndexOutOfRangeException(
         "start " + start + ", end " + end + ", s.length() "
         + s.length());
     int len = end - start;
     ensureCapacityInternal(count + len);
     Array.Copy(value, dstOffset, value, dstOffset + len,
                  count - dstOffset);
     for (int i=start; i<end; i++)
     value[dstOffset++] = s.charAt(i);
     count += len;
     return this;
 }
 /// <summary>
 /// Wraps a string into a buffer.
 /// </summary>
 public static CharBuffer wrap(CharSequence csq)
 {
     return default(CharBuffer);
 }
 internal override boolean match(Matcher matcher, int i, CharSequence seq)
 {
     if (cond.match(matcher, i, seq)) {
         return yes.match(matcher, i, seq);
     } else {
         return not.match(matcher, i, seq);
     }
 }
        public XFoo(CharSequence e)
        {

        }
 /// <summary>
 /// Resets this matcher with a new input sequence.
 /// </summary>
 public Matcher reset(CharSequence input)
 {
     return default(Matcher);
 }
        public static void invoke(CharSequence e)
        {

        }
 /// <summary>
 /// Wraps a character sequence into a buffer.
 /// </summary>
 public static CharBuffer wrap(CharSequence csq, int start, int end)
 {
     return default(CharBuffer);
 }
 internal override boolean match(Matcher matcher, int i, CharSequence seq)
 {
     int rmaxChars = countChars(seq, i, -rmax);
     int rminChars = countChars(seq, i, -rmin);
     int savedFrom = matcher.from;
     int savedLBT = matcher.lookbehindTo;
     boolean conditionMatched = false;
     int startIndex = (!matcher.transparentBounds) ?
                      matcher.from : 0;
     int from = Math.max(i - rmaxChars, startIndex);
     matcher.lookbehindTo = i;
     // Relax transparent region boundaries for lookbehind
     if (matcher.transparentBounds)
         matcher.from = 0;
     for (int j = i - rminChars;
          !conditionMatched && j >= from;
          j -= j>from ? countChars(seq, j, -1) : 1) {
         conditionMatched = cond.match(matcher, j, seq);
     }
     //Reinstate region boundaries
     matcher.from = savedFrom;
     matcher.lookbehindTo = savedLBT;
     return !conditionMatched && next.match(matcher, i, seq);
 }