wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: Arrow Shapes wolffd@0: wolffd@0: wolffd@0: wolffd@0:

Arrow Shapes

wolffd@0:
wolffd@0: Arrow shapes can be specified and named using the following simple wolffd@0: grammar. wolffd@0: Terminals are shown in bold font and nonterminals in italics. wolffd@0: Literal characters are given in single quotes. wolffd@0: Square brackets [ and ] enclose optional items. wolffd@0: Vertical bars | separate alternatives. wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0:
arrowname:aname [ aname [ aname [ aname ] ] ]
aname:[ modifiers ] shape
modifiers:[ 'o' ] [ side ]
side:'l'
|'r'
shape:box
|crow
|diamond
|dot
|inv
|none
|normal
|tee
|vee
wolffd@0:

wolffd@0: The primitive shapes are: wolffd@0:

wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0:
"box" wolffd@0: "crow" wolffd@0: "diamond" wolffd@0:
"dot" wolffd@0: "inv" wolffd@0: "none" wolffd@0:
"normal" wolffd@0: "tee" wolffd@0: "vee" wolffd@0:
wolffd@0:
wolffd@0:

wolffd@0: As for the modifiers: wolffd@0:

wolffd@0:
'l' wolffd@0:
Clip the shape, leaving only the part to the left of the edge. wolffd@0:
'r' wolffd@0:
Clip the shape, leaving only the part to the right of the edge. wolffd@0:
'o' wolffd@0:
Use an open (non-filled) version of the shape. wolffd@0:
wolffd@0: Left and right are defined as those directions determined by looking wolffd@0: from the edge towards the point where the arrow "touches" the node. wolffd@0:

wolffd@0: As an example, the arrow shape lteeoldiamond is parsed as wolffd@0: 'l' 'tee' 'o' 'l' 'diamond' and corresponds to the shape wolffd@0:

wolffd@0: wolffd@0:
wolffd@0: Note that the first arrow shape specified occurs closest to the node. wolffd@0: Subsequent arrow shapes, if specified, occur further from the node. wolffd@0:

wolffd@0: Not all syntactically legal combinations of modifiers are meaningful wolffd@0: or semantically valid. wolffd@0: For example, none of the modifiers make any sense with none. wolffd@0: The following table indicates which modifiers are allowed with which shapes. wolffd@0:

wolffd@0:

wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0:
Modifierbox wolffd@0: crow wolffd@0: diamond wolffd@0: dot wolffd@0: inv wolffd@0: none wolffd@0: normal wolffd@0: tee wolffd@0: vee wolffd@0:
'l'/'r'XXX X XXX
'o' X XXX X  
wolffd@0:
wolffd@0:

wolffd@0: This yields 36 different arrow shapes. The optional second, third, fourth shapes wolffd@0: can independently be any of the 36, but since nonenone wolffd@0: is redundant, there are 35**4 + 35**3 + 35**2 + 35 + 1 = 1,544,761 different combinations. wolffd@0:

wolffd@0: The following display contains the 36 combinations possible with a single wolffd@0: arrow shape. The node attached to the arrow is not drawn but would appear wolffd@0: on the right side of the edge. wolffd@0:

wolffd@0:

wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0:
wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0:
box wolffd@0: lbox wolffd@0: rbox wolffd@0: obox wolffd@0: olbox wolffd@0: orbox wolffd@0:
wolffd@0: wolffd@0: wolffd@0:
crow wolffd@0: lcrow wolffd@0: rcrow wolffd@0:
wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0:
diamond wolffd@0: ldiamond wolffd@0: rdiamond wolffd@0: odiamond wolffd@0: oldiamond wolffd@0: ordiamond wolffd@0:
wolffd@0: wolffd@0:
dot wolffd@0: odot wolffd@0:
wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0:
inv wolffd@0: linv wolffd@0: rinv wolffd@0: oinv wolffd@0: olinv wolffd@0: orinv wolffd@0:
wolffd@0:
none wolffd@0:
wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0:
normal wolffd@0: lnormal wolffd@0: rnormal wolffd@0: onormal wolffd@0: olnormal wolffd@0: ornormal wolffd@0:
wolffd@0: wolffd@0: wolffd@0:
tee wolffd@0: ltee wolffd@0: rtee wolffd@0:
wolffd@0: wolffd@0: wolffd@0:
vee wolffd@0: lvee wolffd@0: rvee wolffd@0:
wolffd@0:
wolffd@0: wolffd@0: