package circusRefine.util.docgenerator; import java.util.List; import javax.swing.JOptionPane; import net.sourceforge.czt.circus.ast.ActionPara; import net.sourceforge.czt.circus.ast.ChannelDecl; import net.sourceforge.czt.circus.ast.ChannelPara; import net.sourceforge.czt.circus.ast.ChannelSet; import net.sourceforge.czt.circus.ast.ChannelSetPara; import net.sourceforge.czt.circus.ast.CircusAction; import net.sourceforge.czt.circus.ast.CircusProcess; import net.sourceforge.czt.circus.ast.NameSet; import net.sourceforge.czt.circus.ast.NameSetPara; import net.sourceforge.czt.circus.ast.ProcessPara; import net.sourceforge.czt.circus.ast.TransformerPara; import net.sourceforge.czt.circus.util.CircusUtils; import net.sourceforge.czt.z.ast.AxPara; import net.sourceforge.czt.z.ast.Box; import net.sourceforge.czt.z.ast.ConjPara; import net.sourceforge.czt.z.ast.Decl; import net.sourceforge.czt.z.ast.FreePara; import net.sourceforge.czt.z.ast.Freetype; import net.sourceforge.czt.z.ast.GivenPara; import net.sourceforge.czt.z.ast.InStroke; import net.sourceforge.czt.z.ast.Name; import net.sourceforge.czt.z.ast.NextStroke; import net.sourceforge.czt.z.ast.NumStroke; import net.sourceforge.czt.z.ast.OutStroke; import net.sourceforge.czt.z.ast.Pred; import net.sourceforge.czt.z.ast.SchText; import net.sourceforge.czt.z.ast.Stroke; import net.sourceforge.czt.z.ast.ZDeclList; import net.sourceforge.czt.z.ast.ZFreetypeList; import net.sourceforge.czt.z.ast.ZName; import net.sourceforge.czt.z.ast.ZNameList; import net.sourceforge.czt.z.util.ZString; import net.sourceforge.czt.z.util.ZUtils; import circusRefine.core.NoPrograma; import circusRefine.core.Relacionamento; import circusRefine.core.print.ParaPrint; import circusRefine.core.print.Printer; import circusRefine.core.relations.RelationsAnn; import circusRefine.core.relations.RelationsUtils; public class ParaPrintLatex extends ParaPrint { public ParaPrintLatex(DocGenerator printer) { super(printer); } /** * Remocao da opção de imprimir em Unicode * Retirada do ambiente circus */ public Object visitChannelPara(ChannelPara term) { getPercurso().append("Channel PAra\n"); String result[] = null; result = new String[1]; ZDeclList chanDecls = (ZDeclList)term.getZDeclList(); String strDecls = ""; int size = chanDecls.size(); int counter = 0; boolean isChannelFromDecl = false; for (Decl chanDecl : chanDecls) { if (chanDecls.size() == 1) { ChannelDecl chandecl = (ChannelDecl)chanDecl; if (chandecl.getZChannelNameList().size() == 0) { isChannelFromDecl = true; } } strDecls = strDecls + ((String[])chanDecl.accept(declPrint()))[0]; if(counter < size-1) { strDecls = strDecls + "; "; } counter++; } if (!isChannelFromDecl) { result[0] = BRANCO + "\\circchannel\\ " + strDecls; } else { result[0] = BRANCO + "\\circchannelfrom\\ " + strDecls; } return result; } /** * Remocao da opção de imprimir em Unicode * Retirada do ambiente circus */ public Object visitChannelSetPara(ChannelSetPara term) { getPercurso().append("ChannelSetPara\n"); ZName name = (ZName)term.getName(); ChannelSet chanSet = term.getChannelSet(); String strName = name.getWord(); String strChanSet = ((String[])chanSet.accept(exprPrint()))[0]; ZNameList genericParams = (ZNameList)term.getGenFormals(); String[] result = null; if (!getUnicoded()) { result = new String[1]; result[0] = BRANCO + "\\circchannelset\\ "; if (genericParams.isEmpty()){ result[0] = result[0] + strName + " == " + strChanSet; } else{ boolean first = true; result[0] = result[0] + "["; for (Name nome : genericParams){ ZName nombre = (ZName)nome; if (first) first = false; else result[0] = result[0] + Space + ZString.COMMA + Space; result[0] = result[0] + nombre.getWord(); } result[0] = result[0] + "]"; result[0] = result[0]+ Space + strName + " == " + strChanSet; } } return result; } /** * Remocao da opção de imprimir em Unicode * Retirada do ambiente circus */ public Object visitProcessPara(ProcessPara term) { String[] result = null; getPercurso().append("ProcessPara\n"); // guarda a Liha Inicial para setar o Relacionamento List genParams = (ZNameList)term.getGenFormals(); CircusProcess circProc = term.getCircusProcess(); String strName = ((String[])term.getName().accept(namePrint()))[0]; String[] strProc = (String[])circProc.accept(processPrint()); String strGenParams = ""; int size = genParams.size(); int counter = 0; for(Name ndecl : genParams) { ZName decl = (ZName)ndecl; if(counter == 0) { strGenParams = "["; } strGenParams = strGenParams + decl.getWord(); if(counter < size-1) { strGenParams = strGenParams + ","; } else if(counter == size-1) { strGenParams = strGenParams + "]"; } counter++; } //LATEX int index = 1; result = new String[strProc.length + 1]; result[0] = BRANCO + "\\circprocess\\" + Space + strGenParams + Space + strName + " \\circdef \\\\"; for(int i=0; i Names = givenPara.getZNameList(); int counter = 0; int size = Names.size(); String strDecl = ""; for (Name name : Names) { ZName nombre = (ZName)name; strDecl = strDecl + nombre.getWord(); if(counter < size-1) { strDecl = strDecl + ","; } counter++; } result[0] = BRANCO + "[" + strDecl + "]"; return result; } public Object visitFreePara(FreePara freePara) { String[] result = null; getPercurso().append("FreePara\n"); List freetypes = (ZFreetypeList)freePara.getFreetypeList(); String strFT = ""; int size = freetypes.size(); int counter = 0; for (Freetype freetype : freetypes) { strFT = strFT + ((String[])freetype.accept(this))[0]; if(counter < size-1) { strFT = strFT + Space + ZString.AMP+ Space; } counter++; } result = new String[1]; result[0] = BRANCO + strFT; return result; } public Object visitConjPara(ConjPara conjPara) { String[] result = new String[3]; result = new String[1]; getPercurso().append("ConjPara\n"); Pred pred = conjPara.getPred(); List genParams = conjPara.getZNameList(); String strPred = ((String[])pred.accept(predPrint()))[0]; String strGP = ""; if(genParams != null && genParams.size() != 0) { int size = genParams.size(); int counter = 0; for(Name name : genParams) { ZName nombre = (ZName) name; if(counter == 0) { strGP = "["; } strGP = strGP + nombre.getWord(); if(counter < size-1) { strGP = strGP + ","; } else if(counter == size-1) { strGP = strGP + "]"; } } } result[0] = BRANCO + strGP + Space + "\\vdash" + Space + strPred; return result; } public Object visitTransformerPara (TransformerPara trans) { getPercurso().append("TransformerPara\n"); String aux[] = null; String []result= (String[])trans.getTransformerPred().accept(predPrint()); return result; } // PParagraph ::= N \defs ActionDefinition // ok - verificado em 25/09/2005 às 10:29 public Object visitActionPara(ActionPara term) { getPercurso().append("ActionPara\n"); String[] result = null; ZName actionName = (ZName)term.getName(); CircusAction action = term.getCircusAction(); String strName = actionName.getWord(); if (strName.startsWith(CircusUtils.DEFAULT_MAIN_ACTION_NAME)) { strName = "Main Action"; } else if (strName.startsWith(CircusUtils.DEFAULT_PROCESS_STATE_NAME)) { strName = Space; } String[] strAct = (String[])action.accept(actionPrint()); result = new String[strAct.length + 1]; int index = 1; result[0] = strName + " \\circdef "; for(int i=0; i