**Warning**: this is a release that breaks backwards compatibility in non-trivial ways (hopefully for the last time!) Read the full release notes if you are updating from a previous version.
**Features**:
* all tests passing in CommonMark test suite (finally! :tada:)
* allow specifying span token precedence levels;
* new and shiny `span_tokenizer.tokenize`.
**Fixed**:
* well, all the CommonMark test cases..
* `ASTRenderer` crashes on tables with headers (48, thanks timfox456!)
**Where I break backwards compatibility**:
Previously span-level tokens need to have their `children` attribute manually specified. This is no longer the case, as the `children` attribute will automatically be set based on the class variable `parse_group`, which correspond to the regex match group in which child tokens might occur.
As an example, previously `GithubWiki` is implemented as this:
python
from mistletoe.span_token import SpanToken, tokenize_inner
import re
class GithubWiki(SpanToken):
pattern = re.compile(r'...')
def __init__(self, match_obj):
super().__init__(match_obj)
alternatively, self.children = tokenize_inner(match_obj.group(1))
self.target = match_obj.group(2)
Now we can write:
python
from mistletoe.span_token import SpanToken
import re
class GithubWiki(SpanToken):
pattern = re.compile(r'...')
parse_inner = True default value, can be omitted
parse_group = 1 default value, can be omitted
precedence = 5 default value, can be omitted
def __init__(self, match_obj):
self.target = match_obj.group(2)
If we have a span token that does not need further parsing, we can write:
python
class Foo(SpanToken):
pattern = re.compile(r'(foo)')
parse_inner = False
def __init__(self, match_obj):
self.content = match_obj.group(1)
See the readme for more details.