Lewati ke konten
πŸ› οΈToolsShed

Generator TOC Markdown

Buat daftar isi berlinks dari judul-judul markdown.

Tentang alat ini

Daftar Isi (TOC) Markdown adalah daftar navigasi di bagian atas dokumen yang membantu pembaca melompat dengan cepat ke bagian tertentu. Generator ini secara otomatis mengekstrak judul dari sumber Markdown Anda dan membuat jangkar yang tertaut kompatibel dengan GitHub, GitLab, dan sebagian besar renderer Markdown. Ini menghilangkan pekerjaan manual yang membosankan menulis entri TOC dan memastikan tautan tetap akurat saat dokumen Anda berkembang.

Tempel teks Markdown Anda dan klik Buat untuk langsung membuat TOC berformat dengan tautan jangkar yang berfungsi. Alat ini mendukung opsi yang dapat disesuaikan: kontrol kedalaman judul maksimum (H1 hingga H6) untuk disertakan dan pilih gaya poin yang Anda sukai (tanda hubung, bintang, atau tanda plus). Judul duplikat secara otomatis terdeteksi dan diberi nomor dengan sufiks seperti #heading-1, #heading-2 untuk menghindari konflik jangkar.

Pertanyaan yang Sering Diajukan

Implementasi Kode

import re

def heading_to_anchor(text: str) -> str:
    """Convert heading text to a GitHub-Flavored Markdown anchor."""
    anchor = text.lower()
    anchor = re.sub(r"[^\w\s-]", "", anchor)   # remove punctuation (keep letters, digits, -, _)
    anchor = re.sub(r"\s+", "-", anchor.strip())  # spaces β†’ hyphens
    return anchor

def generate_toc(markdown: str, max_depth: int = 3, bullet: str = "-") -> str:
    lines = []
    seen: dict[str, int] = {}

    for line in markdown.splitlines():
        m = re.match(r"^(#{1,6})\s+(.*)", line)
        if not m:
            continue
        level = len(m.group(1))
        if level > max_depth:
            continue

        title  = m.group(2).strip()
        anchor = heading_to_anchor(title)

        # Deduplicate: second occurrence β†’ anchor-1, third β†’ anchor-2, ...
        count  = seen.get(anchor, 0)
        seen[anchor] = count + 1
        if count > 0:
            anchor = f"{anchor}-{count}"

        indent = "  " * (level - 1)
        lines.append(f"{indent}{bullet} [{title}](#{anchor})")

    return "\n".join(lines)


md = """# Getting Started
## Installation
### Prerequisites
### Install
## Configuration
## Usage
# Advanced
## Performance
## Security
"""

print(generate_toc(md, max_depth=3, bullet="-"))
# - [Getting Started](#getting-started)
#   - [Installation](#installation)
#     - [Prerequisites](#prerequisites)
#     - [Install](#install)
#   - [Configuration](#configuration)
#   - [Usage](#usage)
# - [Advanced](#advanced)
#   - [Performance](#performance)
#   - [Security](#security)

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.