המכלול:ניקוד/בעיות
דף זה עוסק בבאג הניקוד במדיה-ויקי.
באביב 2005 התחלנו להיתקל בצרות בכתיבת הניקוד. לבסוף התברר לנו שמדובר בבעיה בתמיכת הניקוד במדיה-ויקי.
אפיון הבאג הוא פשוט: שני סימני ניקוד מסתדרים בסדר מוזר אך קבוע, שכל קשר בינו לבין סדרם המקורי מקרי בהחלט. עיקר הבעיה היא באות מודגשת שיש לה גם ניקוד נוסף. האות בית מודגשת עם פתח במילה בַּיִת נראית מעוותת בחלק גדול ממערכות ההפעלה והדפדפנים – הפתח אומנם מתחת לאות, אבל הדגש בורח החוצה! באופן דומה, האות שין ימנית מודגשת עם סגול במלה עַשֶּׁשֶׁת נראת מעוותת לחלוטין – הסגול אומנם מתחת לאות, אבל הדגש והנקודה של השין בורחים החוצה. נראה כאילו אותיות השין הימניות הפכו לאותיות שין שמאליות!
לטיפול בבעיה הבאנו לידיעת המפתחים (בעיקר Brion Vibber, אחד המפתחים הראשיים ואחראי הגרסאות של מדיה-ויקי), הסברנו את פרטיה ואפילו הצענו תיקון – אך מקור הבעיה הוא בתצוגה של הגופנים של מיקרוסופט (עד לגרסת Windows XP SP2) שסותרים את תקן יוניקוד, ולפיכך כרגע פיתרון הבעיה אינו נראה באופק. הבעיה חמורה אף יותר כיוון שהיא נגרמת בעת השמירה, ולא בעת התצוגה.
קיימים פתרונות מעשיים לבעיות הניקוד כמפורט להלן.
מקור ואפיון הבעיה
תוי הניקוד העברי הם Combining characters, המתווספים לאות המופיעה לפניהם. כלומר בּ (בית מודגשת) מורכבת משני תווים – האות בית וסימן הדגש. בָּ (בית מודגשת עם קמץ) מורכבת משלושה תווים – האות בית, סימן הדגש וסימן הקמץ, ו-שָּׁ (שין ימנית עם דגש וקמץ) מורכבת מארבעה תווים נפרדים – האות שין, סימן הנקודה של השין הימנית, סימן הדגש וסימן הקמץ.
נשאלה השאלה, באיזה סדר תווי הניקוד צריכים להופיע לאחר האות המנוקדת. התשובה היא שהגופנים צריכים להציג את הניקוד נכונה לכל קומבינציה של תווי הניקוד, ומעבר לכך, תקן יוניקוד מגדיר את הסדר הקנוני של התווים. התקן קובע סדר שרירותי, לפיו הקמץ מופיע לפני הדגש, והדגש מופיע לפני הנקודה של השין הימנית.
הבעיה מתחילה בכך שהגופנים של מיקרוסופט לא מציגים את תווי הניקוד נכונה אלא אם כן הם מסודרים לפי סדר מסוים. הסדר הנכון לתצוגה גופנים אלו עבור שָּׁ, הוא דגש, לאחריו נקודה של שין ימנית ולבסוף קמץ. באופן לא מפתיע, אם במקרה תווי הניקוד מופיעים לפי הסדר הקנוני של תקן היוניקוד (קמץ, נקודה של שין ימנית, דגש), סימני הניקוד מוצגים בגופנים אלו בצורה מעוותת – שָּׁ – כאשר הדגש והנקודה מוסטים שמאלה.
תוכנת מדיה-ויקי מסדרת את התווים לפי הצורה הקנונית, כך שמילה מנוקדת תהא עקבית. כלומר המילה בַּיִת (עם פתח אחרי הדגש) והמילה בַּיִת (עם דגש אחרי הפתח) היא אותה מילה, ולכן נשמרת בבסיס הנתונים של מדיה-ויקי בצורה השניה. הסיבה לכך היא שהמאמרים בַּיִת ובַּיִת הם אותו המאמר (בית). למזלנו, נקבע שבמכלול שמות המאמרים לא מכילים תווי ניקוד, ולכן זאת בעיה תיאורטית בלבד. הבעיה היא שהפתרון של הבעיה התיאורטית גרם לבעיה מעשית ומעצבנת במיוחד – כל טקסט המכיל ניקוד, גם אם מוצג נכונה בפונטים הישנים, מוחלף מטקסט קנוני שאינו מוצג נכונה בחלק מהגופנים.
חברת מיקרוסופט תיקנה את בעיית הצגת הניקוד של הגופנים שלה ב-Windows XP ServicePack 2, ולכן הבעיה פתורה (לכאורה) במערכות הפעלה חדשות של מיקרוסופט. במערכות הפעלה ישנות יותר גרסאות ישנות יותר של הגופנים נמצאות עדיין בשימוש, ולכן בעיית התצוגה עדיין קיימת ומציקה במיוחד. טכנית אפשר לעדכן את הגופנים של מערכות הפעלה ישנות – זאת פרוצדורה פשוטה, אך היא אינה מהווה פתרון מעשי ומלא של הבעיה.
לבעיה זו מספר פתרונות מעשיים:
- להשתמש בצורה הקנונית שמוצגת בצורה תקינה גם בגופנים ישנים, גם אם צורה זאת אינה מתיישבת עם הצורה הקנונית של תקן יוניקוד.
- לא לבצע קנוניזציה על הטקסט המוכנס למכלול, למעט בשמות הערכים.
- לא לבצע קנוניזציה כלל, אבל להוסיף (אוטומטית או חצי-אוטומטית) הפניות של הערכים השקולים.
אבל כרגע לא יושם אף אחד מהפיתרונות האלה.
כרגע, יש לבעיה מספר פתרונות עקיפים:
- למנוע מתוכנת מדיה-ויקי להחליף את סימני הניקוד באמצעות תבניות. פתרון זה מתואר בהמשך.
- להסיר דגשים וסימני ניקוד כפולים. הבעיות בפתרון זה ברורות מאליהן, אך פתרון זה והפתרון הבא נותרו עד כה הפתרונות הנפוצים לבעיה.
- לא להשתמש בניקוד כלל.
פתרון מעשי לבעיות הניקוד
הפתרונות המעשיים משתמשים בתבניות בכדי למנוע החלפה של סימני הניקוד.
הפתרון הראשון שהוצע הוא שימוש בתבניות {{ס:דגש}}, {{ס:שין ימנית}} ו{{ס:שין שמאלית}}. תבניות אלו מכניסות סימן דגש, אות שין ימנית ואות שין שמאלית בהתאמה. לדוגמה, שימוש בתבנית ב{{ס:דגש}}ָ (הקמץ לאחר התבנית דגש), נותן בָּ כמו שצריך וללא כל עיוותים – גם הדגש וגם הקמץ נמצאים במקומם!
פתרון זה לא פותר את הניקוד של האות שין ימנית או שמאלית דגושה עם סימן ניקוד. שימוש ב-{{ס:שין ימנית}}{{ס:דגש}}ָ מחזירים שָּׁ ולא שָּׁ.
כפתרון מלא יותר, הוגדרה תבנית {{ריק}}. השימוש בתבנית זאת הוא בין רצף של סימני ניקוד, בכדי למנוע את החלפתם. למשל, עַשּ{{ריק}}ׁ{{ריק}}ֶשׁ{{ריק}}ֶת (הנקודה של השין הימנית מופיעה בין שתי תבניות ה{{ריק}}), והתוצאה – עַשֶּׁשֶׁת – מוצגת כמו שצריך וללא כל עיוותים – גם הנקודה של השין הימנית, גם הדגש וגם הסגול נמצאים במקומם.
דוגמה למימוש נרחב של פתרון זה, ראו בערך אלוף בצלות ואלוף שום.
איפיון טכני
כל טקסט הנשלח למדיה-ויקי, יהא אשר יהא, מתורגם לצורה קנונית באמצעות הפונקציה UtfNormal::fastCombiningSort שבקובץ UtfNormal.php. פונקציה זו מקבלת רשימה של תווים עם מספרים, ותפקידה לסדר את הצמודים שביניהם בתוך המחרוזת לפי סדר המספרים באופן ראשי, לפי סדר הופעתם באופן משני. לדוגמה, המספר של הדגש הוא 21, והמספר של הקמץ הוא 18 (למעשה, מספרם של כל תווי הניקוד פחות מן הדגש). לפיכך מסודרים כל סימני הניקוד לפני הדגש, דבר שאינו נכון. תקן יוניקוד מורה לעשות את הדבר הזה. סימני הניקוד מוגדרים בתקן יוניקוד Combined characters, ולכן כם הם עוברים קנוניזציה שלא מוצגת נכונה בהרבה פונטים.
הרשימה המלאה של סדר הקנוניזציה מוגדר בצורה מקוצרת במערך utfCombiningClass בקובץ UtfNormalData.inc.
הפתרון הפשוט ביותר (IMHO), שלא יפול עקב הוויכוח על דרך הקנוניזציה הנכונה שמתנהל במדיה-ויקי, הוא להוסיף אופציה לרמת הקנוניזציה המבוקשת (כל הטקסט, כותרות בלבד או ללא קנוניזציה). הוויקיפדיה העברית והערבית יבחרו לעבוד ללא קנוניזציה, ובמדיה-ויקי ימשיכו להתלבט על דרך הפתרון הטובה ביותר או האם כדאי לחכות שכל מערכות ההפעלה בעלם ישודרגו ל-Vista...
דיונים בויקיפדיה על הבעיה עד כה
- שיחת ויקיפדיה:באגים
- ויקיפדיה:מזנון/ארכיון 78
- ויקיפדיה:דלפק ייעוץ/ארכיון14 (בשני מקומות בעמוד: סעיפים 2 ו-29)
- שיחה:בניינים בעברית
- ויקיפדיה:מזנון/ארכיון 95#ניקוד
- ויקיפדיה:ניקוד/פרויקט הניקוד הגדול
- ויקיפדיה:דלפק ייעוץ/ארכיון30#לא מצליחה להדביק טקסט מנוקד בערך 'לאה גולדברג' ובמשך תחת הכותרת 'שוב עניין הניקוד'
- שיחה:אלוף בצלות ואלוף שום#בעיית הניקוד
הדיווח על הבאג
באג 2399 מדווח על הבעיה, אך ללא הועיל, כיוון שהמפתחים מסרבים לתקנו ללא תיקון בתקן יוניקוד, וכן עקב העובדה שהוא לכאורה טופל ב-Windows XP Service Pack 2.
בינתיים, ניתן להצביע עבור תיקון הבאג, באמצעות הקישור Vote for this bug. (יש להירשם בשביל להצביע.)
סטטוס עכשווי
סיכום עדכני לבאג זה, והסטטוס הנוכחי שלו, מתוארים בדף זה באתר של תוכנת "מדיה-ויקי":
- bugzilla:2399, הבאג עצמו (כולל תשובה מהעורך הרשמי של Unicode 5.0)
- mw:Unicode normalization considerations, דיון על מנגנון הקנוניזציה של מדיה-וויקי
- ראו גם: MW:MediaWiki roadmap (בריון רוצה לתקן את זה אבל בעדיפות נמוכה; משמעות שמתכנת יכול לקחת את זה על עצמו)
דף זה (בנוסף לדף של הבאג עצמו) מהווה את המקום הראשון להציג כל התפחתות בתחום זה או לשאול שאלות ישרות למפתחים.
אחד הפתרונות להכנסת ניקוד עברי הוא שימוש בתבניות, כפי שמוסבר לעיל. כאשר הבאג יתוקן בתוכנת מדיה-ויקי, ניתן יהיה להחליף את התבניות בעזרת בוט החלפות.