org.apache.fop.render.pcl.fonts.PCLByteWriterUtil Maven / Gradle / Ivy
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/* $Id$ */
package org.apache.fop.render.pcl.fonts;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Arrays;
public final class PCLByteWriterUtil {
private PCLByteWriterUtil() {
}
public static byte[] padBytes(byte[] in, int length) {
return padBytes(in, length, 0);
}
public static byte[] padBytes(byte[] in, int length, int value) {
byte[] out = new byte[length];
for (int i = 0; i < length; i++) {
if (i < in.length) {
out[i] = in[i];
} else {
out[i] = (byte) value;
}
}
return out;
}
public static byte[] signedInt(int s) {
byte b1 = (byte) (s >> 8);
byte b2 = (byte) s;
return new byte[]{b1, b2};
}
public static byte signedByte(int s) {
return (byte) s;
}
public static byte[] unsignedLongInt(int s) {
return unsignedLongInt((long) s);
}
public static byte[] unsignedLongInt(long s) {
byte b1 = (byte) ((s >> 24) & 0xff);
byte b2 = (byte) ((s >> 16) & 0xff);
byte b3 = (byte) ((s >> 8) & 0xff);
byte b4 = (byte) (s & 0xff);
return new byte[]{b1, b2, b3, b4};
}
public static byte[] unsignedInt(int s) {
byte b1 = (byte) ((s >> 8) & 0xff);
byte b2 = (byte) (s & 0xff);
return new byte[]{b1, b2};
}
public static int unsignedByte(int b) {
return (byte) b & 0xFF;
}
public static int maxPower2(int value) {
int test = 2;
while (test < value) {
test *= 2;
}
return test;
}
public static int log(int x, int base) {
return (int) (Math.log(x) / Math.log(base));
}
public static byte[] toByteArray(int[] s) {
byte[] values = new byte[s.length];
for (int i = 0; i < s.length; i++) {
values[i] = (byte) s[i];
}
return values;
}
public static byte[] insertIntoArray(int index, byte[] insertTo, byte[] data) throws IOException {
byte[] preBytes = Arrays.copyOf(insertTo, index);
byte[] postBytes = Arrays.copyOfRange(insertTo, index, insertTo.length);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
baos.write(preBytes);
baos.write(data);
baos.write(postBytes);
return baos.toByteArray();
}
public static byte[] updateDataAtLocation(byte[] data, byte[] update, int offset) {
int count = 0;
for (int i = offset; i < offset + update.length; i++) {
data[i] = update[count++];
}
return data;
}
/**
* Writes a PCL escape command to the output stream.
* @param cmd the command (without the ESCAPE character)
* @throws IOException In case of an I/O error
*/
public static byte[] writeCommand(String cmd) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
baos.write(27); // ESC
baos.write(cmd.getBytes("US-ASCII"));
return baos.toByteArray();
}
}