SYMBOL INDEX (62 symbols across 13 files) FILE: dpsprep/conftest.py function disable_loguru (line 6) | def disable_loguru() -> None: FILE: dpsprep/dpsprep.py function process_page_bg (line 20) | def process_page_bg(workdir: WorkingDirectory, mode: ImageMode, quality:... function process_text (line 52) | def process_text(workdir: WorkingDirectory, dpi: int | None, *, verbose:... function dpsprep (line 91) | def dpsprep( # noqa: C901, PLR0912, PLR0913, PLR0915 FILE: dpsprep/images.py class ProcessedPageBackground (line 32) | class ProcessedPageBackground(NamedTuple): function process_djvu_page (line 37) | def process_djvu_page(page: djvu.decode.Page, mode: ImageMode, i: int) -... function failsafe_save_djvu_page (line 87) | def failsafe_save_djvu_page(page_bg: ProcessedPageBackground, target: pa... FILE: dpsprep/logging.py function configure_loguru (line 11) | def configure_loguru(*, verbose: bool) -> None: function human_readable_size (line 20) | def human_readable_size(size: int) -> str: class SilencePrint (line 34) | class SilencePrint: method __enter__ (line 35) | def __enter__(self) -> None: method __exit__ (line 38) | def __exit__( FILE: dpsprep/ocrmypdf.py function optimize_pdf (line 17) | def optimize_pdf(workdir: WorkingDirectory, optlevel: int, quality: int ... function perform_ocr (line 55) | def perform_ocr(workdir: WorkingDirectory, options: dict[str, Any]) -> b... FILE: dpsprep/outline.py class OutlineTransformVisitor (line 10) | class OutlineTransformVisitor(SExpressionVisitor[PdfDict]): method visit_plain_list (line 11) | def visit_plain_list(self, node: djvu.sexpr.StringExpression, parent: ... method visit_list_bookmarks (line 52) | def visit_list_bookmarks(self, node: djvu.sexpr.ListExpression) -> Pdf... FILE: dpsprep/pdf.py function is_valid_pdf (line 8) | def is_valid_pdf(path: pathlib.Path) -> bool: function combine_pdfs_on_fs_with_text (line 17) | def combine_pdfs_on_fs_with_text(workdir: WorkingDirectory, outline: pdf... function combine_pdfs_on_fs_without_text (line 34) | def combine_pdfs_on_fs_without_text(workdir: WorkingDirectory, outline: ... FILE: dpsprep/sexpr.py class SExpressionVisitor (line 11) | class SExpressionVisitor(Generic[R]): method visit_list (line 12) | def visit_list(self, node: djvu.sexpr.ListExpression, **kwargs: T) -> ... method visit_other (line 24) | def visit_other(self, node: djvu.sexpr.Expression, **kwargs: T) -> R |... method visit (line 28) | def visit(self, node: djvu.sexpr.Expression, **kwargs: T) -> R | None: FILE: dpsprep/test_images.py function calculate_image_diff_score (line 10) | def calculate_image_diff_score(a: Image.Image, b: Image.Image) -> float: function test_process_djvu_page_bitonal (line 19) | def test_process_djvu_page_bitonal() -> None: FILE: dpsprep/test_outline.py function test_basic_outline (line 7) | def test_basic_outline() -> None: function test_nested_outline (line 24) | def test_nested_outline() -> None: function test_outline_with_page_titles (line 49) | def test_outline_with_page_titles() -> None: function test_outline_with_invalid_unicode (line 72) | def test_outline_with_invalid_unicode() -> None: FILE: dpsprep/test_text.py function remove_whitespace (line 10) | def remove_whitespace(src: str) -> str: function test_extract_djvu_page_text_words (line 14) | def test_extract_djvu_page_text_words() -> None: function test_extract_djvu_page_text_lines (line 31) | def test_extract_djvu_page_text_lines() -> None: function test_invalid_utf8 (line 48) | def test_invalid_utf8() -> None: FILE: dpsprep/text.py class TextExtractVisitor (line 18) | class TextExtractVisitor(SExpressionVisitor[str]): method iter_chars (line 19) | def iter_chars(self, string: str) -> Iterable[str]: method visit_string (line 47) | def visit_string(self, node: djvu.sexpr.StringExpression) -> str: method visit_plain_list (line 56) | def visit_plain_list(self, node: djvu.sexpr.ListExpression) -> str: #... method visit_list_word (line 59) | def visit_list_word(self, node: djvu.sexpr.ListExpression) -> str | None: method visit_list_line (line 65) | def visit_list_line(self, node: djvu.sexpr.ListExpression) -> str: method visit_list_para (line 69) | def visit_list_para(self, node: djvu.sexpr.ListExpression) -> str: class TextDrawVisitor (line 78) | class TextDrawVisitor(SExpressionVisitor): method __init__ (line 83) | def __init__(self, pdf: FPDF, dpi: int) -> None: method draw_text (line 88) | def draw_text(self, x1: int, x2: int, y1: int, y2: int, text: str) -> ... method iter_loose_string_content (line 111) | def iter_loose_string_content(self, expressions: list[djvu.sexpr.Expre... method get_loose_string_content (line 119) | def get_loose_string_content(self, expressions: list[djvu.sexpr.Expres... method visit_list_word (line 122) | def visit_list_word(self, node: djvu.sexpr.ListExpression) -> None: method visit_list_line (line 131) | def visit_list_line(self, node: djvu.sexpr.ListExpression) -> None: method visit_list_para (line 143) | def visit_list_para(self, node: djvu.sexpr.ListExpression) -> None: method visit_list_column (line 155) | def visit_list_column(self, node: djvu.sexpr.ListExpression) -> None: function djvu_pages_to_text_fpdf (line 165) | def djvu_pages_to_text_fpdf(pages: Sequence[djvu.decode.Page], dpi: int ... FILE: dpsprep/workdir.py function get_file_hash (line 13) | def get_file_hash(path: os.PathLike | str) -> str: class WorkingDirectory (line 26) | class WorkingDirectory: method __init__ (line 31) | def __init__(self, src: os.PathLike | str, dest: os.PathLike | str | N... method create_if_necessary (line 52) | def create_if_necessary(self) -> None: method get_page_pdf_path (line 60) | def get_page_pdf_path(self, i: int) -> pathlib.Path: method text_layer_pdf_path (line 64) | def text_layer_pdf_path(self) -> pathlib.Path: method ocrmypdf_tmp_path (line 68) | def ocrmypdf_tmp_path(self) -> pathlib.Path: method combined_pdf_without_text_path (line 72) | def combined_pdf_without_text_path(self) -> pathlib.Path: method combined_pdf_path (line 76) | def combined_pdf_path(self) -> pathlib.Path: method optimized_pdf_path (line 80) | def optimized_pdf_path(self) -> pathlib.Path: method destroy (line 83) | def destroy(self) -> None: