نفیس نستعلیق کی مدد سے لگیچر بیسڈ فانٹ کی تیاری

محمد سعد

محفلین
میں کوشش کر رہا تھا سعد بھائی والے کمانڈ چلانے کی پر کچھ مسائل سے دو چار ہونا پڑا۔ ورنہ میں ایس وی جی فائلز پیش کر دیتا۔ در اصل میں جینیریٹیڈ ویکٹر گرافکس دیکھ تو لیتا ہوں پر محفوظ ہونے والی فائل صفر سائز کی ہوتی ہے۔

میں نے ذیل کی کمانڈ دی:

کوڈ:
pango-view --text="اردو محفل" --font=Nafees-Web-Naskh-Regular --language=ur --rtl --output=urdu.svg

لینکس پینگو ویو میں ذیل کے آپشنز دستیاب ہیں۔

کوڈ:
Application Options:
  --no-auto-dir                                      No layout direction according to contents
  --backend=cairo/xft/ft2/x                          Pango backend to use for rendering (default: cairo)
  --background=red/#rrggbb/#rrggbbaa/transparent     Set the background color
  -q, --no-display                                   Do not display (just write to file or whatever)
  --dpi=number                                       Set the resolution
  --align=left/center/right                          Text alignment
  --ellipsize=start/middle/end                       Ellipsization mode
  --font=description                                 Set the font description
  --foreground=red/#rrggbb/#rrggbbaa                 Set the text color
  --gravity=south/east/north/west/auto               Base gravity: glyph rotation
  --gravity-hint=natural/strong/line                 Gravity hint
  --header                                           Display the options in the output
  --height=+points/-numlines                         Height in points (positive) or number of lines (negative) for ellipsizing
  --hinting=none/auto/full                           Hinting style
  --indent=points                                    Width in points to indent paragraphs
  --justify                                          Align paragraph lines to be justified
  --language=en_US/etc                               Language to use for font selection
  --margin=pixels                                    Set the margin on the output in pixels
  --markup                                           Interpret text as Pango markup
  -o, --output=file                                  Save rendered image to output file
  --pangorc=file                                     pangorc file to use (default is ./pangorc)
  --rtl                                              Set base direction to right-to-left
  --rotate=degrees                                   Angle at which to rotate results
  -n, --runs=integer                                 Run Pango layout engine this many times
  --single-par                                       Enable single-paragraph mode
  -t, --text=string                                  Text to display (instead of a file)
  --version                                          Show version numbers
  --waterfall                                        Create a waterfall display
  -w, --width=points                                 Width in points to which to wrap lines or ellipsize
  --wrap=word/char/word-char                         Text wrapping mode (needs a width to be set)

کہیں ایسا تو نہیں کہ پانگو سے براہِ راست SVG فائل حاصل کرنے کے لیے کسی اضافی پیکج کی ضرورت پڑتی ہو؟ :confused:
آپ دیگر فارمیٹس میں دیکھیں کہ کیا نتیجہ آتا ہے۔ مثلاً txt، png وغیرہ۔۔۔
میں نے فائل کے نام کے آخر میں .txt لگایا تو ImageMagick pixel enumeration فائل حاصل ہوئی۔ شاید اس کا بھی کچھ فائدہ اٹھایا جا سکے۔
 

نبیل

تکنیکی معاون
محمد سعد اور ابن سعید، اگر آپ سکرپٹ میں الفاظ کو فائل سے پڑھیں تو بہتر رہے گا۔ اس طرح اس سکرپٹ کو لگیچرز کی سوفٹ کاپی ان پٹ کی جا سکے گی۔ دوسرے ایس وی جی کی بجائے اگر براہ راست ای پی ایس فارمیٹ میں آؤٹ پٹ کریں تو یہ بھی اس لیے بہتر رہے گا کیونکہ فونٹ لیب میں گلفس ای پی ایس فارمیٹ میں امپورٹ کیے جا سکتے ہیں۔ ہو سکتا ہے کہ فونٹ لیب میں ایس وی جی کی سپورٹ بھی موجود ہو، لیکن مجھے اس کے بارے میں علم نہیں ہے۔
 

نبیل

تکنیکی معاون
ابھی مجھے کہیں جانا پڑ گیا ہے۔ اس کام میں اچھی پیشرفت ہوتی نظر آ رہی ہے۔ واپس آ کر اسے دیکھتا ہوں۔
 

محمد سعد

محفلین
محمد سعد کی فراہم کردہ ویکٹر اشکال ذیل میں پیش کی جا رہی ہیں۔ انک سکیپ میں سکیلنگ کے دوران کھینچا تانی سے اشکال میں کچھ فرق پڑنے کا امکان ہو سکتا ہے۔

انک سکیپ میں تصاویر کو سکیل کرتے وقت Ctrl کی کلید دبا کر رکھی جائے تو لمبائی اور چوڑائی کا توازن برقرار رہتا ہے۔
 
جی میں نے پی این جی فائل بنائی تو درست بن گئی۔ ورنہ صرف پینگو کیریو میں ویکٹر فائل دکھا دیتا ہے۔
 
نبیل بھائی فائل سے الفاظ پڑھنا کوئی مشکل نہیں۔ وہ کسی بھی اسٹیج پر کیا جا سکتا ہے۔ بس شیل اسکرپٹ میں تھوڑی سی تبدیلی درکار ہوگی۔

میرے دماغ میں اس کا ورک فلو کچھ یوں ہے کہ:

- ایک ٹیکسٹ فائل میں تمام لگیچرس اور ان کا رومن لک اپ ٹیب سے علیحدہ کر کے سطر وار لکھ لئے جائیں۔ پھر اسی فائل کو ریڈ کیا جائے اور ٹیکسٹ کے طور پر لگیچر جبکہ فائل نیم کے طور پر رومن لک اپ کو استعمال کر لیا جائے، اسپیس کو ہائفن یا انڈر اسکور سے تبدیل کر کے۔
 

محمد سعد

محفلین
محمد سعد اور ابن سعید، اگر آپ سکرپٹ میں الفاظ کو فائل سے پڑھیں تو بہتر رہے گا۔ اس طرح اس سکرپٹ کو لگیچرز کی سوفٹ کاپی ان پٹ کی جا سکے گی۔ دوسرے ایس وی جی کی بجائے اگر براہ راست ای پی ایس فارمیٹ میں آؤٹ پٹ کریں تو یہ بھی اس لیے بہتر رہے گا کیونکہ فونٹ لیب میں گلفس ای پی ایس فارمیٹ میں امپورٹ کیے جا سکتے ہیں۔ ہو سکتا ہے کہ فونٹ لیب میں ایس وی جی کی سپورٹ بھی موجود ہو، لیکن مجھے اس کے بارے میں علم نہیں ہے۔

ای پی ایس فائل تیار کرنے کے لیے تو صرف svg کو eps سے بدل دیا اور فائل درست بن گئی۔ لہٰذا یہ کوئی اتنا بڑا مسئلہ نہیں۔
البتہ الفاظ کو فائل سے پڑھنے کے لیے مجھے تھوڑے زیادہ مطالعے کی ضرورت ہوگی۔ اگر ابنِ سعید بھائی کو اس کام میں مہارت ہے تو یہ ان کے سر پر ڈال دیتے ہیں۔ ;)
 

محمد سعد

محفلین
نبیل بھائی فائل سے الفاظ پڑھنا کوئی مشکل نہیں۔ وہ کسی بھی اسٹیج پر کیا جا سکتا ہے۔ بس شیل اسکرپٹ میں تھوڑی سی تبدیلی درکار ہوگی۔

میرے دماغ میں اس کا ورک فلو کچھ یوں ہے کہ:

- ایک ٹیکسٹ فائل میں تمام لگیچرس اور ان کا رومن لک اپ ٹیب سے علیحدہ کر کے سطر وار لکھ لئے جائیں۔ پھر اسی فائل کو ریڈ کیا جائے اور ٹیکسٹ کے طور پر لگیچر جبکہ فائل نیم کے طور پر رومن لک اپ کو استعمال کر لیا جائے، اسپیس کو ہائفن یا انڈر اسکور سے تبدیل کر کے۔

بس طے ہو گیا۔ بلی کے گلے میں گھنٹی ابنِ سعید باندھےگا۔ :grin:
 

نبیل

تکنیکی معاون
نبیل بھائی فائل سے الفاظ پڑھنا کوئی مشکل نہیں۔ وہ کسی بھی اسٹیج پر کیا جا سکتا ہے۔ بس شیل اسکرپٹ میں تھوڑی سی تبدیلی درکار ہوگی۔

میرے دماغ میں اس کا ورک فلو کچھ یوں ہے کہ:

- ایک ٹیکسٹ فائل میں تمام لگیچرس اور ان کا رومن لک اپ ٹیب سے علیحدہ کر کے سطر وار لکھ لئے جائیں۔ پھر اسی فائل کو ریڈ کیا جائے اور ٹیکسٹ کے طور پر لگیچر جبکہ فائل نیم کے طور پر رومن لک اپ کو استعمال کر لیا جائے، اسپیس کو ہائفن یا انڈر اسکور سے تبدیل کر کے۔
جی ابن سعید، میں نے نوری نستعلیق پراجیکٹ کے سلسلے میں پائتھون میں اس سے ملتے جلتے طریقے سے ہی فائلوں سے لگیچر پڑھے تھے۔ لگیچرز کے ناموں میں سپیس نہیں آئے گی اس لیے اسے رپلیس کرنے کی ضرورت نہیں ہوگی۔ البتہ ویکٹر اشکال جنریٹ کرنے سے پہلے فونٹ سازوں سے مشورہ کرنا بہتر رہے گا کہ ان اشکال کو کس سکیل پر جنریٹ کیا جائے جس کے بعد یہ فونٹ میں بغیر کسی تردد کے بطور گلفس امپورٹ کی جا سکیں۔ مجھے جہاں تک یاد پڑتا ہے، اوپن ٹائپ فونٹ کی گلفس ڈرا کرنے کے لیے 1000x1000 پکسل کی شیٹ استعمال کی جاتی ہے۔ بہرحال اس کے بارے عارف کریم یا عبدالمجید ہی بہتر بتا سکیں گے۔
 

نبیل

تکنیکی معاون
ابن سعید اور محمد سعد ذرا یہ بتا دیں کہ آپ کونسی شیل سکرپٹ استعمال کر رہے ہیں؟ کیا یہ bash ہے؟ اور لینکس کی کونسی ڈسٹریبیوشن استعمال کی جانی چاہیے جس میں پینگو، انک سکیپ اور اردو فونٹس سمیت تمام ضروری لوازمات موجود ہوں؟
 
جی نبیل بھائی یہ بیش شیل ہی ہے۔ اور میں فیڈورا 12 استعمال کر رہا ہوں 64 بٹ آپریٹنگ سسٹم سارے پیکیجیجیز تازہ ترین اسٹیبل ہیں۔
 

دوست

محفلین
فیڈورا 12 ہی بہتر رہے گا۔ اوبنٹو کا حالیہ نسخہ تو نستعلیق فونٹس کا کباڑہ کررہا ہے۔
 
نبیل بھائی پینگو ویو میں کیریکٹر یا لگیچر کی بنیاد پہ کوئی سیٹنگ دستیاب نہیں اس لئے لگیچر کی چوڑائی اور اونچائی سیٹ کرنا مشکل ہے۔ ویسے بھی یہ بات غٰیر منطقی ہے کہ "ء" اور "نستعلیقیت" لگیچرس کو ایک سائز کے فریم میں رکھا جائے جبکہ گرافکس مارجن سے عاری ہو۔ پوائنٹس میں لائن ہائٹ سیٹ کیا جا سکتا ہے اور وڈتھ کو اسی مناسبت سے آٹو اسکیل ہونے دیا جا سکتا ہے۔ اور ہاں اس میں ڈی پی آئی کی شکل میں ریزولیوشن سیٹ کرنے کا آپشن موجود ہے اس کی کوئی مناسب قدر بتائیے تو وہ بھی سیٹ کی جا سکتی ہے۔
 

محمد سعد

محفلین
ابن سعید اور محمد سعد ذرا یہ بتا دیں کہ آپ کونسی شیل سکرپٹ استعمال کر رہے ہیں؟ کیا یہ bash ہے؟ اور لینکس کی کونسی ڈسٹریبیوشن استعمال کی جانی چاہیے جس میں پینگو، انک سکیپ اور اردو فونٹس سمیت تمام ضروری لوازمات موجود ہوں؟

جی یہ bash سکرپٹ ہی ہے۔ میں فیڈورا استعمال کیا کرتا ہوں کیونکہ اس میں ابنٹو کے برعکس ہمیشہ تازہ ترین پیکجز دستیاب رہتے ہیں (اکا دکا مخصوص صورتوں کے علاوہ)۔

ہماری ضروریات کے لحاظ سے حجم بڑھانے کا کام اگر پانگو کی نسبت انک سکیپ کے ذریعے بہتر طور پر ہوتا ہو تو یوں کر لیں گے کہ پہلے پانگو کے ذریعے لفظ کی ویکٹر فائل بنا کر انک سکیپ کے ذریعے اس کا حجم بڑھا لیں گے۔
 
لیجئے جناب ایک عدد چھوٹی سی ابتدائی شیل اسکرپٹ پیش خدمت ہے۔ ا س پیغام کے منسلکات ملاحظہ فرمائیں۔

یوں تو اٹیچمینٹ میں کافی کچھ ہے پر یہاں اسکرپٹ کی جھلک بھی پیش کر دوں تاکہ وہ احباب جو ڈاؤن لوڈ کر کے جائزہ لینے کی زحمت گوارہ نہ کرنا چاہیں وہ بھی اسکرپٹ کی بہتری کا مشورہ دے سکیں۔ اسکرپٹ انتہائی آسان ہے اور مناسب مقدار میں ان لائن کمنٹ بھی موجود ہیں۔

کوڈ:
#!/bin/bash
# A simple Bash Shell Script to generate gliphs from a file of ligatures.
# It uses pango library to draw graphics.
# Author: UrduWeb.org (Urdu Mehfil)
# Idea: Mohammad Saad
# Licence: This Script is released under GNU/GPL terms and conditions.
# Date: March 3rd, 2010

# USAGE:
# 
# 1: If default ligature file exists
# >> ./liggen.sh
# 
# 2: If custom ligature file is passed
# >> ./liggen.sh input/file/path
# 
# 3: If custom output format (extension) is desired
# >> ./liggen.sh input/file/path ext
# 
# 4: If custom output directory is desired
# >> ./liggen.sh input/file/path ext outpu/directory/path
# 
# TODO: Switch based parameters to override defaults.

# Config variables
FILE="ligatures.txt" # Default ligature file (one ligature per line text file)
FONT="Nafees" # Default font
EXT="svg" # Default output extension
OPDIR="$EXT/$FONT" # Default output directory
DPI=3000 # Default resolution

# TODO: Yet to implement dynamic lookups generation for output file naming
lookup(){
  exit 0
}

# All the magic of generating graphics happens here
printLigature(){
  lig=$1
  pango-view --text="$lig" --font="$FONT" --dpi=$DPI --language=ur --rtl -q --output="$OPDIR/$lig.$EXT"
}

# Override default input file name if a file is passed as first argument
if [ "$1" != "" ]
then
  FILE="$1"
fi

# Override default output file extension if a second argument is passed
if [ "$2" != "" ]
then
  EXT="$2"
  OPDIR="$EXT/$FONT"
fi

# Override default output directory if a third argument is passed
if [ "$3" != "" ]
then
  OPDIR="$3"
fi

# Validating input file
if [ ! -f $FILE ]
then
  echo "$FILE does not exists, please check the file name."
  exit 1
elif [ ! -r $FILE ]
then
  echo "$FILE can not read, please check the permissions."
  exit 2
fi

# Creating output directory if it does not exist
if [ ! -d "$OPDIR" ]
then
  mkdir "$OPDIR" -p
fi

# Reading from the input file line by line and send it to printLigature magical procedure
while read -r line
do
  printLigature $line
done <"$FILE"

exit 0
 

Attachments

  • liggen.zip
    26.3 KB · مناظر: 5

محمد سعد

محفلین
لیجئے جناب ایک عدد چھوٹی سی ابتدائی شیل اسکرپٹ پیش خدمت ہے۔ ا س پیغام کے منسلکات ملاحظہ فرمائیں۔

یہاں pango-view والی کمانڈ کے بعد اگر یہ اضافہ ہو جائے۔
کوڈ:
echo "Generating $OPDIR/$lig.$EXT"

اور ساتھ ہی آخر میں فائلوں کی گنتی ہو جائے۔ مثلاًً

اس طرح آسانی سے معلوم ہو جائےگا کہ کتنا کام ہوا ہے۔
 
ہا ہا ہا ہا خوب!

سعد میاں آئی کینڈی اور بیوٹیفیکیشن کے تئیں آپ کا مشورہ قابل تحسین ہے۔ ظاہر ہے پہلے مرحلے میں اس پر غور نہیں کیا تھا۔ ویسے میں اس اسکرپٹ کا ایک اور ویریئنٹ سوچ رہا تھا جس میں پانچ چھ فارمیٹ کے لئے ایک ساتھ فائلیں تیار ہو جائیں۔ پھر سوچا کہ یہ کوئی بہت زیادہ سہولت دینے والا فیچر نہیں بس ایکسٹینشن بدل بدل کر چار پانچ بار کمانڈ دینے سے وہی کام ہو جائے گا۔ جبکہ دوسری صورت میں نا چاہتے ہوئے بھی تمام طرح کی فائلیں بنتیں اور بلا سبب ڈسک پر پھیل جاتیں۔ خیر میں سوچ رہا ہوں کہ انھیں کسی بڑی لگیچر لسٹ پر آزمایا جائے۔ ایک تو شاید کرلپ کی بھی دستیاب ہے۔

فی الحال رات تقریباً تمام ہوئی جا رہی ہے اس لئے اب ہم سوئیں گے۔
 
Top