Coverage for pyWebLayout/style/page_style.py: 100%

33 statements  

« prev     ^ index     » next       coverage.py v7.11.2, created at 2025-11-12 12:02 +0000

1from typing import Tuple 

2from dataclasses import dataclass 

3 

4 

5@dataclass 

6class PageStyle: 

7 """ 

8 Defines the styling properties for a page including borders, spacing, and layout. 

9 """ 

10 

11 # Border properties 

12 border_width: int = 0 

13 border_color: Tuple[int, int, int] = (0, 0, 0) 

14 

15 # Spacing properties 

16 line_spacing: int = 5 # Additional pixels between lines (added to font size) 

17 inter_block_spacing: int = 15 # Pixels between blocks (paragraphs, headings, etc.) 

18 word_spacing: int = 0 # Additional pixels between words (0 = use font defaults) 

19 

20 # Padding (top, right, bottom, left) 

21 padding: Tuple[int, int, int, int] = (20, 20, 20, 20) 

22 

23 # Background color 

24 background_color: Tuple[int, int, int] = (255, 255, 255) 

25 

26 # Typography properties 

27 max_font_size: int = 72 # Maximum font size allowed on a page 

28 

29 @property 

30 def padding_top(self) -> int: 

31 return self.padding[0] 

32 

33 @property 

34 def padding_right(self) -> int: 

35 return self.padding[1] 

36 

37 @property 

38 def padding_bottom(self) -> int: 

39 return self.padding[2] 

40 

41 @property 

42 def padding_left(self) -> int: 

43 return self.padding[3] 

44 

45 @property 

46 def total_horizontal_padding(self) -> int: 

47 """Get total horizontal padding (left + right)""" 

48 return self.padding_left + self.padding_right 

49 

50 @property 

51 def total_vertical_padding(self) -> int: 

52 """Get total vertical padding (top + bottom)""" 

53 return self.padding_top + self.padding_bottom 

54 

55 @property 

56 def total_border_width(self) -> int: 

57 """Get total border width (both sides)""" 

58 return self.border_width * 2