Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Arrow Shapes Daniel@0: Daniel@0: Daniel@0: Daniel@0:

Arrow Shapes

Daniel@0:
Daniel@0: Arrow shapes can be specified and named using the following simple Daniel@0: grammar. Daniel@0: Terminals are shown in bold font and nonterminals in italics. Daniel@0: Literal characters are given in single quotes. Daniel@0: Square brackets [ and ] enclose optional items. Daniel@0: Vertical bars | separate alternatives. Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@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
Daniel@0:

Daniel@0: The primitive shapes are: Daniel@0:

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

Daniel@0: As for the modifiers: Daniel@0:

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

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

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

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

Daniel@0:

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

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

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

Daniel@0:

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