Returns the offset of the bracket matching the one at the specified offset of the document : Text EditorPane « Swing JFC « Java






Returns the offset of the bracket matching the one at the specified offset of the document

    
/*
 * TextUtilities.java - Utility functions used by the text area classes
 * Copyright (C) 1999 Slava Pestov
 *
 * You may use and modify this package for any purpose. Redistribution is
 * permitted, in both source and binary form, provided that this notice
 * remains intact in all source distributions of this package.
 */



import javax.swing.text.BadLocationException;
import javax.swing.text.Document;

/**
 * Class with several utility functions used by the text area component.
 * 
 * @author Slava Pestov
 * @version $Id$
 */
public class TextUtilities
{
  /**
   * Returns the offset of the bracket matching the one at the specified offset
   * of the document, or -1 if the bracket is unmatched (or if the character is
   * not a bracket).
   * 
   * @param doc
   *           The document
   * @param offset
   *           The offset
   * @exception BadLocationException
   *               If an out-of-bounds access was attempted on the document
   *               text
   */
  public static int findMatchingBracket( Document doc, int offset ) throws BadLocationException
  {
    if( doc.getLength() == 0 )
      return -1;
    char c = doc.getText( offset, 1 ).charAt( 0 );
    char cprime; // c` - corresponding character
    boolean direction; // true = back, false = forward

    switch( c )
    {
    case '(' :
      cprime = ')';
      direction = false;
      break;
    case ')' :
      cprime = '(';
      direction = true;
      break;
    case '[' :
      cprime = ']';
      direction = false;
      break;
    case ']' :
      cprime = '[';
      direction = true;
      break;
    case '{' :
      cprime = '}';
      direction = false;
      break;
    case '}' :
      cprime = '{';
      direction = true;
      break;
    default :
      return -1;
    }

    int count;

    // How to merge these two cases is left as an exercise
    // for the reader.

    // Go back or forward
    if( direction )
    {
      // Count is 1 initially because we have already
      // `found' one closing bracket
      count = 1;

      // Get text[0,offset-1];
      String text = doc.getText( 0, offset );

      // Scan backwards
      for( int i = offset - 1; i >= 0; i-- )
      {
        // If text[i] == c, we have found another
        // closing bracket, therefore we will need
        // two opening brackets to complete the
        // match.
        char x = text.charAt( i );
        if( x == c )
          count++ ;

        // If text[i] == cprime, we have found a
        // opening bracket, so we return i if
        // --count == 0
        else if( x == cprime )
        {
          if( --count == 0 )
            return i;
        }
      }
    }
    else
    {
      // Count is 1 initially because we have already
      // `found' one opening bracket
      count = 1;

      // So we don't have to + 1 in every loop
      offset++ ;

      // Number of characters to check
      int len = doc.getLength() - offset;

      // Get text[offset+1,len];
      String text = doc.getText( offset, len );

      // Scan forwards
      for( int i = 0; i < len; i++ )
      {
        // If text[i] == c, we have found another
        // opening bracket, therefore we will need
        // two closing brackets to complete the
        // match.
        char x = text.charAt( i );

        if( x == c )
          count++ ;

        // If text[i] == cprime, we have found an
        // closing bracket, so we return i if
        // --count == 0
        else if( x == cprime )
        {
          if( --count == 0 )
            return i + offset;
        }
      }
    }

    // Nothing found
    return -1;
  }

}

   
    
    
    
  








Related examples in the same category

1.Viewing RTF formatViewing RTF format
2.EditorPane SampleEditorPane Sample
3.Setting the Font and Color of Text in a JTextPane Using Styles: Makes text red
4.Setting the Font and Color of Text in a JTextPane Using Styles: Inherits from "Red"; makes text red and underlined
5.Setting the Font and Color of Text in a JTextPane Using Styles: Makes text 24pts
6.Setting the Font and Color of Text in a JTextPane Using Styles: Makes text italicized
7.JEditorPane and the Swing HTML PackageJEditorPane and the Swing HTML Package
8.JEditorPane and the Swing HTML Package 2JEditorPane and the Swing HTML Package 2
9.JEditorPane and the Swing HTML Package 3JEditorPane and the Swing HTML Package 3
10.JEditorPane and the Swing HTML Package 4JEditorPane and the Swing HTML Package 4
11.JEditorPane and the Swing HTML Package 5JEditorPane and the Swing HTML Package 5
12.JEditorPane and the Swing HTML Package 6JEditorPane and the Swing HTML Package 6
13.JEditorPane and the Swing HTML Package 7JEditorPane and the Swing HTML Package 7
14.JEditorPane and the Swing HTML Package 8JEditorPane and the Swing HTML Package 8
15.JEditorPane and the Swing HTML Package 9JEditorPane and the Swing HTML Package 9
16.EditorPane Example 10EditorPane Example 10
17.JEditorPane Example 10 - using getIteratorJEditorPane Example 10 - using getIterator
18.JEditorPane Example 11JEditorPane Example 11
19.JEditorPane Example 12JEditorPane Example 12
20.JEditorPane Example 13JEditorPane Example 13
21.JEditorPane Example 14JEditorPane Example 14
22.JEditorPane Example 15JEditorPane Example 15
23.JEditorPane Example 16JEditorPane Example 16
24.JEditorPane Example 17JEditorPane Example 17
25.JEditorPane Example 18JEditorPane Example 18
26.JEditorPane Example 19JEditorPane Example 19
27.JEditorPane Example 20JEditorPane Example 20
28.JEditorPane and HyperlinkListener Demo
29.Create a right-aligned tab stop at 200 pixels from the left margin
30.Create a center-aligned tab stop at 300 pixels from the left margin
31.Create a decimal-aligned tab stop at 400 pixels from the left margin
32.Use SimpleAttributeSet with JTextPane
33.Show html
34.Show web page
35.Change mouse cursor during mouse-over action on hyperlinks
36.Create a simple browser in Swing
37.Add colored text to the document
38.Return the leading whitespace of that string, for indenting subsequent lines
39.Locates the end of the word at the specified position.
40.Locates the start of the word at the specified position.
41.Get Trailing White Space
42.This program demonstrates how to display HTML documents in an editor pane.This program demonstrates how to display HTML documents in an editor pane.