אלגוריתם דו-כיווניות של יוניקוד
אלגוריתם דו-כיווניות של יוניקוד מאפשר קביעת כיוון זרימת מלל במערכות מחשב, מימין לשמאל או משמאל לימין.
כדי לעמד מלל דו-כיווני כהלכה משתמש האלגוריתם בנתון סוג הכיווניות של תווים כדי לנתח את הטקסט ולפרק אותו לקטעים או רצפים של תווים, בעלי כיווניות מסוימת. לכל תו ניתן לקבוע כיווניות חזקה ימין-לשמאל, חזקה שמאל-לימין, חלשה ימין לשמאל, חלשה שמאל-לימין, ונייטרלי. באלגוריתם, תווים מטווח יוניקוד לעברית, ערבית, אשורית ודומותיהם נחשבים בעלי כיווניות ימין-לשמאל חזקה. תווי האלף-בית הלטיני נחשבים בעלי כיווניות שמאל-לימין חזקה. תווי מספרים נחשבים בעלי כיווניות שמאל-לימין חלשה. תווי פיסוק וניקוד נחשבים נייטרליים מבחינת כיוונם.
תוכן עניינים |
[עריכה] תווים נייטרליים
בהכללה, קובע האלגוריתם את כיווניותם של תווים נייטרליים בהתאם להקשר שבו הם נמצאים: אם הם נמצאים בין שני תווים בעלי כיווניות חזקה אחת, הם יירשו אותה. לדוגמה, כאשר תווי פיסוק נייטרליים כמו פסיק ונקודה נמצאים בין תווים בעלי כיווניות ימין-לשמאל חזקה הם מקבלים אותה גם הם וממוקמים משמאל לתו האחרון במילה.
מקרה מורכב מעט יותר הוא כזה שבו התו האחרון הוא בעל כיווניות מסוימת, אך זה הבא אחרי התו הנייטרלי הוא בעלי כיווניות אחרת. במקרה זה, יורש התו הנייטרלי את הכיווניות של התו הבא לפניו ברצף:
ובכיוון ההפוך:
מקרה מורכב עוד יותר מתרחש כאשר ישנו רצף של תווים נייטרליים מסוגים שונים הדורש הכרעה כיצד יש לסדרם. כאן, אלגוריתם דו-הכיווניות כשל לעתים ורק בגרסתו האחרונה תוקנו בעיות כמו רצפים של תו>מקף>מספר/תו לטיני. קודם לכן, האלגוריתם שיבש את הסדר ודרש מיישומים שביקשו לתמוך בכיווניות נכונה במקרה נפוץ זה (בעברית) ליישם פתרונות "עוקפי-יוניקוד". בגרסת "אופיס 2000" של ערכת התכנות המשרדיות של מיקרוסופט הוגדרה כיווניות כללית לפסקה, ובהתאם לה התנהגו התווים הנייטרליים כאילו הם בעלי כיווניות ימין-לשמאל או שמאל לימין. בגרסה הנוכחית של האלגוריתם פתרונות כאלו אינם נחוצים. לדוגמה, המשפט הבא יוצג נכון באלגוריתם יוניקוד בגרסתו העדכנית:
[עריכה] בעיות באלגוריתם
באלגוריתם ישנן עדיין מספר בעיות בשימוש בעברית (ובערבית). לדוגמה, רצף מלל כזה:
יוצג בשימוש רגיל באופן שגוי:
מקרה דומה קיים עם הטקסט הבא:
המוצג באופן שגוי כך:
כדי לפתור זאת ניתן לעשות שימוש בתווים סמויים מיוחדים המכניסים כיווניות ימין-לשמאל או שמאל-לימין. תוצאה דומה אפשר לקבל כאשר מכניסים רווחי אפס בעלי כיווניות או תווים השוברים או מאחדים "הקשריות" (בערבית). זה אינו פתרון שמשתמשים רגילים יכולים לעשות בו שימוש ובמקרה זה עדיין נדרשת השלמה תוכנתית לחסר.
[עריכה] תווי כיווניות סמויים
תקן יוניקוד מגדיר תווי כיווניות סמויים. תווים אלו אינם נראים במסמך ותפקידם לקבוע את כיווניות הטקסט שנמצא לפניהם ואחריהם.
תו LRM (Left-to-Right Mark) – בעל כיווניות חזקה שמאל-לימין. מכניסים אותו בחלונות באמצעות Alt+0253 במקלדת הנומרית, בפריסת מקלדת עברית. בפריסות מקלדת מסוימות בלינוקס, ניתן להכניסו באמצעות הקשה על Ctrl+Shift+200E, ללא תלות בשפת המקלדת. ב־HTML הוא מוכנס כך: ‎. בטיוטת התקן הישראלי לפריסת מקלדת עברית ניתן להוסיפו באמצעות הצירוף Alt+9. [1]
תו RLM (Right-to-Left Mark) – בעל כיווניות חזקה ימין-לשמאל ומכניסים אותו באמצעות Alt+0254 במקלדת הנומרית, בפריסת מקלדת עברית. בפריסות מקלדת מסוימות בלינוקס, ניתן להכניסו באמצעות הקשה על Ctrl+Shift+200F, ללא תלות בשפת המקלדת. ב-HTML הוא מוכנס כך: ‏. בטיוטת התקן הישראלי לפריסת מקלדת עברית ניתן להוסיפו באמצעות הצירוף Alt+0. [1]
תו נייטרלי שיוצב בסמוך לתו LRM, יירש את כיווניותו שהיא שמאל-לימין, ואילו תו נייטרלי שיוצב בסמוך לתו RLM, יירש את כיווניותו שהיא ימין-לשמאל.
דוגמאות לשימוש בתווי כיווניות סמויים:
- כשרושמים בתוך פסקה עברית את השם הלועזי של חברת Yahoo!, סימן הקריאה יופיע משמאל לשם ("Yahoo!"), מכיוון שאחריו יש אות עברית, אבל הוא אמור להופיע מימין. כדי לגרום לו להופיע מימין, אפשר להוסיף אחריו את התו LRM.
- כשרושמים בתוך פסקה עברית את הפונקציה המתמטית f(x), ייראה הסוגר הסופי כמו סוגר פותח והוא יופיע כאילו לפני האות f ("f(x)"), מכיוון שאחריו יש אות עברית, אבל הוא אמור להופיע בקצה הימני של הביטוי. כדי לגרום לו להופיע נכון בקצה הביטוי, אפשר להוסיף אחריו את התו LRM.
- כאשר בתוך פסקה עברית יש רשימה של מילים לועזיות שמופרדת בפסיקים, למשל Alice, Bob, Carlos, הפסיקים יופיעו מימין לכל מילה, כי לפניהם ואחריהם יש אותיות לועזיות, וגם סדר המילים יהיה הפוך, אבל הפסיקים אמורים להופיע משמאל לכל מילה: Alice, Bob, Carlos. כדי לגרום למילים ולפסיקים להופיע בסדר הרצוי יש להוסיף לפני הפסיק את התו RLM.
[עריכה] קישורים חיצוניים
- תקן הצגת טקסט דו כיוונית, של ארגון יוניקוד (אנגלית)
- גרסה חינמית כמעט סופית של תקן ישראלי SI-5194 - עריכת טקסט דו כיוונית (אנגלית)
- פרויקט יצירת גרסה חדשה לתקן ישראלי לעריכת טקסט דו כיוונית, כולל מימוש לדוגמה בקוד פתוח (אנגלית)
- מידע על האלגוריתם ודו-כיווניות, באתר ה־World Wide Web Consortium
- על דו-כיווניות באינטרנט, באתר לינמגזין
- מידע על הכנסת תווי שליטה של יוניקוד תחת לינוקס, באתר Whatsup
- עמוד אינטראקטיבי להיתנסות בבעיות טקסט דו-כיווני ופתרונות
- אתר המאפשר המרה של טקסט Right-To-Left ל-Left-To-Right ולהפך
- סדרת מאמרים לגבי הקשיים והמלכודות במימוש BiDi (אנגלית)