Provided by: tklib_0.8~20230222-1_all bug

NAME

       diagram - Diagram drawing

SYNOPSIS

       package require Tcl  8.5

       package require Tk  8.5

       package require diagram  1

       ::diagram objectName canvas ?script?

       diagramObject new direction name ?key value...?

       diagramObject new element name attributes cmdprefix

       diagramObject new alias name cmdprefix

       diagramObject new command name arguments body

       diagramObject new attribute name ?key value...?

       diagramObject unknown attribute cmdprefix

       diagramObject draw script

       arc attr...

       arrow attr...

       --> attr...

       <--> attr...

       <--> attr...

       block script attr...

       box attr...

       circle attr...

       O attr...

       diamond attr...

       <> attr...

       drum attr...

       ellipse attr...

       line attr...

       -- attr...

       move attr

       spline attr...

       text attr...

       west

       w

       left

       l

       south

       s

       down

       bottom

       bot

       b

       east

       e

       right

       r

       north

       n

       up

       top

       t

       northwest

       nw

       up-left

       upleft

       leftup

       northeast

       ne

       up-right

       upright

       rightup

       southwest

       sw

       down-left

       downleft

       leftdown

       southeast

       se

       down-right

       downright

       rightdown

       number cm

       number mm

       number inch

       number pt

       number number

       by distance direction

       point1 + point2

       point1 - point2

       point by distance direction

       point1 | point2

       n between poin1 point2

       intersect elem1 elem2

       element names ?pattern?

       element corner

       element corner1 corner2...

       element ?corner1... ?names ?pattern??]?

       nth ?corner?

       nth last ?corner?

       nth shape ?corner?

       nth last shape ?corner?

       last ?corner?

       last shape ?corner?

       1st

       2nd

       3rd

________________________________________________________________________________________________________________

DESCRIPTION

       Welcome  to  diagram,  a  package  for  the easy construction of diagrams (sic), i.e. 2D vector graphics,
       sometimes also called pictures.  Note that this package is not a replacement for Tk's canvas, but  rather
       a  layer  sitting  on  top of it, to make it easier to use.  In other words, using the canvas as the core
       graphics engine diagram abstracts away from the minutiae of handling coordinates to position and size the
       drawn elements, allowing the user to concentrate on the content of the diagram instead.

       This  is  similar  to  Brian  Kernighan's PIC language for troff, which is the spiritual ancestor of this
       package.

       This document contains the reference to the API and drawing (language) commands.  Its  intended  audience
       are  users  of  the  package wishing to refresh their memory.  Newcomers should read the Diagram Language
       Tutorial first.  Developers wishing to work on the internals of the package and its  supporting  packages
       should  look  at  section  Diagram  Classes  first,  and then the comments in the sources of the packages
       itself.

       In the remainder of the document we first describe the APIs of  the  diagram  class  and  its  instances,
       followed by the language reference for the drawing language itself.

API

   CLASS API
       The package exports the API described here.

       ::diagram objectName canvas ?script?
              The command creates a new instance of a diagram controller and returns the fully qualified name of
              the object command as its result.  The new instance is connected to the specified  canvas  object,
              which is used as the diagrams graphics engine. This is usually an instance of Tk's canvas, however
              any object which is API compatible to Tk's canvas can be used here.

              The API of this object command is described in the following section, Object API. It may  be  used
              to invoke various operations on the object.

              If the script argument is specified then method draw will be invoked on it.

   OBJECT API
       Instances of the diagram class support the following methods:

       diagramObject new direction name ?key value...?
              This  method  defines  a  new  named direction and its attributes. The latter is given through the
              key/value pairs coming after the name.

              Users are mostly free to specify arbitrary attributes  with  whatever  meaning  they  desire.  The
              exception  are  the  names  angle and opposite. They are special to the diagram package and have a
              fixed meaning.

              angle  This attribute specifies the angle of the direction in degrees, where 0 points east (to the
                     right) and 90 points north (up).

              opposite
                     This  attribute  specifies  the  name  of  the  direction  which  should  be  considered as
                     complementary to the named one.

       diagramObject new element name attributes cmdprefix
              This method defines a new graphics element for the drawing language. I.e. name will become  a  new
              command  in  the  language, and the specified command prefix (cmdprefix) will be called to perform
              the actual drawing.

              attributes specifies the set of attributes for which data has to be  available.  I.e.  the  system
              will  run  the  ...-callbacks  for  these  attributes.   See  the  method  new  attribute for more
              information on attribute definitions.

              The command prefix is expected to conform to the following signature:

              cmdprefix canvas attributes
                     Where canvas is the handle of the canvas widget to draw to, and attributes is a  dictionary
                     holding the attributes for the element, be they user-specified, or defaults.

                     The results of the command has to be a list containing at least two and at most four items.
                     These are, in order:

                     [1]    The list of canvas items the drawn element consists of.

                     [2]    The dictionary of named locations in the element, its corners.

                     [3]    An optional mode, either "relative" or "absolute".  When not returned "relative"  is
                            assumed.  In  the case of a relative element position the attributes "with" and "at"
                            are used to determine the final position of the new element.

                     [4]    An optional name of a direction. If not the empty  string  this  is  handed  to  the
                            automatic layouter as the new direction to follow.

       diagramObject new alias name cmdprefix
              This method defines a new command for the drawing language. I.e. name will become a new command in
              the language, and the specified command prefix (cmdprefix) will be  called  on  use  of  this  new
              command.  Any  arguments  given  to the command are simply passed to the prefix. There is no fixed
              siganture.

              Note that the prefix is run in the context of the drawing language, allowing the direct use of any
              existing commands.

       diagramObject new command name arguments body
              This  is  like  new  alias except that the new command is defined as a procedure in the language's
              context, with regular argument list and body.

       diagramObject new attribute name ?key value...?
              This method defines a new named attribute which can be used by graphical elements. The handling of
              the attribute by the processor is declared through the key/value pairs coming after the name.

              The accepted keys and their meanings are:

              key    The  value  of  this  key is the name of the key under which the attribute's value shall be
                     stored in the attribute dictionary given to the drawing command after attribute  processing
                     is complete.

                     This key is optional. If it is not specified it defaults to the name of the attribute.

              get    The value of this key is a command prefix which will be invoked to retrieve the attribute's
                     argument(s) from the command line.

                     This key is optional. If it is not specified a default is used which takes the single  word
                     after the attribute name as the attribute's value.

                     The signature of the command prefix is

                     cmdprefix wordqueue
                            Where  wordqueue is the handle of a queue object conforming to the API of the queues
                            provided by package struct::queue. This queue contains the not-yet-processed part of
                            the  attribute  definitions,  with one entry per word, with the first entry the word
                            after name of the attribute. In other words, the attribute's name has  already  been
                            removed from the queue.

                            The  result  of the command is the value of the attribute, which may have been taken
                            from the queue, or not.

              transform
                     The value of this key is a command prefix which will be invoked to transform the  retrieved
                     value (See get) into their final form.

                     This  key  is optional. If it is not specified no transformation is done.  The signature of
                     the command prefix is

                     cmdprefix value
                            Where value is the value to transform.

                            The result of the command is the final value of the attribute.

              type   The value of this key is a command prefix which will be invoked to validate the attribute's
                     argument(s).

                     This key is optional. If it is not specified no validation is done.

                     The signature of the command prefix is that of snit validation types. See the documentation
                     of the snit package.

              merge  The value of this key is a command prefix which will be invoked to insert  the  transformed
                     and validated attribute value into the dictionary of collected attributes.

                     This  key  is optional. If it is not specified a default merge is chosen, based on the data
                     for key aggregate, see below.  The signature of the command prefix is

                     cmdprefix value dict
                            Where value is the value to insert, and dict the dictionary of attributes and values
                            collected so far.

                            The result of the command is the new dictionary of attributes.

              aggregate
                     The  value of this key is a boolean flag. It has an effect if and only if the key merge was
                     not specified. This key is optional. If it is not specified it defaults to False.

                     If the key is effective, the value of False means that the attribute's value  is  set  into
                     the  dictionary using the value of key key (see above) as index, overwriting any previously
                     specified value.

                     If the key is effective, the value of True means that the attribute's value is added to the
                     dictionary  using  the  value  of  key  key  (see above) as index, extending any previously
                     specified value.  This means that the final value of the attribute as seen after processing
                     will be a list of the collected values.

              default
                     The  value  of  this  key  is  a  command  prefix which will be invoked after collection of
                     attributes has been completed and this attribute is in the list of required attributes  for
                     the drawing element (See argument attributes of method new element).

                     Note  that  the  connection is made through the value of key key, not through the attribute
                     name per se.

                     Further note that this command prefix is invoked even if a user specified  attribute  value
                     is  present. This allows the command to go beyond simply setting defaults, it can calculate
                     and store derived values as well.

                     This key is optional. If an element requires this attribute, but default is  not  specified
                     then nothing will be done.

                     The signature of the command prefix is

                     cmdprefix init
                            This  method  is  run  when  the  attribute  is  defined,  its  responsibility is to
                            initialize anything  in  the  language  namespace  for  the  attribute  and  default
                            processing.

                            The result of this method is ignored.

                     cmdprefix fill varname
                            This  method is run to put defaults, or derived values into the attribute dictionary
                            named by varname. This variable will be found in the calling context.

                            The result of this method is ignored.

                     cmdprefix set name value
                            This method is run to push current a attribute value into the language namespace, to
                            make it the new default.

                            The result of this method is ignored.

              linked This key is effective if and only if key default is not specified. In that case is supplies
                     a default handling for default, linking  the  attribute  to  a  variable  in  the  language
                     context.

                     The  value for this key is a 2-element list containing the name of the variable to link to,
                     and its initial value, in this order.

       diagramObject unknown attribute cmdprefix
              This method registers the command prefix with the subsystem processing the attributes for  element
              commands, telling it to call it when it encounters an attribute it is unable to handle on its on.

              It  is allowed to register more than callback, these will be called in order of registration (i.e.
              first to last), until one of the callbacks accepts the  current  input.   The  command  prefix  is
              expected to conform to the following signature:

              cmdprefix wordqueue
                     Where  wordqueue  is  the  handle  of  a  queue  object conforming to the API of the queues
                     provided by package struct::queue.  This queue contains the not-yet-processed part  of  the
                     attribute  definitions,  with  one  entry  per  word,  with the first entry the name of the
                     attribute which could not be processed.

                     The results of the command has to be a boolean value where True signals that this  callback
                     has  accepted  the attribute, processed it, and the new state of the wordqueue is where the
                     general processing shall continue.

                     Given the signature the  command  has  basically  two  ways  of  handling  (rewriting)  the
                     attributes it recognizes:

                     [1]    Replace the attribute (and arguments) with a different attribute and arguments.

                     [2]    Push additional words in front to get the general processing unstuck.

       diagramObject draw script
              This method runs the given script in the context of the drawing language definitions.  See section
              Language Reference for details on the available commands.

              Note that script is trusted.  It is executed in the current interpreter with access  to  its  full
              abilities.  For the execution of untrusted diagram scripts this interpreter should be a safe one.

LANGUAGE REFERENCE

   ELEMENTS
       This  section  lists the commands for the predefined drawing elements, aka shapes. These commands are all
       defined in the language's context.  All commands of this section return the handle of the  newly  created
       element  as their result. This handle also exists as a command which can be used to query the element for
       its corners (names, values).  See section Miscellaneous Commands.  IMAGE: figure-02-basic-shapes

       arc attr...
              IMAGE: figure-02-arc An open element with the corresponding  corners,  i.e.  "start",  "end",  and
              "center".   Note however that it also has the compass rose of closed elements as its corners, with
              the center of the arc's circle as the center of the compass and the other points on the circle the
              arc is part of.  It handles the attributes

              anchor name

              ljust

              rjust

              above

              below  IMAGE: figure-22-text-anchoring-3 Specifies the anchor of the text which is to be placed at
                     the element's center, by name. I.e. this attribute defines the text's position relative  to
                     the  element's  center.  The value is ignored if no text was specified for the element.  If
                     not specified the system falls back to the value taken from the language  variable  anchor,
                     which  itself  defaults to center.  The legal values are all those accepted by Tk_GetAnchor
                     [http://www.tcl.tk/man/tcl8.5/TkLib/GetAnchor.htm].  The commands without arguments are all
                     shorthands  with  the anchor implied. Note that they do not combine, only the last is used.
                     For comined directions the main attribute command, anchor has to be used.

                     ljust  "anchor west"

                     rjust  "anchor east"

                     above  "anchor south"

                     below  "anchor north"

              clockwise

              cw     Specifies the direction of the  arc  element,  here  going  clockwise.   The  complementary
                     attribute  is  counterclockwise.  If not specified the system falls back to the value taken
                     from the language variable clockwise, which itself defaults to false, for counter-clockwise
                     direction.

              color spec
                     IMAGE:  figure-21-style-colors  Specifies  the color used to draw the lines of the element.
                     If not specified the system falls back to  the  value  taken  from  the  language  variable
                     linecolor, which itself defaults to black.

              counterclockwise

              ccw    Specifies  the  direction  of  the  arc element, here counter-clockwise.  The complementary
                     attribute is clockwise.  If not specified the system falls back to the value taken from the
                     language  variable  clockwise,  which  itself  defaults  to  false,  for  counter-clockwise
                     direction.

              fillcolor spec
                     IMAGE: figure-21-style-colors Specifies the color used to draw the inside of  the  element.
                     If  not  specified  the  system  falls  back  to the value taken from the language variable
                     fillcolor, which itself defaults to the empty string, signaling "no filling".

              from location
                     Specifies the location where the arc element begins.  Defaults to the current  location  as
                     maintained by the layouting system.

              justify left|center|right
                     Specifies  how  multi-line  text  associated with the element is positioned within its box.
                     The value is ignored if no text was specified for the element.  If not specified the system
                     falls  back to the value taken from the language variable justify, which itself defaults to
                     left.  The legal values are left, right, and center.

              radius length
                     Specifies the radius of the arc element, or rather, the radius of the circle the shown  arc
                     is  a part of.  If not specified the system falls back to the value taken from the language
                     variable arcradius, which itself defaults to the pixel equivalent of 1 cm.

              stroke width
                     IMAGE: figure-20-style-stroke Specifies the width of the lines drawn for the  the  element,
                     in  pixels.   If  not  specified the system falls back to the value taken from the language
                     variable linewidth, which itself defaults to 1.

              style spec
                     IMAGE: figure-18-style-dash Specifies the style used to draw the lines of the element.   If
                     not  specified  the  system  falls  back  to  the  value  taken  from the language variable
                     linestyle, which itself defaults to solid lines.  The legal values are all  those  accepted
                     by  Tk_GetDash [http://www.tcl.tk/man/tcl8.5/TkLib/GetDash.htm], and additionally all which
                     are listed below:

                     solid, empty string
                            Draw solid line.

                     dash, dashed, -
                            Draw a dashed line.

                     dot, dotted, .
                            Draw a dotted line.

                     dash-dot, -.
                            Draw a dash-dotted line

                     dash-dot-dot, -..
                            Draw a dash-dot-dotted line.

                     Note that the values "solid", "dot(ted)", "dash(ed)", "dash-dot",  and  "dash-dot-dot"  are
                     all accepted as shorthands for the style command using them as argument.

              text string
                     Specifies  the  text  to  associate with the element.  Defaults to nothing.  When specified
                     multiple times the actually shown text is the  concatenation  of  the  individual  strings,
                     vertically stacked, with the first string specified being the topmost element.

              textcolor spec
                     Specifies the color used to draw the text of an element with.  Ignored if there is no text.
                     If not specified the system falls back to  the  value  taken  from  the  language  variable
                     textcolor, which itself defaults to black.

              textfont spec
                     Specifies  the font used to draw the text of an element with.  Ignored if there is no text.
                     If not specified the system falls back to  the  value  taken  from  the  language  variable
                     textfont, which itself defaults to Helvetica 12pt.

              to location
                     Specifies  the  location  where  the  arc element ends.  Defaults to a location such that a
                     90-degree arc is drawn in the chosen direction, starting at from.

       arrow attr...

       --> attr...

       <--> attr...

       <--> attr...
              IMAGE: figure-02-arrow An alias for the line element (see below),  with  the  attribute  arrowhead
              preset to ->, <->, or <-.  The arrow is equivalent to -->.

       block script attr...
              A  closed  element  with the corresponding corners, i.e. the eight directions of the compass rose,
              and "center".  The main effect is the aggregration of all elements created by the script into  one
              element.  This also means that while the elements created by the script are visible in the element
              history while the script is executing, afterward the history contains only the block  itself,  and
              not the elements it is composed of.

              The  script has access to the current state of all variables in the language context.  Any changes
              to the variables will be reverted after execution of the block.  However, also, any variables  set
              in the script will be exported as corners of the element, allowing users to define their own named
              locations in the block.

              Regarding the layout mechanism any changes made by the script are reverted after  the  element  is
              done.  In other words, a block is an implicit group.

              Blocks  handle  all  attributes,  propgating  their settings into the script as the default values
              active during script execution.

       box attr...
              IMAGE: figure-02-box A closed element with the corresponding corners, i.e. the eight directions of
              the compass rose, and "center".  It handles the attributes

              anchor name

              ljust

              rjust

              above

              below  IMAGE: figure-22-text-anchoring-3 Specifies the anchor of the text which is to be placed at
                     the element's center, by name. I.e. this attribute defines the text's position relative  to
                     the  element's  center.  The value is ignored if no text was specified for the element.  If
                     not specified the system falls back to the value taken from the language  variable  anchor,
                     which  itself  defaults to center.  The legal values are all those accepted by Tk_GetAnchor
                     [http://www.tcl.tk/man/tcl8.5/TkLib/GetAnchor.htm].  The commands without arguments are all
                     shorthands  with  the anchor implied. Note that they do not combine, only the last is used.
                     For comined directions the main attribute command, anchor has to be used.

                     ljust  "anchor west"

                     rjust  "anchor east"

                     above  "anchor south"

                     below  "anchor north"

              at location
                     Specifies the location of the element's corner named by the attribute  with.   Defaults  to
                     the current location as maintained by the layouting system.

              color spec
                     IMAGE:  figure-21-style-colors  Specifies  the color used to draw the lines of the element.
                     If not specified the system falls back to  the  value  taken  from  the  language  variable
                     linecolor, which itself defaults to black.

              fillcolor spec
                     IMAGE:  figure-21-style-colors  Specifies the color used to draw the inside of the element.
                     If not specified the system falls back to  the  value  taken  from  the  language  variable
                     fillcolor, which itself defaults to the empty string, signaling "no filling".

              height length

              ht length
                     Specifies  the  height of the element.  If not specified the system falls back to the value
                     taken from the language variable boxheight, which itself defaults to the  pixel  equivalent
                     of 2 cm.

              justify left|center|right
                     Specifies  how  multi-line  text  associated with the element is positioned within its box.
                     The value is ignored if no text was specified for the element.  If not specified the system
                     falls  back to the value taken from the language variable justify, which itself defaults to
                     left.  The legal values are left, right, and center.

              slant angle
                     Specifies the angle by which the box element is slanted, in degrees.  If not specified  the
                     system  falls  back  to  the  value  taken  from  the language variable slant, which itself
                     defaults to 90, i.e. vertical, no slant.  0 degrees is slanting straight east, pointing  to
                     the right.  90 degrees is slanting to the north, pointing straight up.

              stroke width
                     IMAGE:  figure-20-style-stroke  Specifies the width of the lines drawn for the the element,
                     in pixels.  If not specified the system falls back to the value  taken  from  the  language
                     variable linewidth, which itself defaults to 1.

              style spec
                     IMAGE:  figure-18-style-dash Specifies the style used to draw the lines of the element.  If
                     not specified the system  falls  back  to  the  value  taken  from  the  language  variable
                     linestyle,  which  itself defaults to solid lines.  The legal values are all those accepted
                     by Tk_GetDash [http://www.tcl.tk/man/tcl8.5/TkLib/GetDash.htm], and additionally all  which
                     are listed below:

                     solid, empty string
                            Draw solid line.

                     dash, dashed, -
                            Draw a dashed line.

                     dot, dotted, .
                            Draw a dotted line.

                     dash-dot, -.
                            Draw a dash-dotted line

                     dash-dot-dot, -..
                            Draw a dash-dot-dotted line.

                     Note  that  the  values "solid", "dot(ted)", "dash(ed)", "dash-dot", and "dash-dot-dot" are
                     all accepted as shorthands for the style command using them as argument.

              text string
                     Specifies the text to associate with the element.  Defaults  to  nothing.   When  specified
                     multiple  times  the  actually  shown  text is the concatenation of the individual strings,
                     vertically stacked, with the first string specified being the topmost element.

              textcolor spec
                     Specifies the color used to draw the text of an element with.  Ignored if there is no text.
                     If  not  specified  the  system  falls  back  to the value taken from the language variable
                     textcolor, which itself defaults to black.

              textfont spec
                     Specifies the font used to draw the text of an element with.  Ignored if there is no  text.
                     If  not  specified  the  system  falls  back  to the value taken from the language variable
                     textfont, which itself defaults to Helvetica 12pt.

              width length

              wid length
                     Specifies the width of the element.  If not specified the system falls back  to  the  value
                     taken from the language variable boxwidth, which itself defaults to the pixel equivalent of
                     2 cm.

              with corner
                     Specifies the corner of the element to place at the location given  by  the  attribute  at.
                     Defaults  to  the current corner as maintained by the layouting system, except if the value
                     for at was specified by the user. In that case it defaults to center.

       circle attr...

       O attr...
              IMAGE: figure-02-circle A closed element with the corresponding corners, i.e. the eight directions
              of the compass rose, and "center".  It handles the attributes

              anchor name

              ljust

              rjust

              above

              below  IMAGE: figure-22-text-anchoring-3 Specifies the anchor of the text which is to be placed at
                     the element's center, by name. I.e. this attribute defines the text's position relative  to
                     the  element's  center.  The value is ignored if no text was specified for the element.  If
                     not specified the system falls back to the value taken from the language  variable  anchor,
                     which  itself  defaults to center.  The legal values are all those accepted by Tk_GetAnchor
                     [http://www.tcl.tk/man/tcl8.5/TkLib/GetAnchor.htm].  The commands without arguments are all
                     shorthands  with  the anchor implied. Note that they do not combine, only the last is used.
                     For comined directions the main attribute command, anchor has to be used.

                     ljust  "anchor west"

                     rjust  "anchor east"

                     above  "anchor south"

                     below  "anchor north"

              at location
                     Specifies the location of the element's corner named by the attribute  with.   Defaults  to
                     the current location as maintained by the layouting system.

              color spec
                     IMAGE:  figure-21-style-colors  Specifies  the color used to draw the lines of the element.
                     If not specified the system falls back to  the  value  taken  from  the  language  variable
                     linecolor, which itself defaults to black.

              diameter length

              diam length
                     Specifies  the diameter of the circle element, as an alternative way to specify its radius.
                     Effective if and only if the radius was not specified. I.e. if both diameter and radius are
                     specified  then  the  radius  infomration  has precendence.  This attribute has no default,
                     because the defaults are taken from the radius.

              fillcolor spec
                     IMAGE: figure-21-style-colors Specifies the color used to draw the inside of  the  element.
                     If  not  specified  the  system  falls  back  to the value taken from the language variable
                     fillcolor, which itself defaults to the empty string, signaling "no filling".

              justify left|center|right
                     Specifies how multi-line text associated with the element is  positioned  within  its  box.
                     The value is ignored if no text was specified for the element.  If not specified the system
                     falls back to the value taken from the language variable justify, which itself defaults  to
                     left.  The legal values are left, right, and center.

              radius length

              rad length
                     Specifies  the radius of the circle element.  If not specified the system falls back to the
                     value taken from the language variable circleradius, which itself  defaults  to  the  pixel
                     equivalent of 1 cm.

              stroke width
                     IMAGE:  figure-20-style-stroke  Specifies the width of the lines drawn for the the element,
                     in pixels.  If not specified the system falls back to the value  taken  from  the  language
                     variable linewidth, which itself defaults to 1.

              style spec
                     IMAGE:  figure-18-style-dash Specifies the style used to draw the lines of the element.  If
                     not specified the system  falls  back  to  the  value  taken  from  the  language  variable
                     linestyle,  which  itself defaults to solid lines.  The legal values are all those accepted
                     by Tk_GetDash [http://www.tcl.tk/man/tcl8.5/TkLib/GetDash.htm], and additionally all  which
                     are listed below:

                     solid, empty string
                            Draw solid line.

                     dash, dashed, -
                            Draw a dashed line.

                     dot, dotted, .
                            Draw a dotted line.

                     dash-dot, -.
                            Draw a dash-dotted line

                     dash-dot-dot, -..
                            Draw a dash-dot-dotted line.

                     Note  that  the  values "solid", "dot(ted)", "dash(ed)", "dash-dot", and "dash-dot-dot" are
                     all accepted as shorthands for the style command using them as argument.

              text string
                     Specifies the text to associate with the element.  Defaults  to  nothing.   When  specified
                     multiple  times  the  actually  shown  text is the concatenation of the individual strings,
                     vertically stacked, with the first string specified being the topmost element.

              textcolor spec
                     Specifies the color used to draw the text of an element with.  Ignored if there is no text.
                     If  not  specified  the  system  falls  back  to the value taken from the language variable
                     textcolor, which itself defaults to black.

              textfont spec
                     Specifies the font used to draw the text of an element with.  Ignored if there is no  text.
                     If  not  specified  the  system  falls  back  to the value taken from the language variable
                     textfont, which itself defaults to Helvetica 12pt.

              with corner
                     Specifies the corner of the element to place at the location given  by  the  attribute  at.
                     Defaults  to  the current corner as maintained by the layouting system, except if the value
                     for at was specified by the user. In that case it defaults to center.

       diamond attr...

       <> attr...
              IMAGE: figure-02-diamond  A  closed  element  with  the  corresponding  corners,  i.e.  the  eight
              directions of the compass rose, and "center".  It handles the attributes

              anchor name

              ljust

              rjust

              above

              below  IMAGE: figure-22-text-anchoring-3 Specifies the anchor of the text which is to be placed at
                     the element's center, by name. I.e. this attribute defines the text's position relative  to
                     the  element's  center.  The value is ignored if no text was specified for the element.  If
                     not specified the system falls back to the value taken from the language  variable  anchor,
                     which  itself  defaults to center.  The legal values are all those accepted by Tk_GetAnchor
                     [http://www.tcl.tk/man/tcl8.5/TkLib/GetAnchor.htm].  The commands without arguments are all
                     shorthands  with  the anchor implied. Note that they do not combine, only the last is used.
                     For comined directions the main attribute command, anchor has to be used.

                     ljust  "anchor west"

                     rjust  "anchor east"

                     above  "anchor south"

                     below  "anchor north"

              aspect number
                     Specifies the aspect ratio, i.e ratio of width to height,  of  the  diamond  element.   The
                     manner  in  which  a  default  is  calculated  when  not  specified  also  depends  on  the
                     specifications of the attributes width and height, if any.

                     If both width, and height are specified then any specification of aspect is ignored, as  it
                     is implicitly defined in the width and height as well, and this takes precedence. A missing
                     specification is ignored in that case well, i.e. no defaults are required.

                     If the aspect is specified, and one of the attributes width or  height,  then  the  missing
                     attribute  is  calculated  from  the  two which are specified. No defaults are required for
                     these cases either.

                     If only one of the attributes width or height is specified then the system uses a  fallback
                     for  the  aspect,  the  value taken from the language variable diamondaspect, which itselfs
                     defaults to 2.

                     If none of of the attributes width or height is specified then the system uses  a  fallback
                     for  the width, the value taken from the language variable boxwidth, which itselfs defaults
                     to the pixel equivalent of 2 cm. For the aspect it uses either the user-specified value  or
                     the default taken as described in the previous paragraph.

              at location
                     Specifies  the  location  of the element's corner named by the attribute with.  Defaults to
                     the current location as maintained by the layouting system.

              color spec
                     IMAGE: figure-21-style-colors Specifies the color used to draw the lines  of  the  element.
                     If  not  specified  the  system  falls  back  to the value taken from the language variable
                     linecolor, which itself defaults to black.

              fillcolor spec
                     IMAGE: figure-21-style-colors Specifies the color used to draw the inside of  the  element.
                     If  not  specified  the  system  falls  back  to the value taken from the language variable
                     fillcolor, which itself defaults to the empty string, signaling "no filling".

              height length
                     Specifies the height of the diamond element.  The manner in which a default  is  calculated
                     when  not  specified also depends on the specifications of the attributes aspect and width,
                     if any.

                     If both width, and height are specified then any specification of aspect is ignored, as  it
                     is implicitly defined in the width and height as well, and this takes precedence. A missing
                     specification is ignored in that case well, i.e. no defaults are required.

                     If the aspect is specified, and one of the attributes width or  height,  then  the  missing
                     attribute  is  calculated  from  the  two which are specified. No defaults are required for
                     these cases either.

                     If only one of the attributes width or height is specified then the system uses a  fallback
                     for  the  aspect,  the  value taken from the language variable diamondaspect, which itselfs
                     defaults to 2.

                     If none of of the attributes width or height is specified then the system uses  a  fallback
                     for  the width, the value taken from the language variable boxwidth, which itselfs defaults
                     to the pixel equivalent of 2 cm. For the aspect it uses either the user-specified value  or
                     the default taken as described in the previous paragraph.

              justify left|center|right
                     Specifies  how  multi-line  text  associated with the element is positioned within its box.
                     The value is ignored if no text was specified for the element.  If not specified the system
                     falls  back to the value taken from the language variable justify, which itself defaults to
                     left.  The legal values are left, right, and center.

              stroke width
                     IMAGE: figure-20-style-stroke Specifies the width of the lines drawn for the  the  element,
                     in  pixels.   If  not  specified the system falls back to the value taken from the language
                     variable linewidth, which itself defaults to 1.

              style spec
                     IMAGE: figure-18-style-dash Specifies the style used to draw the lines of the element.   If
                     not  specified  the  system  falls  back  to  the  value  taken  from the language variable
                     linestyle, which itself defaults to solid lines.  The legal values are all  those  accepted
                     by  Tk_GetDash [http://www.tcl.tk/man/tcl8.5/TkLib/GetDash.htm], and additionally all which
                     are listed below:

                     solid, empty string
                            Draw solid line.

                     dash, dashed, -
                            Draw a dashed line.

                     dot, dotted, .
                            Draw a dotted line.

                     dash-dot, -.
                            Draw a dash-dotted line

                     dash-dot-dot, -..
                            Draw a dash-dot-dotted line.

                     Note that the values "solid", "dot(ted)", "dash(ed)", "dash-dot",  and  "dash-dot-dot"  are
                     all accepted as shorthands for the style command using them as argument.

              text string
                     Specifies  the  text  to  associate with the element.  Defaults to nothing.  When specified
                     multiple times the actually shown text is the  concatenation  of  the  individual  strings,
                     vertically stacked, with the first string specified being the topmost element.

              textcolor spec
                     Specifies the color used to draw the text of an element with.  Ignored if there is no text.
                     If not specified the system falls back to  the  value  taken  from  the  language  variable
                     textcolor, which itself defaults to black.

              textfont spec
                     Specifies  the font used to draw the text of an element with.  Ignored if there is no text.
                     If not specified the system falls back to  the  value  taken  from  the  language  variable
                     textfont, which itself defaults to Helvetica 12pt.

              width length
                     Specifies  the  width  of the diamond element.  The manner in which a default is calculated
                     when not specified also depends on the specifications of the attributes aspect and  height,
                     if any.

                     If  both width, and height are specified then any specification of aspect is ignored, as it
                     is implicitly defined in the width and height as well, and this takes precedence. A missing
                     specification is ignored in that case well, i.e. no defaults are required.

                     If  the  aspect  is  specified, and one of the attributes width or height, then the missing
                     attribute is calculated from the two which are specified.  No  defaults  are  required  for
                     these cases either.

                     If  only one of the attributes width or height is specified then the system uses a fallback
                     for the aspect, the value taken from the language  variable  diamondaspect,  which  itselfs
                     defaults to 2.

                     If  none  of of the attributes width or height is specified then the system uses a fallback
                     for the width, the value taken from the language variable boxwidth, which itselfs  defaults
                     to  the pixel equivalent of 2 cm. For the aspect it uses either the user-specified value or
                     the default taken as described in the previous paragraph.

              with corner
                     Specifies the corner of the element to place at the location given  by  the  attribute  at.
                     Defaults  to  the current corner as maintained by the layouting system, except if the value
                     for at was specified by the user. In that case it defaults to center.

       drum attr...
              IMAGE: figure-02-drum A closed element with the corresponding corners, i.e. the  eight  directions
              of the compass rose, and "center".  It handles the attributes

              anchor name

              ljust

              rjust

              above

              below  IMAGE: figure-22-text-anchoring-3 Specifies the anchor of the text which is to be placed at
                     the element's center, by name. I.e. this attribute defines the text's position relative  to
                     the  element's  center.  The value is ignored if no text was specified for the element.  If
                     not specified the system falls back to the value taken from the language  variable  anchor,
                     which  itself  defaults to center.  The legal values are all those accepted by Tk_GetAnchor
                     [http://www.tcl.tk/man/tcl8.5/TkLib/GetAnchor.htm].  The commands without arguments are all
                     shorthands  with  the anchor implied. Note that they do not combine, only the last is used.
                     For comined directions the main attribute command, anchor has to be used.

                     ljust  "anchor west"

                     rjust  "anchor east"

                     above  "anchor south"

                     below  "anchor north"

              aspect number
                     Specifies the aspect ratio, i.e ratio of width to height, of the ellipses which are used to
                     draw the top and bottom of the drum element.  If not specified the system falls back to the
                     value taken from the language variable drumaspect, which itself defaults to 0.35.

              at location
                     Specifies the location of the element's corner named by the attribute  with.   Defaults  to
                     the current location as maintained by the layouting system.

              color spec
                     IMAGE:  figure-21-style-colors  Specifies  the color used to draw the lines of the element.
                     If not specified the system falls back to  the  value  taken  from  the  language  variable
                     linecolor, which itself defaults to black.

              fillcolor spec
                     IMAGE:  figure-21-style-colors  Specifies the color used to draw the inside of the element.
                     If not specified the system falls back to  the  value  taken  from  the  language  variable
                     fillcolor, which itself defaults to the empty string, signaling "no filling".

              height length

              ht length
                     Specifies  the  height of the element.  If not specified the system falls back to the value
                     taken from the language variable boxheight, which itself defaults to the  pixel  equivalent
                     of 2 cm.

              justify left|center|right
                     Specifies  how  multi-line  text  associated with the element is positioned within its box.
                     The value is ignored if no text was specified for the element.  If not specified the system
                     falls  back to the value taken from the language variable justify, which itself defaults to
                     left.  The legal values are left, right, and center.

              stroke width
                     IMAGE: figure-20-style-stroke Specifies the width of the lines drawn for the  the  element,
                     in  pixels.   If  not  specified the system falls back to the value taken from the language
                     variable linewidth, which itself defaults to 1.

              style spec
                     IMAGE: figure-18-style-dash Specifies the style used to draw the lines of the element.   If
                     not  specified  the  system  falls  back  to  the  value  taken  from the language variable
                     linestyle, which itself defaults to solid lines.  The legal values are all  those  accepted
                     by  Tk_GetDash [http://www.tcl.tk/man/tcl8.5/TkLib/GetDash.htm], and additionally all which
                     are listed below:

                     solid, empty string
                            Draw solid line.

                     dash, dashed, -
                            Draw a dashed line.

                     dot, dotted, .
                            Draw a dotted line.

                     dash-dot, -.
                            Draw a dash-dotted line

                     dash-dot-dot, -..
                            Draw a dash-dot-dotted line.

                     Note that the values "solid", "dot(ted)", "dash(ed)", "dash-dot",  and  "dash-dot-dot"  are
                     all accepted as shorthands for the style command using them as argument.

              text string
                     Specifies  the  text  to  associate with the element.  Defaults to nothing.  When specified
                     multiple times the actually shown text is the  concatenation  of  the  individual  strings,
                     vertically stacked, with the first string specified being the topmost element.

              textcolor spec
                     Specifies the color used to draw the text of an element with.  Ignored if there is no text.
                     If not specified the system falls back to  the  value  taken  from  the  language  variable
                     textcolor, which itself defaults to black.

              textfont spec
                     Specifies  the font used to draw the text of an element with.  Ignored if there is no text.
                     If not specified the system falls back to  the  value  taken  from  the  language  variable
                     textfont, which itself defaults to Helvetica 12pt.

              width length

              wid length
                     Specifies  the  width  of the element.  If not specified the system falls back to the value
                     taken from the language variable boxwidth, which itself defaults to the pixel equivalent of
                     2 cm.

              with corner
                     Specifies  the  corner  of  the element to place at the location given by the attribute at.
                     Defaults to the current corner as maintained by the layouting system, except if  the  value
                     for at was specified by the user. In that case it defaults to center.

       ellipse attr...
              IMAGE:  figure-02-ellipse  A  closed  element  with  the  corresponding  corners,  i.e.  the eight
              directions of the compass rose, and "center".  It handles the attributes

              anchor name

              ljust

              rjust

              above

              below  IMAGE: figure-22-text-anchoring-3 Specifies the anchor of the text which is to be placed at
                     the  element's center, by name. I.e. this attribute defines the text's position relative to
                     the element's center.  The value is ignored if no text was specified for the  element.   If
                     not  specified  the system falls back to the value taken from the language variable anchor,
                     which itself defaults to center.  The legal values are all those accepted  by  Tk_GetAnchor
                     [http://www.tcl.tk/man/tcl8.5/TkLib/GetAnchor.htm].  The commands without arguments are all
                     shorthands with the anchor implied. Note that they do not combine, only the last  is  used.
                     For comined directions the main attribute command, anchor has to be used.

                     ljust  "anchor west"

                     rjust  "anchor east"

                     above  "anchor south"

                     below  "anchor north"

              at location
                     Specifies  the  location  of the element's corner named by the attribute with.  Defaults to
                     the current location as maintained by the layouting system.

              color spec
                     IMAGE: figure-21-style-colors Specifies the color used to draw the lines  of  the  element.
                     If  not  specified  the  system  falls  back  to the value taken from the language variable
                     linecolor, which itself defaults to black.

              fillcolor spec
                     IMAGE: figure-21-style-colors Specifies the color used to draw the inside of  the  element.
                     If  not  specified  the  system  falls  back  to the value taken from the language variable
                     fillcolor, which itself defaults to the empty string, signaling "no filling".

              height length

              ht length
                     Specifies the height of the element.  If not specified the system falls back to  the  value
                     taken  from  the language variable boxheight, which itself defaults to the pixel equivalent
                     of 2 cm.

              justify left|center|right
                     Specifies how multi-line text associated with the element is  positioned  within  its  box.
                     The value is ignored if no text was specified for the element.  If not specified the system
                     falls back to the value taken from the language variable justify, which itself defaults  to
                     left.  The legal values are left, right, and center.

              stroke width
                     IMAGE:  figure-20-style-stroke  Specifies the width of the lines drawn for the the element,
                     in pixels.  If not specified the system falls back to the value  taken  from  the  language
                     variable linewidth, which itself defaults to 1.

              style spec
                     IMAGE:  figure-18-style-dash Specifies the style used to draw the lines of the element.  If
                     not specified the system  falls  back  to  the  value  taken  from  the  language  variable
                     linestyle,  which  itself defaults to solid lines.  The legal values are all those accepted
                     by Tk_GetDash [http://www.tcl.tk/man/tcl8.5/TkLib/GetDash.htm], and additionally all  which
                     are listed below:

                     solid, empty string
                            Draw solid line.

                     dash, dashed, -
                            Draw a dashed line.

                     dot, dotted, .
                            Draw a dotted line.

                     dash-dot, -.
                            Draw a dash-dotted line

                     dash-dot-dot, -..
                            Draw a dash-dot-dotted line.

                     Note  that  the  values "solid", "dot(ted)", "dash(ed)", "dash-dot", and "dash-dot-dot" are
                     all accepted as shorthands for the style command using them as argument.

              text string
                     Specifies the text to associate with the element.  Defaults  to  nothing.   When  specified
                     multiple  times  the  actually  shown  text is the concatenation of the individual strings,
                     vertically stacked, with the first string specified being the topmost element.

              textcolor spec
                     Specifies the color used to draw the text of an element with.  Ignored if there is no text.
                     If  not  specified  the  system  falls  back  to the value taken from the language variable
                     textcolor, which itself defaults to black.

              textfont spec
                     Specifies the font used to draw the text of an element with.  Ignored if there is no  text.
                     If  not  specified  the  system  falls  back  to the value taken from the language variable
                     textfont, which itself defaults to Helvetica 12pt.

              width length

              wid length
                     Specifies the width of the element.  If not specified the system falls back  to  the  value
                     taken from the language variable boxwidth, which itself defaults to the pixel equivalent of
                     2 cm.

              with corner
                     Specifies the corner of the element to place at the location given  by  the  attribute  at.
                     Defaults  to  the current corner as maintained by the layouting system, except if the value
                     for at was specified by the user. In that case it defaults to center.

       line attr...

       -- attr...
              IMAGE: figure-02-line An open element with the corresponding corners,  i.e.  "start",  "end",  and
              "center".  It handles the attributes

              anchor name

              ljust

              rjust

              above

              below  IMAGE: figure-22-text-anchoring-3 Specifies the anchor of the text which is to be placed at
                     the element's center, by name. I.e. this attribute defines the text's position relative  to
                     the  element's  center.  The value is ignored if no text was specified for the element.  If
                     not specified the system falls back to the value taken from the language  variable  anchor,
                     which  itself  defaults to center.  The legal values are all those accepted by Tk_GetAnchor
                     [http://www.tcl.tk/man/tcl8.5/TkLib/GetAnchor.htm].  The commands without arguments are all
                     shorthands  with  the anchor implied. Note that they do not combine, only the last is used.
                     For comined directions the main attribute command, anchor has to be used.

                     ljust  "anchor west"

                     rjust  "anchor east"

                     above  "anchor south"

                     below  "anchor north"

              arrowhead spec
                     IMAGE: figure-19-style-arrowheads Specifies where to draw arrowheads on the  line  element,
                     at  the beginning or end, at both ends, or none.  If not specified the system falls back to
                     the value taken from the language variable arrowhead, which itself defaults to  none.   The
                     legal values are

                     none, -
                            Draw no arrowheads, at neither end of the line.

                     start, first, <-
                            Draw an arrowhead at the beginning of the line, but not at its end.

                     end, last, ->
                            Draw an arrowhead at the end of the line, but not at its beginning.

                     both, <->
                            Draw arrowheads at both ends of the line.

                     Note  that  the  values  "start",  "end",  "-",  "->",  "<-", and "<->" are all accepted as
                     shorthands for the arrowhead command using them as argument.

              at location
                     Line elements are normally positioned absolutely, using the locations specified through the
                     attributes  from,  then,  and  to.   If  at  is  specified however then these positions are
                     translated a last time, moving the line's  corner  named  by  the  attribute  with  to  the
                     location given by this attribute.

              chop ?length?
                     Specifies the length of the line element to remove from the beginning and/or end.  Defaults
                     to nothing.  If specified once the chopping applies to both beginning and end of the  line.
                     If  specified  twice or more the last two specifications are used, and applied to beginning
                     and end of the line, in this  order.   Whenever  the  attribute  is  specified  without  an
                     explicit  length,  the  system  falls  back  to  the value taken from the language variable
                     circleradius, which itself defaults to the pixel equivalent of 1 cm

              color spec
                     IMAGE: figure-21-style-colors Specifies the color used to draw the lines  of  the  element.
                     If  not  specified  the  system  falls  back  to the value taken from the language variable
                     linecolor, which itself defaults to black.

              fillcolor spec
                     IMAGE: figure-21-style-colors Specifies the color used to draw the inside of  the  element.
                     If  not  specified  the  system  falls  back  to the value taken from the language variable
                     fillcolor, which itself defaults to the empty string, signaling "no filling".

              from location
                     Specifies the location where the line element begins.  Defaults to the current location  as
                     maintained by the layouting system.

              justify left|center|right
                     Specifies  how  multi-line  text  associated with the element is positioned within its box.
                     The value is ignored if no text was specified for the element.  If not specified the system
                     falls  back to the value taken from the language variable justify, which itself defaults to
                     left.  The legal values are left, right, and center.

              noturn Specifies that the direction of line element at its end is not  propagated  to  the  layout
                     management.   If  not  specified  the  direction  of the line becomes the new direction the
                     layout.

              smooth Specifies the use of bezier splines for the line element.  If not specified lines are drawn
                     exactly through the specified waypoints, without any smooth curves.

              stroke width
                     IMAGE:  figure-20-style-stroke  Specifies the width of the lines drawn for the the element,
                     in pixels.  If not specified the system falls back to the value  taken  from  the  language
                     variable linewidth, which itself defaults to 1.

              style spec
                     IMAGE:  figure-18-style-dash Specifies the style used to draw the lines of the element.  If
                     not specified the system  falls  back  to  the  value  taken  from  the  language  variable
                     linestyle,  which  itself defaults to solid lines.  The legal values are all those accepted
                     by Tk_GetDash [http://www.tcl.tk/man/tcl8.5/TkLib/GetDash.htm], and additionally all  which
                     are listed below:

                     solid, empty string
                            Draw solid line.

                     dash, dashed, -
                            Draw a dashed line.

                     dot, dotted, .
                            Draw a dotted line.

                     dash-dot, -.
                            Draw a dash-dotted line

                     dash-dot-dot, -..
                            Draw a dash-dot-dotted line.

                     Note  that  the  values "solid", "dot(ted)", "dash(ed)", "dash-dot", and "dash-dot-dot" are
                     all accepted as shorthands for the style command using them as argument.

              text string
                     Specifies the text to associate with the element.  Defaults  to  nothing.   When  specified
                     multiple  times  the  actually  shown  text is the concatenation of the individual strings,
                     vertically stacked, with the first string specified being the topmost element.

              textcolor spec
                     Specifies the color used to draw the text of an element with.  Ignored if there is no text.
                     If  not  specified  the  system  falls  back  to the value taken from the language variable
                     textcolor, which itself defaults to black.

              textfont spec
                     Specifies the font used to draw the text of an element with.  Ignored if there is no  text.
                     If  not  specified  the  system  falls  back  to the value taken from the language variable
                     textfont, which itself defaults to Helvetica 12pt.

              then location

              then (<direction> ?length?)...

              (<direction> ?length?)...
                     This attribute specifies an intermediate location the line element has to go  through.   It
                     can be specified multiple times, with each use adding one additional location to the series
                     which the line will go through. These location will be traversed in  the  order  they  were
                     specified.

                     The  location  can be given explicitly, or as a series of directions with distances. In the
                     latter case the names of all known directions are accepted for the direction part.   If  no
                     distance  is  specified  for  a direction the system falls back to the value taken from the
                     language variable movelength, which itself defaults to the pixel equivalent of 2  cm.   The
                     whole  set  of  direction,distance  pairs  is treated as a series of translations which are
                     added up to provide the final translation specifying the intermediate  point  (relative  to
                     the preceding point).

                     The last named direction is propagated to the layout system as the direction to follow. The
                     use of noturn is not able to overide this behaviour.

                     At last, the names of the registered directions also serve as attribute commands,  with  an
                     implicit attribute then in front of them.

                     If  no  intermediate  or last location is specified for the line the system falls back to a
                     point movelength pixels away from the  starting  location,  in  the  current  direction  as
                     maintained by the layouting system

              to location
                     Specifies  the  location  where  the line element ends.  This attribute has no default. The
                     default is handled by the attribute then, which makes it appear as if to has a default when
                     not specified.

              with corner
                     Line elements are normally positioned absolutely, using the locations specified through the
                     attributes from, then, and to.  If  at  is  specified  however  then  these  positions  are
                     translated  a  last  time,  moving  the  line's  corner  named by the attribute with to the
                     location given by this attribute.  This means that with is effective if  and  only  if  the
                     attribute at was specified as well for the line.

       move attr
              An open element with the corresponding corners, i.e. "start", "end", and "center".  A move element
              is in essence an invisible line.  While the main effect we are interested  in  is  the  change  it
              makes  to  the layout system, it is an actual element, i.e. it has the same corners as an ordinary
              line, and shows up in the history as well,  allowing  future  references  to  all  the  places  it
              touched.  It handles the same attibutes as line elements.

       spline attr...
              IMAGE:  figure-02-spline  An  alias  for  the  line element (see above), with the attribute smooth
              preset.

       text attr...
              IMAGE: figure-02-text A closed element with the corresponding corners, i.e. the  eight  directions
              of the compass rose, and "center".  It handles the attributes

              anchor name

              ljust

              rjust

              above

              below  IMAGE: figure-22-text-anchoring-3 Specifies the anchor of the text which is to be placed at
                     the element's center, by name. I.e. this attribute defines the text's position relative  to
                     the  element's  center.  The value is ignored if no text was specified for the element.  If
                     not specified the system falls back to the value taken from the language  variable  anchor,
                     which  itself  defaults to center.  The legal values are all those accepted by Tk_GetAnchor
                     [http://www.tcl.tk/man/tcl8.5/TkLib/GetAnchor.htm].  The commands without arguments are all
                     shorthands  with  the anchor implied. Note that they do not combine, only the last is used.
                     For comined directions the main attribute command, anchor has to be used.

                     ljust  "anchor west"

                     rjust  "anchor east"

                     above  "anchor south"

                     below  "anchor north"

              at location
                     Specifies the location of the element's corner named by the attribute  with.   Defaults  to
                     the current location as maintained by the layouting system.

              height length
                     Specifies the height of the text element.  Defaults to the natural height of its text.

              justify left|center|right
                     Specifies  how  multi-line  text  associated with the element is positioned within its box.
                     The value is ignored if no text was specified for the element.  If not specified the system
                     falls  back to the value taken from the language variable justify, which itself defaults to
                     left.  The legal values are left, right, and center.

              text string
                     Specifies the text to associate with the element.  Defaults  to  nothing.   When  specified
                     multiple  times  the  actually  shown  text is the concatenation of the individual strings,
                     vertically stacked, with the first string specified being the topmost element.

              textcolor spec
                     Specifies the color used to draw the text of an element with.  Ignored if there is no text.
                     If  not  specified  the  system  falls  back  to the value taken from the language variable
                     textcolor, which itself defaults to black.

              textfont spec
                     Specifies the font used to draw the text of an element with.  Ignored if there is no  text.
                     If  not  specified  the  system  falls  back  to the value taken from the language variable
                     textfont, which itself defaults to Helvetica 12pt.

              width length
                     Specifies the width of the text element.  Defaults to the natural width of its text.

              with corner
                     Specifies the corner of the element to place at the location given  by  the  attribute  at.
                     Defaults  to  the current corner as maintained by the layouting system, except if the value
                     for at was specified by the user. In that case it defaults to center.

   ATTRIBUTES
       The set of all attributes supported by all the element commands is shown below.  While we speak  of  them
       as  commands,  and provide a syntax, they are not truly available as actual commands, but only as part of
       the arguments for an element command.

       Note that some of the attribute names are overloaded, i.e. have multiple, different, definitions.  During
       processing  of  attributes  for  an element the actual definition used is chosen based on the type of the
       element the processing is for.

       Further, as a catch-all clause, any attribute which could not be processed according to  the  definitions
       below will be treated as the argument of an implicit text attribute.

       anchor name

       ljust

       rjust

       above

       below  IMAGE:  figure-22-text-anchoring-3  Specifies  the anchor of the text which is to be placed at the
              element's center, by name. I.e. this  attribute  defines  the  text's  position  relative  to  the
              element's  center.   The  value  is  ignored  if  no  text  was specified for the element.  If not
              specified the system falls back to the value taken from the language variable anchor, which itself
              defaults   to   center.    The   legal   values   are   all   those   accepted   by   Tk_GetAnchor
              [http://www.tcl.tk/man/tcl8.5/TkLib/GetAnchor.htm].   The  commands  without  arguments  are   all
              shorthands  with  the  anchor  implied.  Note that they do not combine, only the last is used. For
              comined directions the main attribute command, anchor has to be used.

              ljust  "anchor west"

              rjust  "anchor east"

              above  "anchor south"

              below  "anchor north"

       arrowhead spec
              IMAGE: figure-19-style-arrowheads Specifies where to draw arrowheads on the line element,  at  the
              beginning  or  end,  at  both  ends, or none.  If not specified the system falls back to the value
              taken from the language variable arrowhead, which itself defaults to none.  The legal values are

              none, -
                     Draw no arrowheads, at neither end of the line.

              start, first, <-
                     Draw an arrowhead at the beginning of the line, but not at its end.

              end, last, ->
                     Draw an arrowhead at the end of the line, but not at its beginning.

              both, <->
                     Draw arrowheads at both ends of the line.

              Note that the values "start", "end", "-", "->", "<-", and "<->" are all accepted as shorthands for
              the arrowhead command using them as argument.

       aspect number
              Specifies  the  aspect ratio, i.e ratio of width to height, of the diamond element.  The manner in
              which a default is calculated when not  specified  also  depends  on  the  specifications  of  the
              attributes width and height, if any.

              If  both  width,  and  height  are specified then any specification of aspect is ignored, as it is
              implicitly defined in the width  and  height  as  well,  and  this  takes  precedence.  A  missing
              specification is ignored in that case well, i.e. no defaults are required.

              If  the aspect is specified, and one of the attributes width or height, then the missing attribute
              is calculated from the two which are specified. No defaults are required for these cases either.

              If only one of the attributes width or height is specified then the system uses a fallback for the
              aspect, the value taken from the language variable diamondaspect, which itselfs defaults to 2.

              If  none of of the attributes width or height is specified then the system uses a fallback for the
              width, the value taken from the language variable boxwidth, which itselfs defaults  to  the  pixel
              equivalent of 2 cm. For the aspect it uses either the user-specified value or the default taken as
              described in the previous paragraph.

       aspect number
              Specifies the aspect ratio, i.e ratio of width to height, of the ellipses which are used  to  draw
              the top and bottom of the drum element.  If not specified the system falls back to the value taken
              from the language variable drumaspect, which itself defaults to 0.35.

       at location
              Specifies the location of the element's corner named by  the  attribute  with.   Defaults  to  the
              current location as maintained by the layouting system.

       at location
              Line  elements  are  normally  positioned  absolutely,  using  the locations specified through the
              attributes from, then, and to.  If at is specified however then these positions are  translated  a
              last  time,  moving  the  line's  corner named by the attribute with to the location given by this
              attribute.

       chop ?length?
              Specifies the length of the line element to remove from the beginning  and/or  end.   Defaults  to
              nothing.   If  specified  once  the  chopping  applies  to both beginning and end of the line.  If
              specified twice or more the last two specifications are used, and applied to beginning and end  of
              the  line,  in  this  order.   Whenever the attribute is specified without an explicit length, the
              system falls back to the value  taken  from  the  language  variable  circleradius,  which  itself
              defaults to the pixel equivalent of 1 cm

       clockwise

       cw     Specifies  the direction of the arc element, here going clockwise.  The complementary attribute is
              counterclockwise.  If not specified the system falls back to the value  taken  from  the  language
              variable clockwise, which itself defaults to false, for counter-clockwise direction.

       color spec
              IMAGE:  figure-21-style-colors  Specifies the color used to draw the lines of the element.  If not
              specified the system falls back to the value taken from the  language  variable  linecolor,  which
              itself defaults to black.

       counterclockwise

       ccw    Specifies  the  direction of the arc element, here counter-clockwise.  The complementary attribute
              is clockwise.  If not specified the system falls  back  to  the  value  taken  from  the  language
              variable clockwise, which itself defaults to false, for counter-clockwise direction.

       diameter length

       diam length
              Specifies  the  diameter  of  the  circle  element,  as  an alternative way to specify its radius.
              Effective if and only if the radius was not specified.  I.e.  if  both  diameter  and  radius  are
              specified then the radius infomration has precendence.  This attribute has no default, because the
              defaults are taken from the radius.

       fillcolor spec
              IMAGE: figure-21-style-colors Specifies the color used to draw the inside of the element.  If  not
              specified  the  system  falls  back to the value taken from the language variable fillcolor, which
              itself defaults to the empty string, signaling "no filling".

       from location
              Specifies the location where the line  element  begins.   Defaults  to  the  current  location  as
              maintained by the layouting system.

       from location
              Specifies  the  location  where  the  arc  element  begins.   Defaults  to the current location as
              maintained by the layouting system.

       height length

       ht length
              Specifies the height of the element.  If not specified the system falls back to  the  value  taken
              from the language variable boxheight, which itself defaults to the pixel equivalent of 2 cm.

       height length
              Specifies the height of the diamond element.  The manner in which a default is calculated when not
              specified also depends on the specifications of the attributes aspect and width, if any.

              If both width, and height are specified then any specification of aspect  is  ignored,  as  it  is
              implicitly  defined  in  the  width  and  height  as  well,  and  this takes precedence. A missing
              specification is ignored in that case well, i.e. no defaults are required.

              If the aspect is specified, and one of the attributes width or height, then the missing  attribute
              is calculated from the two which are specified. No defaults are required for these cases either.

              If only one of the attributes width or height is specified then the system uses a fallback for the
              aspect, the value taken from the language variable diamondaspect, which itselfs defaults to 2.

              If none of of the attributes width or height is specified then the system uses a fallback for  the
              width,  the  value  taken from the language variable boxwidth, which itselfs defaults to the pixel
              equivalent of 2 cm. For the aspect it uses either the user-specified value or the default taken as
              described in the previous paragraph.

       height length
              Specifies the height of the text element.  Defaults to the natural height of its text.

       justify left|center|right
              Specifies how multi-line text associated with the element is positioned within its box.  The value
              is ignored if no text was specified for the element.  If not specified the system  falls  back  to
              the  value  taken  from  the  language variable justify, which itself defaults to left.  The legal
              values are left, right, and center.

       noturn Specifies that the direction of  line  element  at  its  end  is  not  propagated  to  the  layout
              management.  If not specified the direction of the line becomes the new direction the layout.

       radius length

       rad length
              Specifies  the  radius of the circle element.  If not specified the system falls back to the value
              taken from the language variable circleradius, which itself defaults to the pixel equivalent of  1
              cm.

       radius length
              Specifies  the  radius  of the arc element, or rather, the radius of the circle the shown arc is a
              part of.  If not specified the system falls back to the value taken  from  the  language  variable
              arcradius, which itself defaults to the pixel equivalent of 1 cm.

       slant angle
              Specifies  the angle by which the box element is slanted, in degrees.  If not specified the system
              falls back to the value taken from the language variable slant, which itself defaults to 90,  i.e.
              vertical,  no  slant.   0 degrees is slanting straight east, pointing to the right.  90 degrees is
              slanting to the north, pointing straight up.

       smooth Specifies the use of bezier splines for the line  element.   If  not  specified  lines  are  drawn
              exactly through the specified waypoints, without any smooth curves.

       stroke width
              IMAGE:  figure-20-style-stroke  Specifies  the  width  of  the lines drawn for the the element, in
              pixels.  If not specified the system falls back to the value  taken  from  the  language  variable
              linewidth, which itself defaults to 1.

       style spec
              IMAGE:  figure-18-style-dash  Specifies  the  style used to draw the lines of the element.  If not
              specified the system falls back to the value taken from the  language  variable  linestyle,  which
              itself  defaults  to  solid  lines.   The  legal  values  are  all  those  accepted  by Tk_GetDash
              [http://www.tcl.tk/man/tcl8.5/TkLib/GetDash.htm], and additionally all which are listed below:

              solid, empty string
                     Draw solid line.

              dash, dashed, -
                     Draw a dashed line.

              dot, dotted, .
                     Draw a dotted line.

              dash-dot, -.
                     Draw a dash-dotted line

              dash-dot-dot, -..
                     Draw a dash-dot-dotted line.

              Note that the values "solid", "dot(ted)",  "dash(ed)",  "dash-dot",  and  "dash-dot-dot"  are  all
              accepted as shorthands for the style command using them as argument.

       text string
              Specifies  the  text to associate with the element.  Defaults to nothing.  When specified multiple
              times the actually shown text is the concatenation of the individual strings, vertically  stacked,
              with the first string specified being the topmost element.

       textcolor spec
              Specifies  the  color  used to draw the text of an element with.  Ignored if there is no text.  If
              not specified the system falls back to the value taken from the language variable textcolor, which
              itself defaults to black.

       textfont spec
              Specifies the font used to draw the text of an element with.  Ignored if there is no text.  If not
              specified the system falls back to the value taken from  the  language  variable  textfont,  which
              itself defaults to Helvetica 12pt.

       then location

       then (<direction> ?length?)...

       (<direction> ?length?)...
              This  attribute  specifies an intermediate location the line element has to go through.  It can be
              specified multiple times, with each use adding one additional location to  the  series  which  the
              line will go through. These location will be traversed in the order they were specified.

              The  location  can be given explicitly, or as a series of directions with distances. In the latter
              case the names of all known directions are accepted for the direction part.   If  no  distance  is
              specified  for  a  direction  the  system falls back to the value taken from the language variable
              movelength,  which  itself  defaults  to  the  pixel  equivalent  of  2  cm.   The  whole  set  of
              direction,distance  pairs is treated as a series of translations which are added up to provide the
              final translation specifying the intermediate point (relative to the preceding point).

              The last named direction is propagated to the layout system as the direction to follow. The use of
              noturn is not able to overide this behaviour.

              At last, the names of the registered directions also serve as attribute commands, with an implicit
              attribute then in front of them.

              If no intermediate or last location is specified for the line the system falls  back  to  a  point
              movelength  pixels  away from the starting location, in the current direction as maintained by the
              layouting system

       to location
              Specifies the location where the line element ends.  This attribute has no default. The default is
              handled by the attribute then, which makes it appear as if to has a default when not specified.

       to location
              Specifies  the  location where the arc element ends.  Defaults to a location such that a 90-degree
              arc is drawn in the chosen direction, starting at from.

       width length

       wid length
              Specifies the width of the element.  If not specified the system falls back  to  the  value  taken
              from the language variable boxwidth, which itself defaults to the pixel equivalent of 2 cm.

       width length
              Specifies  the width of the diamond element.  The manner in which a default is calculated when not
              specified also depends on the specifications of the attributes aspect and height, if any.

              If both width, and height are specified then any specification of aspect  is  ignored,  as  it  is
              implicitly  defined  in  the  width  and  height  as  well,  and  this takes precedence. A missing
              specification is ignored in that case well, i.e. no defaults are required.

              If the aspect is specified, and one of the attributes width or height, then the missing  attribute
              is calculated from the two which are specified. No defaults are required for these cases either.

              If only one of the attributes width or height is specified then the system uses a fallback for the
              aspect, the value taken from the language variable diamondaspect, which itselfs defaults to 2.

              If none of of the attributes width or height is specified then the system uses a fallback for  the
              width,  the  value  taken from the language variable boxwidth, which itselfs defaults to the pixel
              equivalent of 2 cm. For the aspect it uses either the user-specified value or the default taken as
              described in the previous paragraph.

       width length
              Specifies the width of the text element.  Defaults to the natural width of its text.

       with corner
              Specifies  the corner of the element to place at the location given by the attribute at.  Defaults
              to the current corner as maintained by the layouting system,  except  if  the  value  for  at  was
              specified by the user. In that case it defaults to center.

       with corner
              Line  elements  are  normally  positioned  absolutely,  using  the locations specified through the
              attributes from, then, and to.  If at is specified however then these positions are  translated  a
              last  time,  moving  the  line's  corner named by the attribute with to the location given by this
              attribute.  This means that with is effective if and only if the attribute  at  was  specified  as
              well for the line.

   CORNERS
       Corners are named values for in elements, usually locations.

       •      The closed elements define corners for the compass rose, including the "center", and their "width"
              and "height".

              IMAGE: figure-27-corners-closed

       •      block elements additionally export all  variables  which  were  set  during  their  definition  as
              corners.

       •      The  open elements on the other hand define "start", "end", and "center". The first two map to the
              locations originally provided through the attributes from and to of the element.

              IMAGE: figure-28-corners-open

       •      The center of line and move elements is the location halfway between "start"  and  "end"  corners,
              this is regardless of any intermediate locations the element may have.

       •      The  line  and  move  elements  additionally  name all their locations as corners using numbers as
              names, starting from 1 (equivalent to "start"), in order of traversal.

              IMAGE: figure-15-spline-1

       •      The center of arc elements is the center of the circle the arc is part off.

       •      The arc elements additionally define the compass rose of closed elements as well.

   NAMED DIRECTIONS
       The named directions are commands which tell the layout system in which direction to go when placing  the
       next  element  without  an  explicit  position  specification.  They can also be used as arguments to the
       attribute then, and the command by for relative points, see there for the relevant syntax.

       The diagram core defines the directions of the compass rose, plus a number of aliases. See below for  the
       full list.

       IMAGE: figure-27-corners-closed

       This  overlaps  with the pre-defined corners for closed elements. This is used by the layout system, when
       are going in direction X the name of the opposite direction is the name of the corner at  which  the  new
       element  will  be  attached to the current position, and if this corner does not exist the nearest actual
       corner by angle is used.

       west

       w

       left

       l

       south

       s

       down

       bottom

       bot

       b

       east

       e

       right

       r

       north

       n

       up

       top

       t

       northwest

       nw

       up-left

       upleft

       leftup

       northeast

       ne

       up-right

       upright

       rightup

       southwest

       sw

       down-left

       downleft

       leftdown

       southeast

       se

       down-right

       downright

       rightdown

   MISCELLANEOUS COMMANDS
       number cm

       number mm

       number inch

       number pt
              These commands allow the specification of distances and coordinates in metric and imperial  units,
              returning  the  equivalent distance or coordinate in pixels, which is the unit used internally for
              all calculations.

              The conversion factors are based on the result of tk scaling and are computed once,  at  the  time
              the package is sourced, future changes of the tk scaling factor have no effect.

       number number

              IMAGE: figure-50-point-cons-absolute

              This command takes the x and y coordinates of a location and returns the absolute point for it.

       by distance direction

              IMAGE: figure-51-point-cons-relative

              This  command  takes a distance and direction (angle in degress, or registered direction name) and
              returns the relative point for it, i.e. the delta or translation it represents.

              Note also the (dis)similarities to the directional specifications for the attribute then  of  line
              and move elements.  Where we say here

              by 50 east

              for the attribute we say

              ... then east 50 ...

              or just

              ... then east ...

       point1 + point2

              IMAGE: figure-48-point-vectoradd

              This  command  interprets  two  points  as vectors and adds them together.  If at least one of the
              points is absolute the result is absolute as well.  The result is a relative point if and only  if
              both points are relative.

       point1 - point2

              IMAGE: figure-49-point-vectorsub

              This  command  interprets  two  points  as vectors and subtracts the second from the first.  If at
              least one of the points is absolute the result is absolute as well.   The  result  is  a  relative
              point if and only if both points are relative.

       point by distance direction
              This command is a more convenient, or at least shorter, form of

                  [$point + [by $distance $direction]]

       point1 | point2

              IMAGE: figure-31-point-projection

              This  command  calculates the projection of two points, i.e. the result is the point having the x-
              coordinate of point1 and the y-coordinate of point2.

       n between poin1 point2

              IMAGE: figure-29-point-interpolation-1

              This command computes the point which is n*100 percent of the way between point1 and  point2,  and
              returns it as its result.  This means that for

              n == 0 The result is point1.

              n == 1 The result is point2.

              n == 0.5
                     The result is half way between the two points.

              etc.  Note that it is allowed to use values < 0 and > 1 for n

       intersect elem1 elem2

              IMAGE: figure-32-point-intersection

              This  command  takes  two  open  elements,  computes  the  lines  going through their "start"- and
              "end"-corners, and returns the point where these two lines intersect.  The command throws an error
              if the lines do not intersect, or are coincident.

       element names ?pattern?
              This  command  returns a list containing the names of all corners for the element. If a pattern is
              specified then only the names matching it (via string match are returned. Otherwise all names  are
              returned (equivalent to a default pattern of *).

       element corner
              This  command  returns  the  value for the corner of the element.  This can be anything, including
              points and elements.

       element corner1 corner2...
              This is a convenience shorthand for

              [[[$elem $corner1] $corner2] ...]

              assuming that the value for

               [$elem $corner1]
       again an element.

       element ?corner1... ?names ?pattern??]?
              This is a convenience shorthand for

              [[[$elem $corner1] ...] names ?pattern?]

              assuming that the value for

               [$elem $corner1]
       again an element.

       nth ?corner?
              This command asks the diagram history for the nth element created, searching from the beginning of
              the  history  (counting from 1) and returns it as its result.  If the corner is specified then the
              value for this corner is returned instead.

       nth last ?corner?
              This command asks the diagram history for the nth element created, searching from the end  of  the
              history  and  returns it as its result.  If the corner is specified then the value for this corner
              is returned instead.

       nth shape ?corner?
              This command asks the diagram history for the nth element created, of the given  shape,  searching
              from  the  beginning of the history (counting from 1) and returns it as its result.  If the corner
              is specified then the value for this corner is returned instead.

       nth last shape ?corner?
              This command asks the diagram history for the nth element created, of the given  shape,  searching
              from  the  end  of  the history and returns it as its result.  If the corner is specified then the
              value for this corner is returned instead.

       last ?corner?

       last shape ?corner?
              Convenience commands mapping to "1st last" and "1st last shape".

       1st

       2nd

       3rd    Aliases for 1th, 2th, and 3th, for readability, usable whereever nth can ocur.

   VARIABLES
       The language context contains a number of predefined variables which hold the default values for  various
       attributes. These variables, their uses, and values are:

       anchor The  default  value  for  the  attribute anchor.  Initialized to center.  The legal values are all
              those accepted by Tk_GetAnchor [http://www.tcl.tk/man/tcl8.5/TkLib/GetAnchor.htm].

       arcradius
              The default value for the attribute radius of arc elements.  Initialized to the  pixel  equivalent
              of 1 cm.

       arrowhead
              The default value for the attribute arrowhead.  Initialized to none.  The legal values are

              none, -
                     Draw no arrowheads, at neither end of the line.

              start, first, <-
                     Draw an arrowhead at the beginning of the line, but not at its end.

              end, last, ->
                     Draw an arrowhead at the end of the line, but not at its beginning.

              both, <->
                     Draw arrowheads at both ends of the line.

       boxheight
              The  default  value for the attribute height of box, diamond and ellipse elements.  Initialized to
              the pixel equivalent of 2 cm.

       boxwidth
              The default value for the attribute width of box, diamond and ellipse  elements.   Initialized  to
              the pixel equivalent of 2 cm.

       clockwise
              The  default value for the attributes clockwise and counterclockwise of arc elements.  Initialized
              to False, for counter-clockwise direction.

       circleradius
              The default value for the attribute radius of circle  elements,  and  also  the  default  for  the
              attribute chop, when specified without an explicit length.  Initialized to the pixel equivalent of
              1 cm.

       drumaspect
              The default value for the attribute aspect of drum elements.  Initialized to 0.35.

       fillcolor
              The default value for the attribute fillcolor of all elements which can be filled.  Initialized to
              the empty string, signaling that the element is not filled.

       justify
              The  default  value  for  the attribute justify.  Initialized to left.  The legal values are left,
              right, and center.

       linecolor
              The default value for the attribute color of all elements having to draw  lines  (all  but  text).
              Initialized to black.

       linestyle
              The  default  value for the attribute style of all elements having to draw some line.  Initialized
              to    solid.     The    legal    values    are    all     those     accepted     by     Tk_GetDash
              [http://www.tcl.tk/man/tcl8.5/TkLib/GetDash.htm], and additionally all which are listed below:

              solid, empty string
                     Draw solid line.

              dash, dashed, -
                     Draw a dashed line.

              dot, dotted, .
                     Draw a dotted line.

              dash-dot, -.
                     Draw a dash-dotted line

              dash-dot-dot, -..
                     Draw a dash-dot-dotted line.

       linewidth
              The  default value for the attribute stroke of all elements having to draw some line.  Initialized
              to 1 (pixels).

       movelength
              The default value for the directional specification of intermediate  locations  by  the  attribute
              then of line and move elements.  Initialized to the pixel equivalent of 2 cm.

       slant  The  default value for the attribute slant of box elements.  Initialized to 90 degrees, i.e. slant
              straight up.

       textcolor
              The default value for  the  attribute  textcolor  of  all  elements  having  to  draw  some  text.
              Initialized to black.

       textfont
              The  default  value  for  the  attribute  textfont  of  all  elements  having  to  draw some text.
              Initialized to Helvetica 12pt.

DIAGRAM CLASSES The intended audience of this section are developers wishing to work

       on the internals of the diagram package.  Regular users of diagram can skip this section without  missing
       anything.

       The  main  information  seen  here is the figure below, showing the hierarchy of the classes implementing
       diagram.

       IMAGE: figure-00-dependencies

       At the bottom, all at the same level are the supporting packages like snit, etc. These can all  be  found
       in Tcllib.

       Above them is the set of diagram classes implementing the various aspects of the system, i.e.:

       diagram
              The main class, that which is seen by the user.

       diagram::core
              The core engine, itself distributed over four helper classes.

       diagram::basic
              The implementation of the standard shapes, like box, circle, etc., based on the extension features
              of the core.

       diagram::element
              Core support class, the database of created elements. It also keeps the history, i.e. the order in
              which elements were created.

       diagram::attribute
              Core support class, the generic handling of definition and processing of attributes.

       diagram::direction
              Core support class, the database of named directions.

       diagram::navigation
              Core support class, the state of layout engine, i.e. current position and directin, and operations
              on it.

       diagram::point
              General support class handling various vector operations.

REFERENCES

BUGS, IDEAS, FEEDBACK

       This document, and the package it describes, will undoubtedly contain bugs and  other  problems.   Please
       report  such in the category diagram of the Tklib Trackers [http://core.tcl.tk/tklib/reportlist].  Please
       also report any ideas for enhancements you may have for either package and/or documentation.

KEYWORDS

       2D geometry,  arc,  arrow,  box,  canvas,  circle,  diagram,  diamond,  drawing,  drum,  ellipse,  image,
       interpolation,  intersection, line, move, picture, plane geometry, plotting, point, raster image, spline,
       text, vector

CATEGORY

       Documentation tools