Skip to content

fix(renderer): treat single newlines as soft breaks, not line breaks - #19

Open
shmuelzon wants to merge 1 commit into
b451c:mainfrom
shmuelzon:ignore-single-line-breaks
Open

fix(renderer): treat single newlines as soft breaks, not line breaks#19
shmuelzon wants to merge 1 commit into
b451c:mainfrom
shmuelzon:ignore-single-line-breaks

Conversation

@shmuelzon

Copy link
Copy Markdown
Contributor

The renderer appended a hard newline after every source line, so a single newline inside a paragraph rendered as a visible line break. CommonMark treats it as a soft break — rendered as a space.

Add MarkdownRenderer.joinSoftBreaks, a pre-pass that joins consecutive paragraph lines into one logical line before per-line rendering:

  • hard breaks still work: two+ trailing spaces, or a trailing backslash (odd runs only — an even run is escaped literal backslashes)
  • a list/task item starts its own line but absorbs the plain lines that follow it (CommonMark lazy continuation), so wrapped item text stays inside the item under its hanging indent instead of dropping to the left margin as a bogus paragraph
  • headers, rules, and blank lines keep their own line and never absorb or become a continuation
  • a continuation line's leading/trailing whitespace is collapsed into the single joining space

Blockquote and alert bodies did the same per-line joining, so they now run their lines through the same pre-pass.

The renderer appended a hard newline after every source line, so a
single newline inside a paragraph rendered as a visible line break.
CommonMark treats it as a soft break — rendered as a space.

Add MarkdownRenderer.joinSoftBreaks, a pre-pass that joins consecutive
paragraph lines into one logical line before per-line rendering:

- hard breaks still work: two+ trailing spaces, or a trailing backslash
  (odd runs only — an even run is escaped literal backslashes)
- a list/task item starts its own line but absorbs the plain lines that
  follow it (CommonMark lazy continuation), so wrapped item text stays
  inside the item under its hanging indent instead of dropping to the
  left margin as a bogus paragraph
- headers, rules, and blank lines keep their own line and never absorb
  or become a continuation
- a continuation line's leading/trailing whitespace is collapsed into
  the single joining space

Blockquote and alert bodies did the same per-line joining, so they now
run their lines through the same pre-pass.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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