# pcb-rnd - io_lihata versions

History of io_lihata, per format version.

## lihata board

### v1

Feature-compatible with the gEDA/PCB file format, plus allows multiple fonts. Same assumptions on layers: last two must be the silk layers.

### v2

Introduce the layer stack subtree and remove layer assumptions. Save the combining field of layers.

### v3

New global object subtree: subcircuit. Global object element has been removed.

Intconn is not a flag, but a pin/pad/terminal attribute.

### v4

New subtree under data: padstack_prototypes, for storing padstack prototypes. ID is the place of the padstack within the list.

New object type under : ha:padstack_ref.id.

### v5

Removed drc and isle_area_nm from the board header in favor of the config subtree. Removed the cursor section from board header - cursor position and zoom should not be saved or loaded.

Warn for the intnoconn attribute when saving pre-v5 - pcb-rnd versions supporting v4 or lower will most probably not understand it.

Layer group and network attributes. Layer colors.

Optional route style via prototype ID.

Optional padstack prototype name for easier user identification of prototypes.

Remove old model objects: elements, element-lines, element-arcs, pins, pads, vias. They are still loaded if they are found in v5, but a warning is generated and the objects are force-converted to the new model on save.

### v6

Extended the text object fields with optional thickness and rot fields that will be able to override the default mechanism for determining the thickness or the n*90 degree rotation angle (with an arbitrary value).

Removed the direction field from text - use the rot field instead.

New route style entries for default text thickness and text scale.

New layer group types PCB_LYT_DOC and PCB_LYT_MECH are handled on load and save.

Load and save purpose field in layer groups and bound layers.

The layer visibility bit is not saved any more - it was reset after load so it only added noise to the file.

When saving PCB_THERMAL_NOSHAPE, mark it explicitly by writing "noshape" instead of just leaving the thermal shape empty.

### v7

Polygon enforce_clearance (when non-zero, enforces minimum clearance on clearing objects within the polygon).

Informal change: text attribute tight_clearance is interpreted to change the clearance style of a text object.

Informal change: text attribute mirror_x is interpreted to mirror the X coordunates of the text object (text mirror over the Y axis).

The pixmap subtree with ulzw entries and gfx layer objects - provides on-screen pixel graphics.

Rat anchor objects are saved with idpath so the exact connections of a rat is preserved.

Text objects optionally have separate scale_x and scale_y fields for different width/height scaling.

### v8

Remove net's dedicated style field; this data is the style attribute already set in the same nets.

Introduce text object clearance field.

Remove via geometry from style, use a padstack prototype ID instead.

Introduce text font ID field in routing style.

### v9

Uses pcb-rnd-font-v2.

New text object flag: entity. When set, it allows &entity; to be substituted with a single glyph in text while rendering.

Netlist patch (back annotation) upgrades:

- remove change_attrib operation
- introduce change_net_attrib operation for net attribs
- introduce change_comp_attrib operation for component (subc) attribs
- introduce comp_add operation
- introduce comp_del operation

Drawing area size is saved as x1;y1;x2;y2 (box) instead of just x;y (width;height), so that non-0;0 upper-left corner is possible.

## lihata subcircuit

### v4

Initial version, used before board v6.

### v6

Used from board v6. Allows ps_proto_v6.

### v7

Used from board v7. Allows polygon enforce_clearance, tight_clearance attribute for text objects, mirror_x attribute for text objects, gfx/pixmap and text scale_x/scale_y.

### v8

Introduce text object clearance field.

## ps_proto

### v4

Initial version, used before board v6.

### v6

Used from board v6. Features new layer type: PCB_LYT_MECH and new pad shape: hshadow.

## font

### v1

Original native font format

### v2

Save height and cent_height so they are not required to be recomputed on load.

Optional tab_width to size tab columns. (Computed if not specified.)

Optional line_height to size y advance on multiline rendering (affects line distance; computed if not specified.)

Optional baseline so text rended with different font in the same row can line up as long as they all have baseline specified properly (0 if not specified).

Entities table: when enabled in the rendering call, interpret <entity; names in the string and look them up in this table; entities found are rendered from the glyph address stored in the table; entities not found are rendered as the unknown glyph.

Kerning table: tune horizontal distance of character pairs.