PDFCharProcs.java 6.07 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.adobe.internal.io.stream.InputByteStream
 *  com.adobe.internal.pdftoolkit.core.cos.CosArray
 *  com.adobe.internal.pdftoolkit.core.cos.CosObject
 *  com.adobe.internal.pdftoolkit.core.exceptions.PDFCosParseException
 *  com.adobe.internal.pdftoolkit.core.exceptions.PDFIOException
 *  com.adobe.internal.pdftoolkit.core.exceptions.PDFInvalidDocumentException
 *  com.adobe.internal.pdftoolkit.core.exceptions.PDFInvalidParameterException
 *  com.adobe.internal.pdftoolkit.core.exceptions.PDFSecurityException
 *  com.adobe.internal.pdftoolkit.core.types.ASName
 */
package com.adobe.internal.pdftoolkit.pdf.graphics.font;

import com.adobe.internal.io.stream.InputByteStream;
import com.adobe.internal.pdftoolkit.core.cos.CosArray;
import com.adobe.internal.pdftoolkit.core.cos.CosObject;
import com.adobe.internal.pdftoolkit.core.exceptions.PDFCosParseException;
import com.adobe.internal.pdftoolkit.core.exceptions.PDFIOException;
import com.adobe.internal.pdftoolkit.core.exceptions.PDFInvalidDocumentException;
import com.adobe.internal.pdftoolkit.core.exceptions.PDFInvalidParameterException;
import com.adobe.internal.pdftoolkit.core.exceptions.PDFSecurityException;
import com.adobe.internal.pdftoolkit.core.types.ASName;
import com.adobe.internal.pdftoolkit.pdf.content.Content;
import com.adobe.internal.pdftoolkit.pdf.content.Instruction;
import com.adobe.internal.pdftoolkit.pdf.content.NoopOperatorHandler;
import com.adobe.internal.pdftoolkit.pdf.content.processor.ConditionalContentStreamProcessor;
import com.adobe.internal.pdftoolkit.pdf.content.processor.IConditionalOperatorHandler;
import com.adobe.internal.pdftoolkit.pdf.document.PDFContents;
import com.adobe.internal.pdftoolkit.pdf.document.PDFCosDictionaryMap;
import com.adobe.internal.pdftoolkit.pdf.document.PDFCosObject;
import com.adobe.internal.pdftoolkit.pdf.document.PDFCosObjectContainer;
import com.adobe.internal.pdftoolkit.pdf.document.PDFDocument;

/*
 * This class specifies class file version 49.0 but uses Java 6 signatures.  Assumed Java 6.
 */
public class PDFCharProcs
extends PDFCosDictionaryMap<PDFContents> {
    private PDFCharProcs(CosObject cosObject) throws PDFInvalidDocumentException {
        super(cosObject);
    }

    public static PDFCharProcs getInstance(CosObject cosObject) throws PDFInvalidDocumentException {
        if (PDFCosObject.checkNullCosObject(cosObject) == null) {
            return null;
        }
        PDFCharProcs pdfObject = PDFCosObject.getCachedInstance(cosObject, PDFCharProcs.class);
        if (pdfObject == null) {
            pdfObject = new PDFCharProcs(cosObject);
        }
        return pdfObject;
    }

    @Override
    protected PDFContents itemInstantiator(CosObject cosObject) throws PDFInvalidDocumentException {
        return PDFContents.getInstance(cosObject);
    }

    public void set(ASName name, PDFContents charProc) throws PDFInvalidDocumentException, PDFIOException, PDFSecurityException {
        CosObject cosObj = charProc.getCosObject();
        if (cosObj instanceof CosArray) {
            InputByteStream data = charProc.getContents();
            PDFCosDictionaryMap.super.put(name, PDFContents.getInstance((CosObject)PDFCharProcs.newCosStream(this.getPDFDocument(), data)));
        } else {
            PDFCosDictionaryMap.super.put(name, charProc);
        }
    }

    public double getWidth(ASName name) throws PDFIOException, PDFInvalidDocumentException, PDFSecurityException {
        double width = 0.0;
        PDFContents charProcStm = (PDFContents)this.get((Object)name);
        if (charProcStm == null) {
            return width;
        }
        WidthHandler handler = new WidthHandler(false);
        ConditionalContentStreamProcessor proc = new ConditionalContentStreamProcessor(handler);
        proc.process(Content.newInstance(charProcStm, null));
        return handler.getWidth();
    }

    public double getCTMScaledWidth(ASName name) throws PDFIOException, PDFInvalidDocumentException, PDFSecurityException {
        double width = 0.0;
        PDFContents charProcStm = (PDFContents)this.get((Object)name);
        if (charProcStm == null) {
            return width;
        }
        WidthHandler handler = new WidthHandler(true);
        ConditionalContentStreamProcessor proc = new ConditionalContentStreamProcessor(handler);
        proc.process(Content.newInstance(charProcStm, null));
        return handler.getWidth();
    }

    private class WidthHandler
    extends NoopOperatorHandler {
        private double width;
        private boolean ctmScaledWidth;
        private boolean continueProcessing;

        public WidthHandler(boolean ctmScaledWidth) {
            this.width = 0.0;
            this.ctmScaledWidth = ctmScaledWidth;
            this.continueProcessing = true;
        }

        public double getWidth() {
            return this.width;
        }

        public boolean continueProcesing() {
            return this.continueProcessing;
        }

        public void d0(double wx, double wy, Instruction instruction) throws PDFInvalidDocumentException, PDFIOException, PDFSecurityException {
            this.width = wx;
            if (!this.ctmScaledWidth) {
                this.continueProcessing = false;
            }
        }

        public void d1(double wx, double wy, double llx, double lly, double urx, double ury, Instruction instruction) throws PDFInvalidDocumentException, PDFIOException, PDFSecurityException {
            this.width = wx;
            if (!this.ctmScaledWidth) {
                this.continueProcessing = false;
            }
        }

        public void cm(double a, double b, double c, double d, double e, double f, Instruction instruction) throws PDFInvalidDocumentException, PDFIOException, PDFSecurityException {
            if (this.ctmScaledWidth) {
                this.width *= a;
            }
        }

        public void BI(Instruction instruction) throws PDFInvalidDocumentException, PDFIOException, PDFSecurityException {
            if (this.ctmScaledWidth) {
                this.continueProcessing = false;
            }
        }
    }

}