This commit is contained in:
Dylan Pizzo 2025-01-07 08:19:47 -08:00
parent 3adf3bf76d
commit e786943d16

View File

@ -5,6 +5,7 @@ export type Piece =
| { type: "text"; text: string; isBold?: boolean; isItalic?: boolean } | { type: "text"; text: string; isBold?: boolean; isItalic?: boolean }
| { type: "space" } | { type: "space" }
| { type: "break" } | { type: "break" }
| { type: "hr" }
| { | {
type: "symbol"; type: "symbol";
symbol: "coin" | "debt" | "potion" | "vp" | "vp-token"; symbol: "coin" | "debt" | "potion" | "vp" | "vp-token";
@ -127,6 +128,28 @@ const breakPiece = pieceDef({
render() {}, render() {},
}); });
const hrPiece = pieceDef({
type: "hr",
measure(context, _piece) {
const metrics = context.measureText(" ");
return {
type: "content",
width: 750,
ascent: metrics.fontBoundingBoxAscent / 3,
descent: metrics.fontBoundingBoxDescent / 3,
};
},
render(context, _piece, x, y, measure) {
context.save();
context.beginPath();
context.moveTo(x, y);
context.lineTo(x + measure.width, y);
context.lineWidth = 8;
context.stroke();
context.restore();
},
});
const symbolPiece = pieceDef({ const symbolPiece = pieceDef({
type: "symbol", type: "symbol",
measure(context, piece) { measure(context, piece) {
@ -168,7 +191,7 @@ const symbolPiece = pieceDef({
}, },
}); });
const pieceDefs = [textPiece, spacePiece, breakPiece, symbolPiece]; const pieceDefs = [textPiece, spacePiece, breakPiece, symbolPiece, hrPiece];
const tools: PieceTools = {} as any; const tools: PieceTools = {} as any;
@ -360,6 +383,12 @@ export const parse = (text: string): Piece[] => {
text: "+", text: "+",
}); });
} }
} else if (
char === "-" &&
text[i - 1] === "\n" &&
text[i + 1] === "\n"
) {
pieces.push({ type: "hr" });
} else { } else {
const end = text.slice(i).match(/[^$ \n]+/)![0].length; const end = text.slice(i).match(/[^$ \n]+/)![0].length;
pieces.push({ type: "text", text: text.slice(i, i + end) }); pieces.push({ type: "text", text: text.slice(i, i + end) });