package nl.bluering; import java.io.*; import java.awt.TextArea; import javax.swing.JTextArea; /** * This class provides the outputstream for writing Expressions */ public class ExpWriter { Writer out; TextArea ta; Syntelset library=Syntelset.getdefaultset(); // JTextArea jta; public final static int PROLOG=1,XML=2,POSTSCRIPT=3; int mode; /** * Constructs the stream to the given java Writer */ public ExpWriter(Writer a) {this(a,PROLOG);} public ExpWriter(Writer a,int mode) {out=a;setmode(mode);} public ExpWriter(File ff) throws IOException {out=new FileWriter(ff);} public ExpWriter(TextArea t,int mode) {ta=t;setmode(mode);} ExpWriter setmode(int m) {mode=m;return this;} ExpWriter setmode(String m) { m=m.trim().toUpperCase(); if(m.equals("XML")) return setmode(XML); else if(m.equals("PROLOG")) return setmode(PROLOG); else if(m.equals("POSTSCRIPT")) return setmode(POSTSCRIPT); return this; } /** * write the expression to the stream */ public void write(Expression e) { if(e==null) return; if(mode==XML) writexml(e,true); else if(mode==PROLOG) writeprolog(e,Syntel.MAXLEVEL); } public boolean writexml(Expression e,boolean becareful) {if(e.isbasic()) { if (becareful) { write(""+xmlescape(e.getfunctionstring())+"\n"); return false; } else { write(xmlescape(e.getfunctionstring())); return true; } } if(e.getc()==0) write("<"+e.getfunctionstring()+"/>\n"); else {write("<"+e.getfunctionstring()+">\n"); becareful=false; for(int i=0;i\n"); } return false; } static String xmlescape(String s) {int wrongchar=s.indexOf(">"); if(wrongchar!=-1) return s.substring(0,wrongchar)+">"+xmlescape(s.substring(wrongchar+1)); wrongchar=s.indexOf("<"); if(wrongchar!=-1) return s.substring(0,wrongchar)+"<"+xmlescape(s.substring(wrongchar+1)); wrongchar=s.indexOf("&"); if(wrongchar!=-1) return s.substring(0,wrongchar)+"&"+xmlescape(s.substring(wrongchar+1)); return s; } public void writeprolog(Expression e,int level) { if (e.isbasic()) { write(e.getfunctionstring()); return; } Syntel o=library.fnamefind(e.getfunctionstring(),e.getc()); if (o==null) { write(e.getfunctionstring()); write("("); if(e.getc()>0) writeprolog(e.get(0),Syntel.MAXLEVEL); for(int i=1;i