Spaces:
Sleeping
Sleeping
| """ | |
| 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) | |