teste_laudos / document /numbering.py
gui-sparim's picture
Upload 44 files
8d6c767 verified
"""
Numeração automática hierárquica de seções.
"""
class NumeradorSecoes:
"""
Gerencia numeração automática hierárquica de seções.
Uso:
num = NumeradorSecoes()
num.secao() # "1"
num.subsecao() # "1.1"
num.subsecao() # "1.2"
num.secao() # "2"
num.subsubsecao() # "2.0.1" (se não chamou subsecao antes)
"""
def __init__(self, secao_inicial: int = 0):
"""
Args:
secao_inicial: Número inicial para seções (0 = começa em 1)
"""
self.contadores = [secao_inicial, 0, 0, 0]
def _reset_niveis_abaixo(self, nivel: int) -> None:
"""Reseta contadores de níveis abaixo do especificado."""
for i in range(nivel + 1, len(self.contadores)):
self.contadores[i] = 0
def secao(self) -> str:
"""Incrementa e retorna número da seção (ex: '1')."""
self.contadores[0] += 1
self._reset_niveis_abaixo(0)
return str(self.contadores[0])
def subsecao(self) -> str:
"""Incrementa e retorna número da subseção (ex: '1.1')."""
self.contadores[1] += 1
self._reset_niveis_abaixo(1)
return f"{self.contadores[0]}.{self.contadores[1]}"
def subsubsecao(self) -> str:
"""Incrementa e retorna número da sub-subseção (ex: '1.1.1')."""
self.contadores[2] += 1
self._reset_niveis_abaixo(2)
return f"{self.contadores[0]}.{self.contadores[1]}.{self.contadores[2]}"
def subsubsubsecao(self) -> str:
"""Incrementa e retorna número da sub-sub-subseção (ex: '1.1.1.1')."""
self.contadores[3] += 1
return f"{self.contadores[0]}.{self.contadores[1]}.{self.contadores[2]}.{self.contadores[3]}"
def numero_atual(self, nivel: int = 0) -> str:
"""Retorna o número atual de um nível sem incrementar."""
if nivel == 0:
return str(self.contadores[0])
elif nivel == 1:
return f"{self.contadores[0]}.{self.contadores[1]}"
elif nivel == 2:
return f"{self.contadores[0]}.{self.contadores[1]}.{self.contadores[2]}"
else:
return f"{self.contadores[0]}.{self.contadores[1]}.{self.contadores[2]}.{self.contadores[3]}"
def definir_secao(self, numero: int) -> None:
"""Define manualmente o número da seção atual."""
self.contadores[0] = numero
self._reset_niveis_abaixo(0)