]> granicus.if.org Git - graphviz/commitdiff
Make the grammar used to describe types a bit cleaner;
authorEmden Gansner <erg@research.att.com>
Mon, 7 Nov 2011 19:48:27 +0000 (14:48 -0500)
committerEmden Gansner <erg@research.att.com>
Mon, 7 Nov 2011 19:48:27 +0000 (14:48 -0500)
remove redundant pointf type;
add new types allowing a '+' before a double or a point

doc/info/attrs.html
doc/infosrc/attrs
doc/infosrc/attrs.1
doc/infosrc/mkattrs.sh
doc/infosrc/mktypes.sh
doc/infosrc/types

index 2c73b356fcd56c2dfde8ed80d61f3f0bfc7a92aa..d934d6da02d2cf7f66262726b80a1dbcf4334704 100644 (file)
@@ -65,7 +65,7 @@ and any non-zero integer, and FALSE values by "false" or "no" (case-insensitive)
 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
@@ -75,7 +75,7 @@ and cluster subgraphs, respectively.
 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>
@@ -161,7 +161,8 @@ This field indicates which graph component uses the attribute.
  <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>
@@ -287,7 +288,7 @@ This field indicates which graph component uses the attribute.
  <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">&#60;device-dependent&#62;</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>
@@ -336,10 +337,10 @@ This field indicates which graph component uses the attribute.
 </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>
@@ -402,12 +403,13 @@ This field indicates which graph component uses the attribute.
  <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>
@@ -419,7 +421,7 @@ This field indicates which graph component uses the attribute.
  <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>
@@ -470,7 +472,7 @@ This field indicates which graph component uses the attribute.
 </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>
@@ -1869,7 +1871,18 @@ This field indicates which graph component uses the attribute.
 <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">
@@ -1919,7 +1932,7 @@ the given types.
 <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[,&#160;]+S[,&#160;]+V<TD>Hue-Saturation-Value (HSV) 0.0 <= H,S,V <= 1.0</TR>
+         <TR><TD>"H[,&#160;]+S[,&#160;]+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
@@ -1984,8 +1997,8 @@ the given types.
   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
@@ -2041,7 +2054,7 @@ the given types.
   "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
@@ -2058,12 +2071,12 @@ the given types.
   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,
@@ -2071,10 +2084,10 @@ the given types.
   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. 
@@ -2093,22 +2106,19 @@ the given types.
   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
@@ -2192,7 +2202,7 @@ the given types.
    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
@@ -2218,12 +2228,10 @@ the given types.
   <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>[^)(, &nbsp;][^)(,]*</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,
index c3585f9aa6545d875c134ea879141845e5de8500..b939e18ab57ff9e2798b97abc9e944c5dd4411c8 100644 (file)
@@ -274,7 +274,7 @@ or <A HREF=#d:edgeURL>edgeURL</A> attribute.
 :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>.
@@ -615,7 +615,7 @@ the edge is clipped to the boundary of the cluster.
 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>
@@ -820,7 +820,7 @@ This indicates how connected components should be packed
 (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
@@ -830,7 +830,7 @@ drawing and will be filled with the background color, if appropriate.
 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>
@@ -1040,14 +1040,14 @@ attribute, and output is dot or xdot, this gives
 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>
@@ -1088,7 +1088,7 @@ Print guide boxes in PostScript at the beginning of
 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.
@@ -1204,7 +1204,7 @@ However, if one uses <A HREF=#d:bgcolor>bgcolor</A>=transparent with
 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.
index b4ea56b6f4044fb4f62e95454599723c6b32ccd2..b67bb00e3d46fbfa428e79c4a265826a8af23a40 100644 (file)
@@ -65,7 +65,7 @@ and any non-zero integer, and FALSE values by "false" or "no" (case-insensitive)
 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
index 08e334a6fe4b8b48e215d0b6d369d18c9519c292..593045ca63b5ba0f7f83162a22e8327107b37f7b 100755 (executable)
@@ -190,7 +190,7 @@ fi
 #exit
 
 print "<TABLE ALIGN=CENTER>"
-print "<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>"
+print "<TR><TH>Name</TH><TH><A HREF=#h:uses>Used By</A></TH><TH>Type</TH><TH ALIGN=CENTER>Default</TH><TH>Minimum</TH><TH>Notes</TH></TR>"
 
 set -s ${!descs[@]}
 for i
index 856260259b519fcdd3c2c24770c19a11955e1cb2..43124e429ab2708eb84bcb2eabd0022ed1ce1508 100755 (executable)
@@ -46,6 +46,11 @@ fi
 print "<H1>Attribute Type Descriptions</H1>"
 print "The following list gives the legal strings corresponding to values of"
 print "the given types."
+print "The syntax for describing legal type strings is a mixture of literal strings,"
+print "stdio encodings (e.g., <TT>%f</TT> for a double), and regular expressions."
+print "For regular expressions, <TT>(...)*</TT> indicates 0 or more copies of the expression"
+print "enclosed in the parentheses,  <TT>(...)+</TT> indicates 1 or more, and"
+print "<TT>(...)?</TT> denotes 0 or 1 copy."
 print "<DL>"
 
 set -s ${!desc[@]}
index 820314285cae56aff9c380ece24c0ee2e800a6b0..1a5d8f9582f65bb8c754a1a7d7e90521dea3d1e9 100644 (file)
@@ -5,6 +5,10 @@
 #
 # 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
@@ -51,7 +55,7 @@ plus some supported as special cases for backward-compatibility
 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[,&#160;]+S[,&#160;]+V<TD>Hue-Saturation-Value (HSV) 0.0 <= H,S,V <= 1.0</TR>
+       <TR><TD>"H[,&#160;]+S[,&#160;]+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
@@ -113,8 +117,8 @@ For undirected edges <CODE>T -- H;</CODE>, one of the nodes, usually
 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.
@@ -164,7 +168,7 @@ reasons, it may be desirable that all edges appear beneath nodes, even
 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
@@ -181,12 +185,12 @@ What effect a value has also depends on the layout algorithm. For
 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,
@@ -194,10 +198,10 @@ starting in the upper left and going down the first column, then
 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. 
@@ -214,19 +218,17 @@ to right. This means the bottom row is traversed first, from left
 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
@@ -295,12 +297,10 @@ styleItem ( ',' styleItem )*<BR>
 <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>[^)(, &nbsp;][^)(,]*</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,
@@ -330,7 +330,7 @@ by <A HREF=shapes.html#html>HTML-like labels</A>.
 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