[ovs-dev] [manager-options 2/5] docs: Implement our own dot->pic translator.
Ben Pfaff
blp at nicira.com
Thu Nov 4 22:55:07 UTC 2010
Thanks for taking a look.
I did try it, but you can easily try it for yourself. Just save patches
1/2 and 2/2 to files and then run "git am" on each one from a clean Git
checkout of "master".
On Thu, Nov 04, 2010 at 03:47:49PM -0700, Ethan Jackson wrote:
> Too bad that we have to do this. At any rate it looks fine to me. I
> trust that you tried it out.
>
> Ethan
>
> On Wed, Nov 3, 2010 at 10:39 AM, Ben Pfaff <blp at nicira.com> wrote:
> > Recent versions of Graphviz no longer support output to PIC format, so this
> > commit adds our own internal translator from dot's "plain" output format
> > to PIC format. The "plain" format works best with slightly different
> > "dot" input (advised by the Graphviz manual description of the "plain"
> > format) so this commit also adjusts ovsdb-dot's output.
> > ---
> > ovsdb/dot2pic | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++
> > ovsdb/ovsdb-dot.in | 1 +
> > vswitchd/automake.mk | 9 +++----
> > 3 files changed, 68 insertions(+), 5 deletions(-)
> > create mode 100755 ovsdb/dot2pic
> >
> > diff --git a/ovsdb/dot2pic b/ovsdb/dot2pic
> > new file mode 100755
> > index 0000000..3e2f308
> > --- /dev/null
> > +++ b/ovsdb/dot2pic
> > @@ -0,0 +1,63 @@
> > +#! /usr/bin/perl
> > +
> > +# Copyright (c) 2009, 2010 Nicira Networks
> > +#
> > +# Licensed under the Apache License, Version 2.0 (the "License");
> > +# you may not use this file except in compliance with the License.
> > +# You may obtain a copy of the License at:
> > +#
> > +# http://www.apache.org/licenses/LICENSE-2.0
> > +#
> > +# Unless required by applicable law or agreed to in writing, software
> > +# distributed under the License is distributed on an "AS IS" BASIS,
> > +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> > +# See the License for the specific language governing permissions and
> > +# limitations under the License.
> > +
> > +use strict;
> > +use warnings;
> > +
> > +my ($scale) = 1;
> > +print ".PS\n";
> > +print "linethick = 1;\n";
> > +while (<>) {
> > + if (/graph (\S+) (\S+) (\S+)/) {
> > + $scale = $1;
> > + } elsif (my ($name, $x, $y, $width, $height, $label, $style, $shape, $color, $fillcolor) = /node (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+)/) {
> > + $x *= $scale;
> > + $y *= $scale;
> > + $width *= $scale;
> > + $height *= $scale;
> > + print "box at $x,$y wid $width height $height \"$name\"\n";
> > + } elsif (/edge/) {
> > + my (undef, $tail, $head, $n, $rest) = split(' ', $_, 5);
> > + my @xy;
> > + for (1...$n) {
> > + my ($x, $y);
> > + ($x, $y, $rest) = split(' ', $rest, 3);
> > + push(@xy, [$x * $scale, $y * $scale]);
> > + }
> > + my ($label, $xl, $yl);
> > + if (scalar(my @junk = split(' ', $rest)) > 2) {
> > + if ($rest =~ s/^"([^"]*)"\s+//) {
> > + $label = $1;
> > + } else {
> > + ($label, $rest) = split(' ', $rest, 2);
> > + }
> > + ($xl, $yl, $rest) = split(' ', $rest, 3);
> > + $xl *= $scale;
> > + $yl *= $scale;
> > + }
> > + my ($style, $color) = split(' ', $rest);
> > +
> > + print "spline -> from $xy[0][0],$xy[0][1]";
> > + for (my ($i) = 0; $i <= $#xy; $i++) {
> > + print " to $xy[$i][0],$xy[$i][1]";
> > + }
> > + print "\n";
> > +
> > + print "\"$label\" at $xl,$yl\n" if defined($label);
> > + }
> > +
> > +}
> > +print ".PE\n";
> > diff --git a/ovsdb/ovsdb-dot.in b/ovsdb/ovsdb-dot.in
> > index 4569f2e..cea8987 100755
> > --- a/ovsdb/ovsdb-dot.in
> > +++ b/ovsdb/ovsdb-dot.in
> > @@ -29,6 +29,7 @@ def schemaToDot(schemaFile):
> > print '\tsize="6.5,4";'
> > print '\tmargin="0";'
> > print "\tnode [shape=box];"
> > + print "\tedge [dir=none, arrowhead=none, arrowtail=none];"
> > print "\t%s;" % tableName
> > for columnName, column in table.columns.iteritems():
> > if column.type.value:
> > diff --git a/vswitchd/automake.mk b/vswitchd/automake.mk
> > index 93c6f92..6ef7763 100644
> > --- a/vswitchd/automake.mk
> > +++ b/vswitchd/automake.mk
> > @@ -50,12 +50,11 @@ vswitchd/vswitch-idl.ovsidl: $(VSWITCH_IDL_FILES)
> >
> > # vswitch E-R diagram
> > if BUILD_ER_DIAGRAMS
> > -$(srcdir)/vswitchd/vswitch.pic: ovsdb/ovsdb-dot.in vswitchd/vswitch.ovsschema
> > +$(srcdir)/vswitchd/vswitch.pic: ovsdb/ovsdb-dot.in ovsdb/dot2pic \
> > + vswitchd/vswitch.ovsschema
> > $(OVSDB_DOT) $(srcdir)/vswitchd/vswitch.ovsschema \
> > - | dot -T pic \
> > - | sed -e "/^'/d" \
> > - -e '/^box attrs0/d' \
> > - -e 's/linethick = 0;/linethick = 1;/' \
> > + | dot -T plain \
> > + | $(srcdir)/ovsdb/dot2pic \
> > > $@.tmp
> > mv $@.tmp $@
> > else
> > --
> > 1.7.1
> >
> >
> > _______________________________________________
> > dev mailing list
> > dev at openvswitch.org
> > http://openvswitch.org/mailman/listinfo/dev_openvswitch.org
> >
More information about the dev
mailing list