# ddgp/formatting.py # -*- coding: utf-8 -*- """ Funções de formatação de texto para o Dicionário. """ import re import os import json BASE_DIR = os.path.dirname(__file__) DDGP_DATA_DIR = os.path.join(BASE_DIR, "data") # --- Carregamento de Abreviaturas --- try: with open(os.path.join(DDGP_DATA_DIR, "abrev.json"), "r", encoding="utf-8") as f: ABREV = json.load(f) except FileNotFoundError: print("ATENÇÃO: Arquivo abrev.json não encontrado. A formatação de abreviaturas será desativada.") ABREV = {} # --- Lógica de Abreviaturas --- def _escape_for_regex(s: str) -> str: return re.escape(s) _abbrev_list_sorted = sorted(list(ABREV.keys()), key=lambda x: -len(x)) _abbrev_patterns = [r"(? str: """Substitui abreviaturas por spans com classes e tooltip.""" if not texto or not ABREV_REGEX: return texto def _repl(m): ab = m.group(0) info = ABREV.get(ab, {}) if ABREV else {} desc = info.get("descricao", "") if isinstance(info, dict) else "" tipo = info.get("tipo", "") if isinstance(info, dict) else "" # Lógica de classificação cls = "abrev" if ("Autor" in tipo or "Obras" in tipo or "Nome" in tipo or "Cultural" in tipo): cls = "autor-sc" title = desc.replace('"', '"') return f'{ab}' return ABREV_REGEX.sub(_repl, texto) # --- Formatação de Parágrafos de Descrição --- def format_pdesc(pdesc: str) -> str: """Formata texto de descrição, tratando quebras de linha e aplicando formatação de abreviaturas.""" if not pdesc: return "" # Normalize line endings p = pdesc.replace('\r\n', '\n').replace('\r', '\n') # 1. Substitui '♦ ' por
e span com classe ddgp-sec (para quebra de linha após o diamante) # Garante que '♦ label' fique na mesma linha usando um espaço após o
p = re.sub(r'♦\s+', '
', p) # 2. Aplica formatação de abreviaturas p = format_abrevs(p) # 3. Preserva newlines simples como
p = p.replace('\n', '
') return p