#! /usr/bin/env python # -*- coding: utf-8 -*- # vim:fenc=utf-8 # # Copyright © 2017 lafrite # # Distributed under terms of the MIT license. """ Expression """ from ..core import tree2txt, tree2tex class Render(object): """ Object which render Expression or token """ def __init__(self, default="txt"): self._default = default self._render = default self.renders = {} def register_render(self, name, func, attribute): """ register a render """ try: self.renders[name] except KeyError: self.renders[name] = {"name": name, "func": func, "attribute": attribute} else: raise ValueError("This render name already exists") @property def render_name(self): return self._render @property def render(self): return self.renders[self._render] def __call__(self, mo_tree, tmp_render=''): if tmp_render: r = self.renders[tmp_render] else: r = self.render try: return r["func"](mo_tree) except ValueError: pass try: return getattr(mo_tree, r["attribute"]) except AttributeError: return str(mo_tree) def set_render(self, render): """ Define the render """ if render in self.renders.keys(): self._render = render else: raise ValueError("This render does not exists") render = Render() render.register_render("txt", tree2txt, "__txt__") render.register_render("tex", tree2tex, "__tex__") # ----------------------------- # Reglages pour 'vim' # vim:set autoindent expandtab tabstop=4 shiftwidth=4: # cursor: 16 del