אלגוריתם דו-כיווניות של יוניקוד
מתוך ויקיפדיה, האנציקלופדיה החופשית
אלגוריתם דו-כיווניות של יוניקוד מאפשר קביעת כיוון זרימת מלל במערכות מחשב, מימין לשמאל או משמאל לימין.
כדי לעמד מלל דו-כיווני כהלכה משתמש האלגוריתם בנתון סוג הכיווניות של תווים כדי לנתח את הטקסט ולפרק אותו לקטעים או רצפים של תווים, בעלי כיווניות מסוימת. לכל תו ניתן לקבוע כיווניות חזקה ימין-לשמאל, חזקה שמאל-לימין, חלשה ימין לשמאל, חלשה שמאל-לימין, ונייטרלי. באלגוריתם, תווים מטווח יוניקוד לעברית, ערבית, אשורית ודומותיהם נחשבים בעלי כיווניות ימין-לשמאל חזקה. תווי האלף-בית הלטיני נחשבים בעלי כיווניות שמאל-לימין חזקה. תווי מספרים נחשבים בעלי כיווניות שמאל-לימין חלשה. תווי פיסוק וניקוד נחשבים ניטרליים מבחינת כיוונם.
תוכן עניינים |
[עריכה] תווים ניטרליים
בהכללה, קובע האלגוריתם את כיווניותם של תווים ניטרליים בהתאם להקשר שבו הם נמצאים: אם הם נמצאים בין שני תווים בעלי כיווניות חזקה אחת, הם יירשו אותה. לדוגמה, כאשר תווי פיסוק ניטרליים כמו פסיק ונקודה נמצאים בין תווים בעלי כיווניות ימין-לשמאל חזקה הם מקבלים אותה גם הם וממוקמים משמאל לתו האחרון במילה.
מקרה מורכב מעט יותר הוא כזה שבו התו האחרון הוא בעל כיווניות מסוימת, אך זה הבא אחרי התו הניטרלי הוא בעלי כיווניות אחרת. במקרה זה, יורש התו הניטרלי את הכיווניות של התו הבא לפניו ברצף:
ובכיוון ההפוך:
מקרה מורכב עוד יותר מתרחש כאשר ישנו רצף של תווים ניטרליים מסוגים שונים הדורש הכרעה כיצד יש לסדרם. כאן, אלגוריתם דו-הכיווניות כשל לעתים ורק בגרסתו האחרונה תוקנו בעיות כמו רצפים של תו>מקף>מספר/תו לטיני. קודם לכן, האלגוריתם שיבש את הסדר ודרש מיישומים שביקשו לתמוך בכיווניות נכונה במקרה נפוץ זה (בעברית) ליישם פתרונות "עוקפי-יוניקוד". בגרסת "אופיס 2000" של ערכת התכנות המשרדיות של מיקרוסופט הוגדרה כיווניות כללית לפסקה, ובהתאם לה התנהגו התווים הניטרליים כאילו הם בעלי כיווניות ימין-לשמאל או שמאל לימין. בגרסה הנוכחית של האלגוריתם פתרונות כאלו אינם נחוצים. לדוגמה, המשפט הבא יוצג נכון באלגוריתם יוניקוד בגרסתו העדכנית:
[עריכה] בעיות באלגוריתם
באלגוריתם ישנן עדיין מספר בעיות בשימוש בעברית (ובערבית). לדוגמה, רצף מלל כזה:
יוצג בשימוש רגיל באופן שגוי:
מקרה דומה קיים עם הטקסט הבא:
המוצג באופן שגוי כך:
כדי לפתור זאת ניתן לעשות שימוש בתווים סמויים מיוחדים המכניסים כיווניות ימין-לשמאל או שמאל-לימין. תוצאה דומה אפשר לקבל כאשר מכניסים רווחי אפס בעלי כיווניות או תווים השוברים או מאחדים "הקשריות" (בערבית). זה אינו פתרון שמשתמשים רגילים יכולים לעשות בו שימוש ובמקרה זה עדיין נדרשת השלמה תוכנתית לחסר.
[עריכה] תווי כיווניות סמויים
תקן יוניקוד מגדיר תווי כיווניות סמויים. תווים אלו אינם נראים במסמך ותפקידם לקבוע את כיווניות הטקסט שיבוא אחריהם.
תו LRM (Left-to-Right Mark) - הוא בעל כיווניות חזקה שמאל-לימין ומכניסים אותו בחלונות באמצעות Alt+0253 במקלדת הנומרית, בפריסת מקלדת עברית. בפריסות מקלדת מסוימות בלינוקס, ניתן להכניסו באמצעות הקשה על Ctrl+Shift+200E, ללא תלות בשפת המקלדת.
תו RLM (Right-to-Left Mark) - הוא בעל כיווניות חזקה ימין-לשמאל ומכניסים אותו באמצעות Alt+0254 במקלדת הנומרית, בפריסת מקלדת עברית. בפריסות מקלדת מסוימות בלינוקס, ניתן להכניסו באמצעות הקשה על Ctrl+Shift+200F, ללא תלות בשפת המקלדת.
תו ניטרלי שיוצב בסמוך לתו LRM, יירש את כיווניותו שהיא שמאל-לימין. ואילו תו ניטרלי שיוצב בסמוך לתו RLM, יירש את כיווניותו שהיא ימין-לשמאל.
[עריכה] קישורים חיצוניים
- מאמר מקיף לגבי דו-כיווניות, באתר ארגון יוניקוד (אנגלית)
- מידע על האלגוריתם ודו-כיווניות, באתר ה־World Wide Web Consortium
- על דו-כיווניות באינטרנט, באתר לינמגזין
- מידע על הכנסת תווי שליטה של יוניקוד תחת לינוקס, באתר Whatsup
- עמוד אינטראקטיבי להיתנסות בבעיות טקסט דו-כיווני ופתרונות