# encoding: utf-8

"""Objects 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
#-------------------------------------------------------------------------------

class IDisplayFormatter(object):
    """ Objects conforming to this interface will be responsible for formatting
    representations of objects that pass through sys.displayhook() during an
    interactive interpreter session.
    """

    # The kind of formatter.
    kind = 'display'

    # The unique identifier for this formatter.
    identifier = None


    def __call__(self, obj):
        """ Return a formatted representation of an object.

        Return None if one cannot return a representation in this format.
        """

        raise NotImplementedError


class ReprDisplayFormatter(IDisplayFormatter):
    """ Return the repr() string representation of an object.
    """

    # The unique identifier for this formatter.
    identifier = 'repr'

    
    def __call__(self, obj):
        """ Return a formatted representation of an object.
        """

        return repr(obj)


class PPrintDisplayFormatter(IDisplayFormatter):
    """ Return a pretty-printed string representation of an object.
    """

    # The unique identifier for this formatter.
    identifier = 'pprint'

    
    def __call__(self, obj):
        """ Return a formatted representation of an object.
        """

        import pprint
        return pprint.pformat(obj)