X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.graphviz%2Fsrc%2Forg%2Fsimantics%2Fgraphviz%2Finternal%2Fxdot%2FDrawCommandParser.java;h=4f1c2f8e18b3f063a02f293da8ccd9615f6daf0f;hb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;hp=f75ed1d157012761e1042846a278aa133ff1324f;hpb=969bd23cab98a79ca9101af33334000879fb60c5;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.graphviz/src/org/simantics/graphviz/internal/xdot/DrawCommandParser.java b/bundles/org.simantics.graphviz/src/org/simantics/graphviz/internal/xdot/DrawCommandParser.java index f75ed1d15..4f1c2f8e1 100644 --- a/bundles/org.simantics.graphviz/src/org/simantics/graphviz/internal/xdot/DrawCommandParser.java +++ b/bundles/org.simantics.graphviz/src/org/simantics/graphviz/internal/xdot/DrawCommandParser.java @@ -1,209 +1,209 @@ -/******************************************************************************* - * Copyright (c) 2007, 2010 Association for Decentralized Information Management - * in Industry THTH ry. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * VTT Technical Research Centre of Finland - initial API and implementation - *******************************************************************************/ -package org.simantics.graphviz.internal.xdot; - -import java.io.IOException; -import java.io.Reader; -import java.io.StringReader; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Map; - -import org.simantics.graphviz.Edge; -import org.simantics.graphviz.Graph; -import org.simantics.graphviz.IGraph; -import org.simantics.graphviz.IGraphPart; - -public class DrawCommandParser { - - public static double readNumber(Reader s) throws IOException { - StringBuilder b = new StringBuilder(); - while( true ) { - int c = s.read(); - if(c == ' ' || c <= 0) - break; - b.append((char)c); - } - return Double.parseDouble(b.toString()); - } - - public static int readInteger(Reader s) throws IOException { - StringBuilder b = new StringBuilder(); - while( true ) { - int c = s.read(); - if(c == ' ' || c <= 0) - break; - b.append((char)c); - } - return Integer.parseInt(b.toString()); - } - - public static double[] readPoints(Reader s) throws IOException { - int n = readInteger(s); - double[] points = new double[n*2]; - for(int i=0;i commands, Reader s) throws IOException { - boolean hadSetStyle = false; - while(true) { - int commandChar = s.read(); - s.read(); - if(commandChar <= 0) { - if(hadSetStyle) - commands.add(new SetStyle("solid")); - return; - } - switch(commandChar) { - case 'E': { - double x = readNumber(s); - double y = readNumber(s); - double w = readNumber(s); - double h = readNumber(s); - commands.add(new FilledShape(Shapes.createEllipse(x, y, w, h))); - break; - } - case 'e': { - double x = readNumber(s); - double y = readNumber(s); - double w = readNumber(s); - double h = readNumber(s); - commands.add(new UnfilledShape(Shapes.createEllipse(x, y, w, h))); - break; - } - case 'P': { - commands.add(new FilledShape(Shapes.createPolygon(readPoints(s)))); - break; - } - case 'p': - commands.add(new UnfilledShape(Shapes.createPolygon(readPoints(s)))); - break; - case 'L': - commands.add(new UnfilledShape(Shapes.createPolyline(readPoints(s)))); - break; - case 'B': - commands.add(new UnfilledShape(Shapes.createCubicSegments(readPoints(s)))); - break; - case 'b': - commands.add(new FilledShape(Shapes.createCubicSegments(readPoints(s)))); - break; - case 'T': { - double x = readNumber(s); - double y = readNumber(s); - int j = readInteger(s); - double w = readNumber(s); - String text = readString(s); - commands.add(new Text(x, y, j, w, text)); - break; - } - case 'C': - commands.add(new SetFillColor(readString(s))); - break; - case 'c': - commands.add(new SetPenColor(readString(s))); - break; - case 'F': { - double points = readNumber(s); - String font = readString(s); - commands.add(new SetFont(points, font)); - break; - } - case 'S': - hadSetStyle = true; - commands.add(new SetStyle(readString(s))); - break; - case 'I': { - double x = readNumber(s); - double y = readNumber(s); - double w = readNumber(s); - double h = readNumber(s); - String file = readString(s); - commands.add(new DrawImage(x, y, w, h, file)); - break; - } - } - } - } - - public static void parse(Collection commands, String s) { - if(s != null) - try { - s = s.replace("\\\r\n", ""); - parse(commands, new StringReader(s)); - } catch(IOException e) { - e.printStackTrace(); - } - } - - private static void parse(Collection commands, IGraph graph) { - for(IGraphPart part : graph.getParts()) { - parse(commands, part.get("_draw_")); - parse(commands, part.get("_ldraw_")); - if(part instanceof Edge) { - parse(commands, part.get("_hdraw_")); - parse(commands, part.get("_tdraw_")); - parse(commands, part.get("_hldraw_")); - parse(commands, part.get("_tldraw_")); - } - else if(part instanceof IGraph) { - parse(commands, (IGraph)part); - } - } - } - - private static void parse(Collection commands, Map> partCommands, IGraph graph) { - for(IGraphPart part : graph.getParts()) { - Collection pCommands = new ArrayList(); - parse(pCommands, part.get("_draw_")); - parse(pCommands, part.get("_ldraw_")); - if(part instanceof Edge) { - parse(pCommands, part.get("_hdraw_")); - parse(pCommands, part.get("_tdraw_")); - parse(pCommands, part.get("_hldraw_")); - parse(pCommands, part.get("_tldraw_")); - } else if(part instanceof IGraph) { - parse(commands, partCommands,(IGraph)part); - } - partCommands.put(part, pCommands); - commands.addAll(pCommands); - - } - } - - public static DrawCommand[] parse(Graph graph) { - Collection commands = new ArrayList(); - parse(commands, graph); - return commands.toArray(new DrawCommand[commands.size()]); - } - - public static void parse(Graph graph, Collection commands, Map> partCommands) { - parse(commands,partCommands, graph); - - } - -} +/******************************************************************************* + * Copyright (c) 2007, 2010 Association for Decentralized Information Management + * in Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.graphviz.internal.xdot; + +import java.io.IOException; +import java.io.Reader; +import java.io.StringReader; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Map; + +import org.simantics.graphviz.Edge; +import org.simantics.graphviz.Graph; +import org.simantics.graphviz.IGraph; +import org.simantics.graphviz.IGraphPart; + +public class DrawCommandParser { + + public static double readNumber(Reader s) throws IOException { + StringBuilder b = new StringBuilder(); + while( true ) { + int c = s.read(); + if(c == ' ' || c <= 0) + break; + b.append((char)c); + } + return Double.parseDouble(b.toString()); + } + + public static int readInteger(Reader s) throws IOException { + StringBuilder b = new StringBuilder(); + while( true ) { + int c = s.read(); + if(c == ' ' || c <= 0) + break; + b.append((char)c); + } + return Integer.parseInt(b.toString()); + } + + public static double[] readPoints(Reader s) throws IOException { + int n = readInteger(s); + double[] points = new double[n*2]; + for(int i=0;i commands, Reader s) throws IOException { + boolean hadSetStyle = false; + while(true) { + int commandChar = s.read(); + s.read(); + if(commandChar <= 0) { + if(hadSetStyle) + commands.add(new SetStyle("solid")); + return; + } + switch(commandChar) { + case 'E': { + double x = readNumber(s); + double y = readNumber(s); + double w = readNumber(s); + double h = readNumber(s); + commands.add(new FilledShape(Shapes.createEllipse(x, y, w, h))); + break; + } + case 'e': { + double x = readNumber(s); + double y = readNumber(s); + double w = readNumber(s); + double h = readNumber(s); + commands.add(new UnfilledShape(Shapes.createEllipse(x, y, w, h))); + break; + } + case 'P': { + commands.add(new FilledShape(Shapes.createPolygon(readPoints(s)))); + break; + } + case 'p': + commands.add(new UnfilledShape(Shapes.createPolygon(readPoints(s)))); + break; + case 'L': + commands.add(new UnfilledShape(Shapes.createPolyline(readPoints(s)))); + break; + case 'B': + commands.add(new UnfilledShape(Shapes.createCubicSegments(readPoints(s)))); + break; + case 'b': + commands.add(new FilledShape(Shapes.createCubicSegments(readPoints(s)))); + break; + case 'T': { + double x = readNumber(s); + double y = readNumber(s); + int j = readInteger(s); + double w = readNumber(s); + String text = readString(s); + commands.add(new Text(x, y, j, w, text)); + break; + } + case 'C': + commands.add(new SetFillColor(readString(s))); + break; + case 'c': + commands.add(new SetPenColor(readString(s))); + break; + case 'F': { + double points = readNumber(s); + String font = readString(s); + commands.add(new SetFont(points, font)); + break; + } + case 'S': + hadSetStyle = true; + commands.add(new SetStyle(readString(s))); + break; + case 'I': { + double x = readNumber(s); + double y = readNumber(s); + double w = readNumber(s); + double h = readNumber(s); + String file = readString(s); + commands.add(new DrawImage(x, y, w, h, file)); + break; + } + } + } + } + + public static void parse(Collection commands, String s) { + if(s != null) + try { + s = s.replace("\\\r\n", ""); + parse(commands, new StringReader(s)); + } catch(IOException e) { + e.printStackTrace(); + } + } + + private static void parse(Collection commands, IGraph graph) { + for(IGraphPart part : graph.getParts()) { + parse(commands, part.get("_draw_")); + parse(commands, part.get("_ldraw_")); + if(part instanceof Edge) { + parse(commands, part.get("_hdraw_")); + parse(commands, part.get("_tdraw_")); + parse(commands, part.get("_hldraw_")); + parse(commands, part.get("_tldraw_")); + } + else if(part instanceof IGraph) { + parse(commands, (IGraph)part); + } + } + } + + private static void parse(Collection commands, Map> partCommands, IGraph graph) { + for(IGraphPart part : graph.getParts()) { + Collection pCommands = new ArrayList(); + parse(pCommands, part.get("_draw_")); + parse(pCommands, part.get("_ldraw_")); + if(part instanceof Edge) { + parse(pCommands, part.get("_hdraw_")); + parse(pCommands, part.get("_tdraw_")); + parse(pCommands, part.get("_hldraw_")); + parse(pCommands, part.get("_tldraw_")); + } else if(part instanceof IGraph) { + parse(commands, partCommands,(IGraph)part); + } + partCommands.put(part, pCommands); + commands.addAll(pCommands); + + } + } + + public static DrawCommand[] parse(Graph graph) { + Collection commands = new ArrayList(); + parse(commands, graph); + return commands.toArray(new DrawCommand[commands.size()]); + } + + public static void parse(Graph graph, Collection commands, Map> partCommands) { + parse(commands,partCommands, graph); + + } + +}