Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: All Graphviz attributes are specified by name-value pairs. Thus, to Daniel@0: set the fillcolor of a node abc, one would use Daniel@0: Daniel@0: Daniel@0: abc [fillcolor = red] Daniel@0: Daniel@0: Daniel@0: Similarly, to set the arrowhead style of an edge abc -> def, Daniel@0: one would use Daniel@0: Daniel@0: Daniel@0: abc -> def [arrowhead = diamond] Daniel@0: Daniel@0: Daniel@0: Further details concerning the setting of attributes can be found Daniel@0: in the description of the Daniel@0: DOT language. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: At present, most device-independent units are either inches or Daniel@0: points, Daniel@0: which we take as 72 points per inch. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Some attributes, such as Daniel@0: dir or arrowtail, are Daniel@0: ambiguous when used in Daniel@0: DOT Daniel@0: with an undirected graph since the head and tail of an edge are meaningless. Daniel@0: As a convention, the first time an undirected edge appears, the Daniel@0: DOT Daniel@0: parser will assign the left node as the tail node and the right node as Daniel@0: the head. For example, the edge A -- B will have tail A Daniel@0: and head B. It is the user's responsibility to handle such Daniel@0: edges consistently. If the edge appears later, in the format Daniel@0: Daniel@0: Daniel@0: B -- A [taillabel = "tail"] Daniel@0: Daniel@0: Daniel@0: the drawing will attach the tail label to node A. Daniel@0: To avoid possible confusion when such attributes are required, the user Daniel@0: is encouraged to use a directed graph. Daniel@0: If it is important to make the graph appear undirected, this can be Daniel@0: done using the dir, arrowtail Daniel@0: or arrowhead attributes. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: For undirected edges T -- H;, one of the nodes, usually Daniel@0: the righthand one, is treated as the head for the purpose of Daniel@0: interpreting forward and back. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: String allowing escape sequences which are replaced according Daniel@0: to the context. Daniel@0: For node attributes, the substring \N is replaced by the name of the node, Daniel@0: and the substring \G by the name of the graph. Daniel@0: For graph or cluster attributes, the substring \G is replaced by the Daniel@0: name of the graph or cluster. Daniel@0: For edge attributes, the substring \E is replaced by the name of the edge, Daniel@0: the substring \G is replaced by the name of the graph or cluster, Daniel@0: and the substrings \T and \H by the names of Daniel@0: the tail and head nodes, respectively. Daniel@0: The name of an edge is the string formed from the name of the Daniel@0: tail node, the appropriate edge operator (-- or ->) and the name of the Daniel@0: head node. Daniel@0: Daniel@0: Daniel@0: In addition, if the associated attribute is Daniel@0: label, Daniel@0: headlabel or taillabel, Daniel@0: the escape sequences \n, \l and \r Daniel@0: divide the label into lines, centered, left-justified, and right-justified, Daniel@0: respectively. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: These specify the order in which nodes and edges are drawn in concrete Daniel@0: output. The default breadthfirst is the simplest, but when the graph Daniel@0: layout does not avoid edge-node overlap, this mode will sometimes have Daniel@0: edges drawn over nodes and sometimes on top of nodes. If the mode Daniel@0: nodesfirst is chosen, all nodes are drawn first, followed by the Daniel@0: edges. This guarantees an edge-node overlap will not be mistaken for Daniel@0: an edge ending at a node. On the other hand, usually for aesthetic Daniel@0: reasons, it may be desirable that all edges appear beneath nodes, even Daniel@0: if the resulting drawing is ambiguous. This can be achieved by choosing Daniel@0: edgesfirst. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: These specify the granularity of packing connected components when Daniel@0: the pack attribute is true. A value of node causes Daniel@0: packing at the node and edge label, with no overlapping of these objects. Daniel@0: This produces a layout with the least area, but it also allows interleaving, Daniel@0: where a node of one component may lie between two nodes in another Daniel@0: component. A value of graph does a packing using the bounding box of the Daniel@0: component. Thus, there will be a rectangular region around a component Daniel@0: free of elements of any other component. Daniel@0: A value of clust guarantees that top-level clusters are kept intact. Daniel@0: What effect a value has also depends on the layout algorithm. For Daniel@0: example, neato does not support clusters, so a value of clust will Daniel@0: have the same effect as the default node value. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: These specify the 8 row or column major orders for traversing a Daniel@0: rectangular array, the first character corresponding to the major Daniel@0: order and the second to the minor order. Thus, for "BL", the Daniel@0: major order is from bottom to top, and the minor order is from left Daniel@0: to right. This means the bottom row is traversed first, from left Daniel@0: to right, then the next row up, from left to right, and so on, Daniel@0: until the topmost row is traversed. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: List of pointf, separated by spaces. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Corresponding to directed graphs drawn Daniel@0: from top to bottom, from left to right, from bottom to top, and from Daniel@0: right to left, respectively. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Factor damping force motions. On each iteration, a nodes movement Daniel@0: is limited to this factor of its potential motion. By being less than Daniel@0: 1.0, the system tends to "cool", thereby preventing cycling. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Spring constant used in virtual physical model. It roughly corresponds Daniel@0: to an ideal edge length (in inches), in that increasing K tends to Daniel@0: increase the distance between nodes. Daniel@0: Note that the edge attribute len can be used to Daniel@0: override this value for adjacent nodes. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Hyperlinks incorporated into device-dependent output. Daniel@0: At present, used in ps2, cmap, i*map and svg formats. Daniel@0: For all these formats, URLs can be attached to nodes, edges and Daniel@0: clusters. URL attributes can also be attached to the root graph in ps2, Daniel@0: cmap and i*map formats. This serves as the base URL for relative URLs in the Daniel@0: former, and as the default image map file in the latter. Daniel@0: Daniel@0: Daniel@0: For svg, cmapx and imap output, the active area for a node is its Daniel@0: visible image. Daniel@0: For example, an unfilled node with no drawn boundary will only be active on its label. Daniel@0: For other output, the active area is its bounding box. Daniel@0: The active area for a cluster is its bounding box. Daniel@0: For edges, the active areas are small circles where the edge contacts its head Daniel@0: and tail nodes. In addition, for svg, cmapx and imap, the active area Daniel@0: includes a thin polygon approximating the edge. The circles may Daniel@0: overlap the related node, and the edge URL dominates. Daniel@0: If the edge has a label, this will also be active. Daniel@0: Finally, if the edge has a head or tail label, this will also be active. Daniel@0: Daniel@0: Daniel@0: Note that, for edges, the attributes headURL, Daniel@0: tailURL, labelURL and Daniel@0: edgeURL allow control of various parts of an Daniel@0: edge. Also note that, if active areas of two edges overlap, it is unspecified Daniel@0: which area dominates. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Style of arrowhead on the head node of an edge. Daniel@0: See also the dir attribute, Daniel@0: and the undirected note. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Multiplicative scale factor for arrowheads. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Style of arrowhead on the tail node of an edge. Daniel@0: See also the dir attribute, Daniel@0: and the undirected note. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Bounding box of drawing in integer points. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: When attached to the root graph, this color is used as the background for Daniel@0: entire canvas. When a cluster attribute, it is used as the initial Daniel@0: background for the cluster. If a cluster has a filled Daniel@0: style, the Daniel@0: cluster's fillcolor will overlay the Daniel@0: background color. Daniel@0: Daniel@0: Daniel@0: If no background color is specified for the root graph, no graphics Daniel@0: operation are performed on the background. This works fine for Daniel@0: PostScript but for bitmap output, all bits are initialized to something. Daniel@0: This means that when the bitmap output is included in some other Daniel@0: document, all of the bits within the bitmap's bounding box will be Daniel@0: set, overwriting whatever color or graphics where already on the page. Daniel@0: If this effect is not desired, and you only want to set bits explicitly Daniel@0: assigned in drawing the graph, set bgcolor="transparent". Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: If true, the drawing is centered in the output canvas. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Specifies the character encoding used when interpreting string input Daniel@0: as a text label. The default value is UTF-8. Daniel@0: The other legal value is iso-8859-1 or, Daniel@0: equivalently, Daniel@0: Latin1. The charset attribute is case-insensitive. Daniel@0: Note that if the character encoding used in the input does not Daniel@0: match the charset value, the resulting output may be very strange. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Mode used for handling clusters. If clusterrank is local, a Daniel@0: subgraph whose name begins with "cluster" is given special treatment. Daniel@0: The subgraph is laid out separately, and then integrated as a unit into Daniel@0: its parent graph, with a bounding rectangle drawn about it. Daniel@0: If the cluster has a label parameter, this label Daniel@0: is displayed within the rectangle. Daniel@0: Note also that there can be clusters within clusters. Daniel@0: At present, the modes global and none Daniel@0: appear to be identical, both turning off the special cluster processing. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Basic drawing color for graphics, not text. For the latter, use the Daniel@0: fontcolor attribute. Daniel@0: Daniel@0: Daniel@0: For edges, the value Daniel@0: can either be a single color or a colorList. Daniel@0: In the latter case, the edge is drawn using parallel splines or lines, Daniel@0: one for each color in the list, in the order given. Daniel@0: The head arrow, if any, is drawn using the first color in the list, Daniel@0: and the tail arrow, if any, the second color. This supports the common Daniel@0: case of drawing opposing edges, but using parallel splines instead of Daniel@0: separately routed multiedges. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: This attribute specifies a color scheme namespace. If defined, it specifies Daniel@0: the context for interpreting color names. In particular, if a Daniel@0: color value has form xxx or //xxx, Daniel@0: then the color xxx will be evaluated according to the current color scheme. Daniel@0: If no color scheme is set, the standard X11 naming is used. Daniel@0: For example, if colorscheme=bugn9, then color=7 Daniel@0: is interpreted as /bugn9/7. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Comments are inserted into output. Device-dependent. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: If true, allow edges between clusters. (See lhead and ltail below.) Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: If true, use edge concentrators. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: If false, the edge is not used in ranking the nodes. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: If true, attach edge label to edge by a 2-segment Daniel@0: polyline, underlining the label, then going to the closest point of spline. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: This specifies the distance between nodes in separate connected Daniel@0: components. If set too small, connected components may overlap. Daniel@0: Only applicable if pack=false. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Set the number of dimensions used for the layout. The maximum value Daniel@0: allowed is 10. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Set edge type for drawing arrowheads. This indicates which ends of the Daniel@0: edge should be decorated with an arrowhead. The actual style of the Daniel@0: arrowhead can be specified using the arrowhead Daniel@0: and arrowtail attributes. Daniel@0: See undirected. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Only valid when mode="ipsep". Daniel@0: If true, constraints are generated for each edge in the largest (heuristic) Daniel@0: directed acyclic subgraph such that the edge must point downwards. Daniel@0: If hier, generates level constraints similar to those used with Daniel@0: mode="hier". The main difference is that, in the latter Daniel@0: case, only these constraints are involved, so a faster solver can be used. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Distortion factor for shape=polygon. Daniel@0: Positive values cause top part to Daniel@0: be larger than bottom; negative values do the opposite. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: This specifies the expected number of pixels per inch on a display device. Daniel@0: For bitmap output, this guarantees that text rendering will be Daniel@0: done more accurately, both in size and in placement. For SVG output, Daniel@0: it is used to guarantee that the dimensions in the output correspond to Daniel@0: the correct number of points or inches. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: If edgeURL is defined, this is the link used for the non-label Daniel@0: parts of an edge. This value overrides any URL Daniel@0: defined for the edge. Daniel@0: Also, this value is used near the head or tail node unless overridden Daniel@0: by a headURL or tailURL value, Daniel@0: respectively. Daniel@0: See undirected. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Synonym for edgeURL. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: If the edge has a URL or edgeURL Daniel@0: attribute, this attribute determines which window of the Daniel@0: browser is used Daniel@0: for the URL attached to the non-label part of the edge. Daniel@0: Setting it to "_graphviz" will open a new window if it Daniel@0: doesn't already exist, or reuse it if it does. Daniel@0: If undefined, the value of the target is used. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Tooltip annotation attached to the non-label part of an edge. Daniel@0: This is used only if the edge has a URL Daniel@0: or edgeURL attribute. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Terminating condition. If the length squared of all energy gradients are Daniel@0: < epsilon, the algorithm stops. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Fraction to increase polygons (multiply Daniel@0: coordinates by 1 + esep) for purposes of spline edge routing. Daniel@0: This should normally be strictly less than Daniel@0: sep. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Color used to fill the background of a node or cluster Daniel@0: assuming style=filled. Daniel@0: If fillcolor is not defined, color is Daniel@0: used. (For clusters, if color is not defined, Daniel@0: bgcolor is used.) If this is not defined, Daniel@0: the default is used, except for Daniel@0: shape=point or when the output Daniel@0: format is MIF, Daniel@0: which use black by default. Daniel@0: Daniel@0: Daniel@0: Note that a cluster inherits the root graph's attributes if defined. Daniel@0: Thus, if the root graph has defined a fillcolor, this will override a Daniel@0: color or bgcolor attribute set for the cluster. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: If true, the node size is specified by the values of the Daniel@0: width Daniel@0: and height attributes only Daniel@0: and is not expanded to contain the text label. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Color used for text. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Font used for text. This very much depends on the output format and, for Daniel@0: non-bitmap output such as PostScript or SVG, the availability of the font Daniel@0: when the graph is displayed or printed. As such, it is best to rely on Daniel@0: font faces that are generally available, such as Times-Roman, Helvetica or Daniel@0: Courier. Daniel@0: Daniel@0: Daniel@0: If Graphviz was built using the Daniel@0: fontconfig library, the latter library Daniel@0: will be used to search for the font. However, if the fontname string Daniel@0: contains a slash character "/", it is treated as a pathname for the font Daniel@0: file, though font lookup will append the usual font suffixes. Daniel@0: Daniel@0: Daniel@0: If Graphviz does not use fontconfig, fontname will be Daniel@0: considered the name of a Type 1 or True Type font file. Daniel@0: If you specify fontname=schlbk, the tool will look for a Daniel@0: file named schlbk.ttf or schlbk.pfa or schlbk.pfb Daniel@0: in one of the directories specified by Daniel@0: the fontpath attribute. Daniel@0: The lookup does support various aliases for the common fonts. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Allows user control of how basic fontnames are represented in SVG output. Daniel@0: If fontnames is undefined or svg, Daniel@0: the output will try to use known SVG fontnames. For example, the Daniel@0: default font Times-Roman will be mapped to the Daniel@0: basic SVG font serif. This can be overridden by setting Daniel@0: fontnames to ps or gd. Daniel@0: In the former case, known PostScript font names such as Daniel@0: Times-Roman will be used in the output. Daniel@0: In the latter case, the fontconfig font conventions Daniel@0: are used. Thus, Times-Roman would be treated as Daniel@0: Nimbus Roman No9 L. These last two options are useful Daniel@0: with SVG viewers that support these richer fontname spaces. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Directory list used by libgd to search for bitmap fonts if Graphviz Daniel@0: was not built with the fontconfig library. Daniel@0: If fontpath is not set, the environment Daniel@0: variable DOTFONTPATH is checked. Daniel@0: If that is not set, GDFONTPATH is checked. Daniel@0: If not set, libgd uses its compiled-in font path. Daniel@0: Note that fontpath is an attribute of the root graph. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Font size, in points, used for text. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: If the end points of an edge belong to the same group, i.e., have the Daniel@0: same group attribute, parameters are set to avoid crossings and keep Daniel@0: the edges straight. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: If headURL is defined, it is Daniel@0: output as part of the head label of the edge. Daniel@0: Also, this value is used near the head node, overriding any Daniel@0: URL value. Daniel@0: See undirected. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: If true, the head of an edge is clipped to the boundary of the head node; Daniel@0: otherwise, the end of the edge goes to the center of the node, or the Daniel@0: center of a port, if applicable. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Synonym for headURL. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Text label to be placed near head of edge. Daniel@0: See undirected. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Indicates where on the head node to attach the head of the edge. Daniel@0: In the default case, the edge is aimed towards the center of the node, Daniel@0: and then clipped at the node boundary. Daniel@0: See undirected. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: If the edge has a headURL, Daniel@0: this attribute determines which window of the Daniel@0: browser is used Daniel@0: for the URL. Setting it to "_graphviz" will open a new window if it Daniel@0: doesn't already exist, or reuse it if it does. Daniel@0: If undefined, the value of the target is used. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Tooltip annotation attached to the head of an edge. This is used only Daniel@0: if the edge has a headURL attribute. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Height of node, in inches. This is taken as the initial, minimum height Daniel@0: of the node. If fixedsize is true, this Daniel@0: will be the final height of the node. Otherwise, if the node label Daniel@0: requires more height to fit, the node's height will be increased to Daniel@0: contain the label. Note also that, if the output format is dot, the Daniel@0: value given to height will be the final value. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Synonym for URL. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Gives the name of a file containing an image to be displayed inside Daniel@0: a node. The image file must be in one of the recognized formats, Daniel@0: typically JPEG, PNG, GIF or Postscript, and be able to be converted Daniel@0: into the desired output format. Daniel@0: Daniel@0: Daniel@0: Unlike with the shapefile attribute, Daniel@0: the image is treated as node Daniel@0: content rather than the entire node. In particular, an image can Daniel@0: be contained in a node of any shape, not just a rectangle. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Attribute controlling how an image fills its Daniel@0: containing node. In general, the image is given its natural size, Daniel@0: (cf. dpi), Daniel@0: and the node size is made large enough to contain its image, its Daniel@0: label, its margin, and its peripheries. Daniel@0: Its width and height will also be at least as large as its Daniel@0: minimum width and height. Daniel@0: If, however, fixedsize=true, Daniel@0: the width and height attributes specify the exact size of the node. Daniel@0: Daniel@0: Daniel@0: During rendering, in the default case (imagescale=false), Daniel@0: the image retains its natural size. Daniel@0: If true, Daniel@0: the image is uniformly scaled (i.e., its aspect ratio is Daniel@0: preserved) to fit inside the node. Daniel@0: At least one dimension of the image will be as large as possible Daniel@0: given the size of the node. Daniel@0: When width, Daniel@0: the width of the image is scaled to fill the node width. Daniel@0: The corresponding property holds when imagescale=height. Daniel@0: When both, Daniel@0: both the height and the width are scaled separately to fill the node. Daniel@0: Daniel@0: Daniel@0: In all cases, if a dimension of the image is larger than the Daniel@0: corresponding dimension of the node, that dimension of the Daniel@0: image is scaled down to fit the node. As with the case of Daniel@0: expansion, if imagescale=true, width and height are Daniel@0: scaled uniformly. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Text label attached to objects. Daniel@0: If a node's shape is record, then the label can Daniel@0: have a special format Daniel@0: which describes the record layout. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: If labelURL is defined, this is the link used for the label Daniel@0: of an edge. This value overrides any URL Daniel@0: defined for the edge. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: This, along with labeldistance, determine Daniel@0: where the Daniel@0: headlabel (taillabel) are placed with respect to the head (tail) Daniel@0: in polar coordinates. The origin in the coordinate system is Daniel@0: the point where the edge touches the node. The ray of 0 degrees Daniel@0: goes from the origin back along the edge, parallel to the edge Daniel@0: at the origin. Daniel@0: Daniel@0: Daniel@0: The angle, in degrees, specifies the rotation from the 0 degree ray, Daniel@0: with positive angles moving counterclockwise and negative angles Daniel@0: moving clockwise. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Multiplicative scaling factor adjusting the distance that Daniel@0: the headlabel (taillabel) is from the head (tail) node. Daniel@0: The default distance is 10 points. See labelangle Daniel@0: for more details. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: If true, allows edge labels to be less constrained in position. Daniel@0: In particular, it may appear on top of other edges. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Color used for headlabel and taillabel. Daniel@0: If not set, defaults to edge's fontcolor. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Font used for headlabel and taillabel. Daniel@0: If not set, defaults to edge's fontname. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Font size, in points, used for headlabel and taillabel. Daniel@0: If not set, defaults to edge's fontsize. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Synonym for labelURL. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Justification for cluster labels. If r, the label Daniel@0: is right-justified within bounding rectangle; if l, left-justified; Daniel@0: else the label is centered. Daniel@0: Note that a subgraph inherits attributes from its parent. Thus, if Daniel@0: the root graph sets labeljust to l, the subgraph inherits Daniel@0: this value. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Top/bottom placement of graph and cluster labels. Daniel@0: If the attribute is t, place label at the top; Daniel@0: if the attribute is b, place label at the bottom. Daniel@0: By default, root Daniel@0: graph labels go on the bottom and cluster labels go on the top. Daniel@0: Note that a subgraph inherits attributes from its parent. Thus, if Daniel@0: the root graph sets labelloc to b, the subgraph inherits Daniel@0: this value. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: If the edge has a URL or labelURL Daniel@0: attribute, this attribute determines which window of the Daniel@0: browser is used Daniel@0: for the URL attached to the label. Daniel@0: Setting it to "_graphviz" will open a new window if it Daniel@0: doesn't already exist, or reuse it if it does. Daniel@0: If undefined, the value of the target is used. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Tooltip annotation attached to label of an edge. Daniel@0: This is used only if the edge has a URL Daniel@0: or labelURL attribute. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: If true, the graph is rendered in landscape mode. Synonymous with Daniel@0: rotate=90 or Daniel@0: orientation=landscape. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Specifies layers in which the node or edge is present. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Specifies a linearly ordered list of layer names attached to the graph Daniel@0: The graph is then output in separate layers. Only those components Daniel@0: belonging to the current output layer appear. For more information, Daniel@0: see the page How to use drawing layers (overlays). Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Specifies the separator characters used to split the Daniel@0: layers attribute into a list of layer names. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Preferred edge length, in inches. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Specifies strictness of level constraints in neato Daniel@0: when mode="ipsep" or "hier". Daniel@0: Larger positive values mean stricter constraints, which demand more Daniel@0: separation between levels. On the other hand, negative values will relax Daniel@0: the constraints by allowing some overlap between the levels. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Logical head of an edge. When compound is true, Daniel@0: if lhead is defined and is the name of a cluster containing Daniel@0: the real head, Daniel@0: the edge is clipped to the boundary of the cluster. Daniel@0: See undirected. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Label position, in points. Daniel@0: The position indicates the center of the label. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Logical tail of an edge. When compound is true, Daniel@0: if ltail is defined and is the name of a cluster Daniel@0: containing the real tail, Daniel@0: the edge is clipped to the boundary of the cluster. Daniel@0: See undirected. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: For graphs, this sets x and y margins of canvas, in inches. If the margin Daniel@0: is a single double, both margins are set equal to the given value. Daniel@0: Daniel@0: Daniel@0: Note that the margin is not part of the drawing but just empty space Daniel@0: left around the drawing. It basically corresponds to a translation of Daniel@0: drawing, as would be necessary to center a drawing on a page. Nothing Daniel@0: is actually drawn in the margin. To actually extend the background of Daniel@0: a drawing, see the pad attribute. Daniel@0: Daniel@0: Daniel@0: For nodes, this attribute specifies space left around the node's label. Daniel@0: By default, the value is 0.11,0.055. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Sets the number of iterations used. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Multiplicative scale factor used to alter the MinQuit (default = 8) Daniel@0: and MaxIter (default = 24) parameters used during crossing Daniel@0: minimization. These correspond to the Daniel@0: number of tries without improvement before quitting and the Daniel@0: maximum number of iterations in each pass. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Specifies the minimum separation between all nodes. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Minimum edge length (rank difference between head and tail). Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Technique for optimizing the layout. If mode is major, Daniel@0: neato uses stress majorization. If mode is KK, Daniel@0: neato uses a version of the gradient descent method. The only advantage Daniel@0: to the latter technique is that it is sometimes appreciably faster for Daniel@0: small (number of nodes < 100) graphs. A significant disadvantage is that Daniel@0: it may cycle. Daniel@0: Daniel@0: Daniel@0: There are two new, experimental modes in neato, hier, which adds a top-down Daniel@0: directionality similar to the layout used in dot, and ipsep, which Daniel@0: allows the graph to specify minimum vertical and horizontal distances Daniel@0: between nodes. (See the sep attribute.) Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: This value specifies how the distance matrix is computed for the input Daniel@0: graph. The distance matrix specifies the ideal distance between every Daniel@0: pair of nodes. neato attemps to find a layout which best achieves Daniel@0: these distances. By default, it uses the length of the shortest path, Daniel@0: where the length of each edge is given by its len Daniel@0: attribute. If model is circuit, neato uses the Daniel@0: circuit resistance Daniel@0: model to compute the distances. This tends to emphasize clusters. If Daniel@0: model is subset, neato uses the subset model. This sets the Daniel@0: edge length to be the number of nodes that are neighbors of exactly one Daniel@0: of the end points, and then calculates the shortest paths. This helps Daniel@0: to separate nodes with high degree. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: If Graphviz is built with MOSEK defined, mode=ipsep and mosek=true, Daniel@0: the Mosek software (www.mosek.com) is use to solve the ipsep constraints. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Minimum space between two adjacent nodes in the same rank, in inches. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: By default, the justification of multi-line labels is done within the Daniel@0: largest context that makes sense. Thus, in the label of a polygonal Daniel@0: node, a left-justified line will align with the left side of the node Daniel@0: (shifted by the prescribed margin). Daniel@0: In record nodes, left-justified Daniel@0: line will line up with the left side of the enclosing column of fields. Daniel@0: If nojustify is true, multi-line labels will be justified Daniel@0: in the context of itself. For example, if the attribute is set, Daniel@0: the first label line is long, and the second is shorter and left-justified, Daniel@0: the second will align with the left-most character in the first line, Daniel@0: regardless of how large the node might be. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: If set, normalize coordinates of final Daniel@0: layout so that the first point is at the origin, and then rotate the Daniel@0: layout so that the first edge is horizontal. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Used to set number of iterations in Daniel@0: network simplex applications, used in Daniel@0: computing node x coordinates. Daniel@0: If defined, # iterations = nslimit * # nodes; Daniel@0: otherwise, # iterations = MAXINT. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Used to set number of iterations in Daniel@0: network simplex applications, used for ranking nodes. Daniel@0: If defined, # iterations = nslimit1 * # nodes; Daniel@0: otherwise, # iterations = MAXINT. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: If "out" for a graph G, and n is a node in G, then edges n->* appear Daniel@0: left-to-right in the same order in which they are defined. Daniel@0: If "in", the edges *->n appear Daniel@0: left-to-right in the same order in which they are defined for all Daniel@0: nodes n. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Specify order in which nodes and edges are drawn. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Determines if and how node overlaps should be removed. Nodes are first Daniel@0: enlarged using the sep attribute. Daniel@0: If true, overlaps are retained. Daniel@0: If the value is scale, overlaps are removed by uniformly scaling in x and y. Daniel@0: If the value converts to false, node overlaps are removed by a Daniel@0: Voronoi-based technique. Daniel@0: If the value is scalexy, x and y are separately Daniel@0: scaled to remove overlaps. Daniel@0: If the value is orthoxy or orthoyx, overlaps Daniel@0: are moved by optimizing two constraint problems, one for the x axis and Daniel@0: one for the y. The suffix indicates which axis is processed first. Daniel@0: If the value is ortho, the technique is similar to orthoxy except a Daniel@0: heuristic is used to reduce the bias between the two passes. Daniel@0: If the value is ortho_yx, the technique is the same as ortho, except Daniel@0: the roles of x and y are reversed. Daniel@0: The values portho, porthoxy, porthoxy, and portho_yx are similar Daniel@0: to the previous four, except only pseudo-orthogonal ordering is Daniel@0: enforced. Daniel@0: Daniel@0: Daniel@0: If the value is compress, the layout will be scaled down as much as Daniel@0: possible without introducing any overlaps, obviously assuming there are Daniel@0: none to begin with. Daniel@0: Daniel@0: Daniel@0: If the value is ipsep, and the layout is done by neato with Daniel@0: mode="ipsep", the overlap removal constraints are Daniel@0: incorporated into the layout algorithm itself. Daniel@0: N.B. At present, this only supports one level of clustering. Daniel@0: Daniel@0: Daniel@0: If the value is vpsc, overlap removal is similarly to ortho, except Daniel@0: quadratic optimization is used to minimize node displacement. Daniel@0: N.B. At present, this mode only works when mode="ipsep". Daniel@0: Daniel@0: Daniel@0: Except for fdp, the layouts assume overlap="true" as the default. Daniel@0: Fdp first uses a number of passes using built-in, force-directed technique Daniel@0: to remove overlaps. Thus, fdp accepts overlap with an integer Daniel@0: prefix followed by a colon, specifying the number of tries. If there is Daniel@0: no prefix, no initial tries will be performed. If there is nothing following Daniel@0: a colon, none of the above methods will be attempted. By default, fdp Daniel@0: uses overlap="9:portho". Note that overlap="true", Daniel@0: overlap="0:true" and overlap="0:" all turn off all overlap Daniel@0: removal. Daniel@0: Daniel@0: Daniel@0: Except for the Voronoi method, all of these transforms preserve the Daniel@0: orthogonal ordering of the original layout. That is, if the x coordinates Daniel@0: of two nodes are originally the same, they will remain the same, and if Daniel@0: the x coordinate of one node is originally less than the x coordinate of Daniel@0: another, this relation will still hold in the transformed layout. The Daniel@0: similar properties hold for the y coordinates. Daniel@0: This is not quite true for the "porth*" cases. For these, orthogonal Daniel@0: ordering is only preserved among nodes related by an edge. Daniel@0: Daniel@0: Daniel@0: NOTEThe methods orthoxy and orthoyx are still evolving. The semantics of these may change, or these methods may disappear altogether. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: This is true if the value of pack is true (case-insensitive) or a Daniel@0: non-negative integer. If true, each connected component of the graph is Daniel@0: laid out separately, and then the graphs are packed tightly. Daniel@0: If pack has an integral value, this is used as the size, Daniel@0: in points, of Daniel@0: a margin around each part; otherwise, a default margin of 8 is used. Daniel@0: If pack is interpreted as false, the entire graph is laid out together. Daniel@0: The granularity and method of packing is influenced by the Daniel@0: packmode attribute. Daniel@0: Daniel@0: Daniel@0: For layouts which always do packing, such a twopi, the pack Daniel@0: attribute is just used to set the margin. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: This indicates the granularity and method used for packing Daniel@0: (cf. packMode). Note that defining Daniel@0: packmode will automatically turn on packing as though one had Daniel@0: set pack=true. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: The pad attribute specifies how much, in inches, to extend the Daniel@0: drawing area around the minimal area needed to draw the graph. Daniel@0: If the pad is a single double, both the x and y pad values are set Daniel@0: equal to the given value. This area is part of the Daniel@0: drawing and will be filled with the background color, if appropriate. Daniel@0: Daniel@0: Daniel@0: Normally, a small pad is used for aesthetic reasons, especially when Daniel@0: a background color is used, to avoid having nodes and edges abutting Daniel@0: the boundary of the drawn region. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Width and height of output pages, in inches. If this is set and is Daniel@0: smaller than the size of the layout, a rectangular array of pages of Daniel@0: the specified page size is overlaid on the layout, with origins Daniel@0: aligned in the lower-left corner, thereby partitioning the layout Daniel@0: into pages. The pages are then produced one at a time, in Daniel@0: pagedir order. Daniel@0: Daniel@0: Daniel@0: At present, this only works for PostScript output. For other types of Daniel@0: output, one should use another tool to split the output into multiple Daniel@0: output files. Or use the viewport to generate Daniel@0: multiple files. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: If the page attribute is set and applicable, Daniel@0: this attribute specifies the order in which the pages are emitted. Daniel@0: This is limited to one of the 8 row or column major orders. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Color used to draw the bounding box around a cluster. Daniel@0: If pencolor is not defined, color is Daniel@0: used. If this is not defined, bgcolor is used. Daniel@0: If this is not defined, the default is used. Daniel@0: Daniel@0: Daniel@0: Note that a cluster inherits the root graph's attributes if defined. Daniel@0: Thus, if the root graph has defined a pencolor, this will override a Daniel@0: color or bgcolor attribute set for the cluster. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Set number of peripheries used in polygonal shapes and cluster Daniel@0: boundaries. Note that Daniel@0: user-defined shapes are treated as a Daniel@0: form of box shape, so the default Daniel@0: peripheries value is 1 and the user-defined shape will be drawn in Daniel@0: a bounding rectangle. Setting peripheries=0 will turn this off. Daniel@0: Also, 1 is the maximum peripheries value for clusters. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: If true and the node has a pos attribute on input, neato prevents the Daniel@0: node from moving from the input position. This property can also be specified Daniel@0: in the pos attribute itself (cf. the point type). Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Position of node, or spline control points. Daniel@0: For nodes, the position indicates the center of the node. Daniel@0: On output, the coordinates are in points. Daniel@0: Daniel@0: Daniel@0: In neato and fdp, pos can be used to set the initial position of a node. Daniel@0: By default, the coordinates are assumed to be in inches. However, the Daniel@0: -s command line flag can be used to specify Daniel@0: different units. Daniel@0: Daniel@0: Daniel@0: When the -n command line flag is used with Daniel@0: neato, it is assumed the positions have been set by one of the layout Daniel@0: programs, and are therefore in points. Thus, neato -n can accept Daniel@0: input correctly without requiring a -s flag and, in fact, Daniel@0: ignores any such flag. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: If quantum > 0.0, node label dimensions Daniel@0: will be rounded to integral multiples of the quantum. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Rank constraints on the nodes in a subgraph. Daniel@0: If same, all nodes are placed on the same rank. Daniel@0: If min, all nodes are placed on the minimum rank. Daniel@0: If source, all nodes are placed on the minimum rank, and Daniel@0: the only nodes on the minimum rank belong to some subgraph whose Daniel@0: rank attribute is "source" or "min". Daniel@0: Analogous criteria hold for rank=max and rank=sink. Daniel@0: (Note: the Daniel@0: minimum rank is topmost or leftmost, and the maximum rank is bottommost Daniel@0: or rightmost.) Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Sets direction of graph layout. For example, if rankdir="LR", Daniel@0: and barring cycles, an edge T -> H; will go Daniel@0: from left to right. By default, graphs are laid out from top to bottom. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: In dot, this gives the desired rank separation, in inches. This is Daniel@0: the minimum vertical distance between the bottom of the nodes in one Daniel@0: rank and the tops of nodes in the next. If the value Daniel@0: contains "equally", the centers of all ranks are spaced equally apart. Daniel@0: Note that both Daniel@0: settings are possible, e.g., ranksep = "1.2 equally". Daniel@0: In twopi, specifies radial separation of concentric circles. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Sets the aspect ratio (drawing height/drawing width) for the drawing. Daniel@0: Note that this is adjusted before Daniel@0: the size attribute constraints are enforced. Daniel@0: Daniel@0: Daniel@0: If ratio is numeric, it is taken as the desired aspect ratio. Daniel@0: Then, if the actual aspect ratio is less than the desired ratio, Daniel@0: the drawing height is scaled up to achieve the Daniel@0: desired ratio; if the actual ratio is greater than that desired ratio, Daniel@0: the drawing width is scaled up. Daniel@0: Daniel@0: Daniel@0: If ratio = fill and the size Daniel@0: attribute is set, node positions are scaled, separately in both x Daniel@0: and y, so that the final drawing exactly fills the specified size. Daniel@0: Daniel@0: Daniel@0: If ratio = compress and the size Daniel@0: attribute is set, dot attempts to compress the initial layout to fit Daniel@0: in the given size. This achieves a tighter packing of nodes but Daniel@0: reduces the balance and symmetry. This feature only works in dot. Daniel@0: Daniel@0: Daniel@0: If ratio = expand, the size Daniel@0: attribute is set, and both the width and the height of the graph are Daniel@0: less than the value in size, node positions are scaled Daniel@0: uniformly until at least Daniel@0: one dimension fits size exactly. Daniel@0: Note that this is distinct from using size as the Daniel@0: desired size, as here the drawing is expanded before edges are generated and Daniel@0: all node and text sizes remain unchanged. Daniel@0: Daniel@0: Daniel@0: If ratio = auto, the page Daniel@0: attribute is set and the graph cannot be drawn on a single page, Daniel@0: then size is set to an ``ideal'' value. Daniel@0: In particular, the size in a given dimension will be the smallest integral Daniel@0: multiple of the page size in that dimension which is at least half the Daniel@0: current size. The two dimensions are then scaled independently to the Daniel@0: new size. This feature only works in dot. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Rectangles for fields of records, in points. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: If true, force polygon to be regular. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: If true and there are multiple clusters, run cross Daniel@0: minimization a second time. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: This is a synonym for the dpi attribute. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: This specifies nodes to be used as the center of the Daniel@0: layout and the root of the generated spanning tree. As a graph attribute, Daniel@0: this gives the name of the node. As a node attribute (circo only), it Daniel@0: specifies that the node should be used as a central node. In twopi, Daniel@0: this will actually be the central node. In circo, the block containing Daniel@0: the node will be central in the drawing of its connected component. Daniel@0: If not defined, Daniel@0: twopi will pick a most central node, and circo will pick a random node. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: If 90, set drawing orientation to landscape. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Edges with the same head and the same samehead value are aimed Daniel@0: at the same point on the head. Daniel@0: See undirected. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Edges with the same tail and the same sametail value are aimed Daniel@0: at the same point on the tail. Daniel@0: See undirected. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: If the input graph defines the vertices Daniel@0: attribute, and output is dot or xdot, this gives Daniel@0: the number of points used for a node whose shape is a circle or ellipse. Daniel@0: It plays the same role in neato, when adjusting the layout to avoid Daniel@0: overlapping nodes, and in image maps. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: During network simplex, maximum number of edges with negative cut values Daniel@0: to search when looking for one with minimum cut value. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Fraction to increase polygons (multiply Daniel@0: coordinates by 1 + sep) for purposes of determining overlap. Guarantees Daniel@0: a minimal non-zero distance between nodes. Daniel@0: If unset but esep is defined, sep will be Daniel@0: set to esep/0.8. If esep is unset, the default value Daniel@0: is used. Daniel@0: Daniel@0: Daniel@0: When overlap="ipsep" or "vpsc", Daniel@0: sep gives a minimum distance, in inches, to be left between nodes. Daniel@0: In this case, if sep is a pointf, the x and y separations can be Daniel@0: specified separately. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Set the shape of a node. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: (Deprecated) If defined, shapefile specifies a file containing user-supplied node content. Daniel@0: The shape of the node is set to box. Daniel@0: The image in the shapefile must be Daniel@0: rectangular. The image formats supported as well as the precise semantics of Daniel@0: how the file is used depends on the Daniel@0: output format. For further details, see Daniel@0: External PostScript files. Daniel@0: Daniel@0: Daniel@0: There is one exception to this usage. Daniel@0: If shape is set to "epsf", shapefile gives Daniel@0: a filename containing a definition of the node in PostScript. Daniel@0: The graphics defined must be contain all of the Daniel@0: node content, including any desired boundaries. Daniel@0: For further details, see Daniel@0: Daniel@0: External PostScript files. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Print guide boxes in PostScript at the beginning of Daniel@0: routesplines if 1, or at the end if 2. (Debugging) Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Number of sides if shape=polygon. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Maximum width and height of drawing, in inches. Daniel@0: If defined and the drawing is too large, the drawing is uniformly Daniel@0: scaled down so that it fits within the given size. Daniel@0: Daniel@0: Daniel@0: If size ends in an exclamation point (!), Daniel@0: then it is taken to be Daniel@0: the desired size. In this case, if both dimensions of the drawing are Daniel@0: less than size, the drawing is scaled up uniformly until at Daniel@0: least one dimension equals its dimension in size. Daniel@0: Daniel@0: Daniel@0: Note that there is some interaction between the size and Daniel@0: ratio attributes. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Skew factor for shape=polygon. Positive values Daniel@0: skew top of polygon to right; negative to left. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Controls how, and if, edges are represented. If true, edges are drawn as Daniel@0: splines routed around nodes; if false, edges are drawn as line segments. Daniel@0: If set to "", no edges are drawn at all. Daniel@0: Daniel@0: Daniel@0: (1 March 2007) The values line and spline can be Daniel@0: used as synonyms for false and true, respectively. Daniel@0: In addition, the value polyline specifies that edges should be Daniel@0: drawn as polylines. Daniel@0: Daniel@0: Daniel@0: By default, the attribute is unset. How this is interpreted depends on Daniel@0: the layout. For dot, the default is to draw edges as splines. For all Daniel@0: other layouts, the default is to draw edges as line segments. Note that Daniel@0: for these latter layouts, if splines="true", this Daniel@0: requires non-overlapping nodes (cf. overlap). Daniel@0: If fdp is used for layout and splines="compound", then the edges are Daniel@0: drawn to avoid clusters as well as nodes. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Parameter used to determine the initial layout of nodes. If unset, the Daniel@0: nodes are randomly placed in a unit square with Daniel@0: the same seed is always used for the random number generator, so the Daniel@0: initial placement is repeatable. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Set style for node or edge. For cluster subgraph, if "filled", the Daniel@0: cluster box's background is filled. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: A URL or pathname specifying an XML style sheet, used in SVG output. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: If tailURL is defined, it is Daniel@0: output as part of the tail label of the edge. Daniel@0: Also, this value is used near the tail node, overriding any Daniel@0: URL value. Daniel@0: See undirected. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: If true, the tail of an edge is clipped to the boundary of the tail node; Daniel@0: otherwise, the end of the edge goes to the center of the node, or the Daniel@0: center of a port, if applicable. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Synonym for tailURL. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Text label to be placed near tail of edge. Daniel@0: See undirected. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Indicates where on the tail node to attach the tail of the edge. Daniel@0: See undirected. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: If the edge has a tailURL, Daniel@0: this attribute determines which window of the Daniel@0: browser is used Daniel@0: for the URL. Setting it to "_graphviz" will open a new window if it Daniel@0: doesn't already exist, or reuse it if it does. Daniel@0: If undefined, the value of the target is used. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Tooltip annotation attached to the tail of an edge. This is used only Daniel@0: if the edge has a tailURL attribute. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: If the object has a URL, this attribute determines which window Daniel@0: of the browser is used for the URL. Daniel@0: See W3C documentation. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Tooltip annotation attached to the node or edge. If unset, Graphviz Daniel@0: will use the object's label if defined. Daniel@0: Note that if the label is a record specification or an HTML-like Daniel@0: label, the resulting tooltip may be unhelpful. In this case, if Daniel@0: tooltips will be generated, the user should set a tooltip Daniel@0: attribute explicitly. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: If set explicitly to true or false, the value determines whether or not Daniel@0: internal bitmap rendering relies on a truecolor color model or uses Daniel@0: a color palette. Daniel@0: If the attribute is unset, truecolor is not used Daniel@0: unless there is a shapefile property Daniel@0: for some node in the graph. Daniel@0: The output model will use the input model when possible. Daniel@0: Daniel@0: Daniel@0: Use of color palettes results in less memory usage during creation of the Daniel@0: bitmaps and smaller output files. Daniel@0: Daniel@0: Daniel@0: Usually, the only time it is necessary to specify the truetype model Daniel@0: is if the graph uses more than 256 colors. Daniel@0: However, if one uses bgcolor=transparent with Daniel@0: a color palette, font Daniel@0: antialiasing can show up as a fuzzy white area around characters. Daniel@0: Using truecolor=true avoids this problem. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: If the input graph defines this attribute, the node is polygonal, Daniel@0: and output is dot or xdot, this attribute provides the Daniel@0: coordinates of the vertices of the node's polygon, in inches. Daniel@0: If the node is an ellipse or circle, the Daniel@0: samplepoints attribute affects Daniel@0: the output. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Clipping window on final drawing. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Factor to scale up drawing to allow margin for expansion in Daniel@0: Voronoi technique. dim' = (1+2*margin)*dim. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Weight of edge. In dot, the heavier the weight, the shorter, Daniel@0: straighter and more vertical the edge is. In neato, the heavier the Daniel@0: weight, the more neato will try to place the end points so that the Daniel@0: length of the edge is len. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Width of node, in inches. This is taken as the initial, minimum width Daniel@0: of the node. If fixedsize is true, this Daniel@0: will be the final width of the node. Otherwise, if the node label Daniel@0: requires more width to fit, the node's width will be increased to Daniel@0: contain the label. Note also that, if the output format is dot, the Daniel@0: value given to width will be the final value. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Provides z coordinate value for 3D layouts and displays. If the Daniel@0: graph has dim set to 3 (or more), Daniel@0: neato will use a node's z value Daniel@0: for the z coordinate of its initial position if Daniel@0: its pos attribute is also defined. Daniel@0: Daniel@0: Daniel@0: Even if no z values are specified in the input, it is necessary to Daniel@0: declare a z attribute for nodes, e.g, using node[z=""] Daniel@0: in order to get z values on output. Daniel@0: Thus, setting dim=3 but not declaring z will Daniel@0: cause neato -Tvrml to Daniel@0: layout the graph in 3D but project the layout onto the xy-plane Daniel@0: for the rendering. If the z attribute is declared, the final rendering Daniel@0: will be in 3D. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: