خطوط FIGlet في Text.js
تحلّل حزمة @textjs/font خطوط FIGlet بصيغة .flf وتنسّقها مثل برنامج figlet. تعيد اختباراتها تشغيل 273 ناتجًا مسجّلًا من figlet 2.2.5، وجميعها متطابقة.
أضاف Text.js 0.3 الحزمة @textjs/font، وهي محلّل وعارض لخطوط FIGlet. تتضمن الحزمة الخطوط الـ17 من توزيعة FIGlet 2.2.5، كل منها في وحدة ES مستقلة، ويطابق خرجها الملف الثنائي figlet 2.2.5 تمامًا.
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>;} ______ __ _ /_ __/__ _ __/ /_ (_)____ / / / _ \| |/_/ __/ / / ___/ / / / __/> </ /__ / (__ )/_/ \___/_/|_|\__(_)_/ /____/ /___/سبب اختيار FIGlet
يتضمن <AsciiFont> نمطَي كتابة مدمجين، block و compact، منذ الإصدار 0.1. يُعد FIGlet المعيار لهذا النوع من الكتابة منذ 1991، وتوجد مئات الخطوط بصيغة .flf. يعني دعم الصيغة إمكانية إدراج أي منها في تطبيق يعمل في وحدة التحكم.
خط FIGlet هو ملف نصي عادي. يحدد سطر الترويسة الارتفاع ومحرف المسافة الثابتة وقواعد التخطيط، ثم يُرسم كل محرف ككتلة من الصفوف مع علامة نهاية في نهاية كل صف. في تخطيطاته الافتراضية، يحرّك FIGlet كل محرف إلى اليسار حتى يلامس المحرف السابق، ثم يستخدم قواعد دمج الخط لتحديد ما إذا كان المحرفان الفرعيان المتلامسان يندمجان في محرف واحد.
أوضاع التخطيط
يوفر figlet خمسة تخطيطات أفقية، وتقبل renderFiglet التخطيطات الخمسة نفسها عبر layout:
layout | figlet | التأثير |
|---|---|---|
"default" | -s | تخطيط الخط نفسه، مع الدمج عادةً |
"full" | -W | عرض كامل؛ لا تتلامس المحارف مطلقًا |
"fitted" | -k | تقارب المحارف حتى تتلامس |
"smushed" | -S | الدمج وفق قواعد الخط |
"universal" | -o | تراكب المحارف اللاحقة فوق السابقة |
يمثل أي عدد من -1 إلى 63 وضع تخطيط خامًا للخيار -m: تعني القيمة -1 العرض الكامل، وتعني 0 التقارب حتى التلامس، وتحدد القيم من 1 إلى 63 قواعد الدمج. نُفّذت قواعد الدمج الأفقي الست جميعها: المحرف المتساوي، والشرطة السفلية، والتسلسل الهرمي، والزوج المتقابل، وحرف X الكبير، والمسافة الثابتة. يعالج المحلّل بقية الصيغة أيضًا: أسطر التعليقات، والمحارف الموسومة برموز بالنظام العشري والثماني والسداسي عشري، ورمز المحرف المفقود، والخطوط التي تُكتب من اليمين إلى اليسار مثل ivrit.
يتبع التفاف النص سلوك FIGlet أيضًا. يكسر width الأسطر عند حدود الكلمات، وداخل الكلمة حين تكون أعرض من السطر، في المواضع نفسها التي يكسرها figlet -w. يطبع figlet -w 80 ما لا يزيد على 79 عمودًا، لذا يقابل -w N الخيار width: N - 1.
مطابقة الملف الثنائي
يحتوي الملف packages/font/test/fixtures/references.json على 273 خرجًا وُلّدت بتشغيل figlet 2.2.5 الفعلي على كل خط مضمّن في كل وضع تخطيط، مع التفاف النص وضبط المحاذاة والنص من اليمين إلى اليسار ووضع الفقرات ومدخلات اختبار الانحدار الخاصة ببرنامج FIGlet مع الخيارات الواردة في الملف run-tests.sh. تخزّن كل حالة الوسائط والمدخلات والخرج الدقيق، ويحوّل الاختبار سطر الأوامر إلى خيارات مجددًا:
for (const f of flags) { if (f === "W") opts.layout = "full"; else if (f === "k") opts.layout = "fitted"; else if (f === "S") opts.layout = "smushed"; else if (f === "o") opts.layout = "universal"; else if (f === "s") opts.layout = "default"; else if (f === "c") opts.align = "center"; else if (f === "r") opts.align = "right"; else if (f === "l") opts.align = "left"; else if (f === "R") opts.direction = "rtl"; else if (f === "L") opts.direction = "ltr"; else if (f === "p") opts.paragraph = true; else throw new Error(`unsupported flag -${f}`);}تتطابق النتائج الـ273 جميعها. لإعادة توليد بيانات الاختبار، أضف figlet 2.2.5 إلى PATH وشغّل bun run --cwd packages/font references.
الخطوط على شبكة الخلايا
يرسم كل خط مضمّن باستخدام محارف ASCII أو Latin-1 القابلة للطباعة، لذا يشغل كل محرف فرعي خلية واحدة بالضبط في Menlo ويصطف على الشبكة. يقيس <FigletText> صفوفه بالخلايا، لذا تستقر الكتابة في تخطيط flexbox مثل أي <Text> آخر، ويتولى columns و align التفافها وضبط محاذاتها داخل صندوقها.
لكل خط وحدة مستقلة، لذا لا يتضمن التطبيق إلا الخطوط التي يستوردها، ويُحلّل الخط عند أول عرض بدلًا من وقت الاستيراد. تصدّر @textjs/font/all جميع الخطوط لاستخدامها في المعارض.
يمكن جلب أي خط FIGfont آخر وتحليله وقت التشغيل:
import { parseFont } from "@textjs/font";const doom = parseFont(await (await fetch("/fonts/doom.flf")).text(), "Doom");الترخيص
تطابق الخطوط المضمّنة الخطوط الموجودة في figlet-2.2.5.tar.gz بايتًا ببايت، وتُوزّع بموجب ترخيص BSD ذي البنود الـ3 الخاص ببرنامج FIGlet. يحتفظ كل خط بمعلومات نسبه في أسطر تعليقاته، المتاحة عبر font.comment. لا تتضمن الحزمة الخطوط الشائعة التي لم يُمنح إذن بإعادة توزيعها، مثل Doom و Larry 3D و ANSI Shadow و Calvin S.
يوجد المرجع الكامل في الخطوط.