الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

واجهة للبرامج النصية تستخدم اللغة العربية على الوندوز

بدأه ابن المدينة الشنقيطي في 15 مارس 2014 · 7 رد · 917 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

ما رأيكم في بناء terminal emulator يدعم العربية مثل xterm على windows

ودول تعمل على إخراج النص وإدخاله لبرامج (console) معتمدين على نافذة عادية

لإظهار النص

 

و إستخدامها هكذا:

UiNWO.jpg

arcon يمثل الواجهة

putc لطباعة حرف واحد

getc للحصول على حرف من لوحة المفاتيح

gets للحصول على سطر كامل

puts لطباعة نص كامل

 

النتيجة:

ad1KC.jpg

تم تعديل هذه المشاركة بواسطة ابن المدينة الشنقيطي في 15 مارس 2014 في 00:43

1

رقت عينيا شوقًا == ولطيبة ذرفت عشقًا

فأتيت إلى حبيبي == فاهدأ يا قلب ورفقًا

صل على محمد == السلام عليك يا

يا رسول الله == السلام عليك يا حبيبي

#2

أرجو الرد

تم تعديل هذه المشاركة بواسطة ابن المدينة الشنقيطي في 15 مارس 2014 في 00:06

1

رقت عينيا شوقًا == ولطيبة ذرفت عشقًا

فأتيت إلى حبيبي == فاهدأ يا قلب ورفقًا

صل على محمد == السلام عليك يا

يا رسول الله == السلام عليك يا حبيبي

#3

السلام عليكم،

مرحبا بك فى قسم C++/C،

 

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

 

بعد الإنتهاء من مرحلة التخطيطـ يمكنك البدء فى الكود حينها و عندما يرى الأعضاء جديتك فى المشروع قد يخصصوا وقتا للعمل معك فيه - هذا بالإضافة للمشرفين.

 

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

 

 

و الله ولي التوفيق

3

مدونتي: C++ Tips and Tricks

#4

شكرا أخي c++er

 

أنا لا أطلب مساعد أو مشروع جماعي

أنا أسئل عن فائدته للمبرمجيين العرب

أنا أكملت منه 90%

 

معلومات عنه

نظام التشغيل المستهدف : Windows

يعتمد على : Win32 api فقط

 

الهدف:

بناء مكتبة تسهيل بناء البرامج النصية تدعم العربية عبر Unicode على المبرمجيين دون الإعتماد على الشاشة السوداء

بل إنشاء نافذة خاص بنا في مسار(Thread  ليبقاء المسار الرئيسي لمستخدم المكتبة

 

وإنشاء دول لطباعة النص و إدخاله من مستخدم البرنامج وهي:

} class arConsole

:public
;(getc(wchar_t c                         
;(putc(wchar_t c                         

;(gets(wchar_t* pStr, unsigned int sizebuf=0                        

;(puts(wchar_t* pStr                        

;{

 

ربما الكود يشرح لكم ما أريد

 

هذه ملفات المشروع 

وهي

arConsole.h و arConsole.cpp تمثل الواجهة

Stream.h و Stream.cpp تمثل طريقة الإتصال

main.cpp مثال على الإستخدام

تم تعديل هذه المشاركة بواسطة ابن المدينة الشنقيطي في 16 مارس 2014 في 09:18

2

رقت عينيا شوقًا == ولطيبة ذرفت عشقًا

فأتيت إلى حبيبي == فاهدأ يا قلب ورفقًا

صل على محمد == السلام عليك يا

يا رسول الله == السلام عليك يا حبيبي

#5

السلام عليكم ورحمة الله وبركاته،

 

بسم الله والحمد لله والصلاة والسلام على رسول الله، وأما بعد، أشكرك على هذه المجهود فاني لا ارى ما يعيق البرامج النصية العربية غير شححات البرامج التي تدعمها دعما صحيحا. ولا أقصد بالدعم الصحيح قدرة البرنامج على عرض المحارف العربية أو حتى اتجاه الكتابة، وإنما عدم التباين في طرق عرض الحروف والكلمات.

 

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

 

للأسف، الخطوط العادية ليست مناسبة (حتى الذي انتمى منها إلى عائلة monospace) لأنها تتباين وتختلف في طرق عرض المحارف، ولك في خط windows الأفتراضي مثال: ففي هذا الخط تجمع اللام والميم في خلية واحدة، وهذا مخالف لباقي الخطوط التي تعرض الحرفين في خليتين مستقلتين. وهذا دون الخطوط monospace التي تتجاهل مبادئ monospace كليا أذا لم يكن الحرف من مجموعة ascii (خط أبنتو الإفتراضي). فالمشكل ليست مشكلت دعم وإنما مشكلة عدم وجود مقياس أو معيار واحد متبع يحدد طريقة عرض المحارف. ومن دونه لن نستطيع كتابة برامج نصية جيدة التي تستغل ابعاد المحارف العروفة في تهذيب المخرجات وتسهيل قراءتها.

 

أنا أرى أن أبسط طريقة لربط المحارف هي استخدام محارف Arabic Presentation forms - B (يبدأ من U+FE70 وينهي إلى U+FEFF) من معيار اليونيكود (أي لا يتشارك حرفين في خلية واحدة إلا في خمسة حالات "لا" "لأ" "لإ" "لا)، وتستثنى الحركات من هذا القاعدة. وبتالي فإن حساب طول السطور يسهل - سواء برمجيا أو يدويا. طبعا هذا مجرد رأي ولا اتشدد فيه.

 

xterm هو المعيار المتبع للطرفيات الوهمية في لينكيس، وهو الذي تقاس عليه جودة الطرفيات الجدد. ما نحتاجه هو معيار إليه تقارن الطرفيات العربية الأخرى.

 

وهذا ما كنت سأسسه بإنجاز مشروع طرفية بسيطة وسهلة الفهم الهدف منها هو أن تكون معيار لمن أراد أنجاز طرفيته الخاصة، ولكن مع مشروعك هذا، قد يكون هناك حل أفضل، ما رأيك بأن ننسق فيما بيننا لكي نوحد طريقة العرض ونجعله معيار لمن أرد أن يكتب برامج نصية؟

2
#6
اقتباس
إنما مشكلة عدم وجود مقياس أو معيار واحد متبع يحدد طريقة عرض المحارف

كل خط من خطوط اللغه العربية له معايير محدده لرسمه و الطريقه التى يتم بها عرض حروف اللغه العربية داخل ويندوز لا مشكله فيها (انا لا اتكلم عن الـ console فهو موجود كـ backward compatibility فى تصميم NT الاصلى).

 

إذا اردت كتابة خط عربي سليم عليك استخدام Unicode مع مكتبة Uniscribe

 

 

و الله ولي التوفيق

2

مدونتي: C++ Tips and Tricks

#7
C++er كتب:

كل خط من خطوط اللغه العربية له معايير محدده لرسمه و الطريقه التى يتم بها عرض حروف اللغه العربية داخل ويندوز لا مشكله فيها (انا لا اتكلم عن الـ console فهو موجود كـ backward compatibility فى تصميم NT الاصلى).

 

إذا اردت كتابة خط عربي سليم عليك استخدام Unicode مع مكتبة Uniscribe

 

 

و الله ولي التوفيق

 

عفوا أخي لم أفهم قصدك. لو وضحت أكثر أكون شاكر.

 

للإيضاح من جهتي: ألذي أشكو منه هو عدم اتفاق مصممي الخطوط على طريقة لصق المحارف، فتارة تجمع الام مع الميم وتارة تفصل (فرق خلية واحدة يفسد التنسيق). والأمر يجب ألا يكون في يد مصمم الخطوط أصلا -للطرفيات فقط وليس لعامة التطبيقات- لأن أي أختلاف يخل بطريقة حساب أماكن الخلايا وبتالي يفسد الترتيب. ولهذا وجدت عائلة monospaceg لترميز ascii؛ الخط يضمن أن لكل محرف خليته الخاصة. monospace لا ينفع للعربية بسبب الأمور التي ذكرتها آنفا

تم تعديل هذه المشاركة بواسطة سليمان الإبراهيم في 16 مارس 2014 في 10:53

2
#8

شكرا أخي سليمان لإهتمامك

 

هذا بسبب الفرق بين الأبجديتين

أن الإنجليزية غير متصلة الحروف

و العربية متصلة الحروف وهناك تفاوت بين حروفها وهي مشكلة ثانوية

فالمبرمج يريد مكتبة لإخراج النص إلى الطرفية والإدخال منها

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

وهي مشكلة ثانوية ويمكن حلها لاحقا

المهم:

  • دالة إخراج
  • دالة إدخال
  • دالة إخراج مثل printf
  • دالة إدخال مثل scan
  • عدم شعور المبرمج بالفرق

أخي c++er

هل يمكن بناء بيئة خاصة بالطرفية العربية؟

تتعامل فيها البرامج فيما بينها عبر تيارات قياسية(stdout,stdin,stderr) خاص بنا

مثلا تشغيل برنامج آخر يعتمد على مكتبتنا وتوجيه مخرجاته ومدخلاته إلى الأول

 

هذا مخطط لب المكتبة

BlNki.gif

الله يعينكم على خطي :evil:

تم تعديل هذه المشاركة بواسطة ابن المدينة الشنقيطي في 17 مارس 2014 في 08:07

رقت عينيا شوقًا == ولطيبة ذرفت عشقًا

فأتيت إلى حبيبي == فاهدأ يا قلب ورفقًا

صل على محمد == السلام عليك يا

يا رسول الله == السلام عليك يا حبيبي

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…