הבסיס הטכני של עיבוד רשימות Markdown
Markdown התבסס כשפת הסימון הסטנדרטית לתיעוד תוכנה מודרני, למסמכי מפרט טכני, לבסיסי ידע אישיים ולתקשורת בין מפתחים. רשימות תבליטים ברמה אחת (- item) ורשימות ממוספרות (1. item) נראות פשוטות, אבל בניית מתווי מסמך מקוננים לעומק, מרובי שכבות, מביאה מורכבות עיצוב משמעותית. מנתחי Markdown שונים — כמו CommonMark, GitHub Flavored Markdown (GFM), Python-Markdown ו-Pandoc — אוכפים כללים קפדניים ועדינים לגבי בחירת סמן הרשימה, יחס הטאב לרווח והזחת תת-בלוקים.
כשמדביקים רשימות בין עורכי טקסט הטרוגניים (כמו VS Code, Sublime Text, Xcode, Apple Notes או Microsoft Word), נוצרות שגיאות הזחה שקטות. רווח אחד חסר בתת-פריט גורם למהדר Markdown לפרש צומת ילד מקונן כפריט ראשי ברמה העליונה, או כבלוק פסקה מבודד. מעצב הרשימות המקוננות וההזחה של Utiliome מסלק את חריגות הניתוח האלה: הוא מנתח את מבנה הטקסט שהוזן כ-AST (Abstract Syntax Tree) ומייצר מחדש Markdown תקני ותואם מפרט.
כללי הזחה: הנחיות של 2 רווחים מול 4 רווחים
אחת המחלוקות הנפוצות ביותר בתכנון תיעוד טכני היא אם להזיח תת-רשימות ב-2 רווחים או ב-4 רווחים לכל שכבה היררכית. הבחירה תלויה במפרט מנתח ה-Markdown שאליו המסמך מיועד:
כלל ההזחה של 2 רווחים (GFM ו-Prettier הסטנדרטיים): במערכות תיעוד רשת מודרניות כמו GitHub, Docusaurus, Nextra ו-Obsidian, 2 רווחים לכל רמת הזחה הם התקן המוכר. מוסכמת 2 הרווחים מיישרת את תוכן הילד מתחת לתחילת הטקסט של פריט האב:
- Top-level item 1 - Nested child item 1.1 - Nested child item 1.2 - Deeply nested grandchild item 1.2.1 - Top-level item 2כלל ההזחה של 4 רווחים (CommonMark קפדני ו-Python-Markdown): מימושי CommonMark קפדניים דורשים שבלוקי ילד, קטעי קוד ורשימות מקוננות בתוך רשימות ממוספרות יוזחו ב-4 רווחים (או עצירת טאב מלאה אחת) כדי להבטיח הכלה תקינה של בלוק האב:
1. First ordered step in workflow - Associated sub-bullet A - Associated sub-bullet B 2. Second ordered step in workflowמלכודות טאב מול רווח: ערבוב תווי טאב פיזיים (
\t) עם תווי רווח ASCII (\x20) הוא הגורם המוביל לעיבוד שבור של תיעוד Markdown. מנועי עיבוד ברשת מתרגמים טאבים בצורה לא עקבית (לעיתים כ-4 או 8 עמודות תצוגה), ופריטים מקוננים קופצים ויזואלית אל מחוץ ליישור. Utiliome ממירה אוטומטית את כל תווי הטאב למחרוזות רווח אחידות, לפי העדפת התצורה המפורשת שהגדרתם.
אחידות סמני תבליט ותיקון רצף ממוספר
Markdown תומך בשלושה תווי תבליט נפרדים לרשימות לא ממוספרות: מקפים (-), כוכביות (*) וסימני פלוס (+). שלושתם מייצרים רכיבי HTML תקינים של רשימה לא ממוספרת (<ul>), אבל ערבוב סוגי סמנים באותו מסמך יוצר עומס חזותי ונכשל בבדיקות linter אוטומטיות (כמו כלל MD004 של markdownlint).
בנוסף, המספור של רשימות ממוספרות נשבר לעיתים קרובות במהלך עריכה חוזרת. מחברים מדביקים פריטים לאמצע רצפים ממוספרים, או נשענים על תחביר 1. שמתקדם אוטומטית:
<!-- Unformatted / Broken Input -->
* Feature A
- Feature B
+ Feature C
1. Initial step
1. Second step (copied from draft)
4. Out-of-order step
המעצב של Utiliome מאחד את כל סמני הרשימה הלא ממוספרת לתו האחיד שבחרתם (למשל, תקנון כל פריט ל--) וממספר מחדש רצפים ממוספרים ברצף (1., 2., 3.), או מתקנן אותם לקידומים נקיים של ספרה אחת (1., 1., 1.), לפי הנחיות סגנון סקירת הקוד של הצוות.