ha:lht_tree_doc { ha:roots {

	ha:pcb-rnd-font-v1 {
		type=li
		desc={font description}
		li:children {
			ha:FONT-ID {
				type=ha
				li:name_patterns={p={geda_pcb}; p={[0-9]+}}
				desc { the full description of a font; the node name is the integer font id or "geda_pcb" for font 0 (for historical reasons); the name is used only to make each node unique, the ID is also a field below }
				li:children {
					ha:cell_height { valtype=coord; desc={height of the tallest glyph}}
					ha:cell_width { valtype=coord; desc={width of the widest glyph}}
					ha:id { valtype=integer; desc={unique font ID within the fontkit; fonts are referenced by ID}}
					ha:name { valtype=string; desc={user specified, user readable font name}}
					ha:symbols {
						type=ha
						desc { a collections of glyphs availbale in the font }
						li:children {
							ha:CHARACTER {
								type=ha
								li:name_patterns={p={.}}
								desc { Description of a glyph (symbol). Node name is a signel ASCII character or is of format &xx where xx is a hex digit of the ASCII code of the character. Characters that must use the hex version are: codes below 33 or over 126, &, #, {, \}, /, :, ;, =, \\, :}
								li:children {
									ha:height { valtype=coord; desc={height of the glyph}}
									ha:width { valtype=coord; desc={width of the glyph}}
									ha:delta { valtype=coord; desc={extra space always inserted after the current symbol, before the next character}}
									ha:objects {
										type=li
										desc={objects that make up the symbol; IDs are per symbol local IDs counted from 0}
										li:children {
											ha:line.ID {
												type=ha
												desc={round cap line, simplified}
												li:children {
													ha:x1        = { valtype=coord;   desc={line first endpoint, horizontal offset }}
													ha:y1        = { valtype=coord;   desc={line first endpoint, vertical offset }}
													ha:x2        = { valtype=coord;   desc={line second endpoint, horizontal offset }}
													ha:y2        = { valtype=coord;   desc={line second endpoint, vertical offset }}
													ha:thickness = { valtype=coord;   desc={width of the line }}
												}
											}
											ha:simplearc.ID {
												type=ha
												desc={round cap arc, simplified }
												li:children {
													ha:x         = { valtype=coord;   desc={center, X coord}}
													ha:y         = { valtype=coord;   desc={center, Y coord}}
													ha:r         = { valtype=coord;   desc={radius (of the centerline of the arc) }}
													ha:thickness = { valtype=coord;   desc={width of the pen the arc is drawn with }}
													ha:astart    = { valtype=angle;   desc={ start angle}}
													ha:adelta    = { valtype=angle;   desc={ delta angle}}
												}
											}
											ha:simplepoly.ID {
												type=li
												desc={round cap arc, simplified; contains a flat list of coords; each coord pair is an x;y corner of the outline of the polygon (odd indices are x coords, even indices are y coords) }
											}
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
}}