and zero.
In addition, there are a variety of specialized types such as
<EM>arrowType</EM>, <EM>color</EM>,
-<EM>pointf</EM> and <EM>rankdir</EM>. Legal values for these types are given
+<EM>point</EM> and <EM>rankdir</EM>. Legal values for these types are given
at the end.
<P>
In the <A NAME=h:uses><STRONG>Used By</STRONG></A> field, the
This field indicates which graph component uses the attribute.
<HR ALIGN=CENTER WIDTH="70%" SIZE=3>
<TABLE ALIGN=CENTER>
-<TR><TH>Name</TH><TH><A HREF=#h:uses>Used By</A></TH><TH>Type</TH><TH>Default</TH><TH>Minimum</TH><TH>Notes</TH></TR>
+<TR><TH>Name</TH><TH><A HREF=#h:uses>Used By</A></TH><TH>Type</TH><TH >Default</TH><TH>Minimum</TH><TH>Notes</TH></TR>
<TR><TD><A NAME=a:Damping HREF=#d:Damping>Damping</A>
</TD><TD>G</TD><TD>double</TD><TD ALIGN="CENTER">0.99</TD><TD>0.0</TD><TD>neato only</TD> </TR>
<TR><TD><A NAME=a:K HREF=#d:K>K</A>
<TR><TD><A NAME=a:epsilon HREF=#d:epsilon>epsilon</A>
</TD><TD>G</TD><TD>double</TD><TD ALIGN="CENTER">.0001 * # nodes(mode == KK)<BR>.0001(mode == major)</TD><TD></TD><TD>neato only</TD> </TR>
<TR><TD><A NAME=a:esep HREF=#d:esep>esep</A>
-</TD><TD>G</TD><TD>double<BR><A HREF=#k:pointf>pointf</A>
+</TD><TD>G</TD><TD><A HREF=#k:addDouble>addDouble</A>
+<BR><A HREF=#k:addPoint>addPoint</A>
</TD><TD ALIGN="CENTER">+3</TD><TD></TD><TD>not dot</TD> </TR>
<TR><TD><A NAME=a:fillcolor HREF=#d:fillcolor>fillcolor</A>
</TD><TD>NC</TD><TD><A HREF=#k:color>color</A>
<TR><TD><A NAME=a:lwidth HREF=#d:lwidth>lwidth</A>
</TD><TD>GC</TD><TD>double</TD><TD ALIGN="CENTER"></TD><TD></TD><TD>write only</TD> </TR>
<TR><TD><A NAME=a:margin HREF=#d:margin>margin</A>
-</TD><TD>NG</TD><TD>double<BR><A HREF=#k:pointf>pointf</A>
+</TD><TD>NG</TD><TD>double<BR><A HREF=#k:point>point</A>
</TD><TD ALIGN="CENTER"><device-dependent></TD><TD></TD><TD></TD> </TR>
<TR><TD><A NAME=a:maxiter HREF=#d:maxiter>maxiter</A>
</TD><TD>G</TD><TD>int</TD><TD ALIGN="CENTER">100 * # nodes(mode == KK)<BR>200(mode == major)<BR>600(fdp)</TD><TD></TD><TD>fdp, neato only</TD> </TR>
</TD><TD>G</TD><TD><A HREF=#k:packMode>packMode</A>
</TD><TD ALIGN="CENTER">node</TD><TD></TD><TD>not dot</TD> </TR>
<TR><TD><A NAME=a:pad HREF=#d:pad>pad</A>
-</TD><TD>G</TD><TD>double<BR><A HREF=#k:pointf>pointf</A>
+</TD><TD>G</TD><TD>double<BR><A HREF=#k:point>point</A>
</TD><TD ALIGN="CENTER">0.0555 (4 points)</TD><TD></TD><TD></TD> </TR>
<TR><TD><A NAME=a:page HREF=#d:page>page</A>
-</TD><TD>G</TD><TD>double<BR><A HREF=#k:pointf>pointf</A>
+</TD><TD>G</TD><TD>double<BR><A HREF=#k:point>point</A>
</TD><TD ALIGN="CENTER"></TD><TD></TD><TD></TD> </TR>
<TR><TD><A NAME=a:pagedir HREF=#d:pagedir>pagedir</A>
</TD><TD>G</TD><TD><A HREF=#k:pagedir>pagedir</A>
<TR><TD><A NAME=a:samplepoints HREF=#d:samplepoints>samplepoints</A>
</TD><TD>N</TD><TD>int</TD><TD ALIGN="CENTER">8(output)<BR>20(overlap and image maps)</TD><TD></TD><TD></TD> </TR>
<TR><TD><A NAME=a:scale HREF=#d:scale>scale</A>
-</TD><TD>G</TD><TD>double<BR><A HREF=#k:pointf>pointf</A>
+</TD><TD>G</TD><TD>double<BR><A HREF=#k:point>point</A>
</TD><TD ALIGN="CENTER"></TD><TD></TD><TD>twopi only</TD> </TR>
<TR><TD><A NAME=a:searchsize HREF=#d:searchsize>searchsize</A>
</TD><TD>G</TD><TD>int</TD><TD ALIGN="CENTER">30</TD><TD></TD><TD>dot only</TD> </TR>
<TR><TD><A NAME=a:sep HREF=#d:sep>sep</A>
-</TD><TD>G</TD><TD>double<BR><A HREF=#k:pointf>pointf</A>
+</TD><TD>G</TD><TD><A HREF=#k:addDouble>addDouble</A>
+<BR><A HREF=#k:addPoint>addPoint</A>
</TD><TD ALIGN="CENTER">+4</TD><TD></TD><TD>not dot</TD> </TR>
<TR><TD><A NAME=a:shape HREF=#d:shape>shape</A>
</TD><TD>N</TD><TD><A HREF=#k:shape>shape</A>
<TR><TD><A NAME=a:sides HREF=#d:sides>sides</A>
</TD><TD>N</TD><TD>int</TD><TD ALIGN="CENTER">4</TD><TD>0</TD><TD></TD> </TR>
<TR><TD><A NAME=a:size HREF=#d:size>size</A>
-</TD><TD>G</TD><TD>double<BR><A HREF=#k:pointf>pointf</A>
+</TD><TD>G</TD><TD>double<BR><A HREF=#k:point>point</A>
</TD><TD ALIGN="CENTER"></TD><TD></TD><TD></TD> </TR>
<TR><TD><A NAME=a:skew HREF=#d:skew>skew</A>
</TD><TD>N</TD><TD>double</TD><TD ALIGN="CENTER">0.0</TD><TD>-100.0</TD><TD></TD> </TR>
</TD><TD>G</TD><TD><A HREF=#k:bool>bool</A>
</TD><TD ALIGN="CENTER"></TD><TD></TD><TD>bitmap output only</TD> </TR>
<TR><TD><A NAME=a:vertices HREF=#d:vertices>vertices</A>
-</TD><TD>N</TD><TD><A HREF=#k:pointfList>pointfList</A>
+</TD><TD>N</TD><TD><A HREF=#k:pointList>pointList</A>
</TD><TD ALIGN="CENTER"></TD><TD></TD><TD>write only</TD> </TR>
<TR><TD><A NAME=a:viewport HREF=#d:viewport>viewport</A>
</TD><TD>G</TD><TD><A HREF=#k:viewPort>viewPort</A>
<H1>Attribute Type Descriptions</H1>
The following list gives the legal strings corresponding to values of
the given types.
+The syntax for describing legal type strings is a mixture of literal strings,
+stdio encodings (e.g., <TT>%f</TT> for a double), and regular expressions.
+For regular expressions, <TT>(...)*</TT> indicates 0 or more copies of the expression
+enclosed in the parentheses, <TT>(...)+</TT> indicates 1 or more, and
+<TT>(...)?</TT> denotes 0 or 1 copy.
<DL>
+<DT><A NAME=k:addDouble><STRONG>addDouble</STRONG></A>
+<DD><P>A double with an optional prefix '+'.
+
+<DT><A NAME=k:addPoint><STRONG>addPoint</STRONG></A>
+<DD><P>A <A HREF="k:point">point</A> with an optional prefix '+'.
+
<DT><A NAME=k:arrowType><STRONG>arrowType</STRONG></A>
<DD><TABLE>
<TR><TD>"normal"<TD><IMG SRC="a_normal.gif">
<DD>Colors can be specified using one of four formats.
<TABLE><TR><TD>"#%2x%2x%2x"<TD>Red-Green-Blue (RGB)</TR>
<TR><TD>"#%2x%2x%2x%2x"<TD>Red-Green-Blue-Alpha (RGBA)</TR>
- <TR><TD>H[, ]+S[, ]+V<TD>Hue-Saturation-Value (HSV) 0.0 <= H,S,V <= 1.0</TR>
+ <TR><TD>"H[, ]+S[, ]+V"<TD>Hue-Saturation-Value (HSV) 0.0 <= H,S,V <= 1.0</TR>
<TR><TD>string<TD><A HREF=colors.html>color name</A></TR></TABLE>
The specification for the RGB and RGBA formats are the format strings used by
<TT>sscanf</TT> to scan the color value. Thus, these values have the form
interpreting "forward" and "back".
<DT><A NAME=k:doubleList><STRONG>doubleList</STRONG></A>
-<DD>A colon-separated list of doubles: <I>d</I>(:<I>d</I>)*
- where each <I>d</I> is a double.
+<DD>A colon-separated list of doubles: "<I>%f</I>(:<I>%f</I>)*"
+ where each <I>%f</I> is a double.
<DT><A NAME=k:escString><STRONG>escString</STRONG></A>
<DD>string allowing escape sequences which are replaced according
"edgesfirst".
<DT><A NAME=k:packMode><STRONG>packMode</STRONG></A>
-<DD>"node", "clust" , "graph" , "array[_flags][%d]"
+<DD>"node", "clust" , "graph" , "array(_<I>flags</I>)?(%d)?"
<P>
The modes "node", "clust" or "graph"
specify that the components should be packed together tightly, using
example, neato does not support clusters, so a value of "clust" will
have the same effect as the default "node" value.
<P>
- The mode "array[_flags][%d]"
+ The mode "array(_<I>flag</I>)?(%d)?"
indicates that the components should be packed at the
graph level into an array of graphs. By default, the components
are in row-major order, with the number of columns roughly the
square root of the number of components. If the optional flags
- contains "c", then column-major order is used. Finally, if the
+ contains 'c', then column-major order is used. Finally, if the
optional integer suffix is used, this specifies the number of
columns for row-major or the number of rows for column-major.
Thus, the mode "array_c4" indicates array packing, with 4 rows,
down the second column, etc., until all components are used.
<P>
If a graph is smaller than the array cell it occupies, it is centered by default.
- The optional flags may contain "t", "b", "l", or "r", indicating that the graphs
+ The optional flags may contain 't', 'b', 'l', or 'r', indicating that the graphs
should be aligned along the top, bottom, left or right, respectively.
<P>
- If the optional flags contains "u", this causes the insertion
+ If the optional flags contains 'u', this causes the insertion
order of elements in the array to be determined by user-supplied
values. Each component can specify its sort value by a
non-negative integer using the <A HREF="#d:sortv">sortv</A> attribute.
until the topmost row is traversed.
<DT><A NAME=k:point><STRONG>point</STRONG></A>
-<DD>"%f,%f"('!') representing the point (x,y). The
+<DD>"%f,%f('!')?" representing the point (x,y). The
optional '!' indicates the
node position should not change (input-only).
<P>
- If <A HREF=#d:dim>dim</A> is 3 or more, <B>point</B> may also have
- the format "%f,%f,%f"('!') to represent the point (x,y,z).
-
-<DT><A NAME=k:pointf><STRONG>pointf</STRONG></A>
-<DD>"%lf,%lf" representing the point (x,y).
+ If <A HREF=#d:dim>dim</A> is 3, <B>point</B> may also have
+ the format "%f,%f,%f('!')?" to represent the point (x,y,z).
-<DT><A NAME=k:pointfList><STRONG>pointfList</STRONG></A>
-<DD>list of pointf, separated by spaces.
+<DT><A NAME=k:pointList><STRONG>pointList</STRONG></A>
+<DD>A list of points, separated by spaces.
<DT><A NAME=k:portPos><STRONG>portPos</STRONG></A>
<DD>modifier indicating where on a node an edge should be aimed.
- It has the form <TT><I>portname</I>[:<I>compass_point</I>]</TT>
+ It has the form <TT><I>portname</I>(:<I>compass_point</I>)?</TT>
or <TT><I>compass_point</I></TT>.
If the first form is used, the corresponding node must either have
<A HREF=shapes.html#record>record</A> shape with one of its fields
Similarly for p<SUB>n</SUB> and endp.
<DT><A NAME=k:startType><STRONG>startType</STRONG></A>
-<DD>has the syntax <TT>[<I>style</I>][<I>seed</I>]</TT>.
+<DD>has the syntax <TT>(<I>style</I>)?(<I>seed</I>)?</TT>.
<P>
If <I>style</I> is present, it must be one of the strings <TT>"regular"</TT>,
<TT>"self"</TT>, or <TT>"random"</TT>. In the first case, the nodes are
<TABLE>
<TR><TD ALIGN=right>where styleItem<TD>=<TD>name or name'('args')'</TR>
<TR><TD ALIGN=right>and args<TD>=<TD>name ( ',' name )*</TR>
- <TR><TD ALIGN=right>and name<TD>=<TD>[^)(, ][^)(,]*</TR>
</TABLE>
- Note that whitespace characters are ignored, except for names which
- can contain them. A
- name cannot contain any comma, or left or right parenthesis, and it cannot
- begin with a whitespace character.
+ and name can be any string of characters not containing a space, a left or
+ right parenthesis, or a comma.
+ Note that whitespace characters are ignored.
<P>
At present, the recognized style names are
"dashed", "dotted", "solid", "invis" and "bold" for nodes and edges,
:epsilon:G:double:.0001 * # nodes(mode == KK)/.0001(mode == major); neato
Terminating condition. If the length squared of all energy gradients are
< <B>epsilon</B>, the algorithm stops.
-:esep:G:double/pointf:+3; notdot
+:esep:G:addDouble/addPoint:+3; notdot
Margin used around polygons for purposes of spline edge routing.
The interpretation is the same as given for <A HREF=#d:sep>sep</A>.
This should normally be strictly less than <A HREF=#d:sep>sep</A>.
See <A HREF=#h:undir_note>limitation</A>.
:lwidth:GC:double; write
Width of graph or cluster label, in inches.
-:margin:NG:double/pointf:<device-dependent>;
+:margin:NG:double/point:<device-dependent>;
For graphs, this sets x and y margins of canvas, in inches. If the margin
is a single double, both margins are set equal to the given value.
<P>
(cf. <A HREF=#k:packMode>packMode</A>). Note that defining
<B>packmode</B> will automatically turn on packing as though one had
set <B>pack=true</B>.
-:pad:G:double/pointf:0.0555 (4 points);
+:pad:G:double/point:0.0555 (4 points);
The pad attribute specifies how much, in inches, to extend the
drawing area around the minimal area needed to draw the graph.
If the pad is a single double, both the x and y pad values are set
Normally, a small pad is used for aesthetic reasons, especially when
a background color is used, to avoid having nodes and edges abutting
the boundary of the drawn region.
-:page:G:double/pointf;
+:page:G:double/point;
Width and height of output pages, in inches. If only a single value
is given, this is used for both the width and height.
<P>
the number of points used for a node whose shape is a circle or ellipse.
It plays the same role in neato, when adjusting the layout to avoid
overlapping nodes, and in image maps.
-:scale:G:double/pointf; twopi
+:scale:G:double/point; twopi
If set, after the initial layout, twopi will scale the layout by the given factors.
The scaling uses the root node of each component as the center of the scaling.
If only a single number is given, this is used for both factors.
:searchsize:G:int:30; dot
During network simplex, maximum number of edges with negative cut values
to search when looking for one with minimum cut value.
-:sep:G:double/pointf:+4; notdot
+:sep:G:addDouble/addPoint:+4; notdot
Specifies margin to leave around nodes when removing node overlap.
This guarantees a minimal non-zero distance between nodes.
<P>
routesplines if 1, or at the end if 2. (Debugging)
:sides:N:int:4:0;
Number of sides if <A HREF=#d:shape><B>shape</B></A>=polygon.
-:size:G:double/pointf;
+:size:G:double/point;
Maximum width and height of drawing, in inches.
If only a single number is given, this is used for both the width
and the height.
a color palette, font
antialiasing can show up as a fuzzy white area around characters.
Using <B>truecolor</B>=true avoids this problem.
-:vertices:N:pointfList; write
+:vertices:N:pointList; write
If the input graph defines this attribute, the node is polygonal,
and output is dot or xdot, this attribute provides the
coordinates of the vertices of the node's polygon, in inches.
#
# The type <typename> is given the anchor k:<typename>, so
# the description can be linked with <HREF="k:<typename>">
+:addDouble
+<P>A double with an optional prefix '+'.
+:addPoint
+<P>A <A HREF="k:point">point</A> with an optional prefix '+'.
:aspectType
<p>An aspect ratio, double, followed optionally by a ',' and a maximum pass
count. If the aspect ratio is given, but no maximum pass count, the
Colors can be specified using one of four formats.
<TABLE><TR><TD>"#%2x%2x%2x"<TD>Red-Green-Blue (RGB)</TR>
<TR><TD>"#%2x%2x%2x%2x"<TD>Red-Green-Blue-Alpha (RGBA)</TR>
- <TR><TD>H[, ]+S[, ]+V<TD>Hue-Saturation-Value (HSV) 0.0 <= H,S,V <= 1.0</TR>
+ <TR><TD>"H[, ]+S[, ]+V"<TD>Hue-Saturation-Value (HSV) 0.0 <= H,S,V <= 1.0</TR>
<TR><TD>string<TD><A HREF=colors.html>color name</A></TR></TABLE>
The specification for the RGB and RGBA formats are the format strings used by
<TT>sscanf</TT> to scan the color value. Thus, these values have the form
the righthand one, is treated as the head for the purpose of
interpreting "forward" and "back".
:doubleList
-A colon-separated list of doubles: <I>d</I>(:<I>d</I>)*
- where each <I>d</I> is a double.
+A colon-separated list of doubles: "<I>%f</I>(:<I>%f</I>)*"
+ where each <I>%f</I> is a double.
:escString
string allowing escape sequences which are replaced according
to the context.
if the resulting drawing is ambiguous. This can be achieved by choosing
"edgesfirst".
:packMode
-"node", "clust" , "graph" , "array[_flags][%d]"
+"node", "clust" , "graph" , "array(_<I>flags</I>)?(%d)?"
<P>
The modes "node", "clust" or "graph"
specify that the components should be packed together tightly, using
example, neato does not support clusters, so a value of "clust" will
have the same effect as the default "node" value.
<P>
-The mode "array[_flags][%d]"
+The mode "array(_<I>flag</I>)?(%d)?"
indicates that the components should be packed at the
graph level into an array of graphs. By default, the components
are in row-major order, with the number of columns roughly the
square root of the number of components. If the optional flags
-contains "c", then column-major order is used. Finally, if the
+contains 'c', then column-major order is used. Finally, if the
optional integer suffix is used, this specifies the number of
columns for row-major or the number of rows for column-major.
Thus, the mode "array_c4" indicates array packing, with 4 rows,
down the second column, etc., until all components are used.
<P>
If a graph is smaller than the array cell it occupies, it is centered by default.
-The optional flags may contain "t", "b", "l", or "r", indicating that the graphs
+The optional flags may contain 't', 'b', 'l', or 'r', indicating that the graphs
should be aligned along the top, bottom, left or right, respectively.
<P>
-If the optional flags contains "u", this causes the insertion
+If the optional flags contains 'u', this causes the insertion
order of elements in the array to be determined by user-supplied
values. Each component can specify its sort value by a
non-negative integer using the <A HREF="#d:sortv">sortv</A> attribute.
to right, then the next row up, from left to right, and so on,
until the topmost row is traversed.
:point
-"%f,%f"('!') representing the point (x,y). The
+"%f,%f('!')?" representing the point (x,y). The
optional '!' indicates the
node position should not change (input-only).
<P>
-If <A HREF=#d:dim>dim</A> is 3 or more, <B>point</B> may also have
-the format "%f,%f,%f"('!') to represent the point (x,y,z).
-:pointf
-"%lf,%lf" representing the point (x,y).
-:pointfList
-list of pointf, separated by spaces.
+If <A HREF=#d:dim>dim</A> is 3, <B>point</B> may also have
+the format "%f,%f,%f('!')?" to represent the point (x,y,z).
+:pointList
+A list of points, separated by spaces.
:portPos
modifier indicating where on a node an edge should be aimed.
-It has the form <TT><I>portname</I>[:<I>compass_point</I>]</TT>
+It has the form <TT><I>portname</I>(:<I>compass_point</I>)?</TT>
or <TT><I>compass_point</I></TT>.
If the first form is used, the corresponding node must either have
<A HREF=shapes.html#record>record</A> shape with one of its fields
<TABLE>
<TR><TD ALIGN=right>where styleItem<TD>=<TD>name or name'('args')'</TR>
<TR><TD ALIGN=right>and args<TD>=<TD>name ( ',' name )*</TR>
-<TR><TD ALIGN=right>and name<TD>=<TD>[^)(, ][^)(,]*</TR>
</TABLE>
-Note that whitespace characters are ignored, except for names which
-can contain them. A
-name cannot contain any comma, or left or right parenthesis, and it cannot
-begin with a whitespace character.
+and name can be any string of characters not containing a space, a left or
+right parenthesis, or a comma.
+Note that whitespace characters are ignored.
<P>
At present, the recognized style names are
"dashed", "dotted", "solid", "invis" and "bold" for nodes and edges,
That is, instead of using <TT>shape=record</TT>, one might
consider using <TT>shape=none</TT> and an HTML-like label.
:startType
-has the syntax <TT>[<I>style</I>][<I>seed</I>]</TT>.
+has the syntax <TT>(<I>style</I>)?(<I>seed</I>)?</TT>.
<P>
If <I>style</I> is present, it must be one of the strings <TT>"regular"</TT>,
<TT>"self"</TT>, or <TT>"random"</TT>. In the first case, the nodes are