Coverage for src/prosemark/domain/preserved_text.py: 100%

16 statements  

« prev     ^ index     » next       coverage.py v7.8.0, created at 2025-09-30 23:09 +0000

1"""Preserved text value object for text preservation. 

2 

3This module defines the PreservedText value object for storing extraneous text 

4with positioning information during binder operations. 

5""" 

6 

7from dataclasses import dataclass 

8 

9from prosemark.domain.position_anchor import PositionAnchor 

10 

11__all__ = ['PositionAnchor', 'PreservedText'] 

12 

13 

14@dataclass(frozen=True) 

15class PreservedText: 

16 """Store extraneous text with positioning information. 

17 

18 This value object represents non-structural content that must be preserved 

19 during binder operations, maintaining exact formatting and positioning. 

20 """ 

21 

22 content: str 

23 line_number: int 

24 position_anchor: PositionAnchor 

25 formatting_preserved: bool = True 

26 

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') 

31 

32 if self.line_number <= 0: 

33 raise ValueError('line_number must be positive') 

34 

35 if not isinstance(self.position_anchor, PositionAnchor): 

36 raise TypeError('position_anchor must be valid enum value')