📦 Estrutura da Biblioteca - RafaPear/CLILib GitHub Wiki

A CLILib está organizada de forma modular para facilitar a manutenção, extensão e compreensão do código. Abaixo está uma visão geral dos principais componentes da biblioteca e o seu propósito.

🧠 Núcleo da aplicação (App.kt)

Responsável por controlar o ciclo de vida da CLI:

  • runtimeCLI() – inicia o ciclo interativo da CLI com prompt e leitura contínua de comandos.
  • runSingleCmd(cmd: String) – executa um único comando.
  • runFromFile(file: String) – executa comandos a partir de um ficheiro .ppc.
  • registerDefaultCommands() – regista todos os comandos pré-definidos através do CmdRegister.

🧩 Registo de Comandos (CmdRegister.kt)

Gestor central de comandos disponíveis no sistema:

  • register(cmd) – regista um comando.
  • unregister(cmd) – remove um comando.
  • registerAll(list) – regista vários comandos.
  • find(alias) – procura um comando por nome/alias.
  • all() – retorna todos os comandos registados.

🔧 Interface de Comando (Command.kt)

Interface que define como cada comando deve ser estruturado:

  • description, usage, aliases, run(args) são obrigatórios.
  • minArgs, maxArgs, requiresFile, etc., são opcionais.
  • Todos os comandos implementam esta interface.

🧮 Sistema de Variáveis (VarRegister.kt)

Permite criar, alterar e consultar variáveis globais:

  • register(name, value) – cria uma variável.
  • get(name) – obtém o valor de uma variável.
  • modify(name, value) – altera o valor.
  • unregister(name) – remove.
  • all() – retorna todas as variáveis.

🧠 Parsing de Expressões (ExprParser.kt)

Permite calcular expressões matemáticas simples com operadores + - * / e parêntesis.

Exemplo:

val parser = ExprParser()
val result = parser.parse("3 + (2 * 5)")

🛠️ Utilitários (Utils.kt, Colors.kt, Global.kt)

  • cmdParser(...) – interpreta e executa comandos compostos (com |).
  • replaceVars() – substitui variáveis ($a) pelos seus valores.
  • validateArgs(...) – valida número de argumentos e ficheiros.
  • drawPrompt(), clearPrompt() – manipula o terminal.
  • ProgressBar.kt – componente visual de progresso no terminal.
  • Colors.kt – códigos ANSI para cores no terminal.
  • Global.kt – constantes globais (ex: version, commentCode, root).

📁 Exemplo de utilização (Example.kt)

Demonstra como iniciar a aplicação e correr scripts:

fun main() {
    val app = App()
    app.registerDefaultCommands()
    app.runFromFile("Scripts/exampleScript.ppc")
}