מבוא לאלגוריתם הדו-כיווני

הדוגמא הבאה ממחישה את ההתנהגות המצופה מהאלגוריתם הדו-כיווני.בדוגמא זו יש טקסט באנגלית, הדורש כיוון משמאל לימין, וטקסט בעברית, הדורש כיוון מימין לשמאל.
התחשבו בדוגמא הבאה: english1 Hebrew2 english3 Hebrew4 english5 Hebrew6 התווים בדוגמא זו מאוחסנים במחשב באותה צורה שבה הם נכתבים:התו המאוחסן הראשון הוא “e”, השני הוא “n”, והאחרון הוא “6” .
הבה ונניח, שהשפה הראשית של המסמך המכיל פסקה זו היא אנגלית.משמעו של דבר , שהכיוון הבסיסי הוא משמאל לימין.ההצגה הנכונה, אם כן, תהיה: english1 2werbeH english3 4werbeH english5 6werbeH

<-----------H <-----------H <-----------H
------------------------------------------------->E


הקווים המקוקווים מעידים על מבנה המשפט:האנגלית שולטת וטקסט עברית משולב בתוכה.הגעה להצגה הנכונה אינה דורשת שום סימון מוסף, מאחר וחלקי המשפט העבריים מהופכים באופן תקני ע"י האלגוריתם הדו-כיווני.
אם, מצד שני, השפה הראשית של המסמך הייתה עברית, הכיווניות הבסיסית הייתה מימין לשמאל.ההצגה הנכונה הייתה איפא: 6werbeH english5 4werbeH english3 2werbeH english1

-----E-----> -----E-----> ----E------>
<---------------------------H-----------------

במקרה זה, כל המשפט הוצג מימין לשמקל והמלים האנגליות המשולבות הופכו באופן תקני ע"י האלגוריתם הדו-כיווני.
מדרג הירושה של מידע כיוון הטקסט האלגוריתם הדו-כיווני של ה-Unicode כיוון טקסט בסיסי עבור גושי טקסט.על מנת לציין את כיוון הבסיס של גוש טקסט עליכם לקבוע את ערך תכונת ה-dir.ערך ברירת המחדל של תכונה זו הוא "ltr" – משמאל לימין.
כאשר תכונת ה-dir נקבעת עבור רכיב מסויים, היא נשמרת למשך כל הזמן שרכיב זה קיים ועבור כל תת-רכיב מקונן בתוכו.קביעת ערכים לתכונת ה-dir ברמת תת-רכיב מקונן, דורסת את הערכים שעברו בירושה.
על מנת לקבוע כיוון טקסט עבור מסמך שלם, קבעו את תכונת ה-dir ביסוד ה-HTML.
הנה דוגמא

פנו לקובץ guide4-example2.html.htmוהריצו אותו על גבי הדפדפן בכדי לראות את הפונקציונליות של הדוגמא הקודמת.

יסודות הנקבעים מראש ע"י המעבד, inline elements, אינם יורשים את תכונת ה-dir.משמעו של דבר הוא, שיסוד מסוג זה ללא תכונת dir בתוכו אינו פותח שלב נוסף של טקסט משובץ בהתאמה לאלגוריתם הדו-כיווני.יסוד נקבע להיות קבוע מראש או מקונן כתת-גוש בהתאם לתצוגת ברירת המחדל שלו.שימו לב , כי יסודות ה-INS וה- DEL יכולים להיחשב כמקוננים או כנקבעים מראש בהתאם לנסיבות.

קביעת הכיווניות של טקסט משובץ

האלגוריתם הדו-כיווני מתאים כיווניות לטקסט משובץ בהתאם לכללי הירושה באופן אוטומטי,כמומחש בדוגמא הקודמת.למרות זאת, באופן כללי, רק שלב אחד של טקסט משובץ יכול לקבוע את ערכי ה-dir עבורו.על מנת להחיל את התופעה עבור שלבים נוספים, עליכם להשתמש בתכונת ה-dir ביסודות הנקבעים מראש (inline element).
תנו דעתכם על הדוגמא הקודמת: english1 Hebrew2 english3 Hebrew4 english5 Hebrew6 נניח כי השפה הראשית במסמך המכיל סקה זו היא אנגלית.יתר על כן, המשפט האנגלי שבדוגמא שלנו מכיל קטע בעברית המשתרע מ-Hebrew2 ועד Hebrew4, וכן קטע זה מכיל ציטטה אנגלית, english3.ההצגה הרצוייה של הטקסט תהיה: english1 4werbeH english3 2werbeH english5 6werbeH
-----E----->
<--------------H----------------------
------------------------------------------------------------------>E


על מנת להשיג שני שינויי כיוון משובצים, עלינו לספק מידע נוסף, אשר מסופק ע"י תיחום השיבוץ השני באופן נפרד.בדוגמא זו, אנו משתמשים ביסוד ה-span ובתכונת ה-dir בכדי לסמן את הטקסט:

english <span dir="RTL">Hebrew2 english3 Hebrew4</span>english5 Hebrew6

כותבי אתרים עלולים להשתמש בתווי Unicode מיוחדים למען השיג שינויים רבים בכיוון משובץ.על מנת להשיג שיבוץ טקסט עם כיוון משמאל לימין, הקיפו את הטקסט בתווים LEFT-TO-RIGHT EMBEDDING ("LRE" או 202A באופן הקסדצימלי) וב-POP DIRECTIONAL FORMATTING ("PDF" או 202C באופן הקסדצימלי).על מנת להשיג כיוון מימין לשמאל בטקסט משובץ, הקיפו את הטקסט הנבחר בתווים RIGHT-TO-LEFT EMBEDDING ("RTE" או 202B באופן הקסדצימלי) ובPDF.

שימוש בכיוון HTML ביחד עם תווי Unicode

מפתחי אתרים ומתכנני תוכנות עריכה צריכים להיות מודעים להתנגשויות , העלולות להיווצר אם תכונת ה-dir משומשת ביסודות הנקבעים מראש (כולל BDO), באופן מקביל לשימוש בתווי ה-Unicode המתאימים.מוטב כי אחת השיטות תיעשה באופן ייחודי.שיטת הסימון הגבוהה של HTML מציעה אמינות מבנית גבוהה יותר של מסמך ומקלה בבעיות שונות בעת עריכת מסמך HTML דו-כיווני ע"י עורך טקסט פשוט.מנגד, תוכנות שונות מתאימות יותר לשימוש בתווי Unicode.אם שתי השיטות ננקטות בעת ובעונה אחת, אזי, תשומת לב רבה נדרשת על מנת להבטיח קינון ודריסה תקניים של סימוני HTML ושל תווי Unicode , אחרת, התוצאה עלולה להיות לא מוגדרת.

דריסת האלגוריתם הדו-כיווני : יסוד ה-BDO

האלגוריתם הדו-כיווני ותכונת ה-dir באופן כללי הינם משביעי רצון בכל הקשור לשינויי כיוון של טקסט משובץ.ברם, בכמה מצבים האלגוריתם הדו-כיווני עלול להביא לתוצאה לא נכונה.
יסוד ה-BDO מאפשר למפתח להשהות את האלגוריתם הדו-כיווני עבור חלקים נבחרים בטקסט.
תנו דעתכם על מסמך המכיל את אותו הטקסט מקודם:

english1 Hebrew2 english3 Hebrew4 english5 Hebrew6
נניח כי טקסט זה אופיין בשיטה הויזואלית.
סיבה אחת להתכנותה של תופעה זו יכולה להיות שתקן ה-MIME מעדיף כתיבה ויזואלית.
בתקן זה, אנו צפויים לקבל בדואר אלקטרוני, לאחר שבירת שורות, את התוצאה הבאה:
english1 2werbeH english3
4werbeH english5 6werbeH
תצורה זו מתנגשת עם האלגוריתם הדו-כיווני מאחר ואלגוריתם זה יהפוך ,בפעם השנייה, את המילים 2werbeH ,
4werbeH ו 6werbeH ,
כך שהן תוצגנה משמאל לימין, ולא באופן תקין מימין לשמאל.
הפתרון במקרה זה הוא לדרוס את האלגוריתם הדו-כיווני ע"י הנחת מובאת הדואר האלקטרוני בתוך יסוד PRE ( בכדי לשמור על שבירת שורות) והנחת כל שורה בתוך יסוד BDO , אשר תכונת ה-dir בו נקבעת להיות LTR – הביטו בקטע הקוד הזה

בדקו את הרצת הקוד פה

כל זאת אומר לאלגוריתם הדו-כיווני "עזוב אותי משמאל לימין !" והתוצאה הנכונה תתקבל:
english1 2werbeH english3
4werbeH english5 6werbeH
יסוד ה-BDO צריך להיות משומש במקרים בהם נדרשת שליטה מוחלטת בסדר ההצגה של טקסט.
תכונת ה-dir הינה חובה בשימוש ביסוד זה.
מפתחים יכולים להשתמש בתווי Unicode מיוחדים בכדי לדרוס את האלגוריתם הדו-כיווני – LEFT-TO RIGHT OVERRIDE (202D) , או, RIGHT-TO-LEFT OVERRIDE (202E) הקסדצימלי .
הקטע הדרוס מסתיים בשני המקרים בתווים POP DIRECTIONAL FORMATTING (202C הקסדצימלי) .
לתשומת ליבכם: התנגשויות בלתי רצויות עלולות לקרות אם תכונת ה-dir משומשת ביסודות inline (כולל BDO) במקביל עם תווים מקבילים של ה-Unicode.
ישנן מוסכמות מיוחדות אודות השימוש ב-ערכי המשתנה "charset" , על מנת להעיד על אפיון דו-כיווני בדואר MIME, ובמיוחד להבדיל כיווניות ויזואלית, כיווניות משתמעת וכיווניות ברורה.
ערך המשתנה "ISO-8859-8" )עבור עברית) מציין קידוד ויזואלי, “ISO-8859-8-I” מציין דו-כיווניות לוגית, ו “ISO-8859-8-e” מציין כיוון אחד וברור לתצוגה של טקסט.
מאחר ו-HTML משתמשת באלגוריתם הדו-כיווני של ה-Unicode , התאמת מסמכים המקודדים ב-ISO-8859-8 חייבת להסתווג כ-“ISO-8859-8-I” .גם שליטה חד-כיוונית היא אפשרות ב-HTML, אך זו אינה יכולה להיות מובעת ע"י ISO-8859-8, ולכן במקרה זה הסיווג “ISO-8859-8-e” אינו יכול להיות משומש.

עיון בתווי כיוון ובקרה משותפת

היות ודו-משמעיות לעתים נוצרת בהקשר לכיווניות של תווים מסויימים (לדוגמא סימני פיסוק), מפרט ה-Unicode כולל תווים היכולים לאפשר את ההצגה הנכונה של מערך תווים נתון.כמו כן, ה-Unicode כולל מספר תווים לשליטה על התנהגות משותפת במקום שהדבר הכרחי (לדוגמא מספר מצבים בשפה הערבית) .HTML 4 כולל מאגר תווים כאלו ליישום מטרות אלו.
מובאות ה-DTD מציגות חלק מישויות הכיוון:

!ENTITY zwnj CDATA "‌”--=zero width non-joiner--
!ENTITY zwj CDATA "‍”--=zero width joiner--
!ENTITY lrm CDATA "‎”--=left-to-right mark--
!ENTITY lrm CDATA "‏”--=right-to-left mark--

יישות ה-zwnj משמשת לחסום התנהגות משותפת בתכנים בהם שיתוף עלול להופיע, אולם אסור שיהיה שיתוף, כי תיגרם דו-משמעיות בטקסט ! יישות ה-zwj עושה את ההפך: היא מכריחה שיתוף במקום שהוא לא יופיע , אך מחוייב שיופיע.לדוגמא, האות הערבית “HEH” משמשת לקיצור של “Hijri”, שמה של מערכת השנתון האיסלמית.היות והצורה המבודדת של ה-“HEH” נראית כמו הספרה חמש , יכולה להיווצר דו-משמעות באופן כזה ש-“HEH” יכולה להיחשב כספרה חמש סופית בשנה כלשהיא.למניעת בלבול, המשמעות של “HEH” ,כראשי תיבות,משומשת.לעומת זאת, אין שום טקסט נלווה אליו “HEH” יכולה להצטרף.בעזרת יישות ה-zwj ניתן לממש תכנים אלו.
הישויות האחרות,lrm ו rlm, נועדות להגדיר כיווניות על תווים שהכיווניות לא מוגדרת בהם מלכתחילה.לדוגמא, אם מרכאות כפולות באות בין אות בעברית ואות בלטינית, הכיוון של המרכאות אינו ברור (האם זו ציטטה של טקסט עברי או של טקסט לטיני).
יישויות ה-lrm וה-rlm מגדירות את אופן כיוון המרכאות.ליישויות אלו מספר חולשות: הן לא שולטות ברוחב התווים ולא במצבים בהם המילה או השורה נשברות.

השפעת שינוי הסגנון על דו-כיווניות

באופן כללי, שינויים בסגנון המסמך המתאפיינים בהפיכת גוש מקונן לנקבע מראש (inline) , ולהיפך היא ישירה למדי.לעומת זאת, היות והאלגוריתם הדו-כיווני מתבסס על ההבחנה בין מצבים אפשריים אלו, תשומת לב מיוחדת צריכה להינקט בנמן שינויים אלו.
כאשר רכיב inline , אשר אינו מכיל תכונת dir , משנה צורה והופך להיות גוש מקונן , הוא יורש את תכונת ה-dir מהאב הקרוב אליו ביותר.
כאשר גוש מקונן, אשר אינו מכיל תכונת dir בתוכו, משנה צורה והופך להיות רכיב inline , התוצאה שקולה , במונחים של תצורה דו-כיוונית, לתצורה המושגת ע"י הוספת תכונת dir באופן מפורש לרכיב המשונה.

סיכום ביניים:עד עתה למדנו איך להגדיר את השפה ואת כיוון ההצגה של טקסט, או של חלקים ממנו.
עמדנו על האפשרויות שהאלגוריתם הדו-כיווני מציע לנו וגם על האפשרויות השונות לדרוס את האלגוריתם ולהגדיר כיווניות ע"פ התכנים של האתר וההעדפה האישית של המפתח.בשלב הבא נמשיך "לטייל" בנבכי ה-HTML ונדלה עוד תגיות ופרטים חשובים עבור מפתחי אתרים בעברית.
תגיות אלו קבילות הן עבור השיטה הויזואלית והן המשתמעת


לדף קודם
  ñåâé úååéí
ליישור העברית לימין

מבוא
בעיות העברית
פתרונות
השיטה הוויזואלית
השיטה הלוגית
השיטה החצי לוגית
הערות טכניות
אלגוריתם דו כיווני
תוכנות
שאלות ותשובות
כתוב לנו