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


 
الرئيسيةجستجوأحدث الصورثبت نامورود

 

 SHABIH SAZIYE NEVESHTAR

اذهب الى الأسفل 
3 مشترك
نويسندهپيام
prince-of-persia




تعداد پستها : 70
Registration date : 2008-05-26

SHABIH SAZIYE NEVESHTAR Empty
پستعنوان: SHABIH SAZIYE NEVESHTAR   SHABIH SAZIYE NEVESHTAR Icon_minitimeالجمعة أغسطس 29, 2008 11:30 am

سلام

من برای تکمیل کلاسی که توسط NTlabs نوشته شده دارم TEXTBOX رو به صورت LOW LEVEL شبیه سازی می کنم یعنی خودم دارم با استفاده از عکس کاراکترها و تایین شکل مناسب کاراکتر (از نظر موقعیت : مثل 1- از سمت راست چسبیده 2-در وسط قرار دارد و ...) متن مورد نظر رو بنویسم .

البته در گام اول قصد دارمیک متن را به صورت کامل بگیرم و بنویسم . یعنی حرف به حرف نه !!!

باید بگم در مورد فقط فارسی یا فقط انگلیسی مشکلی نیست (مخصوصا انگلیسی که خیلی گلابیه)
مشکل اصلی وقتی شروع میشه که ترکیبی از حروفی که از راست به چپ نوشته می شوند و حروفی که از چپ به راست هستند و یا با اعداد ترکیب می شوند اون موقع هست که دیگه نمیدونم کاراکتر رو باید در چه مختصاتی چاپ کنم ...

بی صبرانه منتظر تجربیات راهنمایی ها و الگوریتم های دوستان هستم.
بازگشت به بالاي صفحه اذهب الى الأسفل
haamoon




تعداد پستها : 308
Registration date : 2008-02-07

SHABIH SAZIYE NEVESHTAR Empty
پستعنوان: رد: SHABIH SAZIYE NEVESHTAR   SHABIH SAZIYE NEVESHTAR Icon_minitimeالسبت أغسطس 30, 2008 4:20 am

سلام من هم چنین مشکلی داشتم و این جوری حلش کردم. اول جهت هر کارکتر رو در فایل فونتی که می سازم نوشتم، بعد اگر به شما یک string بدن شما می تونی اون رو به بلاک های جهت دار تقسیم کنی و طول هر بلاک رو در بیاری و با استفاده از اون طول ها بلاک ها رو در جای درست خودشون چاپ کنی.

راه دوم که راحت تره ولی زمان بیشتری می بره اینه که شما قبل از اینکه متن رو چاپ کنی یه path روش حرکت کنی و ترتیب چیدمان حروف رو تغییر بدی مثلا "امیر" رو بکنی "ریما" ولی متن انگلیسی و عدد ها رو دست نزنی.

البته کار دوم فقط زمانی جواب می ده که متن شما یک خطی باشه البته با در نظر گرفتن طول خطوط درست می شه ولی کار بیشتری می بره.

در کل چیزی که هست شما قبل از این که متن رو چاپ کنی باید یک preprocess روش انجام بدی. نگران زمان این کار نباش چون اول فقط یک بار انجام می شه و باقی دفعه ها چاپ می شه. و زمانی که برای چاپ نیازه به مراتب بیشتر از این کارها وقت می بره.

تو لایبرری فونت فارسی این کارها تا حدودی انجام شده شاید ورژن کامل شدش رو یه روزی بذارم.

خوندن سورس pango که یک نرم افزار رندر متن چند زبانه ی سورس باز هست هم خیلی کمک می کنه.
اگر بیشتر منو در جریان کارهات قرار بدی شاید بیشتر بتونم کمکت کنم.
موفق باشی
بازگشت به بالاي صفحه اذهب الى الأسفل
00110




تعداد پستها : 123
Location : Tab
Registration date : 2008-05-03

SHABIH SAZIYE NEVESHTAR Empty
پستعنوان: !!!   SHABIH SAZIYE NEVESHTAR Icon_minitimeالأحد أغسطس 31, 2008 12:42 am

prince-of-persia نوشته است:

...
باید بگم در مورد فقط فارسی یا فقط انگلیسی مشکلی نیست (مخصوصا انگلیسی که خیلی گلابیه)
مشکل اصلی وقتی شروع میشه که ترکیبی از حروفی که از راست به چپ نوشته می شوند و حروفی که از چپ به راست هستند و یا با اعداد ترکیب می شوند اون موقع هست که دیگه نمیدونم کاراکتر رو باید در چه مختصاتی چاپ کنم ...

...
چرا باید مشکلی پیش بیاد شما اگه از راست به چپ بنویسی و بتونی تشخیص بدی که کاراکتر ورودی فارسی هست یا انگلیسی با قبلی مقایسه میکنی و می چینی میره دیگه ...
فقط در صورتی که دو کاراکتر ورودی En,En باشه ترتیب به هم میخوره که باید درستش کنی ...
بازگشت به بالاي صفحه اذهب الى الأسفل
haamoon




تعداد پستها : 308
Registration date : 2008-02-07

SHABIH SAZIYE NEVESHTAR Empty
پستعنوان: رد: SHABIH SAZIYE NEVESHTAR   SHABIH SAZIYE NEVESHTAR Icon_minitimeالأحد أغسطس 31, 2008 1:25 am

انقدرها هم ساده نیست جمله ی "سلام amir" رو توجه کن string اون به این شکل هست:
"س ل ا م r i m a "ولی خوب وظیفه ی Editor هست که هر کارکتر رو در مکان درست چاپ کنه.
بازگشت به بالاي صفحه اذهب الى الأسفل
prince-of-persia




تعداد پستها : 70
Registration date : 2008-05-26

SHABIH SAZIYE NEVESHTAR Empty
پستعنوان: رد: SHABIH SAZIYE NEVESHTAR   SHABIH SAZIYE NEVESHTAR Icon_minitimeالإثنين سبتمبر 01, 2008 7:16 am

اوکی

فقط فارسی رو نوشتم
حالا مونده preprocess

باید بدونم چطور میشه جهت یک کاراکتر رو از روی کد اسکیش تشخیص داد (یعنی بدون استفاده از دسته بندی چون می خوام برنامه قابلیت توسعه داشته باشه و تو کد دست نبرم)

مثلا حروف فارسی راست به چپ هستند
و حروف انگلیسی و اعداد چپ به راست هستند.
بازگشت به بالاي صفحه اذهب الى الأسفل
00110




تعداد پستها : 123
Location : Tab
Registration date : 2008-05-03

SHABIH SAZIYE NEVESHTAR Empty
پستعنوان: رد: SHABIH SAZIYE NEVESHTAR   SHABIH SAZIYE NEVESHTAR Icon_minitimeالإثنين سبتمبر 01, 2008 7:23 am

haamoon نوشته است:
انقدرها هم ساده نيست جمله ي "سلام amir" رو توجه کن string اون به اين شکل هست:
"س ل ا م r i m a "ولي خوب وظيفه ي Editor هست که هر کارکتر رو در مکان درست چاپ کنه.

بله ميدونم منم توضيح دادم ببينيد همين جا تا "س ل ا م a " مشکلي نيست ولي بعد از اون ترکيب EN-EN ميشه يعني دو کاراکتر انگليسي پشت هم که تا تغيير زبان دوباره بايد اينا بره تو يه پشته و با خروج از پشته حل ميشه ...

همون جا هم ميشه با انجام محاسباتي بدون پشته اين کارو کرد ...
بازگشت به بالاي صفحه اذهب الى الأسفل
haamoon




تعداد پستها : 308
Registration date : 2008-02-07

SHABIH SAZIYE NEVESHTAR Empty
پستعنوان: رد: SHABIH SAZIYE NEVESHTAR   SHABIH SAZIYE NEVESHTAR Icon_minitimeالإثنين سبتمبر 01, 2008 7:44 am

آفرین، پشته فکر خیلی خوبی هست، ولی سرعت رو کمی میاره پایین اگر یک مرحله preprocess بذاریم که ترتیب کارکتر ها رو درست کنه در هنگام چاپ دیگه نیازی نیست که جهت کاکترها رو چک کنیم.

جهت کارکترها رو از روی یونی کد می تونی تشخیص بدی می تونی بگی هر کارکتری که انگلیسی نیست راست به چپ هست این شرط چپ به راستی رو به خوبی چک می کنه.

chr < 128 && (chr >= 'a' && chr <= 'z' || chr >= 'A' && chr <= 'Z' || chr >= '0' && chr <= '9' || chr == '+' )
بازگشت به بالاي صفحه اذهب الى الأسفل
prince-of-persia




تعداد پستها : 70
Registration date : 2008-05-26

SHABIH SAZIYE NEVESHTAR Empty
پستعنوان: رد: SHABIH SAZIYE NEVESHTAR   SHABIH SAZIYE NEVESHTAR Icon_minitimeالخميس سبتمبر 04, 2008 1:44 am

آقای هامون اینی که شما میگید خیلی کلی هست
مثلا یکی سری علامت ها برای خودشون یک بازه دا رند و یک سری دیگه بازه متفاوتی دارند.
و مثلا وقتی رو تصور کنید که حروف عربی رو هم مبخواهید به این بازه اضافه کنید و برنامه رو توسعه بدید. اون موقع هست که این شرط خیلی بزرگ میشه و ممکنه خطا هم به وجود بیاد .

من هنوز دنبال راهی یا تابعی هستم که کد کاراکتر رو بهش بدی و مشخص کنه که RtoL هست یا LtoR

با تشکر
بازگشت به بالاي صفحه اذهب الى الأسفل
haamoon




تعداد پستها : 308
Registration date : 2008-02-07

SHABIH SAZIYE NEVESHTAR Empty
پستعنوان: رد: SHABIH SAZIYE NEVESHTAR   SHABIH SAZIYE NEVESHTAR Icon_minitimeالخميس سبتمبر 04, 2008 3:01 am

به دنبال چنین تابعی نباش! چون مشکلات زیادی بوجود میاد که خودت هم یه اشاره ای کردی.
اولیشم استفاده از علامت هاست چون علامت ها اگر هنگام تایپ فارسی استفاده بشن راست به چپ و هنگامی که برای تایپ انگلیسی استفاده می شن چپ به راست هستند پس علاوه بر یونی کد نیاز به کارکترهای کنارش هم داریم. و اگر این کارها بخواد در runtime انجام بشه کلی وقت می بره.
من این روش رو استفاده می کنم و خوب جواب می گیرم. هنگامی که دارم فایل فونت bitmap رو می سازم هر کارکتری که قراره تو فایل بذارم با API های ویندوز جهتش رو تشخیص می دم و همراه فایل می ذارم. با این کار پیدا کردن جهت کارکترها دیگه زمانی نمی بره.
بازگشت به بالاي صفحه اذهب الى الأسفل
00110




تعداد پستها : 123
Location : Tab
Registration date : 2008-05-03

SHABIH SAZIYE NEVESHTAR Empty
پستعنوان: !!!   SHABIH SAZIYE NEVESHTAR Icon_minitimeالخميس سبتمبر 04, 2008 8:28 am

haamoon نوشته است:
به دنبال چنین تابعی نباش! چون مشکلات زیادی بوجود میاد که خودت هم یه اشاره ای کردی.
اولیشم استفاده از علامت هاست چون علامت ها اگر هنگام تایپ فارسی استفاده بشن راست به چپ و هنگامی که برای تایپ انگلیسی استفاده می شن چپ به راست هستند پس علاوه بر یونی کد نیاز به کارکترهای کنارش هم داریم. و اگر این کارها بخواد در runtime انجام بشه کلی وقت می بره.
من این روش رو استفاده می کنم و خوب جواب می گیرم. هنگامی که دارم فایل فونت bitmap رو می سازم هر کارکتری که قراره تو فایل بذارم با API های ویندوز جهتش رو تشخیص می دم و همراه فایل می ذارم. با این کار پیدا کردن جهت کارکترها دیگه زمانی نمی بره.
با culture information توی C# میشه جهت هارو فهمید که ابزارهاشم تو خودش داره ولی اینجا ...
چرا راهتو پیچیده میکنی فارسی و انگلیسی و حداکثر 2 زبان دیگه که میتونی ساختار اونا رو واسه برنامه تعریف کنی فکر کنم کافی باشه ... Wink
بازگشت به بالاي صفحه اذهب الى الأسفل
 
SHABIH SAZIYE NEVESHTAR
بازگشت به بالاي صفحه 
صفحه 1 از 1

صلاحيات هذا المنتدى:شما نمي توانيد در اين بخش به موضوعها پاسخ دهيد
 :: سوال و جواب-
پرش به: