Skip to content

Fix ASCII HTML block starts per CommonMark 0.31.2 - #440

Merged
chrisjsewell merged 8 commits into
executablebooks:masterfrom
rupayon123:fix/ascii-html-block-starts
Nov 9, 2026
Merged

chrisjsewell merged 8 commits into
executablebooks:masterfrom
rupayon123:fix/ascii-html-block-starts

Conversation

@rupayon123

@rupayon123 rupayon123 commented Sep 26, 2026 •

Copy link
Copy Markdown
Contributor

Fixes #437. Lowercase declarations now interrupt paragraphs, and case-insensitive HTML block tag matching uses ASCII case folding so Unicode lookalikes do not start blocks. Focused regressions cover both cases and an ASCII mixed-case control.

Validation: five input cases failed on the previous implementation; after the fix, python -m pytest -q tests/ passed (1,035 tests), and all applicable pre-commit hooks (including strict mypy and Ruff), plus git diff --check, passed locally. Initial pre-commit.ci failed because parametrized tests used an untyped decorator; the follow-up commit removes that decorator while retaining all cases. GitHub Actions require maintainer approval and have not executed. No browser or renderer integration was tested.

AI assistance was used to develop and validate this change.

rupayon123 and others added 8 commits September 26, 2026 02:50
A global `re.ASCII` also narrows `\s` in the lookahead after the tag
name, so a no-break space or other Unicode space after `<div`, `<pre`
or `<script` stopped starting an HTML block, where markdown-it and
commonmark.js both start one.
Use the scoped `(?a:...)` flag on the tag-name group instead,
keeping the capture group so the group numbers are unchanged.
Add upstream markdown-it's own fixture for lowercase declarations
(`foo\n<!bar baz>`, from 15.0.0) to `commonmark_extras.md`, and the
executablebooks#437 cases to `issue-fixes.md`: lowercase `<!doctype html>`, Unicode
lookalikes that must neither open nor close a block, an ASCII mixed-case
control, and no-break-space controls after `<div` and `<pre` that must
still start a block.
The cases from `tests/test_html_block_ascii.py` are all covered there,
so that file is removed.
The removed tests/test_html_block_ascii.py also checked that an uppercase
<!DOCTYPE html> interrupts a paragraph. Add it to the lowercase-declaration
fixture, so every case from that file is now in the port fixtures.
# Conflicts:
#	tests/test_port/fixtures/commonmark_extras.md
#	tests/test_port/fixtures/issue-fixes.md
@chrisjsewell
chrisjsewell merged commit 2542e66 into executablebooks:master Nov 9, 2026
15 checks passed
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.

html_block: lowercase declarations and Unicode case-folding in tag names diverge from CommonMark 0.31.2

2 participants