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
« prev ^ index » next coverage.py v7.11.2, created at 2025-11-12 12:02 +0000
1from typing import Tuple
2from dataclasses import dataclass
5@dataclass
6class PageStyle:
7 """
8 Defines the styling properties for a page including borders, spacing, and layout.
9 """
11 # Border properties
12 border_width: int = 0
13 border_color: Tuple[int, int, int] = (0, 0, 0)
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)
20 # Padding (top, right, bottom, left)
21 padding: Tuple[int, int, int, int] = (20, 20, 20, 20)
23 # Background color
24 background_color: Tuple[int, int, int] = (255, 255, 255)
26 # Typography properties
27 max_font_size: int = 72 # Maximum font size allowed on a page
29 @property
30 def padding_top(self) -> int:
31 return self.padding[0]
33 @property
34 def padding_right(self) -> int:
35 return self.padding[1]
37 @property
38 def padding_bottom(self) -> int:
39 return self.padding[2]
41 @property
42 def padding_left(self) -> int:
43 return self.padding[3]
45 @property
46 def total_horizontal_padding(self) -> int:
47 """Get total horizontal padding (left + right)"""
48 return self.padding_left + self.padding_right
50 @property
51 def total_vertical_padding(self) -> int:
52 """Get total vertical padding (top + bottom)"""
53 return self.padding_top + self.padding_bottom
55 @property
56 def total_border_width(self) -> int:
57 """Get total border width (both sides)"""
58 return self.border_width * 2