الجمعة، 7 نوفمبر 2008

حل مقترح للقراءة المعكوسة في برنامج الجاوز باستخدام مغة الإسكريبت المرفقة مع البرنامج

قد لا يخفى على المحترفين في التعامل مع البرامج الناطقة أن مثل هذه البرامج غالبا ما تنقسم إلى قسمين رئيسيين وهما:
1. آلة النطق العاملة synthesizer وهي المحرك الذي يستغل إمكانيات نظام التشغيل وإمكانيات الحاسب المزود ببطاقة صوت لإنتاج صوت لفظي بصرف النظر عن كونه مفهوما للسامع.
2. قارئ الشاشة screen reader وهو الذي يتحكم في ماهية وكيفية القراءة والتحكم في المخرجات الصوتية اللفظية لآلة النطق لإنتاج محتوى صوتي مفهوم بلغة محددة طبقا لإمكانيات آلة النطق العاملة.

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

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

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

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

والمحصلة:
يتعرف الجاوز على النص العربي ويقرأه من خلال آلة النطق brightSpeech بشكل متميز ما لم يغفل المبرمج عن تحديد لغة واجهة البرنامج أو صفحة الإنترنت ولهذا يقرأ الجاوز صفحات محرك البحث جوجل مثلا بغير خطأ ولا سأم ولا ارتباك حتى في الصناديق المنسدلة أو ما يسمى ب combo boxes. أما المواقع الأخرى التي تغفل هذه المعايير التوافقية تظهر لنا إخفاقات الجاوز في تحديد لغة النص الظاهر على شاشة الحاسب.

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

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

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

تنبيه:
يلزم للمتعامل مع هذه العيّنة الاستماع لفعاليات المحاضرة المذكورة أو المعرفة المسبقة لِلُغة تخصيصات الجاوز Jaws Scripting language وإلا فأنا غير مسئول عن أي ترديات خاصة بعمل الجاوز مع نظام التشغيل العامل.

قم بنسخ الإسكريبت بدأا من السطر التالي

Script reverseSayWord ()
; script for jaws x to reverse the sayCurrentWord
; written by: Wael Zakareya
; feel free to contact me at:
; e-mail: wael_syntax@yahoo.com

; this script is only a sample that is made for jaws scripters who are willing to
; perform the mentioned function on different levels such as
; sayAppTitle, sayLine, saySentence, etc.

var
string ssn, ; synthesizer short name.
string sln, ; synthesizer long name.
string sdn, ; synthesizer driver name.
string englishChars, ; the expected English characters.
string currentWord ; contains the current word characters to be spoken.

GetActiveSynthInfo (ssn, sln, sdn) ; fills up the three mentioned variables with their relevant values.

let englishChars = "~`!@#$%^&*.,-_abcdefghijklmnopqrstuvwxyz"
let currentWord = getWord()

If StringContainsChars(currentWord, englishChars) then
sayString (getWord())
else
if ssn == "Babil v4.1" then ; feel free to change the version of the mentioned synthesizer accordingly.
sayString (stringReverse(getWord()))
elIf ssn == "BrightSpeech v1.2" then ; feel free to change the version of the mentioned synthesizer accordingly.
sayString (stringReverse(getWord()))
else
sayString (getWord())
endIf
endIf

; caution:
; This script should preferably be attached to the relevant key
; for example:
; if sayAppTitle is attached to jaws key plus T then
; let your reverseSayWindowTitle script be attached to jaws key plus T twice quickly.

EndScript

قم بنسخ الإسكريبت إلى نهاية السطر السابق

ملاحظات هامة:
1. يمكنكم تجريب هذا الإسكريبت أولا على أحد البرامج العاملة مثل notePad قبل اعتماده ضمن الملف الافتراضي للجاوز
2. يجب إلحاق اختصار مفتاحي لتشغيل واستدعاء هذا الإسكريبت، وهذا كما يلي:

ا. بعد لصق الإسكريبت داخل ال jaws script manager (مدير إسكريبتات الجاوز( قم بالولوج إلى ساحة نص الإسكريبت (أي انتقل بالمؤشر أسفل السطر
script reverseSayWord ()

ب. قم بالضغط على control plus D لفتح التوصيف الخاص بالإسكريبت
ج. اضغط على tab للوصول إلى العنصر
assign to:
د. قم بحرص شديد بالضغط على الاختصار المناسب لك على ألا يكون مستخدما من قِبل الجاوز
ه. اضغط على enter للتأكيد
و. اضغط على control plus S لتحويل الملف المكتوب إلى ملف مشفر لكي يفهمه الجاوز

ولمزيد من الدعم الفني أو التفصيل يمكنكم الإرسال على:
wael_syntax@yahoo.com