# 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