diff options
| author | tknall <tknall@7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c> | 2006-12-01 12:20:24 +0000 | 
|---|---|---|
| committer | tknall <tknall@7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c> | 2006-12-01 12:20:24 +0000 | 
| commit | 6025b6016517c6d898d8957d1d7e03ba71431912 (patch) | |
| tree | b15bd6fa5ffe9588a9bca3f2b8a7e358f83b6eba /src/main/java/com/lowagie/text/pdf/codec/postscript/PAEngine.java | |
| parent | d2c77e820ab4aba8235d71275755021347b3ad10 (diff) | |
| download | pdf-as-3-6025b6016517c6d898d8957d1d7e03ba71431912.tar.gz pdf-as-3-6025b6016517c6d898d8957d1d7e03ba71431912.tar.bz2 pdf-as-3-6025b6016517c6d898d8957d1d7e03ba71431912.zip | |
Initial import of release 2.2.REL-2.2@923
git-svn-id: https://joinup.ec.europa.eu/svn/pdf-as/trunk@4 7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c
Diffstat (limited to 'src/main/java/com/lowagie/text/pdf/codec/postscript/PAEngine.java')
| -rw-r--r-- | src/main/java/com/lowagie/text/pdf/codec/postscript/PAEngine.java | 155 | 
1 files changed, 155 insertions, 0 deletions
| diff --git a/src/main/java/com/lowagie/text/pdf/codec/postscript/PAEngine.java b/src/main/java/com/lowagie/text/pdf/codec/postscript/PAEngine.java new file mode 100644 index 0000000..e905402 --- /dev/null +++ b/src/main/java/com/lowagie/text/pdf/codec/postscript/PAEngine.java @@ -0,0 +1,155 @@ +/*
 + * Copyright 1998 by Sun Microsystems, Inc.,
 + * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A.
 + * All rights reserved.
 + *
 + * This software is the confidential and proprietary information
 + * of Sun Microsystems, Inc. ("Confidential Information").  You
 + * shall not disclose such Confidential Information and shall use
 + * it only in accordance with the terms of the license agreement
 + * you entered into with Sun.
 + */
 +
 +package com.lowagie.text.pdf.codec.postscript;
 +
 +import java.util.*;
 +
 +
 +public class PAEngine extends Object {
 +
 +    static public final int MODE_STACK = 0;
 +    static public final int MODE_PROCEDURE = 1;
 +    static public final int MODE_ARRAY = 2;
 +
 +    protected PAContext context;
 +    protected int mode;
 +    protected Stack procedure;
 +    protected int innerProcedures;
 +
 +    public PAEngine(PAContext context){
 +        super();
 +        this.context = context;
 +        this.mode = PAEngine.MODE_STACK;
 +    }
 +
 +    public void startProcedure() throws PainterException {
 +        this.procedure = new Stack();
 +        this.mode = PAEngine.MODE_PROCEDURE;
 +        this.innerProcedures = 0;
 +    }
 +
 +    public void endProcedure() throws PainterException {
 +        this.context.operands.push(new PAToken(this.procedure, PAToken.PROCEDURE));
 +        this.mode = PAEngine.MODE_STACK;
 +    }
 +
 +    public void bindProcedure(PAToken patoken){
 +        Stack oldStack = (Stack) patoken.value;
 +        Stack newStack = new Stack();
 +        int i,n;
 +        n = oldStack.size();
 +        for(i = 0; i < n; i++){
 +            Object token = oldStack.elementAt(i);
 +            if((token instanceof PAToken) && ((PAToken) token).type == PAToken.IDENTIFIER){
 +                Object foundToken = this.context.findIdentifier(((PAToken) token).value);
 +                if(foundToken == null){
 +                    newStack.push(token);
 +                } else {
 +                    newStack.push(foundToken);
 +                }
 +            } else {
 +                newStack.push(token);
 +            }
 +        }
 +        patoken.value = newStack;
 +    }
 +
 +    public void process(Object token) throws PainterException {
 +        if(token == null){
 +            throw new IllegalStateException("Null token encountered; last unknown identifier was " + this.context.getLastUnknownIdentifier()+" at line "+this.context.poorscript.token.beginLine);
 +        }
 +        if(PAContext.DebugExecution){
 +          System.out.print("==>" + token.toString());
 +//          System.out.flush();
 +        }
 +        if(token instanceof PAToken && ((PAToken) token).type == PAToken.IMMEDIATE){
 +            Object foundValue = this.context.findIdentifier(((PAToken) token).value);
 +            this.process(foundValue);
 +            return;
 +        }
 +        if(this.mode == MODE_STACK){
 +            if(token instanceof PACommand){
 +                ((PACommand) token).execute(this.context);
 +            } else if(token instanceof PAToken){
 +                PAToken patoken = (PAToken) token;
 +
 +                switch(patoken.type){
 +                case PAToken.IDENTIFIER:
 +                    this.process(this.context.findIdentifier(patoken.value));
 +                    break;
 +                case PAToken.KEY:
 +                case PAToken.MARK:
 +                case PAToken.START_ARRAY:
 +                    this.context.operands.push(token);
 +                    break;
 +                case PAToken.PROCEDURE:
 +                    Enumeration enumx = ((Vector) patoken.value).elements();
 +                    while(enumx.hasMoreElements()){
 +                        this.process(enumx.nextElement());
 +                    }
 +                    break;
 +                case PAToken.START_PROCEDURE:
 +                    this.startProcedure();
 +                    break;
 +                case PAToken.END_ARRAY:
 +                    this.context.collectArray();
 +                    break;
 +                case PAToken.START_DICT:
 +                  this.context.operands.push(token);
 +                  break;
 +                case PAToken.END_DICT:
 +                  this.context.collectDict();
 +                  break;
 +                default:
 +                    throw new IllegalStateException("Unknown token encountered" + token);
 +                }
 +            } else {
 +                this.context.operands.push(token);
 +            }
 +        } else if(this.mode == MODE_PROCEDURE){
 +            if(token instanceof PAToken){
 +                PAToken patoken = (PAToken) token;
 +
 +                switch(patoken.type){
 +                case PAToken.START_PROCEDURE:
 +                    this.innerProcedures++;
 +                    this.procedure.push(token);
 +                    break;
 +                case PAToken.END_PROCEDURE:
 +                    if(this.innerProcedures > 0){
 +                        this.innerProcedures--;
 +                        this.procedure.push(token);
 +                    } else {
 +                        this.endProcedure();
 +                    }
 +                    break;
 +                default:
 +                    this.procedure.push(token);
 +                }
 +            } else {
 +                this.procedure.push(token);
 +            }
 +        }
 +    }
 +
 +    public String litMode(){
 +      switch(this.mode){
 +        case MODE_ARRAY: return "Array";
 +          case MODE_PROCEDURE: return "Proc"+innerProcedures;
 +            case MODE_STACK: return "Stack";
 +              default: return "Unknown";
 +      }
 +    }
 +
 +}
 +
 | 
