FileDocCategorySizeDatePackage
IndentContLineReader.javaAPI DocExample2436Sun Feb 29 19:42:20 GMT 2004None

IndentContLineReader

public class IndentContLineReader extends ContLineReader
Subclass of ContLineReader for lines continued by indentation of following line (like RFC822 mail, Usenet News, etc.). Normally you would read header & body of the message(s) with code like:
while ((headerLine = clr.readLine()) != null && headerLine.length() > 0) {
processHeaderLine(headerLine);
}
clr.setContinuationMode(false);
while ((bodyLine = clr.readLine()) != null) {
processBodyLine(bodyLine);
}

Fields Summary
protected String
prevLine
Constructors Summary
public IndentContLineReader(Reader in)
Construct an IndentContLineReader with the default buffer size.

		super(in);
	
public IndentContLineReader(Reader in, int sz)
Construct an IndentContLineReader using the given buffer size.

		super(in, sz);
	
Methods Summary
public intgetLineNumber()
Line number of first line in current (possibly continued) line

		return firstLineNumber;
	
public java.lang.StringreadLine()
Read one (possibly continued) line, stripping out the '\'s that mark the end of all but the last.

		String s;

		// If we saved a previous line, start with it. Else,
		// read the first line of possible continuation. 
		// If non-null, put it into the StringBuffer and its line 
		// number in firstLineNumber.
		if (prevLine != null) {
			s = prevLine;
			prevLine = null;
		}
		else  {
			s = readPhysicalLine();
		}

		// save the line number of the first line.
		firstLineNumber = super.getLineNumber();

		// Now we have one line. If we are not in continuation
		// mode, or if a previous readPhysicalLine() returned null,
		// we are finished, so return it.
		if (!doContinue || s == null)
			return s;

		// Otherwise, start building a stringbuffer
		StringBuffer sb = new StringBuffer(s);

		// Read as many continued lines as there are, if any.
		while (true) {
			String nextPart = readPhysicalLine();
			if (nextPart == null) {
				// Egad! EOF within continued line.
				// Return what we have so far.
				return sb.toString();
			}
			// If the next line begins with space, it's continuation
			if (nextPart.length() > 0 &&
				Character.isWhitespace(nextPart.charAt(0))) {
				sb.append(nextPart);	// and add line.
			} else {
				// else we just read too far, so put in "pushback" holder
				prevLine = nextPart;
				break;
			}
		}

		return sb.toString();		// return what's left