@1
'LayoutMode' activates the layout mode of the syntax-directed
editor. Within this mode you may either select logical increments
or representation increments (keywords of the concrete syntax)
within the current presentation and no commands are available to
change the logical structure of the current document. Within this
mode, current text increments are enclosed by a rectangle and 
current grafical increments are decorated with markers.

The layout mode must be used 
(1) to modify the position of pure representation increments by
    means of their layout attributes/procedures,
(2) to modify the size of grafical increments by moving their
    markers around,
(3) and to change the number or position of a polyline's control
    points.

--> 'EditMode', 'Move', 'WriteToFile', 'WriteToFileWithLayout',
    'ReadFromFile',  'Vertical', ...
@2
'VerticalNoSpace' overwrites the current increment's
layout procedure with the following one:

  Current.X := 0;
  Current.Y := Pred.Y + Pred.Height;

--> 'LayoutMode', 'HorizontalNoSpace', 'VerticalSpace', ...
@3
'HorizontalNoSpace' overwrites the current increment's
layout procedure with the following one:

  Current.X := Pred.X + Pred.Width;
  Current.Y := Pred.Y + Pred.Height - LineHeight;

--> 'LayoutMode', 'Vertical', 'VerticalSpace', ...
@4
'VerticalSpace' overwrites the current increment's layout 
procedure with the following one:

  Current.X := 0;
  Current.Y := Pred.Y + Pred.Height + LineHeight;

--> 'LayoutMode', 'Vertical', 'HorizontalNoSpace', ...
@5
'HorizontalSpace' overwrites the current increment's layout 
procedure with the following one:

  Pred.X + Pred.Width + CharWidth + Current.Width 
    <=  MaxWidth :
     Current.X := Pred.X + Pred.Width + CharWidth ;
     Current.Y := Pred.Y + Pred.Height - LineHeight;
  else:
     Current.X := 0;
     Current.Y := Pred.Y + Pred.Height;

--> 'LayoutMode', 'Vertical', 'HorizontalNoSpace', ...
@6
'VerticalIndent' overwrites the current increment's
layout procedure with the following one

  Current.X := Indentation;
  Current.Y := Pred.Y + Pred.Height;

--> 'LayoutMode', 'Vertical',   'HorizontalNoSpace', ...
@7
'HorizontalIndent' overwrites the current increment's layout 
procedure with the following one:

  Pred.Y + Pred.Width + CharWidth + Current.Width 
    <=  MaxWidth :
     Current.X := Pred.X + Pred.Width + CharWidth ;
     Current.Y := Pred.Y + Pred.Height - LineHeight;
  else:
     Current.X := Indentation;
     Current.Y := Pred.Y + Pred.Height;

--> 'LayoutMode', 'Vertical',   'HorizontalNoSpace', ...
@8
'VerticalConditional' overwrites the current increment's
layout procedure with the following one:

  Pred.X = 0:
     Current.X := Pred.X + Pred.Width + CharWidth;
     Current.Y := Pred.Y;
  else:
     Current.X := 0;
     Current.Y := Pred.Y + Pred.Height;

--> 'LayoutMode', 'Vertical',   'HorizontalNoSpace', ...
@9
'VerticalSpaceIndent' overwrites the current increment's 
layout procedure with the following one:

  Current.X := Indentation;
  Current.Y := Pred.Y + Pred.Height + LineHeight;

--> 'LayoutMode', 'Vertical',   'HorizontalNoSpace', ...
@10
'SetTab' overwrites the current increment's layout 
procedure with the following one:

  (TabPos > Pred.X + Pred.Width) AND
  (TabPos + Current.Width <= MaxWidth):
     Current.X := TabPos;
     Current.Y := Pred.Y + Pred.Height - LineHeight;
  else:
     Current.X := TabPos;
     Current.Y := Pred.Y + Pred.Height;

--> 'LayoutMode', 'Vertical',   'HorizontalNoSpace', ...
@11
'EditMode' may be used to leave the syntax-directed editor's layout
mode and to return to its edit mode. Within this mode you may only 
select and change logical increments.

Changing the current command group activates this command.

--> 'LayoutMode' 
@12
'GridOff' deactivates the grid of the current graph
representation (grid size = 1 point). 

--> 'GridOn'
@13
'GridOn' activates the grid of the current graph
representation but not the grid of other graph
representations within the same document ("on"
is the default). With an activated grid, all
vertices and links of the current graph will
be positioned such that their control points
(corners etc.) occupy grid positions.

--> 'GridOff'
@14
'MoveLeft' moves the currently selected increment
with delta = size of grid points to the left.

--> 'GridOn', 'LayoutMode', 'MoveTo', 'MoveRight', ...
@15
'MoveRight' moves the currently selected increment
with delta = size of grid points to the right.

--> 'GridOn', 'LayoutMode', 'MoveTo', 'MoveLeft', ...
@16
'MoveUp' moves the currently selected increment
with delta = size of grid points to the top.

--> 'GridOn', 'LayoutMode', 'MoveTo', 'MoveLeft', ...
@17
'MoveDown' moves the currently selected increment
with delta = size of grid points to the bottom.

--> 'GridOn', 'LayoutMode', 'MoveTo', 'MoveLeft', ...
@18
'MoveTo' moves the currently selected increment
to any point (selected with the mouse) within
the current graph. Use any mouse button to select
the new position of the increment.

Selecting an increment with the middle-mouse-button
(down) automatically activates this command.  Keep
the mouse button pressed, move the mouse cursor
to the new position, and release the mouse button.

--> 'GridOn', 'LayoutMode', 'MoveLeft', ...
@19
'MoveLeft' moves the currently selected control point
with delta = size of grid points to the left.

--> 'GridOn', 'LayoutMode', 'MoveTo', 'MoveRight', ...
@20
'MoveRight' moves the currently selected control point
with delta = size of grid points to the right.

--> 'GridOn', 'LayoutMode', 'MoveTo', 'MoveLeft', ...
@21
'MoveUp' moves the currently selected control point
with delta = size of grid points to the top.

--> 'GridOn', 'LayoutMode', 'MoveTo', 'MoveLeft', ...
@22
'MoveDown' moves the currently selected control point
with delta = size of grid points down.

--> 'GridOn', 'LayoutMode', 'MoveTo', 'MoveLeft', ...
@23
'MoveTo' moves the currently selected control point
to any point (selected with the mouse) within the
current graph. Use any mouse button to select the
new position of the increment.

Selecting a control point with the middle-mouse-
button (down) automatically activates this command.
Keep the mouse button pressed, move the mouse cursor
to the new position, and release the mouse button.

--> 'GridOn', 'LayoutMode', 'MoveLeft', ...
@24
'ResizeTo' moves the currently selected control
point of a vertex to any point (selected with the
mouse) within the current graph. Moving a control
point forces its vertex to shrink or to grow
adequately. Use any mouse button to select the
control point's new position.

Selecting a control point with the middle-mouse-
button (down) automatically activates this command.
Keep the mouse button pressed, move the mouse cursor
to the new position, and release the mouse button.

--> 'GridOn', 'LayoutMode', 'ResizeLeft', ...
@25
'ResizeLeft' moves the currently selected control
point with delta = grid size points to the left.

--> 'GridOn', 'LayoutMode', 'ResizeRight', ...
@26
'ResizeRight' moves the currently selected control
point with delta = grid size points to the right.

--> 'GridOn', 'LayoutMode', 'ResizeLeft', ...
@27
'ResizeUp' moves the currently selected control
point with delta = grid size points to the top.

--> 'GridOn', 'LayoutMode', 'ResizeLeft', ...
@28
'ResizeDown' moves the currently selected control
point with delta = grid size points to the bottom.

--> 'GridOn', 'LayoutMode', 'ResizeLeft', ...
@29
'Front' puts the currently selected increment's
representation in front of all other increments
of the same graph. If the increment is already
the foremost one then the command works like
'Back', i.e. the increment's representation is
put behind all other increments of the same
graph.

--> 'Back'
@30
'Back' puts the currently selected increment's
representation behind the representations of
all other increments of the same graph.
If the increment is already the hindmost one
then the command works like 'Front',
i.e. the increment's representation is put in
front of all other increments of the same graph.

--> 'Front'
@31
'InsertPoint' may be used to insert a new
control point before the currently selected
control point. Use any mouse button to 
select the new control point's position.

--> 'DeletePoint'
@32
'DeletePoint'  deletes the currently selected
control point of a link (if it isn't the first
or the last one).

--> 'InsertPoint'
@33
'Circle' changes the position of the label of
a vertex or a link. A label with a position
(-z, 0) relative to the center of its vertex
or link jumps to the new position (0, z), 
and then to (z, 0), and finally to (0, -z).

--> 'Circle'
@34
'Reflect' is equal to two activations of the
command 'Circle'.

--> 'Reflect'
@35
'AttachToBorder' changes the attachment of the
currently selected link to its source/target
vertex. The link's first/last control point
always have a position such that the length
of the link's first/last line segment is
minimal.

--> 'AttachCenterDirect', 'AttachToCorner'
@36
'AttachCenterDirect' changes the attachment
of the currently selected link to its source/
target vertex. The link's first/last line
segment becomes always directed to the center
of the source/target vertex.

--> 'AttachToBorder', 'AttachToCorner'
@37
'AttachToCorner' changes the attachment of
the currently selected link to its source/
target vertex. The link's first/last control
point always has a position such that the
length of the link's first/last line segment
is minimal under the additional condition
that the first/last control point is attached
to any corner of the source/target vertex.

--> 'AttachToBorder', 'AttachCenterDirect'
@38
'ResizeHeightOnly' resizes the height of the frame
of a graphical representation and repositions
the objects enclosed, such that the objects inside
are centered within the frame in vertical direction,
and a distance corresponding to the currently adjusted
vertical grid spacing is kept from the frame.

--> 'ResizeWidthOnly', 'ResizeHeightCenter'
@39
'ResizeWidthOnly' resizes the width of the frame of a
graphical representation and repositions the objects
enclosed, such that the objects inside are centered
within the frame in horizontal direction, and a distance
corresponding to the currently adjusted horizontal
grid spacing is kept from the frame.

--> 'ResizeHeightOnly', 'ResizeHeightCenter'
@40
'ResizeHeightCenter' centers the objects enclosed by the
frame of a graphical representation within it in
horizontal direction without changing the width of
the frame. Additionally, a 'ResizeHeightOnly' is performed.

--> 'ResizeHeightOnly', 'ResizeWidthOnly'
@41
'StoreSize' stores the object size in a table, which means
that each newly created object of the same graphical class
gets that size until another value is stored.
@42
'ResizeToDefault' resizes the frame of a graphical
representation to a default value stored in a special table.
@43
'ResizeAllHori' resizes the width of all objects enclosed by
the frame of the current graphical subrepresesentation.
That means, 'ResizeWidthOnly' is employed for all objects within that
graphical subrepresentation.

--> 'ResizeWidthOnly'
@44
'ResizeAllVert' resizes the height of all objects enclosed by
the frame of the current graphical subrepresentation.
That means, 'ResizeHeightOnly' is employed for all objects within that
graphical subrepresentation.

--> 'ResizeHeightOnly'
@45
If 'AutoResizeOn' is activated, the execution of 'ResizeHeight/WidthOnly'
and 'ResizeHeightCenter' to shrink a complex graphical frame invokes
the resizing of all included objects.
'AutoResizeOff' deactivates this implicit resizing.

--> 'ResizeHeightOnly', 'ResizeHeightCenter, 'ResizeWidthOnly'
    'ResizeAllVert,                          'ResizeAllHori'
@46
'StoreOption' stores the attachment options of an edge in a table,
i.e. each newly created edge of the same graphic type is connected to
its source and/or target vertex corresponding to these options until
different values are stored.

--> 'AttachCenterDirect', 'AttachToCorner', 'AttachToBorder'
@47
New layout calculation for a subtree with the current complex object as root.

'AutoLayoutElliptical':
-----------------------
Containers are positioned along the perimeter of an ellipse. They are 
ordered to reduce (but not necessarily minimize) the number of arc crossings.

'AutoLayoutGrid':
-----------------
Containers are positioned at the intersections of an mxn grid, placed in top to
bottom left to right order and ordered to reduce the number of arc crossings.

'AutoLayoutHierarchical':
-------------------------
The algorithm computes a depth-first spanning forest F of the input graph, 
and places containers by following tree arcs with respect to F (and ignoring
forward, cross, back, and external arcs). Containers are assigned to layers
by the longest path layering technique. Trees can be grown along any axis.
No crossing minimazation is performed.

'AutoLayoutNoOverlaps':
-----------------------
Overlap elimination. Containers are repositioned to eliminate overlaps.

'AutoLayoutRandom':
-------------------
Random layout. Containers are positioned randomly without overlaps.

'AutoLayoutSpring':
-------------------
Force-based layout. Containers are positioned according to the following
analogy to a physical system: containers are treated as charged bodies that
repel one another; arcs are treated as springs attached to pairs of containers
that pull each member of the pair towards the other. The simulation is 
continued until a low-energy state is reached resulting the final layout.

'AutoLayoutPack':
-----------------
Quadtree based 2D bin packing. Containers are placed into a small enclosing
region by an incremental quadtree growing approach.
 
'AutoLayoutSugiyama':
---------------------
Top-to-bottom sugiyama-layout.
@48
'Circle' causes a clockwise rotation of the current edge or attribute.
An edge may be a loop or an incoming edge without a source object. 
An edge loop, positioned around the right bottom corner of an object,
moves to the left bottom corner and so on.
@49
'ReLayout' activates the "Combiyama"-algorithm to calculate a new layout for
the objects and edges within the current complex frame.
@50
'CombiyamaLoops' sets the desired number of "Combiyama"-iterations to a new
value. A reasonable value is 4. The layout algorithm is deactivated by changing
the value to 0 (default).
@51
'DoubleGrid' ('DivideGrid') changes the size of the grid. After activating the
grid the standard size is set. It's not possible to overstep the limits of the
grid size.

--> 'GridOn'
@52
'WidthHeight' resizes the width and the height of the frame 
of a graphical representation and repositions the objects
enclosed, such that a distance corresponding to the
currently adjusted horizontal grid spacing is kept from
the frame. 

--> 'WidthOnly', 'HeightOnly'