גופנים
@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> מקבל גופן ומחרוזת. השורות נמדדות בתאים, כך שהאותיות משתלבות ב-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.
layout | figlet | השפעה |
|---|---|---|
"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/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 הניתן להדפסה, כך שכל תו המרכיב אותו תופס בדיוק תא אחד בגופן 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 עצמו. כולם תואמים בדיוק.