フォント

@textjs/fontはFIGletフォントをESモジュールとして提供し、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 が行ごとに1つの文字列を返します。

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"-Sfittedフォントでも、フォントのルールでスマッシング
"universal"-o後の文字を前の文字に重ねる
0〜63-m明示的なスマッシングモード

水平方向のスマッシングルールは、同一文字、アンダースコア、階層、対向ペア、大きなX、ハードブランクの6種類すべてを実装しています。

verticalLayout は複数行のテキストに適用されます。FIGlet 2.2.5は行間を詰めないため、デフォルトは "full" です。"fitted"、"smushed"、"universal" は垂直線のスーパースマッシングを含む5種類の垂直方向ルールを実装し、"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で正確に1セルを占めます。@textjs/font/all はすべてのフォントに加え、ギャラリー用の BUNDLED_FONTS をエクスポートします。フォントはインポート時ではなく、初回レンダリング時に解析されます。

カスタムフォント

どのFIGfontも使えます。取得してから解析します。

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

パーサーはヘッダー、コメント行、ハードブランク、終端マーカー、102個の必須文字、および10進数、8進数、16進数のコードタグ付き文字を読み取ります。TOIletの .tlf フォントはプレーンテキストとしてレンダリングされます。ASCIIまたは罫線文字で描かれたフォントを推奨します。点字や絵文字はMenloでは1セル幅ではありません。

ライセンス

同梱フォントは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でこのページを編集