גופנים

⁦@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> מקבל גופן ומחרוזת. השורות נמדדות בתאים, כך שהאותיות משתלבות ב-layout של flexbox כמו כל רכיב <Text> אחר.

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" });// ["  _   _          _   _         ", " | | | |   ___  | | | |   ___  ", …]

layout

ה-layout האופקי פועל לפי הדגלים של FIGlet.

layoutfigletהשפעה
"default"-sה-layout של הגופן, לרוב עם מיזוג תווים
"full"-Wרוחב מלא; התווים לעולם אינם נוגעים זה בזה
"fitted"-kצימוד; התווים מתקרבים עד שהם נוגעים זה בזה
"smushed"-Sמיזוג לפי כללי הגופן, גם בגופנים עם צימוד
"universal"-oתווים מאוחרים חופפים לתווים קודמים
0–63-mמצב מיזוג מפורש

כל ששת כללי המיזוג האופקי ממומשים: תו זהה, קו תחתון, היררכיה, זוג נגדי, X גדול ורווח קשיח.

verticalLayout חל על טקסט מרובה שורות. ⁦FIGlet 2.2.5⁩ לעולם אינו מקרב שורות זו לזו, ולכן ברירת המחדל היא "full"; המצבים "fitted", "smushed" ו-"universal" מממשים את חמשת הכללים האנכיים, כולל מיזוג-על של קווים אנכיים, ו-"default" משתמש בכללי הגופן.

גלישת שורות ויישור

columns (או width ב-renderFiglet) מבצע גלישת שורות בין מילים, ואז באמצע מילה, בדיוק במקומות שבהם figlet -w היה עושה זאת. הערך של align הוא "left",‏ "center" או "right"; ללא רוחב מוגדר, השורות מיושרות בתוך רוחב השורה הרחבה ביותר. גופנים מימין לשמאל כמו ivrit מודפסים מימין לשמאל ומיושרים לימין; לשינוי ההתנהגות יש להשתמש ב-direction.

גופנים כלולים

ייבואשורותהערות
@textjs/font/standard6ברירת המחדל של FIGlet
@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⁩ הניתן להדפסה, כך שכל תו המרכיב אותו תופס בדיוק תא אחד בגופן Menlo של DevTools. המודול @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⁩, זהים בית לבית, תחת רישיון BSD בעל 3 סעיפים של FIGlet. כל גופן שומר את הקרדיטים שלו בשורות ההערות, הזמינות בזמן ריצה דרך font.comment. גופנים נפוצים ללא הרשאה להפצה מחדש, כמו Doom, ⁦Larry 3D⁩, ⁦ANSI Shadow⁩ ו-⁦Calvin S⁩, אינם כלולים.

אימות מול figlet

מערך הבדיקות משחזר 273 פלטים שהוקלטו מהקובץ הבינארי המקורי של figlet בגרסה 2.2.5: כל גופן כלול בכל מצב layout, גלישת שורות, יישור, טקסט מימין לשמאל, מצב פסקה וקלט בדיקות הרגרסיה של FIGlet עצמו. כולם תואמים בדיוק.

עריכת הדף ב-GitHub