jeremias 2003/07/04 13:01:08
Added: src/java/org/apache/fop/util ASCII85OutputStream.java
RunLengthEncodeOutputStream.java Finalizable.java
FlateEncodeOutputStream.java
ASCIIHexOutputStream.java ASCII85Constants.java
ASCII85InputStream.java
Log:
Move here from org.apache.fop.render.ps
Revision Changes Path
1.1 xml-fop/src/java/org/apache/fop/util/ASCII85OutputStream.java
Index: ASCII85OutputStream.java
===================================================================
/*
* $Id: ASCII85OutputStream.java,v 1.1 2003/07/04 20:01:07 jeremias Exp $
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
*
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
*
* 4. The names "FOP" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* [EMAIL PROTECTED]
*
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
* DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ============================================================================
*
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation and was originally created by
* James Tauber <[EMAIL PROTECTED]>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
*/
package org.apache.fop.util;
import java.io.OutputStream;
import java.io.FilterOutputStream;
import java.io.IOException;
/**
* This class applies a ASCII85 encoding to the stream.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Jeremias Maerki</a>
* @version $Id: ASCII85OutputStream.java,v 1.1 2003/07/04 20:01:07 jeremias Exp $
*/
public class ASCII85OutputStream extends FilterOutputStream
implements ASCII85Constants, Finalizable {
private static final boolean DEBUG = false;
private int pos = 0;
private long buffer = 0;
private int posinline = 0;
private int bw = 0;
/** @see java.io.FilterOutputStream **/
public ASCII85OutputStream(OutputStream out) {
super(out);
}
/** @see java.io.FilterOutputStream **/
public void write(int b) throws IOException {
if (pos == 0) {
buffer += (b << 24) & 0xff000000L;
} else if (pos == 1) {
buffer += (b << 16) & 0xff0000L;
} else if (pos == 2) {
buffer += (b << 8) & 0xff00L;
} else {
buffer += b & 0xffL;
}
pos++;
if (pos > 3) {
checkedWrite(convertWord(buffer));
buffer = 0;
pos = 0;
}
}
/* UNUSED ATM
private void checkedWrite(int b) throws IOException {
if (posinline == 80) {
out.write(EOL); bw++;
posinline = 0;
}
checkedWrite(b);
posinline++;
bw++;
}*/
private void checkedWrite(byte[] buf) throws IOException {
checkedWrite(buf, buf.length, false);
}
private void checkedWrite(byte[] buf, boolean nosplit) throws IOException {
checkedWrite(buf, buf.length, nosplit);
}
private void checkedWrite(byte[] buf , int len) throws IOException {
checkedWrite(buf, len, false);
}
private void checkedWrite(byte[] buf , int len, boolean nosplit) throws
IOException {
if (posinline + len > 80) {
int firstpart = (nosplit ? 0 : len - (posinline + len - 80));
if (firstpart > 0) {
out.write(buf, 0, firstpart);
}
out.write(EOL); bw++;
int rest = len - firstpart;
if (rest > 0) {
out.write(buf, firstpart, rest);
}
posinline = rest;
} else {
out.write(buf, 0, len);
posinline += len;
}
bw += len;
}
/**
* This converts a 32 bit value (4 bytes) into 5 bytes using base 85.
* each byte in the result starts with zero at the '!' character so
* the resulting base85 number fits into printable ascii chars
*
* @param word the 32 bit unsigned (hence the long datatype) word
* @return 5 bytes (or a single byte of the 'z' character for word
* values of 0)
*/
private byte[] convertWord(long word) {
word = word & 0xffffffff;
if (word == 0) {
return ZERO_ARRAY;
} else {
if (word < 0) {
word = -word;
}
byte c1 =
(byte)((word
/ POW85[0]) & 0xFF);
byte c2 =
(byte)(((word - (c1 * POW85[0]))
/ POW85[1]) & 0xFF);
byte c3 =
(byte)(((word - (c1 * POW85[0])
- (c2 * POW85[1]))
/ POW85[2]) & 0xFF);
byte c4 =
(byte)(((word - (c1 * POW85[0])
- (c2 * POW85[1])
- (c3 * POW85[2]))
/ POW85[3]) & 0xFF);
byte c5 =
(byte)(((word - (c1 * POW85[0])
- (c2 * POW85[1])
- (c3 * POW85[2])
- (c4 * POW85[3])))
& 0xFF);
byte[] ret = {
(byte)(c1 + START), (byte)(c2 + START),
(byte)(c3 + START), (byte)(c4 + START),
(byte)(c5 + START)
};
if (DEBUG) {
for (int i = 0; i < ret.length; i++) {
if (ret[i] < 33 || ret[i] > 117) {
System.out.println("Illegal char value "
+ new Integer(ret[i]));
}
}
}
return ret;
}
}
/** @see org.apache.fop.render.ps.Finalizable **/
public void finalizeStream() throws IOException {
// now take care of the trailing few bytes.
// with n leftover bytes, we append 0 bytes to make a full group of 4
// then convert like normal (except not applying the special zero rule)
// and write out the first n+1 bytes from the result
if (pos > 0) {
int rest = pos;
/*
byte[] lastdata = new byte[4];
int i = 0;
for (int j = 0; j < 4; j++) {
if (j < rest) {
lastdata[j] = data[i++];
} else {
lastdata[j] = 0;
}
}
long val = ((lastdata[0] << 24) & 0xff000000L)
+ ((lastdata[1] << 16) & 0xff0000L)
+ ((lastdata[2] << 8) & 0xff00L)
+ (lastdata[3] & 0xffL);
*/
byte[] conv;
// special rule for handling zeros at the end
if (buffer != 0) {
conv = convertWord(buffer);
} else {
conv = new byte[5];
for (int j = 0; j < 5; j++) {
conv[j] = (byte)'!';
}
}
// assert rest+1 <= 5
checkedWrite(conv, rest + 1);
}
// finally write the two character end of data marker
checkedWrite(EOD, true);
flush();
if (out instanceof Finalizable) {
((Finalizable)out).finalizeStream();
}
}
/** @see java.io.FilterOutputStream **/
public void close() throws IOException {
finalizeStream();
super.close();
}
}
1.1
xml-fop/src/java/org/apache/fop/util/RunLengthEncodeOutputStream.java
Index: RunLengthEncodeOutputStream.java
===================================================================
/*
* $Id: RunLengthEncodeOutputStream.java,v 1.1 2003/07/04 20:01:07 jeremias Exp $
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
*
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
*
* 4. The names "FOP" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* [EMAIL PROTECTED]
*
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
* DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ============================================================================
*
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation and was originally created by
* James Tauber <[EMAIL PROTECTED]>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
*/
package org.apache.fop.util;
import java.io.FilterOutputStream;
import java.io.OutputStream;
import java.io.IOException;
/**
* This class applies a RunLengthEncode filter to the stream.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Stephen Wolke</a>
* @version $Id: RunLengthEncodeOutputStream.java,v 1.1 2003/07/04 20:01:07
jeremias Exp $
*/
public class RunLengthEncodeOutputStream extends FilterOutputStream
implements Finalizable {
private static final int MAX_SEQUENCE_COUNT = 127;
private static final int END_OF_DATA = 128;
private static final int BYTE_MAX = 256;
private static final int NOT_IDENTIFY_SEQUENCE = 0;
private static final int START_SEQUENCE = 1;
private static final int IN_SEQUENCE = 2;
private static final int NOT_IN_SEQUENCE = 3;
private int runCount = 0;
private int isSequence = NOT_IDENTIFY_SEQUENCE;
private byte[] runBuffer = new byte[MAX_SEQUENCE_COUNT + 1];
/** @see java.io.FilterOutputStream **/
public RunLengthEncodeOutputStream(OutputStream out) {
super(out);
}
/** @see java.io.FilterOutputStream **/
public void write(byte b)
throws java.io.IOException {
runBuffer[runCount] = b;
switch (runCount) {
case 0:
runCount = 0;
isSequence = NOT_IDENTIFY_SEQUENCE;
runCount++;
break;
case 1:
if (runBuffer[runCount] != runBuffer[runCount - 1]) {
isSequence = NOT_IN_SEQUENCE;
}
runCount++;
break;
case 2:
if (runBuffer[runCount] != runBuffer[runCount - 1]) {
isSequence = NOT_IN_SEQUENCE;
} else {
if (isSequence == NOT_IN_SEQUENCE) {
isSequence = START_SEQUENCE;
} else {
isSequence = IN_SEQUENCE;
}
}
runCount++;
break;
case MAX_SEQUENCE_COUNT:
if (isSequence == IN_SEQUENCE) {
out.write(BYTE_MAX - (MAX_SEQUENCE_COUNT - 1));
out.write(runBuffer[runCount - 1]);
runBuffer[0] = runBuffer[runCount];
runCount = 1;
} else {
out.write(MAX_SEQUENCE_COUNT);
out.write(runBuffer, 0, runCount + 1);
runCount = 0;
}
isSequence = NOT_IDENTIFY_SEQUENCE;
break;
default:
switch (isSequence) {
case IN_SEQUENCE:
if (runBuffer[runCount] != runBuffer[runCount - 1]) {
out.write(BYTE_MAX - (runCount - 1));
out.write(runBuffer[runCount - 1]);
runBuffer[0] = runBuffer[runCount];
runCount = 1;
isSequence = NOT_IDENTIFY_SEQUENCE;
break;
}
runCount++;
break;
case NOT_IN_SEQUENCE:
if (runBuffer[runCount] == runBuffer[runCount - 1]) {
isSequence = START_SEQUENCE;
}
runCount++;
break;
case START_SEQUENCE:
if (runBuffer[runCount] == runBuffer[runCount - 1]) {
out.write(runCount - 3);
out.write(runBuffer, 0, runCount - 2);
runBuffer[0] = runBuffer[runCount];
runBuffer[1] = runBuffer[runCount];
runBuffer[2] = runBuffer[runCount];
runCount = 3;
isSequence = IN_SEQUENCE;
break;
} else {
isSequence = NOT_IN_SEQUENCE;
runCount++;
break;
}
}
}
}
/** @see java.io.FilterOutputStream **/
public void write(byte[] b)
throws IOException {
for (int i = 0; i < b.length; i++) {
this.write(b[i]);
}
}
/** @see java.io.FilterOutputStream **/
public void write(byte[] b, int off, int len)
throws IOException {
for (int i = 0; i < len; i++) {
this.write(b[off + i]);
}
}
/** @see org.apache.fop.render.ps.Finalizable **/
public void finalizeStream()
throws IOException {
switch (isSequence) {
case IN_SEQUENCE:
out.write(BYTE_MAX - (runCount - 1));
out.write(runBuffer[runCount - 1]);
break;
default:
out.write(runCount - 1);
out.write(runBuffer, 0, runCount);
}
out.write(END_OF_DATA);
flush();
if (out instanceof Finalizable) {
((Finalizable) out).finalizeStream();
}
}
/** @see java.io.FilterOutputStream **/
public void close()
throws IOException {
finalizeStream();
super.close();
}
}
1.1 xml-fop/src/java/org/apache/fop/util/Finalizable.java
Index: Finalizable.java
===================================================================
/*
* $Id: Finalizable.java,v 1.1 2003/07/04 20:01:07 jeremias Exp $
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
*
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
*
* 4. The names "FOP" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* [EMAIL PROTECTED]
*
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
* DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ============================================================================
*
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation and was originally created by
* James Tauber <[EMAIL PROTECTED]>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
*/
package org.apache.fop.util;
/**
* This interface is used for special FilteredOutputStream classes that won't
* be closed (since this causes the target OutputStream to be closed, too) but
* where flush() is not enough, for example because a final marker has to be
* written to the target stream.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Jeremias Maerki</a>
* @version $Id: Finalizable.java,v 1.1 2003/07/04 20:01:07 jeremias Exp $
*/
public interface Finalizable {
/**
* This method can be called instead of close() on a subclass of
* FilteredOutputStream when a final marker has to be written to the target
* stream, but close() cannot be called.
*
* @exception java.io.IOException In case of an IO problem
*/
void finalizeStream()
throws java.io.IOException;
}
1.1
xml-fop/src/java/org/apache/fop/util/FlateEncodeOutputStream.java
Index: FlateEncodeOutputStream.java
===================================================================
/*
* $Id: FlateEncodeOutputStream.java,v 1.1 2003/07/04 20:01:07 jeremias Exp $
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
*
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
*
* 4. The names "FOP" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* [EMAIL PROTECTED]
*
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
* DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ============================================================================
*
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation and was originally created by
* James Tauber <[EMAIL PROTECTED]>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
*/
package org.apache.fop.util;
import java.io.OutputStream;
import java.io.IOException;
/**
* This class applies a FlateEncode filter to the stream. It is basically the
* normal DeflaterOutputStream except now also implementing the Finalizable
* interface.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Jeremias Maerki</a>
* @version $Id: FlateEncodeOutputStream.java,v 1.1 2003/07/04 20:01:07 jeremias Exp
$
*/
public class FlateEncodeOutputStream extends java.util.zip.DeflaterOutputStream
implements Finalizable {
/** @see java.util.zip.DeflaterOutputStream **/
public FlateEncodeOutputStream(OutputStream out) {
super(out);
}
/** @see org.apache.fop.render.ps.Finalizable **/
public void finalizeStream() throws IOException {
finish();
flush();
if (out instanceof Finalizable) {
((Finalizable)out).finalizeStream();
}
}
}
1.1 xml-fop/src/java/org/apache/fop/util/ASCIIHexOutputStream.java
Index: ASCIIHexOutputStream.java
===================================================================
/*
* $Id: ASCIIHexOutputStream.java,v 1.1 2003/07/04 20:01:07 jeremias Exp $
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
*
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
*
* 4. The names "FOP" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* [EMAIL PROTECTED]
*
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
* DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ============================================================================
*
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation and was originally created by
* James Tauber <[EMAIL PROTECTED]>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
*/
package org.apache.fop.util;
import java.io.OutputStream;
import java.io.FilterOutputStream;
import java.io.IOException;
/**
* This class applies a ASCII Hex encoding to the stream.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Jeremias Maerki</a>
* @version $Id: ASCIIHexOutputStream.java,v 1.1 2003/07/04 20:01:07 jeremias Exp $
*/
public class ASCIIHexOutputStream extends FilterOutputStream
implements Finalizable {
private static final int EOL = 0x0A; //"\n"
private static final int EOD = 0x3E; //">"
private static final int ZERO = 0x30; //"0"
private static final int NINE = 0x39; //"9"
private static final int A = 0x41; //"A"
private static final int ADIFF = A - NINE - 1;
private int posinline = 0;
/** @see java.io.FilterOutputStream **/
public ASCIIHexOutputStream(OutputStream out) {
super(out);
}
/** @see java.io.FilterOutputStream **/
public void write(int b) throws IOException {
b &= 0xFF;
int digit1 = ((b & 0xF0) >> 4) + ZERO;
if (digit1 > NINE) {
digit1 += ADIFF;
}
out.write(digit1);
int digit2 = (b & 0x0F) + ZERO;
if (digit2 > NINE) {
digit2 += ADIFF;
}
out.write(digit2);
posinline++;
checkLineWrap();
}
private void checkLineWrap() throws IOException {
//Maximum line length is 80 characters
if (posinline >= 40) {
out.write(EOL);
posinline = 0;
}
}
/** @see org.apache.fop.render.ps.Finalizable **/
public void finalizeStream() throws IOException {
checkLineWrap();
//Write closing character ">"
super.write(EOD);
flush();
if (out instanceof Finalizable) {
((Finalizable) out).finalizeStream();
}
}
/** @see java.io.FilterOutputStream **/
public void close() throws IOException {
finalizeStream();
super.close();
}
}
1.1 xml-fop/src/java/org/apache/fop/util/ASCII85Constants.java
Index: ASCII85Constants.java
===================================================================
/*
* $Id: ASCII85Constants.java,v 1.1 2003/07/04 20:01:07 jeremias Exp $
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
*
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
*
* 4. The names "FOP" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* [EMAIL PROTECTED]
*
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
* DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ============================================================================
*
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation and was originally created by
* James Tauber <[EMAIL PROTECTED]>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
*/
package org.apache.fop.util;
/**
* This interface defines constants used by the ASCII85 filters.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Jeremias Maerki</a>
* @version $Id: ASCII85Constants.java,v 1.1 2003/07/04 20:01:07 jeremias Exp $
*/
public interface ASCII85Constants {
/** Special character "z" stands for four NULL bytes (short-cut for !!!!!) */
public static final int ZERO = 0x7A; //"z"
/** ZERO as a byte array */
public static final byte[] ZERO_ARRAY = {(byte)ZERO};
/** The start index for ASCII85 characters (!) */
public static final int START = 0x21; //"!"
/** The end index for ASCII85 characters (u) */
public static final int END = 0x75; //"u"
/** The EOL indicator (LF) */
public static final int EOL = 0x0A; //"\n"
/** The EOD (end of data) indicator */
public static final byte[] EOD = {0x7E, 0x3E}; //"~>"
/** Array of powers of 85 (4, 3, 2, 1, 0) */
public static final long POW85[] = new long[] {85 * 85 * 85 * 85,
85 * 85 * 85,
85 * 85,
85,
1};
/*
public static final long BASE85_4 = 85;
public static final long BASE85_3 = BASE85_4 * BASE85_4;
public static final long BASE85_2 = BASE85_3 * BASE85_4;
public static final long BASE85_1 = BASE85_2 * BASE85_4;
*/
}
1.1 xml-fop/src/java/org/apache/fop/util/ASCII85InputStream.java
Index: ASCII85InputStream.java
===================================================================
/*
* $Id: ASCII85InputStream.java,v 1.1 2003/07/04 20:01:07 jeremias Exp $
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
*
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
*
* 4. The names "FOP" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* [EMAIL PROTECTED]
*
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
* DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ============================================================================
*
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation and was originally created by
* James Tauber <[EMAIL PROTECTED]>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
*/
package org.apache.fop.util;
import java.io.InputStream;
import java.io.IOException;
/**
* This class applies a ASCII85 decoding to the stream.
* <p>
* The class is derived from InputStream instead of FilteredInputStream because
* we can use the read(byte[], int, int) method from InputStream which simply
* delegates to read(). This makes the implementation easier.
* <p>
* The filter is described in chapter 3.13.3 of the PostScript Language
* Reference (third edition).
*
* @author <a href="mailto:[EMAIL PROTECTED]">Jeremias Maerki</a>
* @version $Id: ASCII85InputStream.java,v 1.1 2003/07/04 20:01:07 jeremias Exp $
*/
public class ASCII85InputStream extends InputStream
implements ASCII85Constants {
private InputStream in;
private boolean eodReached = false;
private int[] b = new int[4]; //decoded
private int bSize = 0;
private int bIndex = 0;
/** @see java.io.FilterInputStream **/
public ASCII85InputStream(InputStream in) {
super();
this.in = in;
}
/** @see java.io.FilterInputStream **/
public int read() throws IOException {
//Check if we need to read the next tuple
if (bIndex >= bSize) {
if (eodReached) {
return -1;
}
readNextTuple();
if (bSize == 0) {
if (!eodReached) {
throw new IllegalStateException("Internal error");
}
return -1;
}
}
int result = b[bIndex];
result = (result < 0 ? 256 + result : result);
bIndex++;
return result;
}
private int filteredRead() throws IOException {
int buf;
while (true) {
buf = in.read();
switch (buf) {
case 0: //null
case 9: //tab
case 10: //LF
case 12: //FF
case 13: //CR
case 32: //space
continue; //ignore
case ZERO:
case 126: //= EOD[0] = '~'
return buf;
default:
if ((buf >= START) && (buf <= END)) {
return buf;
} else {
throw new IOException("Illegal character detected: " + buf);
}
}
}
}
private void handleEOD() throws IOException {
final int buf = in.read();
if (buf != EOD[1]) {
throw new IOException("'>' expected after '~' (EOD)");
}
eodReached = true;
bSize = 0;
bIndex = 0;
}
private void readNextTuple() throws IOException {
int buf;
long tuple = 0;
//Read ahead and check for special "z"
buf = filteredRead();
if (buf == ZERO) {
java.util.Arrays.fill(b, 0);
bSize = 4;
bIndex = 0;
} else if (buf == EOD[0]) {
handleEOD();
} else {
int cIndex = 0;
tuple = (buf - START) * POW85[cIndex];
//System.out.println(cIndex + ": " + Long.toHexString(tuple));
cIndex++;
while (cIndex < 5) {
buf = filteredRead();
if (buf == EOD[0]) {
handleEOD();
break;
} else if (buf == ZERO) {
//Violation 2
throw new IOException("Illegal 'z' within tuple");
} else {
tuple += (buf - START) * POW85[cIndex];
//System.out.println(cIndex + ": " + Long.toHexString(tuple));
cIndex++;
}
}
int cSize = cIndex;
if (cSize == 1) {
//Violation 3
throw new IOException("Only one character in tuple");
}
//Handle optional, trailing, incomplete tuple
while (cIndex < 5) {
tuple += POW85[cIndex - 1];
cIndex++;
}
if (tuple > (2L << 31) - 1) {
//Violation 1
throw new IOException("Illegal tuple (> 2^32 - 1)");
}
//Convert tuple
b[0] = (byte)((tuple >> 24) & 0xFF);
b[1] = (byte)((tuple >> 16) & 0xFF);
b[2] = (byte)((tuple >> 8) & 0xFF);
b[3] = (byte)((tuple) & 0xFF);
bSize = cSize - 1;
bIndex = 0;
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]