@designliquido/delegua
Version:
Linguagem de programação simples e moderna usando português estruturado.
83 lines • 2.76 kB
JavaScript
;
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