CMapObjectCache.java 12.5 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.adobe.internal.io.stream.InputByteStream
 *  com.adobe.internal.io.stream.OutputByteStream
 */
package com.adobe.internal.pdftoolkit.pdf.graphics.font.impl;

import com.adobe.internal.io.stream.InputByteStream;
import com.adobe.internal.io.stream.OutputByteStream;
import com.adobe.internal.pdftoolkit.pdf.graphics.font.CMapObject;
import com.adobe.internal.pdftoolkit.pdf.graphics.font.impl.CMapObjectImpl;
import com.adobe.internal.pdftoolkit.pdf.graphics.font.impl.CMapResourceBuilder;
import com.adobe.internal.pdftoolkit.pdf.graphics.font.impl.CompressedCmapLineReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.io.Reader;
import java.util.HashMap;
import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

/*
 * This class specifies class file version 49.0 but uses Java 6 signatures.  Assumed Java 6.
 */
public class CMapObjectCache {
    private static HashMap<String, CMapObject> cmapObjectCache;
    private static String COMPRESSED_CMAP_NAME;
    private static HashMap<String, Long> cmapPositionMap;
    private static final String ADOBE_COPYRIGHT = "%%Copyright: -----------------------------------------------------------\n%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated.\n%%Copyright: All rights reserved.\n%%Copyright:\n%%Copyright: Redistribution and use in source and binary forms, with or\n%%Copyright: without modification, are permitted provided that the\n%%Copyright: following conditions are met:\n%%Copyright:\n%%Copyright: Redistributions of source code must retain the above\n%%Copyright: copyright notice, this list of conditions and the following\n%%Copyright: disclaimer.\n%%Copyright:\n%%Copyright: Redistributions in binary form must reproduce the above\n%%Copyright: copyright notice, this list of conditions and the following\n%%Copyright: disclaimer in the documentation and/or other materials\n%%Copyright: provided with the distribution. \n%%Copyright:\n%%Copyright: Neither the name of Adobe Systems Incorporated nor the names\n%%Copyright: of its contributors may be used to endorse or promote\n%%Copyright: products derived from this software without specific prior\n%%Copyright: written permission. \n%%Copyright:\n%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND\n%%Copyright: CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,\n%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR\n%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\n%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n%%Copyright: -----------------------------------------------------------";

    /*
     * WARNING - Removed try catching itself - possible behaviour change.
     */
    private static void loadCmaps(CMapResourceBuilder builder, HashMap<Long, Integer> spaceCharMap) throws Exception {
        cmapObjectCache = new HashMap();
        InputStream cStream = CMapObjectCache.class.getResourceAsStream(COMPRESSED_CMAP_NAME);
        ZipInputStream zis = null;
        InputStreamReader isr = null;
        try {
            zis = new ZipInputStream(cStream);
            zis.getNextEntry();
            isr = new InputStreamReader(zis);
            CompressedCmapLineReader lineReader = new CompressedCmapLineReader(isr);
            while (!lineReader.actualEof()) {
                lineReader.resetCmapReader();
                CMapObjectImpl cmapObj = (CMapObjectImpl)builder.parseCMapFile(lineReader, null, false, spaceCharMap, false);
                String cmapName = lineReader.getCmapName();
                if (cmapName == null) continue;
                cmapObjectCache.put(cmapName, cmapObj);
            }
        }
        finally {
            try {
                if (zis != null) {
                    try {
                        zis.closeEntry();
                    }
                    finally {
                        zis.close();
                    }
                }
            }
            finally {
                if (isr != null) {
                    isr.close();
                }
            }
        }
    }

    static synchronized CMapObject getCmap(String name, CMapResourceBuilder builder, HashMap<Long, Integer> spaceCharMap) throws Exception {
        if (cmapObjectCache == null) {
            CMapObjectCache.loadCmaps(builder, spaceCharMap);
        }
        return cmapObjectCache.get(name);
    }

    /*
     * WARNING - Removed try catching itself - possible behaviour change.
     */
    static InputByteStream getInputStreamForCmap(String cmapName, OutputByteStream outStream) throws IOException {
        long pos = cmapPositionMap.get(cmapName);
        InputStream cStream = CMapObjectCache.class.getResourceAsStream(COMPRESSED_CMAP_NAME);
        ZipInputStream zis = null;
        InputStreamReader isr = null;
        try {
            zis = new ZipInputStream(cStream);
            zis.getNextEntry();
            isr = new InputStreamReader(zis);
            isr.skip(pos);
            CompressedCmapLineReader lineReader = new CompressedCmapLineReader(isr);
            String line = null;
            outStream.write("%%Copyright: -----------------------------------------------------------\n%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated.\n%%Copyright: All rights reserved.\n%%Copyright:\n%%Copyright: Redistribution and use in source and binary forms, with or\n%%Copyright: without modification, are permitted provided that the\n%%Copyright: following conditions are met:\n%%Copyright:\n%%Copyright: Redistributions of source code must retain the above\n%%Copyright: copyright notice, this list of conditions and the following\n%%Copyright: disclaimer.\n%%Copyright:\n%%Copyright: Redistributions in binary form must reproduce the above\n%%Copyright: copyright notice, this list of conditions and the following\n%%Copyright: disclaimer in the documentation and/or other materials\n%%Copyright: provided with the distribution. \n%%Copyright:\n%%Copyright: Neither the name of Adobe Systems Incorporated nor the names\n%%Copyright: of its contributors may be used to endorse or promote\n%%Copyright: products derived from this software without specific prior\n%%Copyright: written permission. \n%%Copyright:\n%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND\n%%Copyright: CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,\n%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR\n%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\n%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n%%Copyright: -----------------------------------------------------------".getBytes());
            while ((line = lineReader.readLine()) != null) {
                int countLess = 0;
                int countGreat = 0;
                for (char character : line.toCharArray()) {
                    if (character == '<') {
                        ++countLess;
                    }
                    if (character != '>') continue;
                    ++countGreat;
                }
                if (countGreat + countLess > 0) {
                    if (!line.startsWith("<")) {
                        line = "<" + line;
                        ++countLess;
                    }
                    if ((countGreat + countLess) % 2 == 1) {
                        line = line + ">";
                    }
                }
                outStream.write((line + "\n").getBytes());
            }
            outStream.write("%%EOF\n".getBytes());
        }
        finally {
            try {
                if (zis != null) {
                    try {
                        zis.closeEntry();
                    }
                    finally {
                        zis.close();
                    }
                }
            }
            finally {
                if (isr != null) {
                    isr.close();
                }
            }
        }
        return outStream.closeAndConvert();
    }

    static {
        COMPRESSED_CMAP_NAME = "merged_cmaps.zip";
        cmapPositionMap = new HashMap();
        cmapPositionMap.put("83pv-RKSJ-H", 0);
        cmapPositionMap.put("90ms-RKSJ-H", 4042);
        cmapPositionMap.put("90ms-RKSJ-V", 7350);
        cmapPositionMap.put("90msp-RKSJ-H", 9253);
        cmapPositionMap.put("90msp-RKSJ-V", 12531);
        cmapPositionMap.put("90pv-RKSJ-H", 14420);
        cmapPositionMap.put("Add-RKSJ-H", 19132);
        cmapPositionMap.put("Add-RKSJ-V", 29558);
        cmapPositionMap.put("Adobe-CNS1-UCS2", 31142);
        cmapPositionMap.put("Adobe-GB1-UCS2", 222656);
        cmapPositionMap.put("Adobe-Japan1-UCS2", 380611);
        cmapPositionMap.put("Adobe-Korea1-UCS2", 586351);
        cmapPositionMap.put("B5pc-H", 691677);
        cmapPositionMap.put("B5pc-V", 696199);
        cmapPositionMap.put("CNS-EUC-H", 697076);
        cmapPositionMap.put("CNS-EUC-V", 705687);
        cmapPositionMap.put("ETen-B5-H", 715146);
        cmapPositionMap.put("ETen-B5-V", 719804);
        cmapPositionMap.put("ETenms-B5-H", 720715);
        cmapPositionMap.put("ETenms-B5-V", 721429);
        cmapPositionMap.put("EUC-H", 722399);
        cmapPositionMap.put("EUC-V", 724935);
        cmapPositionMap.put("Ext-RKSJ-H", 726039);
        cmapPositionMap.put("Ext-RKSJ-V", 736910);
        cmapPositionMap.put("GB-EUC-H", 738224);
        cmapPositionMap.put("GB-EUC-V", 740262);
        cmapPositionMap.put("GBK-EUC-H", 741258);
        cmapPositionMap.put("GBK-EUC-V", 806047);
        cmapPositionMap.put("GBK2K-H", 807032);
        cmapPositionMap.put("GBK2K-V", 881237);
        cmapPositionMap.put("GBKp-EUC-H", 882544);
        cmapPositionMap.put("GBKp-EUC-V", 947318);
        cmapPositionMap.put("GBpc-EUC-H", 948309);
        cmapPositionMap.put("GBpc-EUC-V", 950363);
        cmapPositionMap.put("H", 951371);
        cmapPositionMap.put("HKscs-B5-H", 953811);
        cmapPositionMap.put("HKscs-B5-V", 971277);
        cmapPositionMap.put("KSC-EUC-H", 972175);
        cmapPositionMap.put("KSC-EUC-V", 980006);
        cmapPositionMap.put("KSCms-UHC-H", 980967);
        cmapPositionMap.put("KSCms-UHC-HW-H", 992178);
        cmapPositionMap.put("KSCms-UHC-HW-V", 1003385);
        cmapPositionMap.put("KSCms-UHC-V", 1004359);
        cmapPositionMap.put("KSCpc-EUC-H", 1005334);
        cmapPositionMap.put("UniCNS-UCS2-H", 1013816);
        cmapPositionMap.put("UniCNS-UCS2-V", 1272466);
        cmapPositionMap.put("UniCNS-UTF16-H", 1273374);
        cmapPositionMap.put("UniCNS-UTF16-V", 1484894);
        cmapPositionMap.put("UniGB-UCS2-H", 1485803);
        cmapPositionMap.put("UniGB-UCS2-V", 1702859);
        cmapPositionMap.put("UniGB-UTF16-H", 1703919);
        cmapPositionMap.put("UniGB-UTF16-V", 1867787);
        cmapPositionMap.put("UniJIS-UCS2-H", 1868779);
        cmapPositionMap.put("UniJIS-UCS2-HW-H", 2001217);
        cmapPositionMap.put("UniJIS-UCS2-HW-V", 2002010);
        cmapPositionMap.put("UniJIS-UCS2-V", 2005794);
        cmapPositionMap.put("UniJIS-UTF16-H", 2009512);
        cmapPositionMap.put("UniJIS-UTF16-V", 2165716);
        cmapPositionMap.put("UniKS-UCS2-H", 2168894);
        cmapPositionMap.put("UniKS-UCS2-V", 2299300);
        cmapPositionMap.put("UniKS-UTF16-H", 2300293);
        cmapPositionMap.put("UniKS-UTF16-V", 2400111);
        cmapPositionMap.put("V", 2401080);
    }
}