Changeset 2505:ebc2593de610 in livinglogic.python.xist

Show
Ignore:
Timestamp:
04/25/06 23:37:16 (13 years ago)
Author:
Walter Doerwald <walter@…>
Branch:
default
Message:

Simplify presenter logic.

Fix bug in CodePresenter?.

Add an IPython display hook.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • _xist/presenters.py

    r2504 r2505  
    318318    """ 
    319319    <par>This presenter shows only the root node of the tree (with a little additional 
    320     information about the number of nested nodes). It is used as the default presenter 
    321     in <pyref module="ll.xist.xsc" class="Node" method="__repr__"><method>Node.__repr__</method></pyref>.</par> 
     320    information about the number of nested nodes).</par> 
    322321    """ 
    323     def __init__(self, encoding=None, maxlen=60): 
    324         Presenter.__init__(self, encoding) 
     322    def __init__(self, node, maxlen=60): 
     323        Presenter.__init__(self, node) 
    325324        self.maxlen = maxlen 
    326325 
     
    843842        return "\n".join(self) 
    844843 
    845     def present(self, node): 
     844    def __xiter__(self, mode="default"): 
    846845        self._inattr = 0 
    847846        self._level = 0 
    848         for part in node.present(self): 
    849             yield part 
     847        return self.node.present(self) 
     848 
     849    def present(self, node): 
    850850        del self._level 
    851851        del self._inattr 
    852  
    853     def __xiter__(self, mode="default"): 
    854         return self.present(self.node) 
    855852 
    856853    def _indent(self): 
     
    887884                    lines = list(child.present(self)) 
    888885                    for (j, line) in enumerate(lines): 
    889                         if i==len(node)-1: 
    890                             yield line 
    891                         else: 
    892                             yield "%s," % line 
     886                        if j==len(lines)-1: 
     887                            line += "," 
     888                        yield line 
    893889            self._level -= 1 
    894890            if not self._inattr: 
     
    10281024 
    10291025 
    1030 defaultpresenter = PlainPresenter # used for __repr__ 
    1031 hookpresenter = TreePresenter # used in the displayhook below 
    1032  
    1033  
    1034 def displayhook(out, obj): 
    1035     if isinstance(obj, xsc.Node): 
    1036         encoding = getattr(sys.stdout, "encoding", sys.getdefaultencoding()) 
    1037         for part in obj.repr(hookpresenter(encoding=encoding)): 
    1038             out.write(part) 
    1039         out.write("\n") 
    1040         return True 
    1041     return False 
     1026defaultpresenter = CodePresenter # used in the displayhook below 
     1027 
     1028try: 
     1029    from IPython import ipapi 
     1030    api = ipapi.get() 
     1031except (ImportError, AttributeError): 
     1032    api = None 
     1033 
     1034if api is not None: 
     1035    def displayhook(self, obj): 
     1036        if isinstance(obj, xsc.Node): 
     1037            (defaultpresenter(obj) | ipipe.defaultdisplay).display() 
     1038        raise ipapi.TryNext 
     1039    api.set_hook("result_display", displayhook)