מחולל תוכן עניינים
הדבק Markdown או HTML וקבל תוכן עניינים מקונן וניתן ללחיצה עם שבלולים אמיתיים מסוג GitHub בטוחים להתנגשות, בתוספת התוכן המקורי עם מזהי כותרת שהוזרקו.
תוצאה
תוכן עניינים שימושי רק כמו קישורי העוגן שמתחתיו, וקישורי עוגן אמינים רק אם כל כותרת מקבלת שבלול ייחודי וניתן לחיזוי. מחולל זה מנתח את הכותרות מכל מה שתדביק - Markdown או HTML - ומקצה לכל אחת עוגן אמיתי בסגנון GitHub: טקסט קטן, רווחים וסימני פיסוק מוחלפים או מופשטים, ובאופן קריטי, סיומת אמיתית בטוחה להתנגשות בכל פעם ששתי כותרות היו מייצרות את אותו שבלול. ה"מבוא" השני במסמך הופך למבוא-1, השלישי הופך למבוא-2, במעקב באמצעות מפת התרחשויות פועלת בדיוק כפי שפועל ה-slugger של GitHub עצמו - לא קיצור דרך שמחליף בשקט קישורים קודמים כאשר הכותרות חוזרות על עצמן, שזו הדרך הנפוצה ביותר בה נשברים תסריטים של תוכן עניינים ביד.
ניתוח Markdown מבוסס על שורה בכוונה, מכיוון שמצב הכשל הקלאסי למימוש נאיבי מתייחס ל-"#" שנכתב בתוך בלוק קוד מגודר ככותרת. כלי זה עוקב אחר האם גדר ``` או ~~~ פתוחה כעת כשהיא עוברת במסמך שורה אחר שורה, ומזהה רק כותרות ATX (# עד ######) מחוץ לגדרות פתוחות - כך שדגימת קוד המציגה הערות מעטפת או הערת Python "# הערה" לעולם לא מזהמת את תוכן העניינים שלך. קלט HTML לוקח נתיב שונה, אמיתי באותה מידה: הוא מנותח עם ה-DOMParser של הדפדפן עצמו, הכותרות נבחרות לפי שם התג, ותכונת ה-id של כל אחת מוגדרת ישירות על האלמנט בפועל לפני שהמסמך עובר בסידרה חזרה למחרוזת.
שני דברים יוצאים מהצד השני. ראשית, תוכן העניינים עצמו, המיוצא כרשימה מקוננת של Markdown (- [כותרת](#סלוג), מסומנת לפי רמת הכותרת) וגם כרשימה HTML מקוננת (<ul><li><a href="#slug">), כל אחת עם לחצן העתקה משלה. שנית, התוכן המקורי שלך עם העוגנים מחוברים בפועל: עבור קלט Markdown אתה יכול לבחור בתחביר תכונת הכותרת {#slug} הנתמך באופן נרחב בשימוש על ידי kramdown, Pandoc, MkDocs ו-Jekyll של GitHub Pages, או לחזור לתגיות כותרת HTML רגילות עם id="slug" שכבר מוגדר אם מעבד היעד שלך לא מבין את תחביר היעד שלך. עבור קלט HTML, המזהה מוזרק ישר לאלמנט הכותרת המנתח - אין "מצב" נפרד לבחירה כי התגים כבר קיימים.
הכל פועל באופן מקומי בדפדפן שלך: הניתוח, מתמטיקה של הקלעים וההרכבה מחדש של המסמכים מתרחשים כולם ב-JavaScript בעמוד שבו אתה מסתכל עכשיו, בלי שום דבר שהועלה לשום מקום. זה משנה לתיעוד טיוטת, קובצי ויקי פנימיים או פוסט שלא פורסם בבלוג שאתה לא מוכן להדביק בשירות של צד שלישי רק כדי לקבל תוכן עניינים עובד.