← بلاگ

⁦Text.js⁩ میں FIGlet فونٹس

⁦@textjs/font⁩، ⁦FIGlet .flf⁩ فونٹس پارس کرتا ہے اور figlet پروگرام کی طرح ان کا لے آؤٹ بناتا ہے۔ اس کے ٹیسٹس ⁦figlet 2.2.5⁩ سے ریکارڈ کردہ 273 آؤٹ پٹس دوبارہ چلاتے ہیں، اور سب کے نتائج یکساں ہیں۔

Adam

⁦Text.js 0.3⁩ میں @textjs/font شامل ہوا، جو FIGlet فونٹس کا پارسر اور رینڈرر ہے۔ اس میں ⁦FIGlet 2.2.5⁩ ڈسٹری بیوشن کے 17 فونٹس شامل ہیں، ہر ایک الگ 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> میں 0.1 سے حروف کی دو بلٹ اِن طرزیں، block اور compact، موجود ہیں۔ FIGlet اس قسم کی حرف نگاری کے لیے 1991 سے معیار ہے، اور سینکڑوں .flf فونٹس موجود ہیں۔ اس فارمیٹ کی سپورٹ کا مطلب ہے کہ ان میں سے کوئی بھی فونٹ کونسول ایپ میں شامل کیا جا سکتا ہے۔

⁦FIGlet⁩ فونٹ ایک سادہ ٹیکسٹ فائل ہے۔ ہیڈر کی ایک لائن اونچائی، hardblank کریکٹر اور لے آؤٹ کے قواعد طے کرتی ہے، پھر ہر کریکٹر قطاروں کے ایک بلاک کے طور پر بنتا ہے جس کی ہر قطار کے آخر میں اختتامی نشان ہوتا ہے۔ اپنے ڈیفالٹ لے آؤٹس میں FIGlet ہر کریکٹر کو بائیں طرف منتقل کرتا ہے یہاں تک کہ وہ پچھلے کریکٹر کو چھو لے، پھر فونٹ کے سَمَشنگ قواعد سے طے کرتا ہے کہ آیا چھونے والے دونوں ذیلی کریکٹر ایک میں ضم ہوں گے۔

لے آؤٹ موڈز

figlet میں پانچ افقی لے آؤٹس ہیں، اور renderFiglet بھی layout کے ساتھ وہی پانچ قبول کرتا ہے:

layoutfigletاثر
"default"-sفونٹ کا اپنا لے آؤٹ، عموماً سَمَش شدہ
"full"-Wپوری چوڑائی؛ کریکٹر کبھی ایک دوسرے کو نہیں چھوتے
"fitted"-kکریکٹر کا ایک دوسرے کو چھونے تک قریب آنا
"smushed"-Sفونٹ کے قواعد کے مطابق سَمَشنگ
"universal"-oبعد کے کریکٹر کا پچھلے کریکٹر پر اوورلیپ

-1 سے 63 تک کا عدد ایک خام -m لے آؤٹ موڈ ہے: -1 پوری چوڑائی ہے، 0 فِٹ شدہ ہے، اور 1 سے 63 سَمَشنگ کے قواعد منتخب کرتے ہیں۔ افقی سَمَشنگ کے تمام چھ قواعد نافذ ہیں: یکساں کریکٹر، انڈراسکور، درجہ بندی، مخالف جوڑا، بڑا X اور hardblank۔ پارسر فارمیٹ کے باقی حصوں کو بھی سنبھالتا ہے: کمنٹ لائنیں، اعشاری، آکٹل اور ہیکس میں کوڈ ٹیگ والے کریکٹر، غیر موجود کریکٹر کا گلف اور 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> اپنی قطاروں کو سیلز میں ناپتا ہے، اس لیے حرف نگاری کسی بھی دوسرے <Text> کی طرح flexbox لے آؤٹ میں بیٹھتی ہے، اور 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 کے فونٹس جیسے ہیں اور FIGlet کے ⁦BSD 3-Clause⁩ لائسنس کے تحت تقسیم ہوتے ہیں۔ ہر فونٹ کی کمنٹ لائنوں میں اس کے کریڈٹس محفوظ ہیں، جو font.comment کے طور پر دستیاب ہیں۔ دوبارہ تقسیم کی اجازت کے بغیر مقبول فونٹس، جیسے Doom، ⁦Larry 3D⁩، ⁦ANSI Shadow⁩ اور ⁦Calvin S⁩، شامل نہیں ہیں۔

مکمل ریفرنس فونٹس میں ہے۔