# encoding: utf-8

"""Manager for replacing sys.displayhook()."""

__docformat__ = "restructuredtext en"

#-------------------------------------------------------------------------------
#  Copyright (C) 2008  The IPython Development Team
#
#  Distributed under the terms of the BSD License.  The full license is in
#  the file COPYING, distributed as part of this software.
#-------------------------------------------------------------------------------

#-------------------------------------------------------------------------------
# Imports
#-------------------------------------------------------------------------------

# Standard library imports.
import sys



class DisplayTrap(object):
    """ Object to trap and format objects passing through sys.displayhook().

    This trap maintains two lists of callables: formatters and callbacks. The
    formatters take the *last* object that has gone through since the trap was
    set and returns a string representation. Callbacks are executed on *every*
    object that passes through the displayhook and does not return anything.
    """

    def __init__(self, formatters=None, callbacks=None):
        # A list of formatters to apply. Each should be an instance conforming
        # to the IDisplayFormatter interface.
        if formatters is None:
            formatters = []
        self.formatters = formatters

        # A list of callables, each of which should be executed *every* time an
        # object passes through sys.displayhook().
        if callbacks is None:
            callbacks = []
        self.callbacks = callbacks

        # The last object to pass through the displayhook.
        self.obj = None

        # The previous hook before we replace it.
        self.old_hook = None
        
    def hook(self, obj):
        """ This method actually implements the hook.
        """

        # Run through the list of callbacks and trigger all of them.
        for callback in self.callbacks:
            callback(obj)

        # Store the object for formatting.
        self.obj = obj

    def set(self):
        """ Set the hook.
        """

        if sys.displayhook is not self.hook:
            self.old_hook = sys.displayhook
            sys.displayhook = self.hook

    def unset(self):
        """ Unset the hook.
        """

        sys.displayhook = self.old_hook

    def clear(self):
        """ Reset the stored object.
        """

        self.obj = None

    def add_to_message(self, message):
        """ Add the formatted display of the objects to the message dictionary
        being returned from the interpreter to its listeners.
        """

        # If there was no displayed object (or simply None), then don't add
        # anything.
        if self.obj is None:
            return

        # Go through the list of formatters and let them add their formatting.
        display = {}
        for formatter in self.formatters:
            representation = formatter(self.obj)
            if representation is not None:
                display[formatter.identifier] = representation

        message['display'] = display


# encoding: utf-8

"""Manager for replacing sys.displayhook()."""

__docformat__ = "restructuredtext en"

#-------------------------------------------------------------------------------
#  Copyright (C) 2008  The IPython Development Team
#
#  Distributed under the terms of the BSD License.  The full license is in
#  the file COPYING, distributed as part of this software.
#-------------------------------------------------------------------------------

#-------------------------------------------------------------------------------
# Imports
#-------------------------------------------------------------------------------

# Standard library imports.
import sys



class DisplayTrap(object):
    """ Object to trap and format objects passing through sys.displayhook().

    This trap maintains two lists of callables: formatters and callbacks. The
    formatters take the *last* object that has gone through since the trap was
    set and returns a string representation. Callbacks are executed on *every*
    object that passes through the displayhook and does not return anything.
    """

    def __init__(self, formatters=None, callbacks=None):
        # A list of formatters to apply. Each should be an instance conforming
        # to the IDisplayFormatter interface.
        if formatters is None:
            formatters = []
        self.formatters = formatters

        # A list of callables, each of which should be executed *every* time an
        # object passes through sys.displayhook().
        if callbacks is None:
            callbacks = []
        self.callbacks = callbacks

        # The last object to pass through the displayhook.
        self.obj = None

        # The previous hook before we replace it.
        self.old_hook = None
        
    def hook(self, obj):
        """ This method actually implements the hook.
        """

        # Run through the list of callbacks and trigger all of them.
        for callback in self.callbacks:
            callback(obj)

        # Store the object for formatting.
        self.obj = obj

    def set(self):
        """ Set the hook.
        """

        if sys.displayhook is not self.hook:
            self.old_hook = sys.displayhook
            sys.displayhook = self.hook

    def unset(self):
        """ Unset the hook.
        """

        sys.displayhook = self.old_hook

    def clear(self):
        """ Reset the stored object.
        """

        self.obj = None

    def add_to_message(self, message):
        """ Add the formatted display of the objects to the message dictionary
        being returned from the interpreter to its listeners.
        """

        # If there was no displayed object (or simply None), then don't add
        # anything.
        if self.obj is None:
            return

        # Go through the list of formatters and let them add their formatting.
        display = {}
        for formatter in self.formatters:
            representation = formatter(self.obj)
            if representation is not None:
                display[formatter.identifier] = representation

        message['display'] = display


# encoding: utf-8 Manager for replacing sys.displayhook(). #------------------------------------------------------------------------------- #  Copyright (C) 2008  The IPython Development Team # #  Distributed under the terms of the BSD License.  The full license is in #  the file COPYING, distributed as part of this software. #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- # Imports #------------------------------------------------------------------------------- # Standard library imports. Object to trap and format objects passing through sys.displayhook().      This trap maintains two lists of callables: formatters and callbacks. The     formatters take the *last* object that has gone through since the trap was     set and returns a string representation. Callbacks are executed on *every*     object that passes through the displayhook and does not return anything. # A list of formatters to apply. Each should be an instance conforming # to the IDisplayFormatter interface. # A list of callables, each of which should be executed *every* time an # object passes through sys.displayhook(). # The last object to pass through the displayhook. # The previous hook before we replace it. This method actually implements the hook. # Run through the list of callbacks and trigger all of them. # Store the object for formatting. Set the hook. Unset the hook. Reset the stored object. Add the formatted display of the objects to the message dictionary         being returned from the interpreter to its listeners. # If there was no displayed object (or simply None), then don't add # anything. # Go through the list of formatters and let them add their formatting.