diff options
-rw-r--r-- | docs/api/filters.rst | 6 | ||||
-rw-r--r-- | docs/release_notes.rst | 4 | ||||
-rw-r--r-- | src/pikepdf/_qpdf.pyi | 5 | ||||
-rw-r--r-- | src/pikepdf/models/image.py | 2 | ||||
-rw-r--r-- | src/pikepdf/objects.py | 4 | ||||
-rw-r--r-- | src/qpdf/object.cpp | 2 | ||||
-rw-r--r-- | src/qpdf/tokenfilter.cpp | 2 | ||||
-rw-r--r-- | tests/test_filters.py | 2 |
8 files changed, 18 insertions, 9 deletions
diff --git a/docs/api/filters.rst b/docs/api/filters.rst index 6aa18db..87dfddb 100644 --- a/docs/api/filters.rst +++ b/docs/api/filters.rst @@ -67,11 +67,15 @@ Content stream token filters The token data represents an integer, real number, null or boolean, respectively. - .. attribute:: name + .. attribute:: name_ The token is the name (pikepdf.Name) of an object. In practice, these are among the most interesting tokens. + .. versionchanged:: 3.0 + In versions older than 3.0, ``.name`` was used instead. This interfered + with semantics of the ``Enum`` object, so this was fixed. + .. attribute:: inline_image An inline image in the content stream. The whole inline image is diff --git a/docs/release_notes.rst b/docs/release_notes.rst index 66e5fff..3d929f5 100644 --- a/docs/release_notes.rst +++ b/docs/release_notes.rst @@ -44,6 +44,10 @@ Breaking changes as in the previous idiom ``page = Page(pdf.pages[0])``. In most cases, if you use the Dictionary object API on a page, it will automatically do the right thing to the underlying dictionary. +- ``TokenType.name`` and ``ObjectType.name`` were renamed to + ``TokenType.name_`` and ``ObjectType.name_``, respectively. Unfortunately, + Python's ``Enum`` class of which these are both a subclass uses the ``.name`` + attribute in a special way that interfered. - Deprecated or private functions were removed: - ``Object.page_contents_*`` (use ``Page.contents_*``) - ``Object.images`` (use ``Page.images``) diff --git a/src/pikepdf/_qpdf.pyi b/src/pikepdf/_qpdf.pyi index 2136c1a..fdd3a31 100644 --- a/src/pikepdf/_qpdf.pyi +++ b/src/pikepdf/_qpdf.pyi @@ -80,7 +80,7 @@ class ObjectType(Enum): dictionary: int = ... inlineimage: int = ... integer: int = ... - name: int = ... + name_: int = ... null: int = ... operator: int = ... real: int = ... @@ -108,7 +108,7 @@ class TokenType(Enum): eof: int = ... inline_image: int = ... integer: int = ... - name: int = ... + name_: int = ... null: int = ... real: int = ... space: int = ... @@ -678,3 +678,4 @@ def set_access_default_mmap(mmap: bool) -> bool: ... def set_decimal_precision(prec: int) -> int: ... def unparse(obj: Any) -> bytes: ... def utf8_to_pdf_doc(utf8: str, unknown: bytes) -> Tuple[bool, bytes]: ... +def _unparse_content_stream(contentstream: Iterable[Any]) -> bytes: ... diff --git a/src/pikepdf/models/image.py b/src/pikepdf/models/image.py index 06aaa14..8d09872 100644 --- a/src/pikepdf/models/image.py +++ b/src/pikepdf/models/image.py @@ -318,7 +318,7 @@ class PdfImageBase(ABC): base = 'Separation' elif base == '/ICCBased': base = self._approx_mode_from_icc() - return base, lookup + return PaletteData(base, lookup) @abstractmethod def as_pil_image(self): diff --git a/src/pikepdf/objects.py b/src/pikepdf/objects.py index ea6649e..2e6d4ca 100644 --- a/src/pikepdf/objects.py +++ b/src/pikepdf/objects.py @@ -57,7 +57,7 @@ class _NameObjectMeta(_ObjectMeta): """Supports usage pikepdf.Name.Whatever -> Name('/Whatever').""" def __getattr__(self, attr): - if attr.startswith('_'): + if attr.startswith('_') or attr == 'object_type': return getattr(_ObjectMeta, attr) return Name('/' + attr) @@ -95,7 +95,7 @@ class Name(Object, metaclass=_NameObjectMeta): dynamic names and attributes. """ - object_type = ObjectType.name + object_type = ObjectType.name_ def __new__(cls, name: Union[str, 'Name']): # QPDF_Name::unparse ensures that names are always saved in a UTF-8 diff --git a/src/qpdf/object.cpp b/src/qpdf/object.cpp index f8c5d93..788831e 100644 --- a/src/qpdf/object.cpp +++ b/src/qpdf/object.cpp @@ -268,7 +268,7 @@ void init_object(py::module_ &m) .value("integer", QPDFObject::object_type_e::ot_integer) .value("real", QPDFObject::object_type_e::ot_real) .value("string", QPDFObject::object_type_e::ot_string) - .value("name", QPDFObject::object_type_e::ot_name) + .value("name_", QPDFObject::object_type_e::ot_name) .value("array", QPDFObject::object_type_e::ot_array) .value("dictionary", QPDFObject::object_type_e::ot_dictionary) .value("stream", QPDFObject::object_type_e::ot_stream) diff --git a/src/qpdf/tokenfilter.cpp b/src/qpdf/tokenfilter.cpp index 169ee3f..fe1029d 100644 --- a/src/qpdf/tokenfilter.cpp +++ b/src/qpdf/tokenfilter.cpp @@ -67,7 +67,7 @@ void init_tokenfilter(py::module_ &m) .value("dict_close", QPDFTokenizer::token_type_e::tt_dict_close) .value("dict_open", QPDFTokenizer::token_type_e::tt_dict_open) .value("integer", QPDFTokenizer::token_type_e::tt_integer) - .value("name", QPDFTokenizer::token_type_e::tt_name) + .value("name_", QPDFTokenizer::token_type_e::tt_name) .value("real", QPDFTokenizer::token_type_e::tt_real) .value("string", QPDFTokenizer::token_type_e::tt_string) .value("null", QPDFTokenizer::token_type_e::tt_null) diff --git a/tests/test_filters.py b/tests/test_filters.py index ab03ea2..d55a284 100644 --- a/tests/test_filters.py +++ b/tests/test_filters.py @@ -34,7 +34,7 @@ class FilterCollectNames(TokenFilter): self.rawnames = [] def handle_token(self, token): - if token.type_ == TokenType.name: + if token.type_ == TokenType.name_: self.names.append(token.value) self.rawnames.append(token.raw_value) return None |