File size: 1,621 Bytes
d5ea0f1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import os
import gradio as gr
from jinja2 import Environment, FileSystemLoader
from typing_extensions import TypeAlias

_ENV = Environment(loader=FileSystemLoader("app/assets/jinja-templates"))
_IMAGE_TEMPLATE = _ENV.get_template("image.j2")

from typing import NamedTuple, TypeAlias


class TableCell(NamedTuple):
    polygon: tuple[tuple[int, int], ...]
    text_x: int
    text_y: int
    text: str


class Page(NamedTuple):
    width: int
    height: int
    cells: list[TableCell]
    path: str


Collection: TypeAlias = list[Page]


def render_image(collection: Collection, current_page_index: int) -> str:
    return _IMAGE_TEMPLATE.render(
        page=collection[current_page_index],
    )


def toggle_navigation_button(collection: Collection):
    visible = len(collection) > 1
    return gr.update(visible=visible)


def activate_left_button(current_page_index):
    interactive = current_page_index > 0
    return gr.update(interactive=interactive)


def activate_right_button(collection: Collection, current_page_index):
    interactive = current_page_index + 1 < len(collection)
    return gr.update(interactive=interactive)


def right_button_click(collection: Collection, current_page_index):
    max_index = len(collection) - 1
    return min(max_index, current_page_index + 1)


def left_button_click(current_page_index):
    return max(0, current_page_index - 1)


def update_image_caption(collection: Collection, current_page_index):
    n_pages = len(collection)
    label = os.path.split(collection[current_page_index].path)[-1]
    return f"image {current_page_index + 1} of {n_pages}: `{label}`"