フォント
@textjs/fontはFIGletフォントをESモジュールとして提供し、figletプログラムと同じレイアウトで表示します。
@textjs/font はFIGfont 2(.flf)ファイルを解析し、figlet プログラムとまったく同じレイアウトで表示します。各フォントはESモジュールなので、インポートしたフォントだけが配信されます。
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のフラグに従います。
layout | figlet | 効果 |
|---|---|---|
"default" | -s | フォントのレイアウト。通常はスマッシング |
"full" | -W | 全幅。文字同士は接触しない |
"fitted" | -k | カーニング。文字同士が接触するまで間隔を詰める |
"smushed" | -S | fittedフォントでも、フォントのルールでスマッシング |
"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/standard | 6 | FIGletのデフォルト |
@textjs/font/slant, smslant | 6, 5 | 斜体 |
@textjs/font/small | 5 | コンパクト |
@textjs/font/big | 8 | ギリシャ文字を含む |
@textjs/font/banner | 8 | # による文字、カタカナ、キリル文字 |
@textjs/font/block, lean | 8 | 輪郭文字、直立と傾斜 |
@textjs/font/shadow, smshadow | 5, 4 | ドロップシャドウ |
@textjs/font/script, smscript | 7, 5 | 筆記体 |
@textjs/font/mini | 4 | 極小 |
@textjs/font/bubble, digital | 4, 3 | 円や四角で囲んだ文字 |
@textjs/font/ivrit | 6 | ヘブライ文字、右から左 |
@textjs/font/term | 1 | 入力をそのまま出力 |
すべてのグリフは印字可能な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自体の回帰テスト入力です。すべて完全に一致します。