protected void writeStringIndex()

in src/java/org/apache/fop/render/pdf/pdfbox/MergeCFFFonts.java [339:384]


    protected void writeStringIndex() throws IOException {
        int stringIndexSize = stringIndexData.size();
        for (String s : strings) {
            stringIndexData.add(s.getBytes("US-ASCII"));
        }

        //Write the String Index
        boolean stdRange = range.containsKey(NUM_STANDARD_STRINGS);
        if (!stringIndexData.isEmpty()) {
            if (!strings.isEmpty()
                    && !new String(stringIndexData.get(0), StandardCharsets.UTF_8).equals(strings.get(0)) && stdRange) {
                //Keep strings in order as they are referenced from the TopDICT
                for (int i = 0; i < stringIndexSize; i++) {
                    stringIndexData.add(stringIndexData.remove(0));
                }
            } else {
                String notice = (String)fileFont.getTopDict().get("Notice");
                if (notice != null && !(fileFont instanceof CFFCIDFont)) {
                    stringIndexData.add(notice.getBytes(PDFDocument.ENCODING));
                }
            }
            if (stdRange) {
                stringIndexData.add(embeddedName.getBytes(StandardCharsets.UTF_8));
            } else {
                stringIndexData.add(0, embeddedName.getBytes(StandardCharsets.UTF_8));
            }
            writeIndex(stringIndexData);
        } else {
            String notice = (String)fileFont.getTopDict().get("Notice");
            if (notice != null) {
                writeIndex(Arrays.<byte[]>asList(notice.getBytes(PDFDocument.ENCODING),
                        embeddedName.getBytes(StandardCharsets.UTF_8)));
            } else {
                List<byte[]> sindex = new ArrayList<byte[]>();
                sindex.add(cffReader.getStringIndex().getData());
                if (sindex.size() > 1) {
                    fallbackIndex = true;
                    writeIndex(sindex);
                } else if (sindex.size() == 1) {
                    writeIndex(Arrays.asList(embeddedName.getBytes(StandardCharsets.UTF_8)));
                } else {
                    writeCard16(0);
                }
            }
        }
    }