Spaces:
Sleeping
Sleeping
File size: 2,785 Bytes
7de4594 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | """
Utility functions for OCR processor
Common utilities to avoid circular imports
"""
def parse_page_ranges(page_ranges_str):
"""
Parse page ranges string into a list of page numbers.
Args:
page_ranges_str (str): Page ranges like "1-5, 10, 15-20"
Returns:
list: List of page numbers (0-indexed for internal use)
Raises:
ValueError: If page range format is invalid
"""
if not page_ranges_str or not page_ranges_str.strip():
return []
pages = set()
ranges = [r.strip() for r in page_ranges_str.split(',')]
for range_str in ranges:
if not range_str:
continue
if '-' in range_str:
try:
start, end = range_str.split('-', 1)
start_page = int(start.strip())
end_page = int(end.strip())
if start_page < 1 or end_page < 1:
raise ValueError("Page numbers must be >= 1")
if start_page > end_page:
raise ValueError(f"Invalid range: {range_str} (start > end)")
# Convert to 0-indexed and add to set
for page in range(start_page - 1, end_page):
pages.add(page)
except ValueError as e:
if "invalid literal" in str(e):
raise ValueError(f"Invalid page range format: {range_str}")
raise
else:
try:
page_num = int(range_str.strip())
if page_num < 1:
raise ValueError("Page numbers must be >= 1")
pages.add(page_num - 1) # Convert to 0-indexed
except ValueError:
raise ValueError(f"Invalid page number: {range_str}")
return sorted(list(pages))
def validate_page_ranges(page_ranges_str, total_pages):
"""
Validate page ranges against document total pages.
Args:
page_ranges_str (str): Page ranges string
total_pages (int): Total pages in document
Returns:
tuple: (is_valid, error_message, parsed_pages)
"""
try:
parsed_pages = parse_page_ranges(page_ranges_str)
if not parsed_pages:
return True, "", []
# Check if any pages exceed document length
invalid_pages = [p + 1 for p in parsed_pages if p >= total_pages] # Convert back to 1-indexed for error
if invalid_pages:
return False, f"Pages {invalid_pages} exceed document length ({total_pages} pages)", []
return True, "", parsed_pages
except ValueError as e:
return False, str(e), []
|