# Change Log ## 2.1.0 - 2022-04-15 This release is primarily to replace the `attrs` package dependency, with the built-in Python `dataclasses` package. This should not be a breaking change, for most use cases. - ⬆️ UPGRADE: Drop support for EOL Python 3.6 (#194) - ♻️ REFACTOR: Move `Rule`/`Delimiter` classes from `attrs` to `dataclass` (#211) - ♻️ REFACTOR: Move `Token` class from `attrs` to `dataclass` (#211) - ‼️ Remove deprecated `NestedTokens` and `nest_tokens` - ✨ NEW: Save ordered list numbering (#192) - 🐛 FIX: Combination of blockquotes, list and newlines causes `IndexError` (#207) ## 2.0.1 - 2022-24-01 - 🐛 FIX: Crash when file ends with empty blockquote line. - ✨ NEW: Add `inline_definitions` option. This option allows for `definition` token to be inserted into the token stream, at the point where the definition is located in the source text. It is useful for cases where one wishes to capture a "loseless" syntax tree of the parsed Markdown (in conjunction with the `store_labels` option). ## 2.0.0 - 2021-12-03 - ⬆️ Update: Sync with markdown-it v12.1.0 and CommonMark v0.30 - ♻️ REFACTOR: Port `mdurl` and `punycode` for URL normalisation (thanks to @hukkin!). This port fixes the outstanding CommonMark compliance tests. - ♻️ REFACTOR: Remove `AttrDict`. This is no longer used is core or mdit-py-plugins, instead standard dictionaries are used. - 👌 IMPROVE: Use `__all__` to signal re-exports ## 1.1.0 - 2021-05-08 ⬆️ UPGRADE: `attrs` -> v21 (#165) This release has no breaking changes (see: ) ## 1.0.0 - 2021-05-02 [Full commit log](https://github.com/executablebooks/markdown-it-py/compare/v0.6.2...v1.0.0) The first stable release of markdown-it-py 🎉 See the changes in the beta releases below, thanks to all the [contributors](https://github.com/executablebooks/markdown-it-py/graphs/contributors?from=2020-03-22&to=2021-05-02&type=c) in the last year! ## 1.0.0b3 - 2021-05-01 - 👌 IMPROVE: Add `RendererProtocol` type, for typing renderers (thanks to [@hukkinj1](https://github.com/hukkinj1)) - 🔧 MAINTAIN: `None` is no longer allowed as a valid `src` input for `StateBase` subclasses ## 1.0.0b2 - 2021-04-25 ‼️ BREAKING: Move `mdit-py-plugins` out of the core install requirements and into a `plugins` extra. Synchronised code with the upstream Markdown-It `v12.0.6`: - 🐛 FIX: Raise HTML blocks priority to resolve conflict with headings - 🐛 FIX: Newline not rendered in image alt attribute ## 1.0.0b1 - 2021-03-31 [Full commit log](https://github.com/executablebooks/markdown-it-py/compare/v0.6.2...9ecda04) This is the first beta release of the stable v1.x series. There are four notable (and breaking) changes: 1. The code has been synchronised with the upstream Markdown-It `v12.0.4`. In particular, this update alters the parsing of tables to be consistent with the GFM specification: A number of parsing performance and validation improvements are also included. 2. `Token.attrs` are now stored as dictionaries, rather than a list of lists. This is a departure from upstream Markdown-It, allowed by Pythons guarantee of ordered dictionaries (see [#142](https://github.com/markdown-it/markdown-it/issues/142)), and is the more natural representation. Note `attrGet`, `attrSet`, `attrPush` and `attrJoin` methods remain identical to those upstream, and `Token.as_dict(as_upstream=True)` will convert the token back to a directly comparable dict. 3. The use of `AttrDict` has been replaced: For `env` any Python mutable mapping is now allowed, and so attribute access to keys is not (differing from the Javascript dictionary). For `MarkdownIt.options` it is now set as an `OptionsDict`, which is a dictionary sub-class, with attribute access only for core MarkdownIt configuration keys. 4. Introduction of the `SyntaxTreeNode`. This is a more comprehensive replacement for `nest_tokens` and `NestedTokens` (which are now deprecated). It allows for the `Token` stream to be converted to/from a nested tree structure, with opening/closing tokens collapsed into a single `SyntaxTreeNode` and the intermediate tokens set as children. See [Creating a syntax tree](https://markdown-it-py.readthedocs.io/en/latest/using.html#creating-a-syntax-tree) documentation for details. ### Additional Fixes 🐛 - Fix exception due to empty lines after blockquote+footnote - Fix linkify link nesting levels - Fix the use of `Ruler.at` for plugins - Avoid fenced token mutations during rendering - Fix CLI version info and correct return of exit codes ## 0.6.2 - 2021-02-07 This release brings Markdown-It-Py inline with Markdown-It v11.0.1 (2020-09-14), applying two fixes: - Fix blockquote lazy newlines, [[#696](https://github.com/markdown-it/markdown-it/issues/696)]. - Fix missed mappings for table rows, [[#705](https://github.com/markdown-it/markdown-it/issues/705)]. Thanks to [@hukkinj1](https://github.com/hukkinj1)! ## 0.6.1 - 2021-01-01 This release provides some improvements to the code base: - 🐛 FIX: Do not resolve backslash escapes inside auto-links - 🐛 FIX: Add content to image tokens - 👌 IMPROVE: Add more type annotations, thanks to [@hukkinj1](https://github.com/hukkinj1) ## 0.6.0 - 2020-12-15 🗑 DEPRECATE: Move plugins to `mdit_py_plugins` Plugins (in `markdown_it.extensions`) have now been moved to [executablebooks/mdit-py-plugins](https://github.com/executablebooks/mdit-py-plugins). This will allow for their maintenance to occur on a different cycle to the core code, facilitating the release of a v1.0.0 for this package 🔧 MAINTAIN: Add [mypy](https://mypy.readthedocs.io) type-checking, thanks to [@hukkinj1](https://github.com/hukkinj1). ## 0.5.8 - 2020-12-13 ✨ NEW: Add linkify, thanks to [@tsutsu3](https://github.com/tsutsu3). This extension uses [linkify-it-py](https://github.com/tsutsu3/linkify-it-py) to identify URL links within text: - `github.com` -> `github.com` **Important:** To use this extension you must install linkify-it-py; `pip install markdown-it-py[linkify]` It can then be activated by: ```python from markdown_it import MarkdownIt md = MarkdownIt().enable("linkify") md.options["linkify"] = True ``` ## 0.5.7 - 2020-12-13 ✨ NEW: Add smartquotes, thanks to [@tsutsu3](https://github.com/tsutsu3). This extension will convert basic quote marks to their opening and closing variants: - 'single quotes' -> ‘single quotes’ - "double quotes" -> “double quotes” It can be activated by: ```python from markdown_it import MarkdownIt md = MarkdownIt().enable("smartquotes") md.options["typographer"] = True ``` ✨ NEW: Add markdown-it-task-lists plugin, thanks to [@wna-se](https://github.com/wna-se). This is a port of the JS [markdown-it-task-lists](https://github.com/revin/markdown-it-task-lists), for building task/todo lists out of markdown lists with items starting with `[ ]` or `[x]`. For example: ```markdown - [ ] An item that needs doing - [x] An item that is complete ``` This plugin can be activated by: ```python from markdown_it import MarkdownIt from markdown_it.extensions.tasklists import tasklists_plugin md = MarkdownIt().use(tasklists_plugin) ``` 🐛 Various bug fixes, thanks to [@hukkinj1](https://github.com/hukkinj1): - Do not copy empty `env` arg in `MarkdownIt.render` - `_Entities.__contains__` fix return data - Parsing of unicode ordinals - Handling of final character in `skipSpacesBack` and `skipCharsBack` methods - Avoid exception when document ends in heading/blockquote marker 🧪 TESTS: Add CI for Python 3.9 and PyPy3 ## 0.5.6 - 2020-10-21 - ✨ NEW: Add simple typographic replacements, thanks to [@tsutsu3](https://github.com/tsutsu3): This allows you to add the `typographer` option to the parser, to replace particular text constructs: - ``(c)``, ``(C)`` → © - ``(tm)``, ``(TM)`` → ™ - ``(r)``, ``(R)`` → ® - ``(p)``, ``(P)`` → § - ``+-`` → ± - ``...`` → … - ``?....`` → ?.. - ``!....`` → !.. - ``????????`` → ??? - ``!!!!!`` → !!! - ``,,,`` → , - ``--`` → &ndash - ``---`` → &mdash ```python md = MarkdownIt().enable("replacements") md.options["typographer"] = True ``` - 📚 DOCS: Improve documentation for CLI, thanks to [@westurner](https://github.com/westurner) - 👌 IMPROVE: Use `re.sub()` instead of `re.subn()[0]`, thanks to [@hukkinj1](https://github.com/hukkinj1) - 🐛 FIX: An exception raised by having multiple blank lines at the end of some files ## 0.5.5 - 2020-09-27 👌 IMPROVE: Add `store_labels` option. This allows for storage of original reference label in link/image token's metadata, which can be useful for renderers. ## 0.5.4 - 2020-09-08 ✨ NEW: Add `anchors_plugin` for headers, which can produce: ```html

Title String

``` ## 0.5.3 - 2020-09-04 🐛 Fixed an undefined variable in the reference block. ## 0.5.2 - 2020-08-22 🐛 Fixed an `IndexError` in `container_plugin`, when there is no newline on the closing tag line. ## 0.5.1 - 2020-08-21 ⬆️ UPGRADE: attrs -> v20 This is not breaking, since it only deprecates Python 3.4 (see [CHANGELOG.rst](https://github.com/python-attrs/attrs/blob/master/CHANGELOG.rst)) ## 0.5.0 - 2020-08-18 ### Added ✨ - `deflist` and `dollarmath` plugins (see [plugins list](https://markdown-it-py.readthedocs.io/en/latest/plugins.html)). ### Improved 👌 - Added benchmarking tests and CI (see ) - Improved performance of computing ordinals (=> 10-15% parsing speed increase). Thanks to [@sildar](https://github.com/sildar)! ### Fixed 🐛 - Stopped empty lines at the end of the document, after certain list blocks, raising an exception (#36). - Allow myst-role to accept names containing digits (0-9). ## 0.4.9 - 2020-08-11 ### Added ✨ - `containers` plugin (see [plugins list](https://markdown-it-py.readthedocs.io/en/latest/plugins.html)) ### Documented 📚 - Plugins and improved contributing section