بسم الله الرحمن الرحيم
السلام عليكم و رحمة الله و بركاته
هذا مشروع اعمل عليه لحل مشكلة دعم اللغة العربية في البرامج اللتي لا تدعمها.
طبعا كلنا يعرف ان ويندوز قد حل هذه المشكلة منذ زمن, و مع وندوز اكس بي اصبح دعم اللغة العربية موجود في كل النسخ, يعني لا يوجد شي اسمه نسخة تدعم العربية و نسخة لا تدعمها.
لكن طبعا كما تعرفون, ليس كل شيء في الدنيا هو وندوز! و هناك برامج تعمل على الوندوز ولا تدعم اللغة العربية بشكل كامل, و هو ما دفعني الى البدء في المشروع من الأساس, حيث اني كنت اعمل على احد تلك "البرامج" ;)
في الحقيقة هو ليس بالظبط برنامج .. هو لعبة! لعبة Half-Life 2, و هي لمن لا يعرف ربما أقوى لعبة صدرت لحد الآن, محركها و محرك Doom 3 في صراع شديد على القمة :D
ما علينا, القصة اني في احد منتديات الألعاب وجدت أحد الأشخاص يقول انه سيحاول ان يدبر حركة عن طريق الـ SDK لدعم الشات باللغة العربية.
الفكرة بصراحة خرطت مشطي, و قصة Half-Life 2 طويلة نوعا ما, هناك SDK للعبة يحتوي على الكود الكامل لملفات server.dll و client.dll يسمح لك بإنشاء mods للعبة.
القصة طويلة, من أراد المزيد يستطيع ان يقرأ هذا الموضوع:
http://maxforums.net/showthread.php?t=46037
عموما, عندما حاولت تطبيق الفكرة, وجدت نفسي في مشكلة: أريد طريقة لأخذ string يحتوي على حروف عربية و انجليزية ثم ينشيء منها string آخر يحتوي على الحروف مرتبة بشكل معين بحيث أنه عند عرض الـ string سيظهر بشكل صحيح.
مثلا, لو أردت كتابة
test تجربة
فإنها تظهر في Half-Life 2 بالشكل التالي:
test ة ب ر ج ت
ما أريد عمله, هو معالجة النص و انتاج نص آخر يكون شكله هكذا:
test تـ ـجـ ـر بـ ـة
جميع أشكال الحروف موجودة في الـ Unicode, كل ما عليك عمله هو اختيار الشكل المناسب لكل حرف بحيث يظهر في سياقه الصحيح, يعني هنا حرف الجيم "ج" هو حرف متوسط, يتصل بالحرف اللذي قبله و اللذي بعده, لذلك نريد ان نضع مكانه الحرف "ـجـ", و هو من وجهة نظر اليونيكود حرف آخر تماما (من وجهة نظر كود الحرف على الأقل).
هذه الفكرة جائتني عندما أشار أحد الاشخاص الى انك بإمكانك ان تكتب بالعربية في Half-Life 2 عن طريق فتح الـ charmap و اختيار الحروف بالشكل الصحيح ثم نسخها و لصقها. فقلت لنفسي: هذه هي الخطوة الأولى.
طبعا في البداية, كنت احاول البحث في النت عن حل جاهز, لا بد ان حل كهذا موجود!! لكني بصراحة لم أجد الكثير, و ما وجدته لم يعجبني, إما لتعقيده او عدم وضوحه او لأني لم اعرف كيف استخدمه (او لجميع تلك الأسباب). وجدت مشروعا اسمه fribidi, لكني لم استخدمه للأسباب اللتي ذكرتها للتو.
قلت لنفسي لا بد ان هناك طريقة في الوندوز لاستدعاء function يقوم بهذه العملية, عرفت ان وندوز يستخدم مكتبة اسمها uniscribe, لكني لم أفهم كيف من المفروض ان استخدمها ..
في النهاية قررت ان اقوم بكتابة الكود لعمل ذلك بنفسي!
أول نسخة للحل وضعتها في منتدى "المنتدى" لكن طبعا الإقبال هناك كان ضعيف, هذا هو الموضوع:
http://montada.com/showthread.php?t=346661
قد يكون هذا العمل دون فائدة عملية, لأن هناك مكتبات أخرى تقوم بنفس الشيء, لكني أظن ان هذا العمل له فائدة على الأقل تعليمية .. على الأقل بالنسبة لي.
عندما شاهدت المشروع يعمل شعرت بأني أنجزت شيئا عظيما :P
و من يدري, ربما يتطور هذا الموضوع و يصبح شي قياسي مثلا في يوم من الأيام (ههههه الرجال يحلم كثير!!)
هناك في الموضوع تجدون النسخة الأولى من المشروع, و رغم أنني استخدمت بعض الكائنات, لكن الكود كان procedural جدا جدا, و هناك بعض الأشياء اللتي تعلمتها من الكورس اللذي نأخذه حاليا في الجامعة جعلتني أراجع الكود و أعيد طريقة كتابته لجعله object oriented بأفضل قدر ممكن.
لأعيد الهدف من الكود:
أخذ string يحتوي نصوص عربية و انجليزية مرتبة بشكل منطقي (حسب ترتيب ادخالها من الكيبورد) و إنتاج string جديد يحتوي على الحروف مشكلة بترتيب "بصري" بحيث عندما يتم عرضها تظهر بالشكل الصحيح.
آخر نسخة من المشروع تجدونها هنا:
http://pages.cpsc.ucalgary.ca/~abdurahh/bi...alpha-0.2.1.rar
و سأقوم بوضع جميع النسخ القادمة هنا إن شاء الله:
http://pages.cpsc.ucalgary.ca/~abdurahh/bidi/
و هذه أول نسخة اصدرتها
http://pages.cpsc.ucalgary.ca/~abdurahh/bi...c%20version.rar
تستطيعون مقارنتها بالنسخة الجديدة :lol:
المشروع لا يزال قيد العمل, لا يزال هناك الكثير ..
بانتظار ارائكم و اقتراحاتكم :D

