Repository navigation
Conversation
waylan
requested changes
Nov 9, 2026
| characters is followed by more text on the same line. | ||
| * Fix quadratic time when a document contains many unclosed HTML comments (`<!--` | ||
| with no matching `-->`). | ||
| * Fix cubic time when a paragraph contains many HTML comments inside many |
Member
There was a problem hiding this comment.
We have done a release since this PR was submitted. This edit to the changelog needs to be moved to the new unreleased section.
Contributor
Author
There was a problem hiding this comment.
Moved it to the end of the new Unreleased section. I rebased onto current master to do it, since the entry had ended up under 3.11.3 after the release, so the diff should only touch the Unreleased list now.
`HTMLExtractor.inline_close_follows` decides whether a comment inside raw inline HTML stays in the paragraph by copying the rest of the paragraph and running one regex per entry of `inline_stack` over it. Every comment repeats this, so n open inline tags followed by n comments cost O(n^3): `'x ' + '<span>' * 2000 + '<!---->' * 2000` (26 KB) takes about 75 seconds to convert. The end tags of a paragraph are now found once, recording the position of the last end tag of each name. The parser counts how many times each name is in `inline_stack` and how many open names still have an end tag ahead. A later comment in the same paragraph only drops the names whose last end tag it has passed, so each comment no longer depends on the size of the stack or the length of the paragraph. Output is unchanged.
naaz234
force-pushed
the
inline-comment-endtag-scan
branch
from
November 13, 2026 09:12
ac331af to
f4e3457
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
HTMLExtractor.inline_close_follows(added for #1643) runs on every comment while a raw inline tag is open. Each call copies the rest of the paragraph and runs one regex per entry ofinline_stackover it, so n open tags followed by n comments is cubic:The end tags of the paragraph are now found once, with the position of the last end tag of each name. The parser also counts how many times each name is in
inline_stackand how many open names still have an end tag ahead. A later comment in the same paragraph only drops the names whose last end tag it has passed. The 26 KB input now takes 0.035 s and 416 KB takes 3.5 s, which is what master already spends on a paragraph of plain<!---->comments of the same size. Mixing tag names, putting a non-matching end tag at the end, or alternating<span><!---->all stay linear too.Output matches master on 60,000 random documents built from inline/block tags, end tags (including
</ span>,</B >,</span/>), comments, blank lines and Markdown syntax, with no extensions,md_in_htmlandextra. The new test takes over 60 s on master and 0.14 s with this change.AI Assistance Disclosure
No AI tools were used in preparing this PR.
AI tools were used and I have disclosed which ones, and have fully reviewed and verified their output.
AI tools were use to assist with the following:
Checklist