Coverage for src/prosemark/domain/preserved_text.py: 100%
16 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-09-28 19:17 +0000
« prev ^ index » next coverage.py v7.8.0, created at 2025-09-28 19:17 +0000
1"""Preserved text value object for text preservation.
3This module defines the PreservedText value object for storing extraneous text
4with positioning information during binder operations.
5"""
7from dataclasses import dataclass
9from prosemark.domain.position_anchor import PositionAnchor
11__all__ = ['PositionAnchor', 'PreservedText']
14@dataclass(frozen=True)
15class PreservedText:
16 """Store extraneous text with positioning information.
18 This value object represents non-structural content that must be preserved
19 during binder operations, maintaining exact formatting and positioning.
20 """
22 content: str
23 line_number: int
24 position_anchor: PositionAnchor
25 formatting_preserved: bool = True
27 def __post_init__(self) -> None:
28 """Validate PreservedText field constraints."""
29 if self.content is None:
30 raise ValueError('content must not be None')
32 if self.line_number <= 0:
33 raise ValueError('line_number must be positive')
35 if not isinstance(self.position_anchor, PositionAnchor):
36 raise TypeError('position_anchor must be valid enum value')