diff options
author | Simon Steiner <ssteiner@apache.org> | 2023-04-24 12:27:09 +0100 |
---|---|---|
committer | Simon Steiner <ssteiner@apache.org> | 2023-04-24 12:27:09 +0100 |
commit | 6696559fc657aa3d83b868c337ced59e6a44ca7b (patch) | |
tree | 727dcd2426ee34e88ca9f81f5bbcd7e44dd407ea /fop-core/src/main/java | |
parent | 95ddfc80503820b6cd5d07121595f6419cfbe221 (diff) | |
download | xmlgraphics-fop-6696559fc657aa3d83b868c337ced59e6a44ca7b.tar.gz xmlgraphics-fop-6696559fc657aa3d83b868c337ced59e6a44ca7b.zip |
FOP-3129: Symbol font was not being mapped to unicode
Diffstat (limited to 'fop-core/src/main/java')
-rw-r--r-- | fop-core/src/main/java/org/apache/fop/fonts/truetype/OpenFont.java | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/fop-core/src/main/java/org/apache/fop/fonts/truetype/OpenFont.java b/fop-core/src/main/java/org/apache/fop/fonts/truetype/OpenFont.java index 0d10129f0..95113f407 100644 --- a/fop-core/src/main/java/org/apache/fop/fonts/truetype/OpenFont.java +++ b/fop-core/src/main/java/org/apache/fop/fonts/truetype/OpenFont.java @@ -557,17 +557,7 @@ public abstract class OpenFont { unicodeMappings.add(new UnicodeMapping(this, glyphIdx, j)); mtxTab[glyphIdx].getUnicodeIndex().add(j); - if (encodingID == 0 && j >= 0xF020 && j <= 0xF0FF) { - //Experimental: Mapping 0xF020-0xF0FF to 0x0020-0x00FF - //Tested with Wingdings and Symbol TTF fonts which map their - //glyphs in the region 0xF020-0xF0FF. - int mapped = j - 0xF000; - if (!eightBitGlyphs.get(mapped)) { - //Only map if Unicode code point hasn't been mapped before - unicodeMappings.add(new UnicodeMapping(this, glyphIdx, mapped)); - mtxTab[glyphIdx].getUnicodeIndex().add(mapped); - } - } + mapSymbol(encodingID, j, eightBitGlyphs, glyphIdx); // Also add winAnsiWidth List<Integer> v = ansiIndex.get(j); @@ -612,6 +602,8 @@ public abstract class OpenFont { + mtxTab.length); } + mapSymbol(encodingID, j, eightBitGlyphs, glyphIdx); + // Also add winAnsiWidth List<Integer> v = ansiIndex.get(j); if (v != null) { @@ -727,6 +719,20 @@ public abstract class OpenFont { return true; } + private void mapSymbol(int encodingID, int unicodeIndex, BitSet eightBitGlyphs, int glyphIdx) { + if (encodingID == 0 && unicodeIndex >= 0xF020 && unicodeIndex <= 0xF0FF) { + /* Experimental: Mapping 0xF020-0xF0FF to 0x0020-0x00FF + Tested with Wingdings and Symbol TTF fonts which map their + glyphs in the region 0xF020-0xF0FF. */ + int mapped = unicodeIndex - 0xF000; + if (!eightBitGlyphs.get(mapped)) { + //Only map if Unicode code point hasn't been mapped before + unicodeMappings.add(new UnicodeMapping(this, glyphIdx, mapped)); + mtxTab[glyphIdx].getUnicodeIndex().add(mapped); + } + } + } + private boolean isInPrivateUseArea(int start, int end) { return (isInPrivateUseArea(start) || isInPrivateUseArea(end)); } |