Browse Source

Attempt at making the remapComposite "more readable".

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1151447 13f79535-47bb-0310-9956-ffa450edef68
tags/fop-1_1rc1old
Jeremias Maerki 13 years ago
parent
commit
24158d577f
1 changed files with 18 additions and 13 deletions
  1. 18
    13
      src/java/org/apache/fop/fonts/truetype/TTFSubSetFile.java

+ 18
- 13
src/java/org/apache/fop/fonts/truetype/TTFSubSetFile.java View File

} }
TTFMtxEntry mtxEntry = mtxTab[glyphIdx.intValue()]; TTFMtxEntry mtxEntry = mtxTab[glyphIdx.intValue()];
long offset = glyphOffset + mtxEntry.getOffset() + 10; long offset = glyphOffset + mtxEntry.getOffset() + 10;
if (remappedComposites.contains(offset)) {
return;

//Avoid duplicate remapping (see javadoc for remappedComposites above)
if (!remappedComposites.contains(offset)) {
remappedComposites.add(offset);
innerRemapComposite(in, glyphs, offset);
} }
remappedComposites.add(offset);
}


private void innerRemapComposite(FontFileReader in, Map<Integer, Integer> glyphs, long offset)
throws IOException {
Integer compositeIdx = null; Integer compositeIdx = null;
int flags = 0; int flags = 0;
boolean moreComposites = true; boolean moreComposites = true;
* Read a unsigned short value at given position * Read a unsigned short value at given position
*/ */
private int readUShort(int pos) { private int readUShort(int pos) {
int ret = (int)output[pos];
int ret = output[pos];
if (ret < 0) { if (ret < 0) {
ret += 256; ret += 256;
} }
ret = ret << 8; ret = ret << 8;
if ((int)output[pos + 1] < 0) {
ret |= (int)output[pos + 1] + 256;
if (output[pos + 1] < 0) {
ret |= output[pos + 1] + 256;
} else { } else {
ret |= (int)output[pos + 1];
ret |= output[pos + 1];
} }


return ret; return ret;
*/ */
private int maxPow2(int max) { private int maxPow2(int max) {
int i = 0; int i = 0;
while (Math.pow(2, (double)i) < max) {
while (Math.pow(2, i) < max) {
i++; i++;
} }


} }


private int log2(int num) { private int log2(int num) {
return (int)(Math.log((double)num) / Math.log(2));
return (int)(Math.log(num) / Math.log(2));
} }




long sum = 0; long sum = 0;


for (int i = 0; i < size; i += 4) { for (int i = 0; i < size; i += 4) {
int l = (int)(output[start + i] << 24);
l += (int)(output[start + i + 1] << 16);
l += (int)(output[start + i + 2] << 16);
l += (int)(output[start + i + 3] << 16);
int l = (output[start + i] << 24);
l += (output[start + i + 1] << 16);
l += (output[start + i + 2] << 16);
l += (output[start + i + 3] << 16);
sum += l; sum += l;
if (sum > 0xffffffff) { if (sum > 0xffffffff) {
sum = sum - 0xffffffff; sum = sum - 0xffffffff;

Loading…
Cancel
Save