Skip to content

Emit slug-based heading IDs for anchor link navigation#430

Open
falcon-enoc wants to merge 2 commits into
schuyler:mainfrom
falcon-enoc:fix/heading-anchor-ids
Open

Emit slug-based heading IDs for anchor link navigation#430
falcon-enoc wants to merge 2 commits into
schuyler:mainfrom
falcon-enoc:fix/heading-anchor-ids

Conversation

@falcon-enoc
Copy link
Copy Markdown

Summary

  • Headings now receive text-derived id attributes regardless of the "Detect TOC token" preference, enabling standard [text](#section) anchor links in the preview.
  • The visible [TOC] renderer uses the same slugs.
  • Applied to both the main preview (hoedown_html_patch.c) and the Quick Look renderer (MPQuickLookRenderer.m) for parity.

Tests

  • xcodebuild test -workspace "MacDown 3000.xcworkspace" -scheme MacDown -destination 'platform=macOS' — 875 / 875 passing locally.
  • Four new tests in MPMarkdownRenderingTests.m for slug behavior.
  • 28 golden fixtures regenerated mechanically (uniform id="..." additions only).

Related to #429

Headings now receive text-derived id attributes so standard
CommonMark/GFM anchor links like [text](#section) navigate to the
corresponding heading in the preview. The visible [TOC] renderer
uses the same slugs for its links, keeping them consistent with
the new heading ids.

Existing golden fixtures and a few inline assertions that assumed
<h*> without attributes are updated. Four new tests cover slug
generation (basic ASCII, UTF-8 preservation, punctuation handling,
and emission independent of the TOC preference).

Related to schuyler#429
MPQuickLookRenderer uses its own parallel Hoedown setup, so without
this the anchor link fix would only apply to the main preview pane
and not to Finder Quick Look previews of the same file.

The slugify helper and header renderer are duplicated rather than
shared because MacDownCore is a separate Xcode target without
access to MacDown's hoedown_html_patch.c. Sharing them would
require restructuring the project, which is out of scope here.

Related to schuyler#429
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant