Spaces:
Sleeping
Sleeping
File size: 3,923 Bytes
86c402d |
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 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
"""
Модуль содержит класс для представления текстовых блоков документа.
"""
from dataclasses import asdict, dataclass, field
from typing import Any, Callable
from .parsed_structure import DocumentElement
@dataclass
class TextStyle:
"""
Стиль текстового блока.
"""
# Стиль параграфа
paragraph_style: str = ""
paragraph_style_name: str = ""
alignment: str = ""
# Автонумерация
has_numbering: bool = False
numbering_level: int = 0
numbering_id: str = ""
numbering_format: str = "" # decimal, bullet, roman, etc.
# Флаги для bold
fully_bold: bool = False
partly_bold: bool = False
# Флаги для italic
fully_italic: bool = False
partly_italic: bool = False
# Флаги для underline
fully_underlined: bool = False
partly_underlined: bool = False
def to_dict(self) -> dict[str, Any]:
"""
Преобразует стиль в словарь.
Returns:
dict[str, Any]: Словарное представление стиля.
"""
return asdict(self)
@dataclass
class ParsedTextBlock(DocumentElement):
"""
Текстовый блок документа.
"""
text: str = ""
style: TextStyle = field(default_factory=TextStyle)
anchors: list[str] = field(default_factory=list) # Список идентификаторов якорей (закладок)
links: list[str] = field(default_factory=list) # Список идентификаторов ссылок
# Технические метаданные о блоке
metadata: list[dict[str, Any]] = field(default_factory=list) # Для хранения технической информации
# Примечания и сноски к тексту
footnotes: list[dict[str, Any]] = field(default_factory=list) # Для хранения сносок
title_of_table: int | None = None
def to_string(self) -> str:
"""
Преобразует текстовый блок в строковое представление.
Returns:
str: Текст блока.
"""
return self.text
def apply(self, func: Callable[[str], str]) -> None:
"""
Применяет функцию к тексту блока.
Args:
func (Callable[[str], str]): Функция для применения к тексту.
"""
self.text = func(self.text)
# Применяем к текстовым значениям в метаданных
if isinstance(self.metadata, list):
for item in self.metadata:
if isinstance(item, dict) and 'text' in item:
item['text'] = func(item['text'])
# Применяем к сноскам
if isinstance(self.footnotes, list):
for note in self.footnotes:
if isinstance(note, dict) and 'text' in note:
note['text'] = func(note['text'])
def to_dict(self) -> dict[str, Any]:
"""
Преобразует текстовый блок в словарь.
Returns:
dict[str, Any]: Словарное представление текстового блока.
"""
result = {
'text': self.text,
'style': self.style.to_dict(),
'anchors': self.anchors,
'links': self.links,
'metadata': self.metadata,
'footnotes': self.footnotes,
'page_number': self.page_number,
'index_in_document': self.index_in_document,
'title_of_table': self.title_of_table,
}
return result
|