Verknüpfen Sie doppelte Markdown-Überschriften ohne Kollisionen
Wiederholte Überschriften dürfen nicht dieselbe HTML-ID haben. Die erste Überschrift behält den Basisanker, während spätere Übereinstimmungen Vorkommenssuffixe wie -2 und -3 erhalten; Das Tool fügt genau diese IDs vor den Überschriften ein und verwendet dieselben Werte in den generierten Links, sodass jeder Eintrag einen anderen Abschnitt erreicht.
Markdown mit Inhaltsverzeichnis
Das Originaldokument mit einem ersetzbaren generierten Block und expliziten HTML-Ankern vor eingefügten Überschriften.
Jede verlinkte Überschrift
| 3 | 2 | Install | install |
| 5 | 3 | Linux | linux |
| 7 | 2 | Install! | install-2 |
| 9 | 3 | Windows | windows |
| 11 | 2 | Install | install-3 |
Zwei Überschriften mit dem Namen „Install“ werden zu „#install“ und „#install-2“ und nicht zu zwei Links zum selben Ziel.
Die Erkennung von Duplikaten erfolgt, nachdem Groß-/Kleinschreibung, Zeichensetzung und Leerzeichen normalisiert wurden. Installieren Sie also! und Installation können immer noch kollidieren.
Die Überschriftszuordnungstabelle stellt den endgültigen Anker bereit, der jeder Quellzeile zugewiesen ist, bevor das Dokument heruntergeladen wird.
So funktioniert es
So wird es gemacht
- Normalisieren Sie die Zeilenenden und entfernen Sie nur einen vollständigen Inhaltsverzeichnisblock und Ankerzeilen, die zuvor von diesem Tool generiert wurden.
- Scannen Sie Zeilen der Reihe nach, verfolgen Sie Backtick- und Tilde-Zäune und ignorieren Sie Code mit vier Leerzeichen oder Tabulatoreinzügen, bevor Sie ATX- und Setext-Überschriften erkennen.
- Vereinfachen Sie jede enthaltene Überschrift in einen kleingeschriebenen Unicode-Slug und hängen Sie dann die Suffixe -2, -3 und höher an, wenn normalisierte Namen kollidieren.
- Fügen Sie den genauen HTML-Anker vor jeder enthaltenen Überschrift ein und platzieren Sie eine markierte, verschachtelte Liste nach einem öffnenden Titel der ersten Ebene oder am Dokumentanfang.
Wovon es ausgeht
- Der ausgewählte niedrigste Pegel ist nicht tiefer als der ausgewählte maximale Pegel.
- Der Scanner zielt auf gewöhnliche CommonMark ATX-Überschriften und einzeilige Setext-Überschriften ab; Es handelt sich nicht um einen vollständig erweiterungsspezifischen Markdown-Renderer.
- Rohe HTML-Anker werden vom Zielrenderer zugelassen. Eine Plattform, die verfasstes HTML entfernt, entfernt auch diese expliziten Ziele.
- Vorhandene nicht markierte HTML-IDs und ein unvollständig generierter Markierungsblock werden als verfasster Inhalt behandelt und niemals gelöscht.
Fragen
Warum verlassen Sie sich nicht darauf, dass der Renderer doppelte Überschriften auflöst?
Die Regeln für Renderer-Suffixe unterscheiden sich und sind nicht Teil des Kern-Markdowns. Explizite IDs machen das Linkziel zu einem Teil des Dokuments und nicht zu einer undokumentierten Host-Konvention.
Was passiert, wenn eine Überschrift nur Satzzeichen enthält?
Seine Basis wird zum Abschnitt, gefolgt von denselben numerischen Vorkommenssuffixen, wenn mehr als eine Überschrift enthalten ist, die nur aus Satzzeichen besteht.
Quellen
Die vollständige Methode, das Rechenbeispiel und alle Annahmen hinter diesem Ergebnis stehen auf Markdown-Inhaltsverzeichnis-Ersteller.