blob: a279d9354c294c56058053fdd4db2db3bee9afec [file] [log] [blame]
package org.eclipse.jface.text;
/*
* (c) Copyright IBM Corp. 2000, 2001.
* All Rights Reserved.
*/
import org.eclipse.swt.SWT;
/**
* Standard implementation of <code>ILineTracker</code>.
* The line tracker considers the three common line
* delimiters which are '\n', '\r', '\r\n'.<p>
* This class is not intended to be subclassed.
*/
public class DefaultLineTracker extends AbstractLineTracker {
/** The predefined delimiters of this tracker */
public final static String[] DELIMITERS= { "\r", "\n", "\r\n" }; //$NON-NLS-3$ //$NON-NLS-1$ //$NON-NLS-2$
/** A predefined delimiter info which is always reused as return value */
private DelimiterInfo fDelimiterInfo= new DelimiterInfo();
/**
* Creates a standard line tracker.
*/
public DefaultLineTracker() {
}
/*
* @see ILineDelimiter@getLegalLineDelimiters
*/
public String[] getLegalLineDelimiters() {
return DELIMITERS;
}
/*
* @see AbstractLineTracker#nextDelimiterInfo(String, int)
*/
protected DelimiterInfo nextDelimiterInfo(String text, int offset) {
char ch;
int length= text.length();
for (int i= offset; i < length; i++) {
ch= text.charAt(i);
if (ch == SWT.CR) {
if (i + 1 < length) {
if (text.charAt(i + 1) == SWT.LF) {
fDelimiterInfo.delimiter= DELIMITERS[2];
fDelimiterInfo.delimiterIndex= i;
fDelimiterInfo.delimiterLength= 2;
return fDelimiterInfo;
}
}
fDelimiterInfo.delimiter= DELIMITERS[0];
fDelimiterInfo.delimiterIndex= i;
fDelimiterInfo.delimiterLength= 1;
return fDelimiterInfo;
} else if (ch == SWT.LF) {
fDelimiterInfo.delimiter= DELIMITERS[1];
fDelimiterInfo.delimiterIndex= i;
fDelimiterInfo.delimiterLength= 1;
return fDelimiterInfo;
}
}
return null;
}
}