You're viewing all posts tagged with rtl

بعض النواقص في IE

كالعادة يتحفنا Internet Explorer بمشاكله اللانهائية اللتي تعيق مطوري الويب عن العمل!

who didn’t see that coming?

في مشروع bidiweb استخدمت Array.filter و Array.map و لكن يبدو انها غير مدعومة في IE لانها اضافة جديدة نوعا ما للستاندرد و لا زال IE لم يلحق بها.

لكن لا مشكلة .. بحث بسيط في وثائق موزيلا يظهر لنا كيفية دعم هذه الفنكشنز في المتصفحات اللتي لا تدعمها. و بالمناسبة، للبحث في وثائق موزيلا: كل ما عليك هو اضافة mdc الى عبارة البحث في كووكل، مثلا: array.map mdc

و سنجد النتيجة الأولى هي وثيقة موزيلا حول هذا الفنكشن: https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Objects/Array/Map

و تحت عنوان Compatibility نحصل على جافا سكربت يمكن اضافته من اجل المتصفحات اللتي لا تدعم هذه الخاصية مباشرة، مع ملاحظة في الاسفل تقول:

This algorithm is exactly the one used in Firefox and SpiderMonkey.

مما يطمئنك الى ان تضمن نفس الـ behavior في انترنت اكسبلورر

بما انه لدي اكثر من فنكشن .. و لا اريد تقبيح الكود في autobidi.js باضافة “تلزيك” من هذا النوع، اضفت ملف منفصل هو iefix.js

التعرف التلقائي على اتجاه الفقرات في صفحات الويب - 2

قمت الان بتطبيق السكربت على هذا البلوك و كذلك على بلوكي الياباني و بلوكي الاخر على http://tech.hasenj.org

كتجربة عملية، لنجرب كتابة فقرة انكليزية:

This is webbidi in action, it’s figuring out which paragraphs are LTR and which are RTL, and then fixing them accordingly.

من اهداف السكربت ان يكون ذكيا بعض الشيء و لا يعتمد فقط على اول كلمة في الجملة، بل ياخذ في الحسبان انه قد تكون هناك فقرة عربية تبدأ بكلمة انكليزية، على سبيل المثال:

linux هو نظام تشغيل مفتوح المصدر، و هو النظام المفضل لدى الهاكرز (هواة البرمجة).

لاحظ ان الفقرة السابقة عربية مع انها بدأت بكلمة انكليزية، و هذا ليس من قبيل الصدفة، فهذا يحصل كثيرا في المقالات التقنية لاننا غالبا ما نتحدث عن منتجات و ادوات و برامج و تقنيات اجنبية.

كيف نحدد اذن اتجاه الفقرة؟

العملية ليست بذلك التعقيد، الاسلوب اللذي اتبعته يعتمد على فكرة بسيطة: تخيل ان هناك فقرة عربية تبدأ بكلمة انكليزية، ما هي الخاصية اللتي تحويها هذه الفقرة لكي نحكم عليها انها ليست فقرة انكليزية؟ بسيطة .. ستجد ان اغلب الكلمات في الفقرة عربية. لذلك ربما نريد ان نحدد اتجاه الفقرة عن طريق اتجاه اول جملة فيها و ليس اول كلمة فيها.

الفكرة ببساطة، نقوم بأخذ اول X كلمات، حيث X = 10 و ناخذ اتجاه اول كلمة على انه المرشح C، و نعتبر الاتجاه الاخر D ناخذ نسبة الاتجاهات C الى D، فإذا كان عدد الكلمات ذات الاتجاه C اكثر من P بالمئة (حيث P = 40) نعتبر ان اتجاه الفقرة هو C (و هو مرشحنا الاول)، اما اذا وجدنا ان نسبة الكلمات اللتي تحمل هذا الاتجاه اقل من P بالمئة، نعتبر الاتجاه الاخر هو اتجاه الجملة.

هذه الفكرة تعتمد على افتراض و هو ان عدد الكلمات الانكليزية سيكون قليلا في هذه الحالة. قد لا تنجح الفكرة في جميع الحالات، او قد تقودني التجارب الى تغيير قيم X و P، فقد اقوم باخذ عدد اكبر من الكلمات، او بدل الاعتماد على عدد الكلمات، قد ابحث عن اول جملة عن طريق البحث عن نقطة او سطر جديد او ما شابه.

و السبب في تحديد النسبة P برقم 40 (اي اقل من النصف) هو حالة خاصة واجهتها في البلوك الياباني و ذلك عند ذكر معاني الكلمات: فمعاني الكلمات عادة تكون اسطر قليلة، كل سطر يبدأ بكلمة من اللغة الاخرى يليها المعنى العربي، و هنا اريد ان يكون اتجاه الفقرة هو اتجاه اللغة الاخرى.

و طبعا في جميع الاحوال، مهما حاولنا تضبيط السكربت و جعله اكثر ذكاءاَ، ستظل هناك حالات تحتاج الى تدخل بشري لتحديد اتجاه الفقرة، و في هذه الحالة يمكن ان نعتمد على رموز اليونيكود الخاصة بتحديد الاتجاه مثل RLE و اخواتها، و هي رموز غير مرئية لهذا تسترعي شيئا من الحذر في الاستعمال. و هذه الجزئية لم اقم باضافتها بعد لكنها ضمن مخططات التطوير.

الكود بسيط و صغير، ادعوكم لقرائته على github

http://github.com/hasenj/bidiweb/blob/master/autobidi.js

لم اضع اشعار ترخيص في الملف (بعد) و لكن هو مشروع مفتوح المصدر و باختصار افعل به ما تشاء! حتى لو وضعته في برامج مغلقة او مواقع خاصة او برامج تجارية.. ليس لدي اي مانع. فقط ارجو المشاركة بالتحسينات في حال قمت باضافة خواص جديدة (لكنك غير مجبر على ذلك).

التعرف التلقائي على اتجاه الفقرات في صفحات الويب

قبل ايام بدأت افتتاح مدونة جديدة .. هدفها الاساس نشر مواد استخدمها لتعلم اللغة اليابانية: http://nihongo.hasenj.org

المدونة تقريبا لا تزال قيد الانشاء، لكني واجهت مشكلة: محاذاة النص العربي الى اليمين و النص الياباني الى اليسار!

المشكلة تكمن في ان markdown لا يحتوي اي وسيلة لتحديد اتجاه النص، و قد تجاوزت هذه المشكلة في هذه المدونة عن طريق حيلة TagsAsClasses كما نشرتها هنا

لكن هذه الحيلة تصلح فقط حين يكون هناك اتجاه واحد لجميع الفقرات (باستثناء الكود).

فكرت مليا في حل لهذه المشكلة

فكرت اولا باضافة دعم خاص للغة العربية في ماركداون و لكن ماذا عن اللغات الاخرى مثل تسكتايل؟

بعد تفكير ملي، وجدت ان افضل حل عملي هو عمل جافا سكربت يقوم بالتعرف تلقائيا على الفقرات العربية و تحويل اتجاهها لليمين.

هذا الحل محدود في انه يعمل على الوب فقط! و لكنه عملي .. لانه المجال اللذي نحتاجه فيه غالبا.

الكود هنا: http://github.com/hasenj/bidiweb

و هذه هي النتيجة:

sample

العربية في vim

منذ ايام قمت بتجربة بيئة KDE في اوبونتو، و كنت قد حاولت ذلك في السابق لكنها لم تعجبني كثيرا، صحيح انها تبدو اكثر اناقة و جمالا بكثير من xfce و لكنها مزعجة بعض الشيء (شوية confusing)

لكنني قررت ان اصبر عليها قليلا و اعطيها فرصة

وجدت عدة اشياء جعلتني ابقى معها .. و من ضمنها خاصية دعم اللغة العربية في konsole

مما يعني دعم اللغة العربية في vim

كيف؟

هناك خيار لدعم اللغات اللتي تمشي من اليمين الى اليسار في konsole و يمكن الوصول اليه من القوائم العادية بعد تفعيله، نفعل خيار termbidi في vim لكي نخبره ان الترمنل يدعم اللغة العربية

set termbidi

وضعت هذا الخيار في .vimrc

بعدها يمكن الكتابة باللغة العربية في vim بشكل عادي =)

يمكن بالطبع استخدام konsole في gnome و xfce ايضا!!

صورة:

arabic in vim

كيف تساعد في تجريب دعم العربية في سكريبس؟

اقوم حاليا بمحاولة اضافة دعم اللغة العربية الى برنامج النشر المكتبي scribus, و طبعا نحتاج الى متطوعين للتجريب و التبليغ عن المشاكل. حاليا النقاشات كلها تدور في منتدى مجتمع لينوكس العربي http://www.linuxac.org/forum/linuxac80/thread31840.html

تعليمات التحميل و التشغيل

قم بتحميل الكود:

git clone git://github.com/hasenj/scribus.git --depth 1
cd scribus
git checkout -t origin/hasen

ثم قم ببناء المشروع

cmake Scribus
cd Scribus
make 
sudo make install

و الان يمكن تشغيله عن طريق الامر

scribus

لسحب التحديثات:

git pull

بعد سحب التحديثات يجب بناء المشروع مرة اخرى:

make
sudo make install

متطلبات البناء

للانظمة الردهاتية, تحتاج الحزم التالية و اللتي يمكن تحميلها عن طريق yum install package_name

libstdc++-devel (Required)
gcc-c++ (Required)
qt4-devel (Required)
freetype-devel (Required)
cairo-devel (Required)
fontconfig-devel
cups-devel
libtiff-devel
libxml2-devel
python-devel
lcms-devel (Required)
libpng-devel
libjpeg-devel

الانظمة الدبيانية تحتاج الحزم التالية اللتي يمكن تحميلها عن طريق sudo apt-get install package_name

libqt4-dev (Required)
libfreetype6-dev (Required)
libcairo2-dev (Required)
libfontconfig1-dev (Required)
libcupsys2-dev
liblcms1-dev
libtiff4-dev
libxml2-dev
python2.4-dev
gs-gpl

إضافة:

المعلومات هنا قديمة بعض الشيء، الخطوات في الحقيقة يجب ان تكون:

git clone git://github.com/hasenj/scribus.git --depth 1
cd scribus
cmake Scribus
make 

بعدها يمكن تشغيل البرنامج عن طريق

./scribus/scribus

و بهذا لن يتعارض مع سكريبس الاصلي اذا كان مركبا لديك من المستودعات او ما شابه.

او يمكن ان تقوم بـ sudo make install و لكن هذه الطريقة غير مضمونة و كما يقولون no warranty

دعم اللغة العربية في markdown

هل سمعت من قبل بـ Markdown؟ انها لغة الترميز اللتي يستخدمها موقع Stackoverflow و اخواته للكتابة و النشر, منذ ان تعلمتها هناك و انا احبها و اظن انها الطريقة الوحيدة المريحة لكتابة مواضيع/تدوينات برمجية

تخيل عندما تكتب تدوينة في wordpress مثلا و تريد اضافة كود, يجب ان تدخل اوسمة html يدويا, يعني <pre><code> الخ,

بينما في Markdown فالكود هو مجرد فقرة مدفوعة للامام باربع مسافات امام كل سطر

هذا فضلا عن البساطة في اضافة العناوين و اضافة *emphasis* الى كلمة او فقرة

اصبحت لا اطيق اي طريقة لنشر اي مادة برمجية لا تعتمد على Markdown, و احد اسباب انتقالي الى tumblr فضلا عن النواحية الفنية في الموقع هو دعمه المباشرة لتقنية markdown و كذلك انني استطعت تحويره لكي استطيع نشر مواضيع عربية مكتوبة بالمارك داون

هنا نموذج حي عن امكانيات Markdown

و لكن حاول الكتابة باللغة العربية؟ ستجد ان الكتابة تظهر لليسار و ستكون مصفوفة من اليسار الى اليمين, يعني لو ادخلت كلمات انكليزية في الوسط فستكون النتيجة كارثة انسانية :)

صحيح انني حليت المشكلة في هذا الموقع, و لكنه حل ترقيعي كما يقولون, و نحتاج الى حل افضل.

اولا تعريف المشكلة: البحث عن طريقة لكتابة تدوينات عربية برمجية من دون html او لغات ترميز معقدة. ماركداون تحل المشكلة و لكنها لا تعرف شيئا عن اللغة العربية.

طبعا في عالم الويب فإن دعم عرض و تحرير اللغة العربية امر يتكفل به المتصفح, و لكن ما اقصده هو وضع فقرات عربية تكون مصفوفة الى اليمين و يكون اتجاه سير النص من اليمين الى اليسار. او بمعنى آخر اضافة خصائص direction: rtl; text-align: right الى الفقرات المكتوبة باللغة العربية تلقائيا.

بدأت بعمل fork من مشروع showdown على github و اضفت اليه بعض التعديلات في محاولة لاضافة دعم لاظهار الفقرات العربية من اليمين الى اليسار

الكود منشور هنا:

http://github.com/hasenj/showdown

و هو في مرحلته الاولية, و هناك احتمال لوجود بعض الاخطاء و الـ bugs و لكنه على ما اظن بداية جيدة

هناك مثال حي استضافه صديقي العزيز عمر محمد على موقعه مشكورا :)

http://omar84.com/docs/rtlsd/showdown-gui.html

image

في هذه المرحلة اود اصلاح اي خلل في الكود,

فيما بعد احب ان اضيف نفس الدعم الى محرر wmd في مربع الادخال ايضا و ليس فقط مربع الاخراج

بعدها اضافة التعديلات نفسها الى النسخة الاصلية بلغة perl و الى النسخ المشهورة من اللغات الاخرى مثل python, c#, ruby, الخ

لكن المشكلة الحقيقية ليست هنا, بل في تبني هذه الاضافة من قبل المواقع الشهيرة اللتي تدعم الكتابة و النشر بلغة الترميز هذه .. عندها فقط يمكن ان نقول ان فكرة المشروع نجحت.