Skip to content

fix(markdown): preserve HTML comments as text during markdown parsing#7722

Open
weilinzung wants to merge 2 commits intoueberdosis:mainfrom
weilinzung:marked-html-coments
Open

fix(markdown): preserve HTML comments as text during markdown parsing#7722
weilinzung wants to merge 2 commits intoueberdosis:mainfrom
weilinzung:marked-html-coments

Conversation

@weilinzung
Copy link
Copy Markdown
Contributor

@weilinzung weilinzung commented Apr 7, 2026

Changes Overview

HTML comments (<!-- ... -->) passed through editor.markdown.parse() were silently dropped because the browser DOM parser strips comment nodes before generateJSON processes them. This fix preserves them as plain text so comment content is not lost.

It should be similar to match markedJs:

Screenshot 2026-04-07 at 9 58 03 AM

Implementation Approach

Added a regex check in parseHTMLToken that intercepts comment tokens before they reach the DOM parser, returning them as plain text nodes instead:

const isHtmlComment = /<!--([\s\S]*?)-->/.test(normalizedHtml)

Block comments are wrapped in a paragraph; inline comments are returned as bare text nodes.

Testing Done

Added 4 unit tests in mixed-html.spec.ts:

  1. standalone block comment → paragraph text
  2. inline comment within surrounding text
  3. multiline comment
  4. comment with surrounding whitespace

Verification Steps

pnpm dev → open http://localhost:3000/Markdown/Parse/React
Click Parse Markdown — the Hidden HTML Comments section should render the comment text visibly in the editor
Run pnpm -w -F @tiptap/markdown test mixed-html

Additional Notes

Before

before

After

Screenshot 2026-04-07 at 3 43 38 PM

Checklist

  • I have created a changeset for this PR if necessary.
  • My changes do not break the library.
  • I have added tests where applicable.
  • I have followed the project guidelines.
  • I have fixed any lint issues.

Related Issues

Fixes #7720

Copilot AI review requested due to automatic review settings April 7, 2026 19:56
@changeset-bot
Copy link
Copy Markdown

changeset-bot bot commented Apr 7, 2026

🦋 Changeset detected

Latest commit: da5a9be

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 72 packages
Name Type
@tiptap/markdown Patch
@tiptap/core Patch
@tiptap/extension-audio Patch
@tiptap/extension-blockquote Patch
@tiptap/extension-bold Patch
@tiptap/extension-bubble-menu Patch
@tiptap/extension-bullet-list Patch
@tiptap/extension-code-block-lowlight Patch
@tiptap/extension-code-block Patch
@tiptap/extension-code Patch
@tiptap/extension-collaboration-caret Patch
@tiptap/extension-collaboration Patch
@tiptap/extension-color Patch
@tiptap/extension-details Patch
@tiptap/extension-document Patch
@tiptap/extension-drag-handle-react Patch
@tiptap/extension-drag-handle-vue-2 Patch
@tiptap/extension-drag-handle-vue-3 Patch
@tiptap/extension-drag-handle Patch
@tiptap/extension-emoji Patch
@tiptap/extension-file-handler Patch
@tiptap/extension-floating-menu Patch
@tiptap/extension-font-family Patch
@tiptap/extension-hard-break Patch
@tiptap/extension-heading Patch
@tiptap/extension-highlight Patch
@tiptap/extension-horizontal-rule Patch
@tiptap/extension-image Patch
@tiptap/extension-invisible-characters Patch
@tiptap/extension-italic Patch
@tiptap/extension-link Patch
@tiptap/extension-list Patch
@tiptap/extension-mathematics Patch
@tiptap/extension-mention Patch
@tiptap/extension-node-range Patch
@tiptap/extension-ordered-list Patch
@tiptap/extension-paragraph Patch
@tiptap/extension-strike Patch
@tiptap/extension-subscript Patch
@tiptap/extension-superscript Patch
@tiptap/extension-table-of-contents Patch
@tiptap/extension-table Patch
@tiptap/extension-text-align Patch
@tiptap/extension-text-style Patch
@tiptap/extension-text Patch
@tiptap/extension-twitch Patch
@tiptap/extension-typography Patch
@tiptap/extension-underline Patch
@tiptap/extension-unique-id Patch
@tiptap/extension-youtube Patch
@tiptap/extensions Patch
@tiptap/html Patch
@tiptap/pm Patch
@tiptap/react Patch
@tiptap/starter-kit Patch
@tiptap/static-renderer Patch
@tiptap/suggestion Patch
@tiptap/vue-2 Patch
@tiptap/vue-3 Patch
@tiptap/extension-character-count Patch
@tiptap/extension-dropcursor Patch
@tiptap/extension-focus Patch
@tiptap/extension-gapcursor Patch
@tiptap/extension-history Patch
@tiptap/extension-list-item Patch
@tiptap/extension-list-keymap Patch
@tiptap/extension-placeholder Patch
@tiptap/extension-table-cell Patch
@tiptap/extension-table-header Patch
@tiptap/extension-table-row Patch
@tiptap/extension-task-item Patch
@tiptap/extension-task-list Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@netlify
Copy link
Copy Markdown

netlify bot commented Apr 7, 2026

Deploy Preview for tiptap-embed ready!

Name Link
🔨 Latest commit da5a9be
🔍 Latest deploy log https://app.netlify.com/projects/tiptap-embed/deploys/69d56557bc073b0008738d1d
😎 Deploy Preview https://deploy-preview-7722--tiptap-embed.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Fixes @tiptap/markdown parsing so HTML comments (<!-- ... -->) are preserved (as text) instead of being dropped by the browser DOM parsing step, improving markdown round-tripping and preventing data loss for comment-based metadata.

Changes:

  • Intercepts HTML comment tokens in MarkdownManager.parseHTMLToken and converts them into text (paragraph-wrapped for block tokens).
  • Adds unit tests covering block, inline, multiline, and whitespace-preserving comment scenarios.
  • Updates the Markdown parse demo content and adds a changeset for a patch release.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.

File Description
packages/markdown/src/MarkdownManager.ts Adds HTML-comment detection and a text-node fallback to preserve comment content during parse.
packages/markdown/tests/mixed-html.spec.ts Adds regression tests for comment preservation in different positions/forms.
demos/src/Markdown/Parse/React/index.jsx Extends the demo markdown sample with HTML and “Hidden HTML Comments” examples.
.changeset/calm-cycles-hear.md Declares a patch release for preserving HTML comments during markdown parsing.

@weilinzung
Copy link
Copy Markdown
Contributor Author

@bdbch, I would appreciate it if you could review this. This is about our AI usage: we are feeding it MD content with hidden comments to replace.

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.

[Markdown]: editor.markdown.parse() fails to parse HTML comments, returning empty paragraph

2 participants