ha:lht_tree_doc { ha:roots {

	ha:pcb-rnd-font-v* {
		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:height { valtype=coord; ver={>=2}; desc={total height, font-wise (distance between lowest point of the lowest glyph and highest point of the tallest glyph }}
					ha:cent_height { valtype=coord; ver={>=2}; desc={same as height but computed for centerline of stroke}}
					ha:tab_width { valtype=coord; ver={>=2}; desc={optional: tab column width}}
					ha:line_height { valtype=coord; ver={>=2}; desc={optional: vertical advance from one line to the next in multiline rendering}}
					ha:baseline { valtype=coord; ver={>=2}; desc={normally the origin of a text object is the top-left of the glyph coord system; when this is enabled and the font has a baseline, the glyphs are moved up so the origin is at the custom baseline of the font (bbox is modified too); measured from the top (from the glyph coord system y=0)}}
					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:advance { valtype=coord; desc={x direction advance; if not specified, calculated as width+delta; because of rounding errors and historical reasons, advance is more stable than delta}}
									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) }
											}
										}
									}
								}
							}
						}
					}
					ha:entities {
						ver={>=2};
						type=ha
						desc={table for translating named &entity; characters to character indices}
						li:children {
							ha:ENTITYNAME { valtype=integer;   desc={translate &ENTITYNAME; to the charatcter addressed by the integer value (should be between 1 and 254)}}
						}
					}
					ha:kerning {
						ver={>=2};
						type=ha
						desc={kerning table: tune horizontal distance of character pairs}
						li:children {
							ha:CHAR1-CHAR2 { valtype=coord;   desc={if CHAR1 is followed by CHAR2 while rendering a string, move CHAR2 horizontally by the value; negative means CHAR2 is moved toward CHAR1; non-printable chars are represented by their &hh hex values (like in symbol names)}}
						}
					}
				}
			}
		}
	}
}}