lini 0.22.0

Pretty diagrams, charts, and technical drawings from plain text, with fine-grained control. Compiles to clean, themeable SVG.
Documentation
// Every drawable primitive plus a few templates, each captioned, in palette
// colours — a soft pastel fill with a matching ink outline. Source for assets/shapes.png.
{
  layout: grid; columns: repeat(4); gap: 26; padding: 30;
  |tile::column| { gap: 9; align: center; }
  |cap::block| { font-size: 12; color: --muted; }
}

|tile| [
  |box| { width: 66; height: 46; fill: --red-wash; stroke: --red-deep; } [
    |badge| "new"
  ]
  |cap| "box + badge"
]
|tile| [
  |rect| { width: 66; height: 46; fill: --orange-wash; stroke: --orange-deep; }
  |cap| "rect"
]
|tile| [
  |oval| { width: 68; height: 54; fill: --amber-wash; stroke: --amber-deep; }
  |cap| "oval"
]
|tile| [
  |hex| { width: 68; height: 58; fill: --lime-wash; stroke: --lime-deep; }
  |cap| "hex"
]

|tile| [
  |slant| { width: 66; height: 46; fill: --green-wash; stroke: --green-deep; }
  |cap| "slant"
]
|tile| [
  |cyl| { width: 58; height: 56; fill: --teal-wash; stroke: --teal-deep; }
  |cap| "cyl"
]
|tile| [
  |diamond| { width: 70; height: 60; fill: --sky-wash; stroke: --sky-deep; }
  |cap| "diamond"
]

|tile| [
  |poly| {
    points: 0 -30, 30 -6, 17 28, -17 28, -30 -6; fill: --purple-wash; stroke: --purple-deep;
  }
  |cap| "poly"
]
|tile| [
  |path| {
    path: "M -32 26 Q 0 -28 32 26"; stroke: --rose-deep; stroke-width: 4;
  }
  |cap| "path"
]
|tile| [
  |line| {
    points: -32 0, 32 0; marker-end: arrow; stroke: --red; stroke-width: 3;
  }
  |cap| "line"
]
|tile| [
  |icon| {
    symbol: house; width: 42; height: 42; fill: --teal-wash; stroke: --teal-deep;
  }
  |cap| "icon"
]

|tile| [
  |group| { padding: 12; } [
    |caption| "Group"
    |box| { width: 56; height: 34; fill: --gray-wash; stroke: --gray-ink; }
    |footnote| "footnote"
  ]
]
|tile| [
  |table| { columns: 24, 24, 24; } [
    "a" "b" "c"
    "d" "e" "f"
  ]
  |cap| "table"
]
|tile| [
  |path| {
    path: "M 0 -28 C 22 -30 31 -12 23 4 C 17 16 30 25 11 30 C -7 34 -27 25 -26 6 C -25 -11 -22 -28 0 -28 Z"; fill: --rose-wash; stroke: --rose-ink; stroke-width: 2;
  }
  |cap| "blob path"
]