package bluej.editor.moe;
|
| 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.*;
| Class with several utility functions used by the text area component.
| @author Slava Pestov
| @version $Id: TextUtilities.java 6619 2009-09-04 02:33:09Z davmac $
|
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(MoeSyntaxDocument doc, int offset)
{
if (doc.getLength() == 0) {
return -1;
}
char c = doc.getText(offset, 1).charAt(0);
char cprime;
boolean direction;
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 = 1;
int step;
int texttOffset;
int len;
int i;
if (direction) {
step = -1;
texttOffset = 0;
len = offset;
i = len - 1;
}
else {
step = 1;
texttOffset = offset + 1;
len = doc.getLength() - texttOffset;
i = 0;
}
String textt = doc.getText(texttOffset, len);
while (len > 0){
char x = textt.charAt(i);
if (x == c) {
count++;
}
else if (x == cprime)
{
if (--count == 0) {
return i + texttOffset;
}
}
len--;
i += step;
if (x == '\"' || x == '\'') {
char quoteChar = x;
while (len > 0){
x = textt.charAt(i);
if (x == quoteChar) {
if (i == 0 || textt.charAt(i - 1) != '\\') {
len--;
i += step;
break;
}
}
len--;
i += step;
}
}
}
return -1;
}
| Locates the start of the word at the specified position.
| @param line The text
| @param pos The position
|
public static int findWordStart(String line, int pos, String noWordSep)
{
char ch = line.charAt(pos - 1);
if (noWordSep == null)
noWordSep = "";
boolean selectNoLetter = (!Character.isLetterOrDigit(ch)
&& noWordSep.indexOf(ch) == -1);
int wordStart = 0;
for (int i = pos - 1; i >= 0; i--)
{
ch = line.charAt(i);
if (selectNoLetter ^ (!Character.isLetterOrDigit(ch) &&
noWordSep.indexOf(ch) == -1))
{
wordStart = i + 1;
break;
}
}
return wordStart;
}
| Locates the end of the word at the specified position.
| @param line The text
| @param pos The position
|
public static int findWordEnd(String line, int pos, String noWordSep)
{
char ch = line.charAt(pos);
if (noWordSep == null)
noWordSep = "";
boolean selectNoLetter = (!Character.isLetterOrDigit(ch)
&& noWordSep.indexOf(ch) == -1);
int wordEnd = line.length();
for (int i = pos; i < line.length(); i++)
{
ch = line.charAt(i);
if (selectNoLetter ^ (!Character.isLetterOrDigit(ch) &&
noWordSep.indexOf(ch) == -1))
{
wordEnd = i;
break;
}
}
return wordEnd;
}
}
top,
use,
map,
class TextUtilities
. findMatchingBracket
. findWordStart
. findWordEnd
185 neLoCode
+ 22 LoComm