painbrush

1.0.21.1.0
src-packer/pipeline.ts
src-packer/pipeline.tsDeleted
−143
Index: package/src-packer/pipeline.ts
===================================================================
--- package/src-packer/pipeline.ts
+++ package/src-packer/pipeline.ts
@@ -1,143 +0,0 @@
-import path from "path/posix";
-import { decode } from "fast-bmp";
-import { solidFillBrush } from "../src/color.ts";
-import { toImage } from "../src/image.ts";
-import {
-  padLayer,
-  makeTextLayer,
-  overlayLayerOver,
-  makeRectangleLayer,
-} from "../src/layer.ts";
-import { type PxFontFile, useFont } from "../src/typography.ts";
-import type {
-  PackerCharacter,
-  PackerCharactersWithTrim,
-  PackerFileOp,
-  PackerIntakeData,
-} from "./_.js";
-
-export const generateCharacters = async ({
-  img,
-  fontMeta,
-}: PackerIntakeData): Promise<PackerCharactersWithTrim> => {
-  const { metrics } = fontMeta;
-  const data = decode(img);
-  const rawCharacters: PackerCharacter[] = [[]];
-
-  const colspan = fontMeta.cols * metrics.width;
-
-  (data.data as Uint8Array).forEach((item, index) => {
-    const pixelX = index % colspan;
-    const pixelY = ~~(index / colspan);
-
-    const charX = ~~(pixelX / metrics.width);
-    const charY = ~~(pixelY / metrics.height);
-
-    const charXPixelOffset = pixelX - charX * metrics.width;
-    const charYPixelOffset = pixelY - charY * metrics.height;
-
-    const charPos = charX + charY * fontMeta.cols;
-
-    if (!rawCharacters[charPos]) {
-      rawCharacters[charPos] = [];
-    }
-
-    const charPixelPos =
-      charXPixelOffset + charYPixelOffset * metrics.width;
-
-    rawCharacters[charPos][charPixelPos] = item as 0 | 1;
-  });
-
-  const alphabet = fontMeta.alphabet.join("");
-
-  return rawCharacters.map((char, index) => {
-    const letter = alphabet[index];
-
-    const maybeTrim =
-      fontMeta.trim[letter] ?? fontMeta.trim["__DEFAULT__"];
-    if (!maybeTrim) {
-      return [metrics.width, char];
-    }
-
-    let newChar = [];
-    for (let i = 0; i < char.length; i++) {
-      const pos = i % metrics.width;
-      if (pos < metrics.width - maybeTrim) {
-        newChar.push(char[i]);
-      }
-    }
-    return [metrics.width - maybeTrim, newChar];
-  });
-};
-
-export const generatePxFontFile = (
-  characters: PackerCharactersWithTrim,
-  { fontName, fontMeta, cwd, outDir }: PackerIntakeData,
-): PackerFileOp<string> => {
-  const fontFileAt = path.join(cwd, outDir, fontName + ".pxfont");
-  const alphabet = fontMeta.alphabet.join("");
-  const metrics = fontMeta.metrics;
-
-  return [
-    fontFileAt,
-    JSON.stringify(
-      {
-        metrics,
-        alphabet,
-        characters,
-      } as PxFontFile,
-      null,
-      2,
-    ),
-  ];
-};
-
-export const generateSpecimenImage = async (
-  [_, pxFontFile]: PackerFileOp<string>,
-  { fontName, fontMeta, cwd, outDir }: PackerIntakeData,
-): Promise<PackerFileOp<Uint8Array<ArrayBufferLike>>> => {
-  const alphabet = fontMeta.alphabet.join("");
-
-  const specimenImgPd = padLayer(
-    await makeTextLayer(
-      fontName.toUpperCase() +
-        "\n" +
-        "\n" +
-        "? " +
-        alphabet
-          .split("")
-          .map((s) => s.trim())
-          .filter(Boolean)
-          .sort()
-          .join(""),
-      await useFont(Promise.resolve(pxFontFile)),
-      solidFillBrush(fontMeta.specimen?.color ?? [0, 0, 0]),
-      {
-        maxLengthPx: fontMeta.metrics.width * 12,
-        breakLinesOn: "", // break on anything
-      },
-    ),
-    { x: fontMeta.metrics.width, y: fontMeta.metrics.height },
-  );
-
-  const specimenImg = overlayLayerOver(
-    makeRectangleLayer(
-      {
-        x: specimenImgPd.width,
-        y: specimenImgPd.height,
-      },
-      solidFillBrush(
-        fontMeta.specimen?.background ?? [255, 255, 255],
-      ),
-    ),
-    specimenImgPd,
-  );
-
-  const specimenFileAt = path.join(
-    cwd,
-    outDir,
-    fontName + "-specimen.bmp",
-  );
-
-  return [specimenFileAt, toImage(specimenImg)];
-};