Coverage for src/epublib/nav/page_list_util.py: 79%

29 statements  

« prev     ^ index     » next       coverage.py v7.9.2, created at 2025-07-04 08:30 -0300

1from dataclasses import dataclass 

2 

3import bs4 

4 

5from ..exceptions import warn 

6from ..util import parse_int 

7 

8 

9def detect_page(tag: bs4.Tag): 

10 page = None 

11 if tag.string: 

12 page = parse_int(tag.string) 

13 if page is not None: 

14 return page 

15 

16 if tag.get("title"): 

17 page = parse_int(str(tag["title"])) 

18 if page is not None: 

19 return page 

20 

21 if tag.get("id"): 

22 page = parse_int(str(tag["id"])) 

23 if page is not None: 

24 return page 

25 

26 warn(f"Can't determine page number of pagebreak element: {tag}") 

27 return None 

28 

29 

30@dataclass 

31class PageBreakInfo: 

32 id: str 

33 filename: str 

34 page: int 

35 label: str = "" 

36 

37 def __post_init__(self): 

38 if not self.label: 

39 self.label = str(self.page)