
org.openpdf.renderer.function.postscript.operation.OperationSet Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of openpdf-renderer Show documentation
Show all versions of openpdf-renderer Show documentation
PDF renderer implementation supporting the subset of PDF 1.4 specification.
The newest version!
package org.openpdf.renderer.function.postscript.operation;
import java.util.HashMap;
import java.util.Map;
public class OperationSet {
/** the set of all Operations we support. These operations are defined
* in Appendix B - Operators.*/
private Map operationSet = null;
private static OperationSet instance;
/*************************************************************************
* Constructor
************************************************************************/
private OperationSet() {
super();
initOperations();
}
/*************************************************************************
* @return
************************************************************************/
public static synchronized OperationSet getInstance() {
if (instance == null) {
instance = new OperationSet();
}
return instance;
}
/*************************************************************************
* @param token
* @return
************************************************************************/
public PostScriptOperation getOperation(String token) {
PostScriptOperation result = this.operationSet.get(token.trim().toLowerCase());
if (result == null) {
result = new PushAsNumber(token);
}
return result;
}
/**
* Initialize the operations that we can perform.
*/
private void initOperations() {
/** these operators consider the left hand arguments as deeper in
* the stack than the right hand arguments, thus the right-hand is
* is the top of the stack and is popped first.
*
* PostScriptOperation details in PostScript Language Reference Manual:
* http://www.adobe.com/products/postscript/pdfs/PLRM.pdf
* Chapter 8 - Operator Details
*/
if (this.operationSet == null) {
this.operationSet = new HashMap();
// Arithmetic Operators
this.operationSet.put("abs", new Abs());
this.operationSet.put("add", new Add());
this.operationSet.put("atan", new Atan());
this.operationSet.put("ceiling", new Ceiling());
this.operationSet.put("cvi", new Cvi());
this.operationSet.put("cvr", new Cvr());
this.operationSet.put("div", new Div());
this.operationSet.put("exp", new Exp());
this.operationSet.put("floor", new Floor());
this.operationSet.put("idiv", new Idiv());
this.operationSet.put("ln", new Ln());
this.operationSet.put("log", new Log());
this.operationSet.put("mod", new Mod());
this.operationSet.put("mul", new Mul());
this.operationSet.put("neg", new Neg());
this.operationSet.put("round", new Round());
this.operationSet.put("sin", new Sin());
this.operationSet.put("sqrt", new Sqrt());
this.operationSet.put("sub", new Sub());
this.operationSet.put("truncate", new Truncate());
// Relational, boolean, and bitwise operators
this.operationSet.put("and", new And());
this.operationSet.put("bitshift", new Bitshift());
this.operationSet.put("eq", new Eq());
this.operationSet.put("false", new False());
this.operationSet.put("ge", new Ge());
this.operationSet.put("gt",new Gt());
this.operationSet.put("le", new Le());
this.operationSet.put("lt", new Lt());
this.operationSet.put("ne", new Ne());
this.operationSet.put("not", new Not());
this.operationSet.put("or", new Or());
this.operationSet.put("true", new True());
this.operationSet.put("xor", new Xor());
// Conditional Operators
this.operationSet.put("if", new If());
this.operationSet.put("ifelse", new IfElse());
// Stack Operators
this.operationSet.put("copy", new Copy());
this.operationSet.put("dup", new Dup());
this.operationSet.put("exch", new Exch());
this.operationSet.put("index", new Index());
this.operationSet.put("pop", new Pop());
this.operationSet.put("roll", new Roll());
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy