UNPKG

@designliquido/delegua

Version:

Linguagem de programação simples e moderna usando português estruturado.

83 lines 2.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.analisarDocumentario = analisarDocumentario; const REGEX_PARAMETRO = /^@(?:par[aâ]metro|param)\s+(?:\{([^}]+)\}\s+)?(\S+)\s*(.*)$/; const REGEX_RETORNA = /^@(?:retorna)\s*(?:\{([^}]+)\}\s*)?(.*)$/; const REGEX_EXEMPLO = /^@(?:exemplo)\s*(.*)$/; const REGEX_DEPRECIADO = /^@depreciado\s*(.*)$/; const REGEX_VEJA = /^@veja\s+(\S+).*$/; const REGEX_TAG = /^@\w+/; function segmentar(linhas) { var _a, _b; const segmentos = []; let atual = { tag: '', linhas: [] }; for (const linha of linhas) { if (REGEX_TAG.test(linha)) { segmentos.push(atual); const tag = (_b = (_a = linha.match(/^@(\w+)/)) === null || _a === void 0 ? void 0 : _a[1]) !== null && _b !== void 0 ? _b : ''; atual = { tag, linhas: [linha] }; } else { atual.linhas.push(linha); } } segmentos.push(atual); return segmentos; } function analisarDocumentario(conteudo) { var _a; const resultado = { descricao: '', parametros: [], veja: [], }; const linhas = conteudo.split('\n'); const segmentos = segmentar(linhas); for (const segmento of segmentos) { if (segmento.tag === '') { resultado.descricao = segmento.linhas.join('\n').trim(); continue; } const primeiraLinha = (_a = segmento.linhas[0]) !== null && _a !== void 0 ? _a : ''; let m; m = primeiraLinha.match(REGEX_PARAMETRO); if (m) { resultado.parametros.push({ tipo: m[1] || undefined, nome: m[2], descricao: m[3].trim(), }); continue; } m = primeiraLinha.match(REGEX_RETORNA); if (m) { resultado.retorna = { tipo: m[1] || undefined, descricao: m[2].trim(), }; continue; } m = primeiraLinha.match(REGEX_EXEMPLO); if (m) { const restoLinha = m[1].trim(); const linhasExtras = segmento.linhas.slice(1).join('\n').trim(); resultado.exemplo = restoLinha ? restoLinha + (linhasExtras ? '\n' + linhasExtras : '') : linhasExtras; continue; } m = primeiraLinha.match(REGEX_DEPRECIADO); if (m) { resultado.depreciado = m[1].trim(); continue; } m = primeiraLinha.match(REGEX_VEJA); if (m) { resultado.veja.push(m[1].trim()); continue; } // tag desconhecida: ignorada silenciosamente } return resultado; } //# sourceMappingURL=index.js.map