Text.js में FIGlet फ़ॉन्ट
@textjs/font, FIGlet .flf फ़ॉन्ट पार्स करता है और उन्हें figlet प्रोग्राम की तरह लेआउट करता है। इसके टेस्ट figlet 2.2.5 से रिकॉर्ड किए गए 273 आउटपुट दोबारा चलाते हैं, और सभी मेल खाते हैं।
Text.js 0.3 में FIGlet फ़ॉन्ट के लिए पार्सर और रेंडरर @textjs/font जोड़ा गया। इसमें 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 फ़ॉन्ट एक प्लेन-टेक्स्ट फ़ाइल है। हेडर लाइन ऊंचाई, हार्डब्लैंक कैरेक्टर और लेआउट के नियम तय करती है, फिर हर कैरेक्टर पंक्तियों के एक ब्लॉक के रूप में बनता है, जिसकी हर पंक्ति के अंत में एंडमार्क होता है। अपने डिफ़ॉल्ट लेआउट में, 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> अपनी पंक्तियों को सेल में मापता है, इसलिए लेटरिंग किसी भी दूसरे <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, शामिल नहीं हैं।
पूरा रेफ़रेंस फ़ॉन्ट में है।