网网腾科技feat: initial commit
d5a81bebAdd on 2 days agoHistory
"""Command to open Markdown Table of Contents / Outline navigation."""

import re
import sublime
import sublime_plugin
from ..preview.manager import PreviewManager


class SmpOpenTocCommand(sublime_plugin.WindowCommand):
    """Displays a Quick Panel outline of Markdown headings to quickly jump to sections."""

    def run(self):
        view = self.window.active_view()
        if not view:
            return

        manager = PreviewManager.get_instance()
        if not manager.is_markdown_view(view):
            sublime.status_message("Active view is not a Markdown document")
            return

        lines = view.substr(sublime.Region(0, view.size())).splitlines()
        headings = []
        heading_lines = []

        for idx, line in enumerate(lines):
            stripped = line.strip()
            m = re.match(r"^(#{1,6})\s+(.*?)(?:\s+#+)?$", stripped)
            if m:
                level = len(m.group(1))
                title = m.group(2).strip()
                prefix = "  " * (level - 1) + f"H{level}: "
                headings.append(f"{prefix}{title}")
                heading_lines.append(idx)

        if not headings:
            sublime.status_message("No headings found in current Markdown document")
            return

        def on_select(index):
            if index < 0 or index >= len(heading_lines):
                return
            target_line = heading_lines[index]
            pt = view.text_point(target_line, 0)
            view.sel().clear()
            view.sel().add(sublime.Region(pt, pt))
            view.show_at_center(pt)
            self.window.focus_view(view)

        self.window.show_quick_panel(headings, on_select)

    def is_enabled(self):
        view = self.window.active_view()
        if not view:
            return False
        manager = PreviewManager.get_instance()
        return manager.is_markdown_view(view)