Author: lehmi Date: Sun May 4 10:17:00 2025 New Revision: 1925392 URL: http://svn.apache.org/viewvc?rev=1925392&view=rev Log: PDFBOX-6000: avoid StringBuilder creation based on a proposal of Axel Howind
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/GlyphList.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/GlyphList.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/GlyphList.java?rev=1925392&r1=1925391&r2=1925392&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/GlyphList.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/GlyphList.java Sun May 4 10:17:00 2025 @@ -231,38 +231,14 @@ public final class GlyphList { unicode = toUnicode(name.substring(0, name.indexOf('.'))); } - else if (name.startsWith("uni") && name.length() == 7) + else if ((name.length() == 7 && name.startsWith("uni")) + || (name.length() == 5 && name.startsWith("u"))) { - // test for Unicode name in the format uniXXXX where X is hex - int nameLength = name.length(); - StringBuilder uniStr = new StringBuilder(); + // test for Unicode name in the format uniXXXX/uXXXX where X is hex + int start = name.startsWith("uni") ? 3 : 1; try { - for (int chPos = 3; chPos + 4 <= nameLength; chPos += 4) - { - int codePoint = Integer.parseInt(name.substring(chPos, chPos + 4), 16); - if (codePoint > 0xD7FF && codePoint < 0xE000) - { - LOG.warn("Unicode character name with disallowed code area: {}", name); - } - else - { - uniStr.append((char) codePoint); - } - } - unicode = uniStr.toString(); - } - catch (NumberFormatException nfe) - { - LOG.warn("Not a number in Unicode character name: {}", name); - } - } - else if (name.startsWith("u") && name.length() == 5) - { - // test for an alternate Unicode name representation uXXXX - try - { - int codePoint = Integer.parseInt(name.substring(1), 16); + int codePoint = Integer.parseInt(name, start, start + 4, 16); if (codePoint > 0xD7FF && codePoint < 0xE000) { LOG.warn("Unicode character name with disallowed code area: {}", name);