Skip to content

Conversation

@edwardloveall
Copy link
Contributor

When outputting as commonmark lines followed by a long, unwrappable
section would wrap incorrectly. For example:

item that doesn't need wrapping

a-long-line-that-won't-be-wrapped-because-there-is-no-character-it-can-break-on

When running this with the --to commonmark and --width 72 options:

comrak --to commonmark --width 72 some-markdown.md

It outputs the following:

item that doesn't need
wrapping

a-long-line-that-won't-be-wrapped-because-there-is-no-character-it-can-break-on

What was happening is that when a new line is needed, the algorithm
resets a bunch of variables like the current column, if we're at the
beginning of a line, etc. One of those variables is the position of the
last place we can break a line: the last non-space character. This is
stored in CommonMarkFormatters last_breakable field.

cmark-gfm resets this in render.c, and now so does comrak.

This also adds a new commonmark test type that doesn't write to HTML
to test commonmark specific features or bugs.

Fixes #227

When outputting as `commonmark` lines followed by a long, unwrappable
section would wrap incorrectly. For example:

```md
item that doesn't need wrapping

a-long-line-that-won't-be-wrapped-because-there-is-no-character-it-can-break-on
```

When running this with the `--to commonmark` and `--width 72` options:

```sh
comrak --to commonmark --width 72 some-markdown.md
```

It outputs the following:

```md
item that doesn't need
wrapping

a-long-line-that-won't-be-wrapped-because-there-is-no-character-it-can-break-on
```

What was happening is that when a new line is needed, the algorithm
resets a bunch of variables like the current column, if we're at the
beginning of a line, etc. One of those variables is the position of the
last place we can break a line: the last non-space character. This is
stored in `CommonMarkFormatter`s `last_breakable` field.

cmark-gfm [resets this][cmark-gfm-render] in `render.c`, and now so does comrak.

This also adds a new `commonmark` test type that doesn't write to HTML
to test commonmark specific features or bugs.

[cmark-gfm-render]: https://github.com/github/cmark-gfm/blob/f26f75ce5dbfeddf8c3e3df10a6f238f65f8d6ba/src/render.c#L60
@kivikakk
Copy link
Owner

kivikakk commented Jul 7, 2022

Wonderful — thank you so much!

@kivikakk kivikakk merged commit e23a579 into kivikakk:main Jul 7, 2022
@edwardloveall edwardloveall deleted the el-bad-wrap branch July 7, 2022 02:21
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.

Lines wrap incorrectly when followed by a non-wrappable line

2 participants