UNPKG

@designliquido/foles

Version:

Linguagem de folhas de estilo para documentos em geral em português

71 lines 3.1 kB
"use strict"; 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