import string INFINITE = 10000 class Paragraph: def __init__(self, xparagraph, doc_id: int, id_: int): self.xparagraph = xparagraph self.id_ = int(str(2) + str(doc_id) + str(id_)) self.level = self.get_level_from_name() self.is_structure = self.level < INFINITE self.text = self.xparagraph.text self.type = self.get_type() @property def structure(self): structure = {str(self.id_): { 'index': str(self.id_), 'canMove': True, 'isFolder': False, 'children': [], 'title': self.text, 'canRename': True, 'data': {}, 'level': self.level, }} return structure @property def blank(self): """ checks if the paragraph is blank: i.e. it brings some signal (it may otherwise be ignored) """ text = self.text.replace('\n', '') return set(text).isdisjoint(string.ascii_letters) def get_level_from_name(self) -> int: style_name = self.xparagraph.style.name level = INFINITE if '.Titre' in style_name: suffix = style_name[-1] try: level = int(suffix) except: pass return level