با سلام به تمامی دوستان و مخصوصا عزیزانی که با ایمیل هاشون منو شرمنده خودشون کردن !
بسیاری از دوستان در مورد فارسی سازی در این برنامه سئوال کرده بودند که چطور این برنامه بدون نیاز به فارسی ساز می تونه فارسی را درست نمایش بدهد! برای همین خواستم این مطلب را در اینجا توضیح دهم که همه دوستان استفاده کنن!
در مورد نوشتار زبانهای مختلف باید بگم که بطور کلی به دو دسته تقسیم می شوند:
1. Simple Scripting :
آن دسته از زبانهایی هستند که قرار گیری حروف آن زبان در کنار هم باعث تاثیر بر روی همدیگر در نمایش نمی گردد! بطور مثال انگلیسی. اگر توجه کنید مثلا اگر شما حرف H را تایپ کنید و در کنار آن حرف e را تایپ کنید در شکل H هیچ تاثیری نمی گذارد! به همین دلیل به اینگونه زبانها Simple Scripting می گویند.
2. Complex Scripting :
زبانهایی که در نوشتار حروفشان با قرار گیری در کنار هم باعث تغییر می گردد و برای نمایش حرف ها در کنار هم نیاز به منطقی وجود دارد! بطور مثال فارسی یا عربی از این دسته هستند! بطور مثال به حرف "ب" توجه کنید:
a. اگر حرف قبل از آن قابلیت چسبان بودن به راست را داشته باشد به "ـب" تبدیل می شود! ( ب از چپ به حرف قبلی می چسبد و شکلش عوض می شود! ) در غیر اینصورت شکلش عوض نمی شود.
b. اگر حرف قبل قابلیت چسبندگی چپ و حرف بعد قابلیت چسبندگی راست داشته باشد شکل آن بصورن "ـبـ" ( ب از دو طرف چسبان ) تبدیل می شود!
c. اگر فقط حرف بعدی قابلیت چسبان از راست را داشت به شکل "بـ" ( ب از چپ چسبان ) تبدیل می شود!
d. اگز حرف قبل و بعد چسبان نبودند هم تغییری نمی کند!
پس متوجه شدید که یک حرف می تونه به 4 حالت مختلف تبدیل شود! بعضی اوقات مسئله حتی پیچیده تر می شود مانند ( ل + ا ) = ( لا ) و نه ( لـا ) !!! خوب می بینید که واقعا نام Complex Scripting شایسته زبانهای از این دسته هستند!
بسیاری از سیستم عاملهای ویندوز این قوانین را در خود دارند و در اصل چیزی را که شما تایپ می کنید را بصورت تک تک حرف در خود قرار می دهند و در نمایش آن مقدار صحیج آنرا به شما نشان می دهند! مثلا برای "سلام" فقط "س ل ا م" را نگهداری می کنند و در نمایش آنرا طبق قانون خود نمایش می دهد! برای همین وقتی شما برنامه ای برای Pocket PC که قابلیت عربی بدان اضافه نشده حروف بصورتی که ذخیره شده اند نمایش داده می شوند و در نمایش جدا از هم نمایش داده می شوند و این فارسی سازها و عربی سازها فقط کاری که می کنند تعریف قانون نمایش برای سیستم عامل می باشد ( در صورتی که می خواهید به صورت حرفه ای به این موضوع بپردازید به
این آدرس مراجعه کنید! )
خوب و اما این برنامه! من در برنامه خودم تایعی برای تبدیل حروف فارسی ( حرف به حرف - همانطوری که در برنامه ذخیره می شود ) به شکل اصلی آنها نوشتم و قبل از نمایش هر فرم تمامی المانهای فارسی و عربی را با این نابع تغییر می دهم! البته در نسخه دوم این برنامه من کنترولهای فارسی طراحی کردم که این کار را بطور اتوماتیک انجام می دهد!
شرح الگوریتم کاری این تابع کمی خسته کننده است ولی بطور کلی می توانم این را بگم که به راحتی شما می توانید جدولی را فرض کنید که دارای پنج ستون و به اندازه حروف فارسی سطر داشته باشد! در سطر اول کد پیج حروف تنهای فارسی و در چهار سطر دیگر کد پیج چهار حرف دیگر راقرار دهید مثلا برای "ب" این سطر بشکل:
{0x628, 0xfe90, 0xfe91, 0xfe92, 0xfe8f}
در خواهد آمد! مرحله بعدی باید دو گروه تعریف کنید که عبارتند از : 1. حروفی که از راست می چسبند ( مثل "ض" و "ا" ) 2. حروفی که از چپ می چسبند ( مثل "ب" )! حال برای نمایش درست یک رشته حرف باید از اول رشته شروع به پردازش کنید :
1. دو متغییر boolean تعریف کنید: NeedRightJoin و NeedLeftJoin
2. اگر حرف قبلی ( در صورت وجود ) جزء گروه 2 بود NeedRightJoin =True
3. اگر حرف بعدی ( در صورت وجود ) جزء گروه 1 بود NeedLeftJoin = True
4. سطر مربوط به حرف فعلی را در جدول حروف 5 ستونه پیدا کنید!
5. اگر NeedRightJoin = False و NeedLeftJoin = False شماره کدپیج کلمه را در ستون 2 را انتخاب کن!
6. برای دیگر حالت ها هم همچنین ( 3 حالت دیگر هم بدین شکل است ! )
خوب بعد از رسیدن به پایان رشته باید کل رشته را معکوس کنید ! البته معکوس کردن هم خودش مسائل خودش را دارد و باید ترکیبات فارسی و عدد و انگلیسی را توجه کنید! و سپس رشته شما درست خواهد شد. این کارها را من در زمانیکه برای ویندوز 95 برنامه نویسی می کردم( زمانی که هنوز Microsoft قارسی و عربی را در سیستم عامل خودش وارد نکرده بود و مانند همکنون WM5 بود ) تجربه کردم و الگوریتم خودم را برای Pocket PC تقویت کردم. این کار کمی ریزه کاری دارد که نیاز به صرف حوصله و وقت دارد ولی کلیات آن ساده است.
امیدوارم این اطلاعات ساده و مختصر به شما عزیزان کمک کرده باشد. در صورت نیاز به اطلاعات بیشتر با من تماس بگیرید:
رضا قربانی
IT Originator
[email protected]