# [v0.29.0] - 10-10-2024

* Add support for backslash escape in wikilinks by @digitalmoksha in https://github.com/kivikakk/comrak/pull/471

Diff: https://github.com/kivikakk/comrak/compare/v0.28.0...v0.29.0


# [v0.28.0] - 05-09-2024

* Add a render option to render the image as <figure> by @JmPotato in https://github.com/kivikakk/comrak/pull/458
* Fix edge cases for relaxed-autolink option by @digitalmoksha in https://github.com/kivikakk/comrak/pull/461

Diff: https://github.com/kivikakk/comrak/compare/v0.27.0...v0.28.0


# [v0.27.0] - 19-08-2024

* Track line offsets for better accuracy of inline sourcepos by @digitalmoksha in https://github.com/kivikakk/comrak/pull/453
* Add experimental-inline-sourcepos to cli options by @digitalmoksha in https://github.com/kivikakk/comrak/pull/455

Diff: https://github.com/kivikakk/comrak/compare/v0.26.0...v0.27.0


# [v0.26.0] - 12-07-2024

* Restore inline sourcepos as experimental. by @kivikakk in https://github.com/kivikakk/comrak/pull/444
  * This is needed by some downstream users, so we re-introduce it, with
    a clearly labelled option.

Diff: https://github.com/kivikakk/comrak/compare/v0.25.0...v0.26.0


# [v0.25.0] - 12-07-2024

* Discord-flavored Markdown by @Meow and @liamwhite in https://github.com/kivikakk/comrak/pull/421
  * Three new extensions and two render options are added:
    * `extension.underline` adds support for `__underlined__` text.
    * `extension.spoiler` adds support for `||spoiler||` text.
    * `extension.greentext` adds support for image board-style `>greentext`,
      which isn't transformed into a blockquote.
    * `render.ignore_setext` disables parsing setext-style headings.
    * `render.ignore_empty_links` causes links with no text (like `[](xyz)`) to
      remain in the text as-is.
* nodes: add From impls for AstNode. by @kivikakk in https://github.com/kivikakk/comrak/pull/424
  * Back by popular demand: `AstNode::from(NodeValue)`.
  * Also added is `AstNode::from(Ast)`, if you have sourcepos.
* AST validation by @yannham in https://github.com/kivikakk/comrak/pull/425
  * The AST is validated when formatting a document as CommonMark in debug builds.
* Address autolink edge cases. by @kivikakk in https://github.com/kivikakk/comrak/pull/426
  * Autolinks had many edge cases where output differed from upstream
    `cmark-gfm`. These have been fixed by following upstream's parser design
    closely.
* shortcodes: capture all known aliases. by @kivikakk in https://github.com/kivikakk/comrak/pull/427
  * We didn't parse shortcodes containing numbers or `+`. We do now.
* Support both upstream CommonMark and GFM's differences in the base spec. by @kivikakk in https://github.com/kivikakk/comrak/pull/428
  * GFM modifies even base CommonMark output somewhat. We now support and
    validate against both.
* cm: count ol items from start of each list. by @kivikakk in https://github.com/kivikakk/comrak/pull/429
  * Ordered list item numbers are normalised on formatting back to CommonMark.
* arena_tree: panic if iterator invalidation causes trouble. by @kivikakk in https://github.com/kivikakk/comrak/pull/437
  * `arena_tree` would silently stop iteration when trying to proceed from a
    child that had lost its parent. It now panics instead, as the old behaviour
    is incorrect and impossible to notice.
* broken reflink callback updates & big cleanup. by @kivikakk in https://github.com/kivikakk/comrak/pull/438
  * The broken reference link callback has been moved into `ParseOptions` (which
    now takes a lifetime, meaning `Options` does too).
  * The callback now takes a struct containing both the normalised reference,
    and the original text, and the return value has changed from a 2-tuple to a
    struct for clarity.
  * `parse_document_with_broken_link_callback` has been marked deprecated.
* Inline sourcepos fixes. by @kivikakk in https://github.com/kivikakk/comrak/pull/439
  * Inline sourcepos was provided on a best-effort basis, but there are multiple
    correctness issues which can't be fixed without significant work.
  * Inline sourcepos is no longer reported in HTML output. It remains in the AST
    and in XML output, but it is not reliable. See the PR for details.
  * Link sourcepos is slightly better than it was when it spans multiple lines.

## New Contributors

* @liamwhite made their first contribution in https://github.com/kivikakk/comrak/pull/421
* @yannham made their first contribution in https://github.com/kivikakk/comrak/pull/425

Diff: https://github.com/kivikakk/comrak/compare/v0.24.1...v0.25.0


# [v0.24.1] - 19-05-2024

* Add GH_TOKEN to release workflow by @digitalmoksha in https://github.com/kivikakk/comrak/pull/418

Diff: https://github.com/kivikakk/comrak/compare/v0.24.0...v0.24.1


# [v0.24.0] - 19-05-2024

* Miscellany. by @kivikakk in https://github.com/kivikakk/comrak/pull/387
* Add automation to release new crates by @gjtorikian in https://github.com/kivikakk/comrak/pull/374
* build(deps): bump emojis from 0.5.2 to 0.6.2 by @dependabot in https://github.com/kivikakk/comrak/pull/393
* build(deps): bump arbitrary from 1.3.0 to 1.3.2 by @dependabot in https://github.com/kivikakk/comrak/pull/394
* build(deps): bump actions/checkout from 3 to 4 by @dependabot in https://github.com/kivikakk/comrak/pull/389
* build(deps): bump once_cell from 1.17.0 to 1.19.0 by @dependabot in https://github.com/kivikakk/comrak/pull/390
* build(deps): bump xdg from 2.4.1 to 2.5.2 by @dependabot in https://github.com/kivikakk/comrak/pull/391
* build(deps): bump derive_builder from 0.12.0 to 0.20.0 by @dependabot in https://github.com/kivikakk/comrak/pull/392
* build(deps): bump memchr from 2.5.0 to 2.7.2 by @dependabot in https://github.com/kivikakk/comrak/pull/396
* build(deps): bump ntest from 0.9.0 to 0.9.2 by @dependabot in https://github.com/kivikakk/comrak/pull/397
* build(deps): bump typed-arena from 2.0.1 to 2.0.2 by @dependabot in https://github.com/kivikakk/comrak/pull/398
* Update automerge.yml by @gjtorikian in https://github.com/kivikakk/comrak/pull/401
* build(deps): bump clap from 4.0.32 to 4.5.4 by @dependabot in https://github.com/kivikakk/comrak/pull/400
* build(deps): bump regex from 1.7.0 to 1.10.4 by @dependabot in https://github.com/kivikakk/comrak/pull/402
* Fix release workflows by @gjtorikian in https://github.com/kivikakk/comrak/pull/395
* workflows: check MSRV in CI. by @kivikakk in https://github.com/kivikakk/comrak/pull/406
* Add support for wikilinks format by @digitalmoksha in https://github.com/kivikakk/comrak/pull/407
* Autolink should ignore wikilinks by @digitalmoksha in https://github.com/kivikakk/comrak/pull/413
* Bump version to 0.24.0 by @digitalmoksha in https://github.com/kivikakk/comrak/pull/415

Diff: https://github.com/kivikakk/comrak/compare/0.23.0...v0.24.0


# [0.23.0]

* add traverse() demo example by @kaesluder in https://github.com/kivikakk/comrak/pull/370
* Avoid backslashes before a new block. by @jneem in https://github.com/kivikakk/comrak/pull/373
* Expand traverse and descendants documentation: Issue #369 by @kaesluder in https://github.com/kivikakk/comrak/pull/375
* Feat/inplace: add new parameter `--inplace` (`-i`) for in-place formatting by @bioinformatist in https://github.com/kivikakk/comrak/pull/377
* Change `relaxed-autolinks` to allow any url scheme by @digitalmoksha in https://github.com/kivikakk/comrak/pull/380
* Fix sourcepos for setext headers by @digitalmoksha in https://github.com/kivikakk/comrak/pull/381
* Add  iterative search/replace example to examples and README.md by @kaesluder in https://github.com/kivikakk/comrak/pull/383
* un-Nix in CI. by @kivikakk in https://github.com/kivikakk/comrak/pull/384
* Return brackets in autolinks behavior back to cmark-gfm by @digitalmoksha in https://github.com/kivikakk/comrak/pull/386


# [0.22.0]

* Fix broken docs link in README by @ohakutsu in https://github.com/kivikakk/comrak/pull/364
* Make non public nodes public by @mfontanini in https://github.com/kivikakk/comrak/pull/363
* cargo update -p rustix --precise 0.36.17 by @kivikakk in https://github.com/kivikakk/comrak/pull/368
* Add render option to wrap escaped chars in span by @digitalmoksha in https://github.com/kivikakk/comrak/pull/367
* Add math support by @digitalmoksha in https://github.com/kivikakk/comrak/pull/366


# [0.21.0]

* Add a multiline blockquote extension by @digitalmoksha in https://github.com/kivikakk/comrak/pull/359


# [0.20.0]

* build(deps): bump rustix from 0.36.11 to 0.36.16 in /fuzz by @dependabot in https://github.com/kivikakk/comrak/pull/346
* Use Nix for CI. by @charlottia in https://github.com/kivikakk/comrak/pull/338
* Allow for Syntect to simply generate CSS classes by @gjtorikian in https://github.com/kivikakk/comrak/pull/347


# [0.19.0]

* Simplify anchorize() by @kornelski in https://github.com/kivikakk/comrak/pull/297
* Use footnote name for reference id by @digitalmoksha in https://github.com/kivikakk/comrak/pull/300
* Escape footnote name by @digitalmoksha in https://github.com/kivikakk/comrak/pull/308
* Add in-doc labels for public facing features by @CosmicHorrorDev in https://github.com/kivikakk/comrak/pull/304
* build(deps): bump xml-rs from 0.8.4 to 0.8.14 by @dependabot in https://github.com/kivikakk/comrak/pull/312
* Handle footnote names that have been parsed into multiple nodes by @digitalmoksha in https://github.com/kivikakk/comrak/pull/311
* Sync with cmark-gfm-0.29.0.gfm.3 by @digitalmoksha in https://github.com/kivikakk/comrak/pull/313
* Sync with cmark-gfm-0.29.0.gfm.4 by @digitalmoksha in https://github.com/kivikakk/comrak/pull/314
* Sync with cmark-gfm-0.29.0.gfm.5 by @digitalmoksha in https://github.com/kivikakk/comrak/pull/315
* Fix backslash in a link issue by @vpetrigo in https://github.com/kivikakk/comrak/pull/317
* Sync with cmark-gfm-0.29.0.gfm.7 by @digitalmoksha in https://github.com/kivikakk/comrak/pull/318
* Rename `ComrakFoo` types to just `Foo` for easier usage by @tgross35 in https://github.com/kivikakk/comrak/pull/320
* Make `ComrakExtensionOptions` non-exhaustive by @CosmicHorrorDev in https://github.com/kivikakk/comrak/pull/305
* Add builder derive and non_exhaustive for option structs by @YJDoc2 in https://github.com/kivikakk/comrak/pull/292
* add PartialEq and Eq derive for Ast and its components by @YJDoc2 in https://github.com/kivikakk/comrak/pull/322
* Sync with cmark-gfm-0.29.0.gfm.11 by @digitalmoksha in https://github.com/kivikakk/comrak/pull/319
* Fix autolink detection inside wiki style link brackets by @digitalmoksha in https://github.com/kivikakk/comrak/pull/325
* Add CI for running benchmarks by @YJDoc2 in https://github.com/kivikakk/comrak/pull/326
* Make adapters Send + Sync by @lucperkins in https://github.com/kivikakk/comrak/pull/337
* docs: fix-up broken docs.rs link by @silverjam in https://github.com/kivikakk/comrak/pull/341
* Use github/cmark-gfm submodule by @digitalmoksha in https://github.com/kivikakk/comrak/pull/344
* Sync with cmark-gfm-0.29.0.gfm.12 by @digitalmoksha in https://github.com/kivikakk/comrak/pull/343
* Sync with cmark-gfm-0.29.0.gfm.13 by @digitalmoksha in https://github.com/kivikakk/comrak/pull/345


# [0.18.0]

* Improve performance of bundled plugins, and streaming I/O by @kivikakk in https://github.com/kivikakk/comrak/pull/288
* Implement Default for enums without using #[default] attribute by @silverpill in https://github.com/kivikakk/comrak/pull/293
* XML and sourcepos support by @kivikakk in https://github.com/kivikakk/comrak/pull/232
* Add a quadratic fuzzer by @philipturnbull in https://github.com/kivikakk/comrak/pull/295


# [0.17.1]

* Fix some panics found by trivial fuzzing.

Missed from the 0.17.0 changelog:

* Add footnote attributes that mirror cmark-gfm by @digitalmoksha in https://github.com/kivikakk/comrak/pull/273
* Add support for full_info_string render option by @digitalmoksha in https://github.com/kivikakk/comrak/pull/276
* chore: improve debug performance by @conradludgate in https://github.com/kivikakk/comrak/pull/283


# [0.17.0]

This contains some breaking changes from an API point of view, but output is
largely unchanged.  Spec compliance is improved, and benchmark runtime is over
20% faster.

* SECURITY: GHSA-8hqf-xjwp-p67v / Quadratic runtime when parsing Markdown (GHSL-2023-047)
  * <https://github.com/kivikakk/comrak/security/advisories/GHSA-8hqf-xjwp-p67v>
  * A variety of quadratic runtime issues that could lead to DoS were reported
    and addressed.
  * We replaced pest with an re2c-based scanner.
* SECURITY: GHSA-xxmq-4vph-956w / Excessive output when parsing Markdown (GHSL-2023-048)
  * <https://github.com/kivikakk/comrak/security/advisories/GHSA-xxmq-4vph-956w>
  * Reference output is limited to 100Kb.
* SECURITY: GHSA-5r3x-p7xx-x6q5 / Attacker controlled data in AST nodes is not validated (GHSL-2023-049)
  * <https://github.com/kivikakk/comrak/security/advisories/GHSA-5r3x-p7xx-x6q5>
  * AST nodes no longer store raw `Vec<u8>`s, and instead store `String`s.
* Various API points were cleaned up.
* Comrak now targets Rust 2018.

Many thanks to @philipturnbull and @darakian of the GitHub Security Lab for
bringing these issues to my attention and detailing the reproduction steps for
each case.


# [0.16.0]

* Track which symbol was used to mark task item as checked by @felipesere in https://github.com/kivikakk/comrak/pull/252
* improve tagfilter performance by @fiji-flo in https://github.com/kivikakk/comrak/pull/256
* [ShortCode] Add support for gemojis via shortcodes extension by @eklipse2k8 in https://github.com/kivikakk/comrak/pull/260
* "mod three rule" fix by @kivikakk in https://github.com/kivikakk/comrak/pull/262
* Add `shortcodes` to the README by @gjtorikian in https://github.com/kivikakk/comrak/pull/263
* Cargo.toml: remove timebomb by @kivikakk in https://github.com/kivikakk/comrak/pull/264
* Add custom heading adapter by @lucperkins in https://github.com/kivikakk/comrak/pull/266
* Keep track of "^" symbol when within footnotes by @gjtorikian in https://github.com/kivikakk/comrak/pull/274


# [0.15.0]

* table: fix start_line of Table itself by @kivikakk in https://github.com/kivikakk/comrak/pull/231
* Rename header file to match c libname by @gjtorikian in https://github.com/kivikakk/comrak/pull/233
* Change the name of the ifdef by @gjtorikian in https://github.com/kivikakk/comrak/pull/234
* Add `comrak_set_parse_option_smart` by @gjtorikian in https://github.com/kivikakk/comrak/pull/235
* Allow `c_char` options to be NULL by @gjtorikian in https://github.com/kivikakk/comrak/pull/237
* Replace `lazy_static` dependency with `once_cell` by @Turbo87 in https://github.com/kivikakk/comrak/pull/238
* Make `comrak --help` readable on my terminal by @mgeisler in https://github.com/kivikakk/comrak/pull/242
* c-api: fix CI build by @kivikakk in https://github.com/kivikakk/comrak/pull/240
* Bump versions of some dependencies by @helmet91 in https://github.com/kivikakk/comrak/pull/243
* Adding functionality to build SyntectAdapters with custom themes, syntax sets, etc. by @ArvinSKushwaha in https://github.com/kivikakk/comrak/pull/239
* Make shell-words and xdg dependencies optional by @silverpill in https://github.com/kivikakk/comrak/pull/245
* Bump clap version to 4.0 and switch to the Derive API by @tranzystorek-io in https://github.com/kivikakk/comrak/pull/248
* c-api: remove by @kivikakk in https://github.com/kivikakk/comrak/pull/249


# [0.14.0]

* Add C FFI, allowing Comrak to be used from other languages. (#171, Garen
  Torikian)
* Fix line wrapping in CommonMark output. (#228, Edward Loveall)
* Add option to specify character used for unordered list bullets in
  CommonMark output. (#229, Edward Loveall)


# [0.13.2]

* Fix Windows build.


# [0.13.1]

* Support compiling for WASM. (#222, Ben Wishoshavich)
* Replace deprecated twoway dependency. (#224)


# [0.13.0]

* SECURITY: Bump regex to 1.5.5. (#221, Dependabot)
* Drop unneeded YAML dependency from Syntect. (#199, Chris Wong)
* Match newline handling in code inlines to upstream, and improve test failure
  reporting. (#210, Michael Anderson)
* Make all node value fields public. (#216, Evan Schwartz)
* Line break handling adjustments. (#214, Michael Anderson)
* Disable control characters in link definitions. (#219, Michael Anderson)


# [0.12.1]

* Only load syntax and theme sets once, on Syntect plugin instantiation. (#197)
* Match syntax highlighting language names more loosely. (#198)


# [0.12.0]

* Add pluggable syntax highlighting, and default implementation with syntect.
  (Daniel Simon, #194)


# [0.11.0]

* Allow short URLs even with non-empty path. (#191, Bernard Teo)
* Expose NodeCode struct in AST. (#192, Vojtech Kral)


# [0.10.1]

* SECURITY: it was possible to smuggle unsafe URLs --- like `javascript:` ones
  --- even without using the "unsafe" mode of operation.  Thanks to Sam Sanoop
  (snoopysecurity) for reporting.
* Recognise tables without a preceding newline. (#183)


# [0.10.0]

* 0.9.1 was a semver-breaking change.
* Add -o/--output CLI option. (#177)


# [0.9.1]

* SECURITY: we were matching unsafe URL prefixes, such as `data:` or
  `javascript:`, in a case-sensitive manner.  This meant prefixes like `Data:`
  were untouched.  Please upgrade as soon as possible.  (Kouhei Morita)
* Add support for ignoring front matter. (#170, Eitan Mosenkis.)


# [0.9.0]

* 0.8.2 was a semver-breaking change, so we're now bumping to 0.9.0.  Some
  tests have been added to catch this in future.
* Allow image/ prefix on data URIs. (#169, Daniel Sorichetti)


# [0.8.2]

* Fix some lint issues. (#152, Caleb Maclennan)
* Build benchmarks separately to tests. (#154)
* Add support for a config file for CLI use. (#157, with thanks to AJ ONeal.)


# [0.8.1]

* Add escape option to escape raw HTML instead of clobbering it. (#150, Ryan
  Westlund)


# [0.8.0]

* 0.7.1 was a semver-breaking change.  This is now 0.8.0.


# [0.7.1]

* Reduce list item indentation in line with spec. (#135, Casey Rodarmor)
* Split uber-struct ComrakOptions into substructures.
* Refactor HTML formatter escaping. (#140, Donough Liu)
* Don't render <p> inside <dt> tags. (#145)


# [0.7.0]

* Supporting stable and newer again, since dependencies keep breaking for
  1.27.0. (#134)


# [0.6.2]

* Exclude unneeded files from crate. (#120, Igor Gnatenko)
* Bump the twoway dependency. (#121, Igor Gnatenko)


# [0.6.1]

* Add --gfm flag to CLI to enable all GitHub Flavored Markdown extensions and
  options. (#118, James R Miller)


# [0.6.0]

* Add TaskItem variant to NodeValue. (#115, Élisabeth Henry)


# [0.5.1]

* Support building on Rust versions back to 1.27.0. (#114)


# [0.5.0]

* Update API so that footnote reference and definition identifiers match.
  (#110, Élisabeth Henry)
* Update to CommonMark spec 0.29. (#112)


# [0.4.4]

* Add From<NodeValue> impl to AstNode. (#105, Sunjay Varma)


# [0.4.3]

* Add a Default derive and Ast::new to make ASTs programmatically
  constructible. (#101, Sunjay Varma and #102)


# [0.4.2]

* Add a callback to fill in broken reference links, per pulldown_cmark's
  Parser::new_with_broken_link_callback. (#100, Sunjay Varma)
* Update to latest spec.  (#99)


# [0.4.1]

* Fix a bug in anchor generation; it should now be on par with GitHub's. (#97, Clifford T. Matthews)
* Expose anchor generation for use in library consumers. (#94, Clifford T. Matthews)


# [0.4.0]

* Invert default-false `safe` flag to default-false `unsafe_` flag.  If you
  were not enabling safe mode before, you'll need to enable unsafe mode now.


# [0.3.1]

* Keep up-to-date with the spec.


# [0.3.0]

* Significant test coverage and code clean up. (#82, #83, Brian Anderson)
* Description list support. (#86, Ayose Cazorla)
* Example use of comrak to convert CommonMark documents into S-expressions. (#86, Ayose Cazorla)
* Footnotes are now enabled via an extension option, not a flag of its own. (#87)
* Extend `cmark-gfm` compatibility to include all extension and regression tests. (#87)


# [0.2.14]

* Speed enhancements. (#76, Brian Anderson)
* Target latest spec; bring comrak closer into line with cmark. (#81, Brian Anderson and Ashe Connor)


# [0.2.13]

* Speed enhancements. (#75, Shaquille Johnson)


# [0.2.12]

* Add safety options per the reference C implementation. (#67)


# [0.2.11]

* Expose Arena type so users don't need to bring it in themselves (#66, Vincent
  Prouillet).


# [0.2.10]

* Bring up to date with latest spec.
* Fix parsing of tables nested in other block elements (#61, Brian Anderson).
* Protect against stack smashing in inline processors and CommonMark and HTML
  formatters (#63, Brian Anderson).


# [0.2.9]

* Fix a corner case in the ATX header parser (#53, Brian Anderson).
* Fix grammar for scanning table marker rows (#55, Brian Anderson).
* Add smart punctuation (#57).


# [0.2.8]

* Add `default-info-string` argument/option to specify a default language in fenced
  code blocks. (Thanks to @steveklabnik for the suggestion.)


# [0.2.7]

* Use [`pest`](https://github.com/pest-parser/pest) instead of regexes for lexing.


# [0.2.6]

* Fixed a bug where back-to-back emphases would not be processed correctly.
  (#45; thanks to @SSJohns for the report.)


# [0.2.5]

* Fixed a bug where an exclamation mark "!" followed by a footnote would be
  eaten by the parser.


# [0.2.4]

* Added footnotes support.


# [0.2.3]

* Added header IDs extension.


# [0.2.2]

* Fix for pathological reference link parsing.


# [0.2.1]

* Speed optimisations.


# [0.2.0]

* The formatters no longer produce Strings themeselves; you must specify an
  output stream.
* Speed up whitespace normalisation.


# [0.1.9]

* Multibyte character fix for autolink (#35, Shaquille Johnson).
* Resolve panics with tables in awkward situations (#36).


# [0.1.8]

* Fix possible DoS in link parsing (#33, Demi Obenour).
