下面列出了org.eclipse.jface.text.rules.ICharacterScanner#getColumn ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public IToken evaluate(ICharacterScanner scanner)
{
if (scanner.getColumn() > 0)
{
scanner.unread();
int c = scanner.read();
if (c == '<')
{
return super.evaluate(scanner);
}
else if ((c == '!' || c == '/') && scanner.getColumn() > 1)
{
scanner.unread();
scanner.unread();
c = scanner.read();
scanner.read();
if (c == '<')
{
return super.evaluate(scanner);
}
}
}
return Token.UNDEFINED;
}
protected IToken doEvaluate(ICharacterScanner scanner, boolean resume)
{
int column = scanner.getColumn();
IToken token = super.doEvaluate(scanner, resume);
if (token.isUndefined())
return token;
// Make sure whole thing matches pattern
int read = scanner.getColumn() - column;
for (int i = 0; i < read; i++)
{
scanner.unread();
}
StringBuilder builder = new StringBuilder();
for (int i = 0; i < read; i++)
{
builder.append((char) scanner.read());
}
String word = builder.toString();
if (word.length() > 2 && ENTITY_PATTERN.matcher(word).find())
{
return token;
}
for (int i = 0; i < read; i++)
{
scanner.unread();
}
return Token.UNDEFINED;
}
public IToken evaluate(ICharacterScanner scanner) {
int c= scanner.read();
if (fDetector.isWordStart((char) c)) {
if (fColumn == UNDEFINED || (fColumn == scanner.getColumn() - 1)) {
fBuffer.clear();
do {
fBuffer.append((char) c);
c= scanner.read();
} while (c != ICharacterScanner.EOF && fDetector.isWordPart((char) c));
scanner.unread();
for (int i= 0, n= fMatchers.size(); i < n; i++) {
IToken token= fMatchers.get(i).evaluate(scanner, fBuffer);
if (!token.isUndefined())
return token;
}
if (fDefaultToken.isUndefined())
unreadBuffer(scanner);
return fDefaultToken;
}
}
scanner.unread();
return Token.UNDEFINED;
}
public IToken evaluate( ICharacterScanner scanner, boolean resume )
{
int column = scanner.getColumn( );
int iCh = ' ';//Default it to space. This will be checked if the column
// is zero
//First check whether we are at the first column
if ( column > 0 )
{
//if not unread and read the character
scanner.unread( );
iCh = scanner.read( );
}
IToken tokenToReturn = Token.UNDEFINED;
buf.setLength( 0 );
//We should only apply this rule if we have a valid preceding character
if ( isValidPrecedingCharacter( iCh ) )
{
do
{
//Read the character
iCh = scanner.read( );
//append it to the buffer
buf.append( Character.toLowerCase( (char) iCh ) );
} while ( isKeywordStart( buf.toString( ) )
&& iCh != ICharacterScanner.EOF );
}
//Check whether there is anything in the buffer
if ( buf.length( ) > 0 )
{
//System.out.println("buffer contains " + buf.toString());
//Check whether the last character read was the EOF character
//or a space character
if ( isValidTerminatingCharacter( iCh ) )
{
//If the length of the buffer is greater than 1
if ( buf.length( ) > 1 )
{
//Strip out the last character
String sToCompare = buf.substring( 0, buf.length( ) - 1 );
//System.out.println("String is " + sToCompare);
//Now check whether it is a keyword
if ( isKeyword( sToCompare ) )
{
scanner.unread( );
tokenToReturn = token;
}
}
}
if ( tokenToReturn.isUndefined( ) )
{
//if the token is undefined
//then just unread the buffer
unreadBuffer( scanner );
}
}
return tokenToReturn;
}