# Path: gymnast/pdf_types/common.py
# class PdfType(object):
#     """Abstract base class for PDF objects"""
#     def pdf_encode(self):
#         """Translate the object into bytes in PDF format"""
#         raise NotImplementedError
#     @property
#     def value(self):
#         """Objects, references, and such will override this in clever
#         ways."""
#         return self
#     @property
#     def parsed_object(self):
#         """Objects, references, and such will override this in clever
#         ways."""
#         return self
# 
# Path: gymnast/misc.py
# class MetaNonelike(type):
#     """Metaclass to make a class as None-like as possible."""
#     def __call__(cls):
#         return cls
#     def __str__(cls):       return cls.__name__
#     def __repr__(cls):      return cls.__name__
#     def __hash__(cls):      return id(cls)
#     def __bool__(cls):      return False
#     def __lt__(cls, other): return (None <  other)
#     def __le__(cls, other): return (None <= other)
#     def __eq__(cls, other): return (None is other)
#     def __ne__(cls, other): return (None is not other)
#     def __gt__(cls, other): return (None >  other)
#     def __ge__(cls, other): return (None >= other)
# 
# class classproperty(object):
#     """Like the @property method, but for classes instead of instances"""
#     def __init__(self, fget):
#         self.fget = fget
#     def __get__(self, owner_self, owner_cls):
#         return self.fget(owner_cls)


import six
from .common import PdfType
from ..misc  import MetaNonelike, classproperty
"""
Simple PDF types (numbers, nulls, and booleans).  These mostly exist so that we
will be able to write PDFs by calling their .pdf_encode() methods
"""


@six.add_metaclass(MetaNonelike)
class PdfNull(PdfType):
    """None-like singleton representing PDF's equivalent of None."""

# Path: gymnast/pdf_types/common.py
# class PdfType(object):
#     """Abstract base class for PDF objects"""
#     def pdf_encode(self):
#         """Translate the object into bytes in PDF format"""
#         raise NotImplementedError
#     @property
#     def value(self):
#         """Objects, references, and such will override this in clever
#         ways."""
#         return self
#     @property
#     def parsed_object(self):
#         """Objects, references, and such will override this in clever
#         ways."""
#         return self
# 
# Path: gymnast/misc.py
# class MetaNonelike(type):
#     """Metaclass to make a class as None-like as possible."""
#     def __call__(cls):
#         return cls
#     def __str__(cls):       return cls.__name__
#     def __repr__(cls):      return cls.__name__
#     def __hash__(cls):      return id(cls)
#     def __bool__(cls):      return False
#     def __lt__(cls, other): return (None <  other)
#     def __le__(cls, other): return (None <= other)
#     def __eq__(cls, other): return (None is other)
#     def __ne__(cls, other): return (None is not other)
#     def __gt__(cls, other): return (None >  other)
#     def __ge__(cls, other): return (None >= other)
# 
# class classproperty(object):
#     """Like the @property method, but for classes instead of instances"""
#     def __init__(self, fget):
#         self.fget = fget
#     def __get__(self, owner_self, owner_cls):
#         return self.fget(owner_cls)


# Path: gymnast/pdf_types/simple_types.py
import six
from .common import PdfType
from ..misc  import MetaNonelike, classproperty

"""
Simple PDF types (numbers, nulls, and booleans).  These mostly exist so that we
will be able to write PDFs by calling their .pdf_encode() methods
"""


@six.add_metaclass(MetaNonelike)
class PdfNull(PdfType):
    """None-like singleton representing PDF's equivalent of None."""

    @classproperty