blob: f7d68bba574dd5eef601262dc2e7b64b3bcffa02 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2003 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jface.text;
/**
* 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 == '\r') {
if (i + 1 < length) {
if (text.charAt(i + 1) == '\n') {
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 == '\n') {
fDelimiterInfo.delimiter= DELIMITERS[1];
fDelimiterInfo.delimiterIndex= i;
fDelimiterInfo.delimiterLength= 1;
return fDelimiterInfo;
}
}
return null;
}
}