From c9793a5a8cb0959f839fdfcec37f420c7467474d Mon Sep 17 00:00:00 2001 From: David Huggins-Daines Date: Thu, 13 Feb 2025 14:12:46 -0500 Subject: [PATCH] feat!: make mcstack immutable to avoid surprises --- playa/page.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/playa/page.py b/playa/page.py index 79aff59..3f35231 100644 --- a/playa/page.py +++ b/playa/page.py @@ -481,7 +481,7 @@ class ContentObject: gstate: GraphicState ctm: Matrix - mcstack: List[MarkedContent] + mcstack: Tuple[MarkedContent, ...] def __iter__(self) -> Iterator["ContentObject"]: yield from () @@ -1021,7 +1021,7 @@ def init_state(self, ctm: Matrix) -> None: # argstack: stack for command arguments. self.argstack: List[PDFObject] = [] # mcstack: stack for marked content sections. - self.mcstack: List[MarkedContent] = [] + self.mcstack: Tuple[MarkedContent, ...] = () def push(self, obj: PDFObject) -> None: self.argstack.append(obj) @@ -1676,7 +1676,8 @@ def do_BDC(self, tag: PDFObject, props: PDFObject) -> None: def do_EMC(self) -> None: """End marked-content sequence""" - self.mcstack.pop() + if self.mcstack: + self.mcstack = self.mcstack[:-1] def begin_tag(self, tag: PDFObject, props: Dict[str, PDFObject]) -> None: """Handle beginning of tag, setting current MCID if any.""" @@ -1686,4 +1687,4 @@ def begin_tag(self, tag: PDFObject, props: Dict[str, PDFObject]) -> None: mcid = int_value(props["MCID"]) else: mcid = None - self.mcstack.append(MarkedContent(mcid=mcid, tag=tag, props=props)) + self.mcstack = (*self.mcstack, MarkedContent(mcid=mcid, tag=tag, props=props))