字体

@textjs/font:以 ES 模块提供 FIGlet 字体,排版与 figlet 程序完全一致。

@textjs/font 解析 FIGfont 2(.flf)文件,布局方式与 figlet 程序完全一致。每种字体都是一个 ES 模块,因此只会打包你导入的字体。

实时100×19 · booting Turbolog…tsx
preview://fonts:1
import { FigletText } from "@textjs/font/react";import { slant } from "@textjs/font/slant";export default function Page() {  return <FigletText font={slant} color="accent">Text.js</FigletText>;}

安装

bun add @textjs/font

用法

<FigletText> 接收一种字体和一个字符串。行宽以单元格为单位,因此这些字形可以像其他 <Text> 一样放入 flexbox 布局。

import { FigletText } from "@textjs/font/react";import { big } from "@textjs/font/big";<FigletText font={big} layout="fitted" columns={60} align="center" color="muted">  Deployed</FigletText>

<AsciiFont> 接受相同的字体,同时保留内置的 block 和 compact 字形:

<AsciiFont text="Text.js" font={slant} color="accent" />

在 React 之外,renderFiglet 为每行返回一个字符串:

import { renderFiglet } from "@textjs/font";import { standard } from "@textjs/font/standard";renderFiglet(standard, "Hello", { layout: "full" });// ["  _   _          _   _         ", " | | | |   ___  | | | |   ___  ", …]

布局

水平布局遵循 FIGlet 的命令行标志。

layoutfiglet效果
"default"-s字体自身的布局,通常为挤合
"full"-W全宽;字符互不接触
"fitted"-k字距调整;字符相互靠近,直至接触
"smushed"-S按字体规则挤合,即使字体采用紧凑布局也如此
"universal"-o后面的字符覆盖前面的字符
0–63-m显式指定挤合模式

全部六种水平挤合规则均已实现:相同字符、下划线、层级、相对字符对、大 X 和硬空格。

verticalLayout 适用于多行文本。FIGlet 2.2.5 从不缩小行间距,因此默认值为 "full";"fitted"、"smushed" 和 "universal" 实现了五种垂直规则,包括垂直线超级挤合,而 "default" 使用字体自身的规则。

换行与对齐

columns(或 renderFiglet 中的 width)优先在单词之间换行,再在单词内部换行,换行位置与 figlet -w 完全一致。align 可设为 "left"、"center" 或 "right";未指定宽度时,各行在最宽行的范围内对齐。ivrit 等从右到左的字体从右向左输出并右对齐;使用 direction 可覆盖此行为。

内置字体

导入行数说明
@textjs/font/standard6FIGlet 的默认字体
@textjs/font/slant, smslant6, 5斜体
@textjs/font/small5紧凑字体
@textjs/font/big8包含希腊字母
@textjs/font/banner8# 字形、片假名和西里尔字母
@textjs/font/block, lean8轮廓字体,直立与倾斜
@textjs/font/shadow, smshadow5, 4投影字体
@textjs/font/script, smscript7, 5手写体
@textjs/font/mini4微型字体
@textjs/font/bubble, digital4, 3圆圈和方框中的字母
@textjs/font/ivrit6希伯来文,从右到左
@textjs/font/term1原样输出输入内容

每个字形都由可打印的 ASCII 或 Latin-1 字符组成,因此在 DevTools 的 Menlo 字体中,每个组成字符恰好占一个单元格。@textjs/font/all 导出所有字体,以及用于字体展示的 BUNDLED_FONTS。字体在首次渲染时解析,导入时不解析。

自定义字体

任何 FIGfont 都可使用。先获取,再解析:

import { parseFont } from "@textjs/font";const doom = parseFont(await (await fetch("/fonts/doom.flf")).text(), "Doom");

解析器读取文件头、注释行、硬空格、结束标记、102 个必需字符,以及用十进制、八进制或十六进制编码标记的字符。TOIlet .tlf 字体渲染为纯文本。优先选择用 ASCII 或制表符号绘制的字体;盲文和表情符号在 Menlo 中的宽度不是一个单元格。

许可

内置字体与 FIGlet 2.2.5 发行版中的字体逐字节一致,采用 FIGlet 的 BSD 3-Clause 许可证。每种字体的署名信息都保留在注释行中,运行时可通过 font.comment 读取。Doom、Larry 3D、ANSI Shadow 和 Calvin S 等未获再分发许可的常用字体未包含在内。

与 figlet 对照验证

测试套件重放了从真实的 figlet 2.2.5 二进制文件记录的 273 个输出:涵盖每种内置字体的所有布局模式、换行、对齐、从右到左的文本、段落模式,以及 FIGlet 自身的回归测试输入。所有结果均完全匹配。

在 GitHub 上编辑此页