""" 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)