Source code for mistletoe.renderers.json

"""
Abstract syntax tree renderer for mistletoe.
"""

import json
from mistletoe.renderers.base import BaseRenderer


[docs]class JsonRenderer(BaseRenderer): def render(self, token, as_string=True): """ Returns the JSON string representation of the AST. Overrides super().render. Delegates the logic to ast_to_json. """ dct = ast_to_json(token) if as_string: return json.dumps(dct, indent=2) + "\n" return dct def __getattr__(self, name): return lambda token: ""
def ast_to_json(token): """ Recursively unrolls token attributes into dictionaries (token.children into lists). Returns: a dictionary of token's attributes. """ node = {} # Python 3.6 uses [ordered dicts] [1]. # Put in 'type' entry first to make the final tree format somewhat # similar to [MDAST] [2]. # # [1]: https://docs.python.org/3/whatsnew/3.6.html # [2]: https://github.com/syntax-tree/mdast node["type"] = token.name node.update(token.to_dict()) if "header" in node: node["header"] = ast_to_json(token.header) if node.get("front_matter", None) is not None: node["front_matter"] = ast_to_json(token.front_matter) if token.children is not None: node["children"] = [ast_to_json(child) for child in token.children] return node