Parse a pages string like '5-7', '3,8', or '12' into a sorted list of ints.
(pages: str)
| 10 | # ── Helpers ────────────────────────────────────────────────────────────────── |
| 11 | |
| 12 | def _parse_pages(pages: str) -> list[int]: |
| 13 | """Parse a pages string like '5-7', '3,8', or '12' into a sorted list of ints.""" |
| 14 | result = [] |
| 15 | for part in pages.split(','): |
| 16 | part = part.strip() |
| 17 | if '-' in part: |
| 18 | start, end = int(part.split('-', 1)[0].strip()), int(part.split('-', 1)[1].strip()) |
| 19 | if start > end: |
| 20 | raise ValueError(f"Invalid range '{part}': start must be <= end") |
| 21 | result.extend(range(start, end + 1)) |
| 22 | else: |
| 23 | result.append(int(part)) |
| 24 | return sorted(set(result)) |
| 25 | |
| 26 | |
| 27 | def _count_pages(doc_info: dict) -> int: |