v0.10.0
This is a huge release after a a long time without a major release, with many bugfixes and several new features. Thanks to all people involved!
Breaking Changes
- feat!: allow custom headings attributes with optional value. Fixes #634 by @Martin1887 in #638
- feat!: metadata blocks. Fixes #580 by @Martin1887 in #641
- Make
html
andescape
modules optional by @jfrimmel in #519 - feat: separate escape.rs in another crate by @Martin1887 in #838
- Allow dynamically generated header ids and classes by @SergioBenitez in #614
- Add separate enum for Tag ends by @marcusklaas in #517
- add link identifiers into emitted tags by @Gozala in #436
- Add a separate mode to parse footnotes the same way GitHub does by @notriddle in #654
- feat!: separate inline HTML and HTML blocks by @Martin1887 in #692
- Use generics for broken link callback by @ollpu in #701
New Features
- Add task list with a list item's first paragraph by @marcusklaas in #558
- feat:
TextMergeStream
utility to merge consecutive text events by @Martin1887 in #686 - Reads markdown from file by @phoepsilonix in #726
- feat(utils): text events merger with offsets by @Martin1887 in #743
- Add reject-broken-links CLI option by @PoignardAzur in #807
- feat: convert
Tag
to_end()
andFrom
impl by @Martin1887 in #824 - feat(escape): separate attribute and text HTML by @notriddle in #830
- Update to CommonMark 0.31.2 by @notriddle in #834
- Backport footnote handling without needing blank lines between them for old footnote format by @GuillaumeGomez in #836
- Implement missing cell cutoff to stop quadratic results by @notriddle in #837
Bugfixes
- Fix parser bug where link label gets broken by ] in code span by @lukas-code in #643
- fix: strikethrough can be intra-word by @Martin1887 in #648
- fix: shift right overflow panic in debug mode in rare cases by @Martin1887 in #652
- fix: tables can interrupt paragraphs by @Martin1887 in #653
- fix(parse): rare error searching in the emphasis stack by @Martin1887 in #650
- Skip leading space on leading pipe in
scan_table_head
by @notriddle in #665 - Fix index out of bounds when parsing GFM footnote by @mgeisler in #667
- Allow lowercase letters in HTML declarations by @notriddle in #668
- Fix fuzzing empty list items by @mgeisler in #669
- Fix, and document, some table/paragraph interrupt corner cases by @notriddle in #672
- Include trailing backslash at all break points in paragraph by @notriddle in #676
- Block quotes interrupt paragraphs even with no space at start by @notriddle in #675
- Fix table/paragraph interruption when nested by @notriddle in #679
- Use correct
both
flag when pushing remaining delimiters to stack by @notriddle in #682 - Fix #684 by @Martin1887 in #685
- Fix spec violation on empty-list-item-cannot-interrupt-paragrph rule by @notriddle in #681
- fix: empty text events in ATX headings with trailing
#
by @Martin1887 in #683 - Fix incorrect scan of bad email address by @raphlinus in #688
- Fix infinite loop with metadata blocks with indented lines by @Martin1887 in #690
- Add special handling for backslashed table pipes by @notriddle in #699
- Fixes
rustdoc::bare_urls
lint by @GuillaumeGomez in #719 - Fix elided lifetimes and unused lifetimes errors by @GuillaumeGomez in #723
- Allow arbitrary blank lines within list by @notriddle in #728
- Single pipes alone on lines are not tables by @notriddle in #732
- Use original run lengths to judge multiples of three by @notriddle in #730
- Fix oversight in table escape parsing by @notriddle in #736
- Check that parens in link def are nested by @notriddle in #738
- Fix emphasis stack truncation bug by @notriddle in #740
- Fix emphasis run length delimiter lower limit bug by @notriddle in #742
- fix: compilation error in utils.rs after merge 701 by @Martin1887 in #746
- Track underscore lower bound by
% 3
modulo by @notriddle in #748 - Parse
[^]
as a link by @notriddle in #750 - Do not subtract list item indent if it has more than one blank line by @notriddle in #752
- Do not parse hard line breaks when doing link label blocks by @notriddle in #754
- Ignore block synstax when determining emphasis can_open/close by @notriddle in #756
- Allow up to three spaces indentation before footnote definition by @notriddle in #759
- Do not accept footnote definitions with line breaks by @notriddle in #761
- Apply laziness rules to link definition by @notriddle in #765
- When popping a list, clear
begin_list_item
state by @notriddle in #763 - Parse footnote definitions below the first line of nested blocks by @notriddle in #767
- Parse settext headers with higher priority than linkdefs by @notriddle in #769
- Clean up some more gratuitous differences in footnote parsing by @notriddle in #773
- Parse inline nested footnote definitions by @notriddle in #771
- Do not treat backslash at end of block as hard break by @notriddle in #775
- Correct instructions for running specs by @ollpu in #777
- Read lazy paragraph continuations off of refdefs by @notriddle in #782
- Allow setext headers to interrupt link definitions by @notriddle in #780
- Fix incorrect space handling at paragraph/linkref boundary by @notriddle in #783
- Fix handling of newlines in nested inline link by @notriddle in #784
- Allow setext headers to interrupt link def insides by @notriddle in #790
- Avoid updating linkdef when title isn't followed by NL by @notriddle in #792
- Trim spaces off start and end of link reference by @notriddle in #794
- Don't eat blank line when parsing unclosed fenced code by @notriddle in #796
- Do not allow inlines to cross over block structures by @notriddle in #798
- Fix parsing of spaces in code by @notriddle in #786
- Include last of line of link title by @notriddle in #809
- Calculate correct list indent for ordered lists by @notriddle in #811
- Do not treat zero-cell rows as valid by @notriddle in #812
- Trim spaces off end of parsed lines by @notriddle in #785
- Fix up corner cases in table and code unescaping by @notriddle in #776
- Reject table delimiter row with unexpected trailing characters by @notriddle in #814
- fix: html5ever may hide actual errors by @Martin1887 in #704
- Make empty lists and ordered lists not at one interrupt tables by @notriddle in #816
- Don't eat
!
on image-like footnote by @notriddle in #818 - Fix trailing backslash corner case on ATX headers by @notriddle in #820
- Reject long decimal and hex entities, turn invalid ones into U+FFFD by @notriddle in #827
- Don't allow
ItemBody::Heading
to appear inside emphasis by @notriddle in #829 - Fix 662 by @Martin1887 in #822
- Reject opening parens within (/) link titles by @notriddle in #841
Other Changes
- Bump bumpalo from 3.10.0 to 3.12.0 by @dependabot in #627
- Add an example which shows raw Markdown events by @mgeisler in #664
- Differential fuzzing of pulldown-cmark and commonmark.js by @mgeisler in #663
- Update MSRV to 1.60 by @mgeisler in #671
- Allow fuzzing all HTML declarations by @mgeisler in #677
- Filter out empty text and HTML events when fuzzing by @mgeisler in #678
- Cargo.toml: Add rust-version for MSRV. by @waywardmonkeys in #693
- chore: Update bitflags from 1.3.x to 2.x by @waywardmonkeys in #694
- Add missing end tags in some spec examples by @ollpu in #703
- puncttable.rs -> unicode 15.1.0 (+mk_puncttable.py -> python3) by @caldwell in #721
- docs:
Tag::Link.id
field description by @Martin1887 in #724 - chore(deps): update rustix dependency removing CVE by @Martin1887 in #744
- chore: apply clippy lints by @Martin1887 in #835
New Contributors
- @Martin1887 made their first contribution in #638
- @jfrimmel made their first contribution in #519
- @SergioBenitez made their first contribution in #614
- @Gozala made their first contribution in #436
- @mgeisler made their first contribution in #664
- @ollpu made their first contribution in #703
- @caldwell made their first contribution in #721
- @phoepsilonix made their first contribution in #726
- @PoignardAzur made their first contribution in #807
Full Changelog: v0.9.6...v0.10.0