- package: markdown-it/markdown-it
  version: 12.2.0
  commit: 6e2de08a0b03d3d0dcc524b89710ce05f83a0283
  date: Aug 2, 2021
  notes:
    - Rename variables that use python built-in names, e.g.
      - `max` -> `maximum`
      - `len` -> `length`
      - `str` -> `string`
    - |
      Convert JS `for` loops to `while` loops
      this is generally the main difference between the codes,
      because in python you can't do e.g. `for {i=1;i<x;i++} {}`
    - |
      `env` is a common Python dictionary, and so does not have attribute access to keys,
      as with JavaScript dictionaries.
      `options` have attribute access only to core markdownit configuration options
    - |
      `Token.attrs` is a dictionary, instead of a list of lists.
      Upstream the list format is only used to guarantee order: https://github.com/markdown-it/markdown-it/issues/142,
      but in Python 3.7+ order of dictionaries is guaranteed.
      One should anyhow use the `attrGet`, `attrSet`, `attrPush` and `attrJoin` methods
      to manipulate `Token.attrs`, which have an identical signature to those upstream.
    - Use python version of `charCodeAt`
    - |
      Reduce use of charCodeAt() by storing char codes in a srcCharCodes attribute for state
      objects and sharing those whenever possible
      This provides a significant performance boost
    - |
      In markdown_it/rules_block/reference.py,
      record line range in state.env["references"] and add state.env["duplicate_refs"]
      This is to allow renderers to report on issues regarding references
    - |
      The `MarkdownIt.__init__` signature is slightly different for updating options,
      since you must always specify the config first, e.g.
      use `MarkdownIt("commonmark", {"html": False})` instead of `MarkdownIt({"html": False})`
    - The default configuration preset for `MarkdownIt` is "commonmark" not "default"
    - Allow custom renderer to be passed to `MarkdownIt`
    - |
      change render method signatures
      `func(tokens, idx, options, env, slf)` to
      `func(self, tokens, idx, options, env)`
    - |
      Extensions add render methods by format
      `MarkdownIt.add_render_rule(name, function, fmt="html")`,
      rather than `MarkdownIt.renderer.rules[name] = function`
      and renderers should declare a class property `__output__ = "html"`.
      This allows for extensibility to more than just HTML renderers
    - inline tokens in tables are assigned a map (this is helpful for propagation to children)
