k-9/src/com/fsck/k9/mail/filter/EOLConvertingOutputStream.java

48 lines
1.1 KiB
Java

package com.fsck.k9.mail.filter;
import java.io.FilterOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class EOLConvertingOutputStream extends FilterOutputStream
{
private int lastChar;
private boolean ignoreNextIfLF = false;
public EOLConvertingOutputStream(OutputStream out)
{
super(out);
}
@Override
public void write(int oneByte) throws IOException
{
if (!ignoreNextIfLF)
{
if ((oneByte == '\n') && (lastChar != '\r'))
{
super.write('\r');
}
super.write(oneByte);
lastChar = oneByte;
}
ignoreNextIfLF = false;
}
@Override
public void flush() throws IOException
{
if (lastChar == '\r')
{
super.write('\n');
lastChar = '\n';
// We have to ignore the next character if it is <LF>. Otherwise it
// will be expanded to an additional <CR><LF> sequence although it
// belongs to the one just completed.
ignoreNextIfLF = true;
}
super.flush();
}
}