def test_walk(): tokens = MarkdownIt().parse(EXAMPLE_MARKDOWN) tree = SyntaxTreeNode(tokens) expected_node_types = ( "root", "heading", "inline", "text", "paragraph", "inline", "text", "strong", "text", "text", ) for node, expected_type in zip(tree.walk(), expected_node_types): assert node.type == expected_type
def _render_tokens(self, tokens: List[Token]) -> None: """Render the tokens.""" # propagate line number down to inline elements for token in tokens: if not token.map: continue # For docutils we want 1 based line numbers (not 0) token.map = [token.map[0] + 1, token.map[1] + 1] for token_child in token.children or []: token_child.map = token.map # nest tokens node_tree = SyntaxTreeNode(tokens) # move footnote definitions to env self.md_env.setdefault("foot_refs", {}) for node in node_tree.walk(include_self=True): new_children = [] for child in node.children: if child.type == "footnote_reference": label = child.meta["label"] self.md_env["foot_refs"].setdefault(label, []).append(child) else: new_children.append(child) node.children = new_children # render for child in node_tree.children: # skip hidden? if f"render_{child.type}" in self.rules: self.rules[f"render_{child.type}"](child) else: self.create_warning( f"No render method for: {child.type}", line=token_line(child, default=0), subtype="render", append_to=self.current_node, )