.nornir/assets/docview_render.svg
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1180 520" font-family="'DejaVu Sans', 'Segoe UI', sans-serif">
<defs>
<linearGradient id="board" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#0b1c2e"/>
<stop offset="1" stop-color="#06111d"/>
</linearGradient>
<linearGradient id="chip" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#14384f"/>
<stop offset="1" stop-color="#0e2a3e"/>
</linearGradient>
<linearGradient id="rail" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#173d57"/>
<stop offset="1" stop-color="#0c2438"/>
</linearGradient>
<linearGradient id="slot" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#123448"/>
<stop offset="1" stop-color="#0a2032"/>
</linearGradient>
<marker id="arrow3" markerWidth="9" markerHeight="9" refX="7" refY="4" orient="auto">
<path d="M0 0 L8 4 L0 8 Z" fill="#6fd3f5"/>
</marker>
</defs>
<rect x="0" y="0" width="1180" height="520" fill="url(#board)"/>
<g stroke="#143a52" stroke-width="1">
<line x1="0" y1="76" x2="1180" y2="76"/>
<line x1="0" y1="472" x2="1180" y2="472"/>
</g>
<g fill="#16415c">
<circle cx="40" cy="40" r="2"/><circle cx="1140" cy="40" r="2"/>
<circle cx="40" cy="492" r="2"/><circle cx="1140" cy="492" r="2"/>
</g>
<!-- title -->
<text x="40" y="44" fill="#eaf6ff" font-size="22" font-weight="700">facett-docview</text>
<text x="250" y="44" fill="#9fc9e0" font-size="15">SVG page bytes → <tspan fill="#bfe6ff" font-weight="700">fontdb</tspan> (system + embedded DejaVu) → usvg → tiny_skia → egui texture</text>
<!-- legend -->
<g font-size="12.5">
<line x1="900" y1="60" x2="940" y2="60" stroke="#6fd3f5" stroke-width="3"/>
<text x="948" y="64" fill="#cfe6f5">render path</text>
</g>
<!-- host SVG bytes -->
<rect x="36" y="150" width="170" height="200" rx="10" fill="url(#chip)" stroke="#5aa6cf" stroke-width="2"/>
<text x="121" y="176" fill="#eaf6ff" font-size="14" font-weight="700" text-anchor="middle">host</text>
<text x="121" y="195" fill="#9fc9e0" font-size="10.5" text-anchor="middle">hands page bytes</text>
<rect x="58" y="212" width="126" height="40" rx="5" fill="url(#slot)" stroke="#6fd3f5" stroke-width="1.4"/>
<text x="121" y="236" fill="#bfe6ff" font-size="10" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">one SVG / page</text>
<text x="121" y="276" fill="#86b3cc" font-size="10" text-anchor="middle">Typst export OR a</text>
<text x="121" y="292" fill="#86b3cc" font-size="10" text-anchor="middle">skade-flow diagram</text>
<text x="121" y="314" fill="#ffcf6f" font-size="9.5" text-anchor="middle">these carry <text> with</text>
<text x="121" y="329" fill="#ffcf6f" font-size="9.5" text-anchor="middle">font REFERENCES, not outlines</text>
<line x1="206" y1="232" x2="260" y2="232" stroke="#6fd3f5" stroke-width="3" marker-end="url(#arrow3)"/>
<!-- fontdb (THE FIX) -->
<rect x="260" y="120" width="220" height="260" rx="12" fill="url(#rail)" stroke="#7fc8ea" stroke-width="2.5"/>
<text x="370" y="146" fill="#eaf6ff" font-size="14.5" font-weight="700" text-anchor="middle">fontdb (the fix, ea3ddd6)</text>
<text x="370" y="165" fill="#9fc9e0" font-size="10.5" text-anchor="middle">usvg::Options.fontdb</text>
<rect x="282" y="184" width="176" height="44" rx="6" fill="url(#slot)" stroke="#6fd3f5" stroke-width="1.6"/>
<text x="370" y="202" fill="#bfe6ff" font-size="10.5" text-anchor="middle">load_system_fonts()</text>
<text x="370" y="218" fill="#9fc9e0" font-size="9" text-anchor="middle">whatever the OS has</text>
<rect x="282" y="238" width="176" height="44" rx="6" fill="url(#slot)" stroke="#6fd3f5" stroke-width="1.6"/>
<text x="370" y="256" fill="#bfe6ff" font-size="10.5" text-anchor="middle">+ embedded DejaVu Sans</text>
<text x="370" y="272" fill="#7CFFB2" font-size="9" text-anchor="middle">include_bytes! fallback · always present</text>
<text x="370" y="306" fill="#86b3cc" font-size="10" text-anchor="middle">before the fix: default Options</text>
<text x="370" y="322" fill="#ff7a7a" font-size="10" text-anchor="middle">→ no font db → <text> dropped</text>
<text x="370" y="344" fill="#a9d8ee" font-size="9.5" text-anchor="middle">so the skade-flow diagrams</text>
<text x="370" y="360" fill="#a9d8ee" font-size="9.5" text-anchor="middle">finally render their labels</text>
<line x1="480" y1="250" x2="534" y2="250" stroke="#6fd3f5" stroke-width="3" marker-end="url(#arrow3)"/>
<!-- usvg parse -->
<rect x="534" y="170" width="170" height="160" rx="11" fill="url(#chip)" stroke="#5aa6cf" stroke-width="2"/>
<text x="619" y="196" fill="#eaf6ff" font-size="13.5" font-weight="700" text-anchor="middle">usvg::Tree</text>
<text x="619" y="215" fill="#9fc9e0" font-size="10" text-anchor="middle">from_data(bytes, opts)</text>
<text x="619" y="240" fill="#86b3cc" font-size="10" text-anchor="middle">parse ONCE at</text>
<text x="619" y="256" fill="#86b3cc" font-size="10" text-anchor="middle">construction</text>
<text x="619" y="280" fill="#a9d8ee" font-size="9.5" text-anchor="middle">intrinsic page size (pt)</text>
<text x="619" y="296" fill="#7fa8c4" font-size="9.5" text-anchor="middle">kept for layout</text>
<line x1="704" y1="250" x2="758" y2="250" stroke="#6fd3f5" stroke-width="3" marker-end="url(#arrow3)"/>
<!-- tiny_skia raster -->
<rect x="758" y="170" width="170" height="160" rx="11" fill="url(#chip)" stroke="#5aa6cf" stroke-width="2"/>
<text x="843" y="196" fill="#eaf6ff" font-size="13.5" font-weight="700" text-anchor="middle">tiny_skia raster</text>
<text x="843" y="215" fill="#9fc9e0" font-size="10" text-anchor="middle">resvg::render @ zoom</text>
<text x="843" y="240" fill="#86b3cc" font-size="10" text-anchor="middle">cache key</text>
<text x="843" y="256" fill="#86b3cc" font-size="10" text-anchor="middle">(page, zoom_bucket)</text>
<text x="843" y="280" fill="#a9d8ee" font-size="9.5" text-anchor="middle">viewport-bounded, evicts</text>
<text x="843" y="296" fill="#7fa8c4" font-size="9.5" text-anchor="middle">crisp vector at any scale</text>
<line x1="928" y1="250" x2="982" y2="250" stroke="#6fd3f5" stroke-width="3" marker-end="url(#arrow3)"/>
<!-- egui texture -->
<rect x="982" y="186" width="150" height="128" rx="11" fill="url(#chip)" stroke="#7fc8ea" stroke-width="2.5"/>
<text x="1057" y="212" fill="#eaf6ff" font-size="13" font-weight="700" text-anchor="middle">egui texture</text>
<text x="1057" y="232" fill="#9fc9e0" font-size="9.5" text-anchor="middle">ColorImage upload</text>
<text x="1057" y="256" fill="#86b3cc" font-size="9.5" text-anchor="middle">drawn in the</text>
<text x="1057" y="271" fill="#86b3cc" font-size="9.5" text-anchor="middle">scroll viewport</text>
<text x="1057" y="294" fill="#7fa8c4" font-size="9" text-anchor="middle">pure Rust, no pdfium</text>
<!-- footer -->
<text x="40" y="500" fill="#5e86a0" font-size="11" font-family="'DejaVu Sans Mono', monospace">facett-docview/src/lib.rs · fontdb wired ea3ddd6 · resvg / usvg / tiny_skia · one dep, no native libraries</text>
</svg>