// Copyright 2001, FreeHEP.
package org.freehep.postscript;
import java.io.IOException;
/**
* Objects for PostScript Processor, as defined in 3.3 Data Types and Objects
*
* @author Mark Donszelmann
* @version $Id: Dispatcher.java 8958 2006-09-12 23:37:43Z duns $
*/
public class Dispatcher {
private Dispatcher() {
}
public static boolean dispatch(OperandStack os, PSTokenizable in) {
try {
PSObject obj = in.token(os.packingMode(), os.dictStack());
if (obj == null) {
return true;
}
// handle token, especially for procedures built by scanner
if (obj instanceof PSPackedArray) {
os.push(obj);
} else {
os.execStack().push(obj);
}
return false;
} catch (IOException e) {
PSObject.error(os, new IOError());
return true;
} catch (SyntaxException e) {
PSArray errorInfo = new PSArray(2);
errorInfo.set(0, new PSInteger(e.getLineNo()));
errorInfo.set(1, new PSString(e.getMessage()));
os.dictStack().dollarError().put("errorinfo", errorInfo);
PSObject.error(os, new SyntaxError());
return true;
} catch (NameNotFoundException e) {
PSObject.error(os, new Undefined());
return true;
}
}
}