@designliquido/foles
Version:
Linguagem de folhas de estilo para documentos em geral em português
71 lines • 3.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SerializadorReverso = void 0;
const declaracoes_1 = require("../declaracoes");
const metodo_css_1 = require("../valores/metodos/css/metodo-css");
const metodo_1 = require("../valores/metodos/foles/metodo");
/**
* O serializador reverso traduz de CSS para FolEs. Pode traduzir tanto FolEs
* aninhado quanto desaninhado.
*/
class SerializadorReverso {
constructor(serializarComAninhamentos = true) {
this.serializarComAninhamentos = serializarComAninhamentos;
}
serializarModificador(modificador, indentacao = 0) {
let quantificador = "";
if (modificador.hasOwnProperty("quantificador")) {
quantificador = modificador.quantificador;
}
let valor = "";
if (modificador.valor instanceof metodo_css_1.MetodoCss) {
valor = modificador.valor.paraTexto();
}
else if (modificador.valor instanceof metodo_1.Metodo) {
valor = modificador.valor.paraTexto();
}
else {
valor = modificador.valor;
}
return (" ".repeat(indentacao) +
`${Array.isArray(modificador.nomeFoles) ? modificador.nomeFoles[0] : modificador.nomeFoles}: ${valor}${quantificador ? quantificador : ""};\n`);
}
serializar(declaracoes, indentacao = 0, seletorAnterior = undefined) {
let resultado = "";
let textoSeletorAnterior = "";
if (seletorAnterior !== undefined) {
textoSeletorAnterior = seletorAnterior;
}
for (const declaracao of declaracoes) {
const prefixos = [];
if (declaracao instanceof declaracoes_1.BlocoDeclaracao) {
for (const seletor of declaracao.seletores) {
const prefixo = (textoSeletorAnterior +
" " +
seletor.paraTexto()).trimStart();
prefixos.push(prefixo);
resultado += " ".repeat(indentacao) + prefixo + ", ";
}
resultado = resultado.slice(0, -2);
resultado += " {\n";
for (const modificador of declaracao.modificadores) {
resultado += this.serializarModificador(modificador, indentacao + 4);
}
if (this.serializarComAninhamentos) {
resultado += this.serializar(declaracao.declaracoesAninhadas, indentacao + 4);
resultado += `${" ".repeat(indentacao)}}\n\n`;
}
else {
resultado += `${" ".repeat(indentacao)}}\n\n`;
for (const prefixo of prefixos) {
resultado += this.serializar(declaracao.declaracoesAninhadas, indentacao, prefixo);
}
}
}
}
// TODO: Adicionar caso if (declaracao instanceof DeclaracaoVariavel)
return resultado;
}
}
exports.SerializadorReverso = SerializadorReverso;
//# sourceMappingURL=serializador-reverso.js.map