protected void addRangeUni(TrueTypeFont ttf, Set<Integer> longTag) { if (!subset && (subsetRanges != null || ttf.getDirectoryOffset() > 0)) { int[] rg = subsetRanges == null && ttf.getDirectoryOffset() > 0 ? new int[]{0, 0xffff} : compactRanges(subsetRanges); Map<Integer, int[]> usemap = ttf.getActiveCmap(); assert usemap != null; for (Map.Entry<Integer, int[]> e : usemap.entrySet()) { int[] v = e.getValue(); int gi = v[0]; if (longTag.contains(v[0])) { continue; } int c = e.getKey(); boolean skip = true; for (int k = 0; k < rg.length; k += 2) { if (c >= rg[k] && c <= rg[k + 1]) { skip = false; break; } } if (!skip) { longTag.add(gi); } } } }
@Deprecated /** * @deprecated will be removed in 7.2 */ protected void addRangeUni(TrueTypeFont ttf, Map<Integer, int[]> longTag, boolean includeMetrics) { if (!subset && (subsetRanges != null || ttf.getDirectoryOffset() > 0)) { int[] rg = subsetRanges == null && ttf.getDirectoryOffset() > 0 ? new int[]{0, 0xffff} : compactRanges(subsetRanges); Map<Integer, int[]> usemap = ttf.getActiveCmap(); assert usemap != null; for (Map.Entry<Integer, int[]> e : usemap.entrySet()) { int[] v = e.getValue(); int gi = v[0]; if (longTag.containsKey(v[0])) { continue; } int c = e.getKey(); boolean skip = true; for (int k = 0; k < rg.length; k += 2) { if (c >= rg[k] && c <= rg[k + 1]) { skip = false; break; } } if (!skip) { longTag.put(gi, includeMetrics ? new int[]{v[0], v[1], c} : null); } } } }
protected void addRangeUni(Set<Integer> longTag) { if (!subset && (subsetRanges != null || ((TrueTypeFont) getFontProgram()).getDirectoryOffset() > 0)) { int[] rg = subsetRanges == null && ((TrueTypeFont) getFontProgram()).getDirectoryOffset() > 0 ? new int[]{0, 0xffff} : compactRanges(subsetRanges); Map<Integer, int[]> usemap = ((TrueTypeFont) getFontProgram()).getActiveCmap(); assert usemap != null; for (Map.Entry<Integer, int[]> e : usemap.entrySet()) { int[] v = e.getValue(); int gi = v[0]; if (longTag.contains(gi)) { continue; } int c = (int) e.getKey(); boolean skip = true; for (int k = 0; k < rg.length; k += 2) { if (c >= rg[k] && c <= rg[k + 1]) { skip = false; break; } } if (!skip) { longTag.add(gi); } } } }
try { byte[] fontStreamBytes; if (subset || ((TrueTypeFont) getFontProgram()).getDirectoryOffset() != 0 || subsetRanges != null) {
} else { byte[] ttfBytes = null; if (subset || ttf.getDirectoryOffset() != 0) { try { ttfBytes = ttf.getSubset(new HashSet<>(longTag), true);