1 package org.antlr.works.visualization; 2 3 import org.antlr.works.ate.syntax.misc.ATEToken; 4 import org.antlr.works.grammar.EngineGrammar; 5 import org.antlr.works.prefs.AWPrefs; 6 import org.antlr.works.syntax.GrammarSyntaxEngine; 7 import org.antlr.works.visualization.graphics.*; 8 import org.antlr.works.visualization.graphics.graph.GGraph; 9 import org.antlr.works.visualization.skin.syntaxdiagram.SDSkin; 10 import org.antlr.xjlib.foundation.XJUtils; 11 12 import javax.imageio.ImageIO ; 13 import java.awt.*; 14 import java.awt.image.BufferedImage ; 15 import java.io.File ; 16 17 47 48 public class SDGenerator implements GContextProvider { 49 50 public EngineGrammar engineGrammar; 51 public GContext context; 52 53 public SDGenerator(EngineGrammar engineGrammar) { 54 this.engineGrammar = engineGrammar; 55 56 context = new GContext(); 57 context.setSkin(new SDSkin()); 58 context.setProvider(this); 59 } 60 61 public void renderRuleToEPSFile(String ruleName, String file) throws Exception { 62 GGraph graph = createGraph(ruleName); 63 GEnginePS engine = new GEnginePS(); 64 context.setEngine(engine); 65 graph.draw(); 66 XJUtils.writeStringToFile(engine.getPSText(), file); 67 } 68 69 public void renderRuleToBitmapFile(String ruleName, String imageFormat, String file) throws Exception { 70 GGraph graph = createGraph(ruleName); 71 72 int width = (int)(graph.getWidth()+1); 73 int height = (int)(graph.getHeight()+1); 74 75 BufferedImage image = new BufferedImage (width, height, BufferedImage.TYPE_3BYTE_BGR); 76 Graphics2D g2d = (Graphics2D)image.getGraphics(); 77 78 g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); 79 g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); 80 81 context.setEngine(new GEngineGraphics()); 82 context.setGraphics2D(g2d); 83 84 g2d.setColor(Color.white); 85 g2d.fillRect(0, 0, width, height); 86 graph.draw(); 87 g2d.dispose(); 88 89 ImageIO.write(image, imageFormat, new File (file)); 90 } 91 92 private GGraph createGraph(String ruleName) throws Exception { 93 GGraph graph = new GFactory().buildGraphsForRule(engineGrammar, ruleName); 94 graph.setContext(context); 95 graph.render(0,0); 96 return graph; 97 } 98 99 public Color contextGetColorForLabel(String label) { 100 if(label.charAt(0) == '\'' || label.charAt(0) == '"') 101 return AWPrefs.getSyntaxColor(AWPrefs.PREF_SYNTAX_STRING); 102 else { 103 if(ATEToken.isLexerName(label)) 104 return GrammarSyntaxEngine.COLOR_LEXER; 105 else 106 return GrammarSyntaxEngine.COLOR_PARSER; 107 } 108 } 109 110 } 111 112 113 | Popular Tags |