ha:lht_tree_doc { ha:comm {

	ha:group.ID {
		type=ha
		desc { Group of concrete objects }
		li:children {
			ha:uuid      = { valtype=minuid;   desc={instance UID }}
			ha:src_uuid  = { valtype=minuid;   desc={source UID }}
			ha:x         = { valtype=coord;    desc={xform: translate placement in x (horizontal) direction }}
			ha:y         = { valtype=coord;    desc={xform: translate placement in y (vertical) direction }}
			ha:rot       = { valtype=angle;    desc={xform: rotate placement }}
			ha:mirx      = { valtype=bool;     desc={xform: mirror placement left/right }}
			ha:miry      = { valtype=bool;     desc={xform: mirror placement child up/down }}
			ha:loclib_name = { valtype=string; desc={name in the local library (optional)}}
			ha:objects {
				type=li
				desc { List of child objects }
				li:children {
					sy:line.ID       = {/lht_tree_doc/comm/line.ID}
					sy:arc.ID        = {/lht_tree_doc/comm/arc.ID}
					sy:polygon.ID    = {/lht_tree_doc/comm/polygon.ID}
					sy:text.ID       = {/lht_tree_doc/comm/text.ID}
					sy:connection.ID = {/lht_tree_doc/comm/connection.ID}
					sy:pen.NAME      = {/lht_tree_doc/comm/pen.NAME}
				}
			}
			sy:attrib@dup   = {/lht_tree_doc/comm/attrib}
		}
	}

	ha:group_ref.ID {
		type=ha
		desc { Group reference to a concrete object within the same sheet or buffer }
		li:children {
			ha:ref       = { valtype=oidpath;  desc={path relative to sheet root, to the referee (should be a group) }}
			ha:child_xform {
				type=li
				desc { List of child object transformation to be performed after placement }
				li:children {
					ha:OIDPATH {
						desc={list of transformations to be performed on referee children objects after placement; OIDPATH is relative to the referee group }
						li:children {
							ha:movex    = { valtype=coord;    desc={xform: move child in x (horizontal) direction }}
							ha:movey    = { valtype=coord;    desc={xform: move child in y (vertical) direction }}
							ha:rot      = { valtype=angle;    desc={xform: rotate child }}
							ha:mirx     = { valtype=bool;     desc={xform: mirror child left/right }}
							ha:miry     = { valtype=bool;     desc={xform: mirror child up/down }}
							ha:remove   = { valtype=bool;     desc={xform: mirror child up/down }}
						}
					}
				}
			}
			sy:attrib@dup   = {/lht_tree_doc/comm/attrib}
		}
	}

	ha:line.ID {
		type=ha
		desc { Drawing object: straight line }
		li:children {
			ha:x1      = { valtype=coord;    desc={start point, x coord }}
			ha:y1      = { valtype=coord;    desc={start point, y coord }}
			ha:x2      = { valtype=coord;    desc={end point, x coord }}
			ha:y2      = { valtype=coord;    desc={end point, y coord }}
			ha:stroke  = { valtype=pen;      desc={pen to use }}
			ha:lock    = { valtype=bool;     desc={object is locked }}
			ha:floater = { valtype=bool;     desc={"group lock" doesn't apply }}
		}
	}

	ha:arc.ID {
		type=ha
		desc { Drawing object: circular arc }
		li:children {
			ha:cx      = { valtype=coord;    desc={center point, x coord }}
			ha:cy      = { valtype=coord;    desc={center point, y coord }}
			ha:r       = { valtype=coord;    desc={radius }}
			ha:sang    = { valtype=angle;    desc={start angle }}
			ha:dang    = { valtype=angle;    desc={delta angle }}
			ha:sx      = { valtype=coord;    desc={start point, x coord }}
			ha:sy      = { valtype=coord;    desc={start point, y coord }}
			ha:ex      = { valtype=coord;    desc={end point, x coord }}
			ha:ey      = { valtype=coord;    desc={end point, y coord }}
			ha:stroke  = { valtype=pen;      desc={pen to use }}
			ha:lock    = { valtype=bool;     desc={object is locked }}
			ha:floater = { valtype=bool;     desc={"group lock" doesn't apply }}
		}
	}

	ha:polygon.ID {
		type=ha
		desc { Drawing object: polygon }
		li:children {
			ha:outline {
				type=li
				desc { ordered list of contour objects (no gaps allowed) }
				li:children {
					sy:line.ID    = {/lht_tree_doc/comm/line.ID}
					sy:arc.ID     = {/lht_tree_doc/comm/arc.ID}
				}
			}
			ha:stroke  = { valtype=pen;      desc={pen used for outline objects }}
			ha:fill    = { valtype=pen;      desc={pen used for fill (no fill if not present)}}
			ha:lock    = { valtype=bool;     desc={object is locked }}
			ha:floater = { valtype=bool;     desc={"group lock" doesn't apply }}
		}
	}

	ha:connection.ID {
		type=ha
		desc { Logical object: connection between different groups }
		li:children {
			ha:conn {
				type=li
				desc { list of objects participating in the connection (at least 2)}
				li:children {
					ha:OIDPATH = { valtype=oidpath;   desc={drawing object making the connection )}}
				}
			}
		}
	}

	ha:text.ID {
		type=ha
		desc { Drawing object: straight line }
		li:children {
			ha:text    = { valtype=string;   desc={text string (or dyntext template)}}
			ha:x1      = { valtype=coord;    desc={lower left x coord of text box }}
			ha:y1      = { valtype=coord;    desc={lower left y coord of text box }}
			ha:x2      = { valtype=coord;    desc={upper right corner of untrasformed box; present only if text size is bbox-specified }}
			ha:y2      = { valtype=coord;    desc={upper right corner of untrasformed box; present only if text size is bbox-specified }}
			ha:rot     = { valtype=angle;    desc={rotaition around x1;y1 }}
			ha:mirx    = { valtype=bool;     desc={mirror origin/bbox left/right}}
			ha:miry    = { valtype=bool;     desc={mirror origin/bbox up/down}}
			ha:halign  = { valtype=halign;   desc={horizontal alignment }}
			ha:dyntext = { valtype=bool;     desc={if text string is a dyntext template }}
			ha:stroke  = { valtype=pen;      desc={pen to use }}
			ha:lock    = { valtype=bool;     desc={object is locked }}
			ha:floater = { valtype=bool;     desc={"group lock" doesn't apply }}
		}
	}

	ha:pen.NAME {
		type=ha
		desc { Logical object: a named pen used for drawing; names are unique within a group }
		li:children {
			ha:shape       = { valtype=shape;    desc={pen tip shape)}}
			ha:size        = { valtype=coord;    desc={diameter or side length}}
			ha:color       = { valtype=color;    desc={ink color }}
			ha:font_height = { valtype=coord;    desc={height of text font for non-bbox-defined text}}
			ha:font_family = { valtype=string;   desc={family hint for the font selector}}
			ha:font_style  = { valtype=string;   desc={style hint for the font selector}}
			ha:dash        = { valtype=hex4;     desc={dash pattern }}
			ha:dash_period = { valtype=coord;    desc={dash pattern length}}
		}
	}

}}
