/* Die Pixelsymbole von HoneyOS.
*
* Die Raster selbst stehen in `web/glyphs.json` — **an genau einer Stelle**,
* absichtlich als Daten statt als Quelltext: Der Schreibtisch holt sie hier,
* die HoneyBar in fremden Apps bekommt sie vom Server mit der App-Liste
* mitgeliefert (siehe main.go). Vorher standen sie zweimal da, und die
* Wettersymbole waren schon einmal auseinandergelaufen.
*
* Das Laden geschieht mit `await` auf oberster Ebene: Wer dieses Modul
* einbindet, bekommt fertige Symbole und darf sie überall gerade heraus
* benutzen — sonst müsste jede Zeichenfunktion asynchron werden.
*/
/** 12×12-Raster als Zeichenketten, ein `#` ist ein Pixel. */
export const GLYPHS = await ladeGlyphen();
async function ladeGlyphen() {
try {
const res = await fetch(new URL("../glyphs.json", import.meta.url), { cache: "no-store" });
if (res.ok) return await res.json();
} catch {
/* fällt unten auf ein leeres Raster zurück */
}
// Ohne Symbole ist der Schreibtisch hässlich, aber benutzbar — ein leerer
// Bildschirm wäre schlimmer. Passieren kann es nur, wenn der eigene Server
// gerade nicht antwortet; dann ist ohnehin nichts zu holen.
console.warn("HoneyOS: glyphs.json nicht geladen — Symbole fehlen.");
return {};
}
export function glyphSvg(name) {
return rasterSvg(GLYPHS[name] || GLYPHS.box);
}
/** Baut aus einem 12×12-Raster ein SVG. Waagerechte Läufe werden
* zusammengefasst: weniger Rechtecke, gleiches Bild. */
export function rasterSvg(grid) {
if (!grid) return "";
const rects = [];
grid.forEach((row, y) => {
let run = 0;
for (let x = 0; x <= row.length; x++) {
if (row[x] === "#") {
run++;
} else if (run) {
rects.push(``);
run = 0;
}
}
});
return ``;
}