UNPKG

@designliquido/foles

Version:

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

89 lines 4.91 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.FolEs = void 0; const avaliador_sintatico_1 = require("./avaliador-sintatico"); const avaliador_sintatico_reverso_1 = require("./avaliador-sintatico/avaliador-sintatico-reverso"); const lexador_1 = require("./lexador"); const lexador_reverso_1 = require("./lexador/lexador-reverso"); const resolvedores_1 = require("./resolvedores"); const resolvedor_reverso_1 = require("./resolvedores/resolvedor-reverso"); const importador_1 = require("./importador"); const tradutor_1 = require("./tradutores/tradutor"); const tradutor_reverso_1 = require("./tradutores/tradutor-reverso"); const gerador_mapa_1 = require("./gerador-mapa"); const path_1 = __importDefault(require("path")); /** * O núcleo da linguagem FolEs. */ class FolEs { constructor(traduzirComAninhamentos) { this.lexador = new lexador_1.Lexador(); this.lexadorReverso = new lexador_reverso_1.LexadorReverso(); this.importador = new importador_1.Importador(this.lexador); this.importadorReverso = new importador_1.Importador(this.lexadorReverso); this.importadorReverso.extensaoPadrao = ".css"; this.avaliadorSintatico = new avaliador_sintatico_1.AvaliadorSintatico(this.importador); this.avaliadorSintaticoReverso = new avaliador_sintatico_reverso_1.AvaliadorSintaticoReverso(this.importadorReverso); this.resolvedor = new resolvedores_1.Resolvedor(traduzirComAninhamentos); this.resolvedorReverso = new resolvedor_reverso_1.ResolvedorReverso(traduzirComAninhamentos); this.tradutor = new tradutor_1.Tradutor(); this.tradutorReverso = new tradutor_reverso_1.TradutorReverso(); this.geradorMapaCss = new gerador_mapa_1.GeradorMapaCss(); } /** * Método comum de conversão de texto FolEs para CSS. * @param conteudo O conteúdo em FolEs. * @returns O resultado da tradução em CSS. */ converterParaCssInterno(simbolos) { const resultadoAvaliadorSintatico = this.avaliadorSintatico.analisar(simbolos); if (this.avaliadorSintatico.erros.length > 0) { throw this.avaliadorSintatico.erros[0]; } const resultadoTraducao = this.tradutor.traduzir(resultadoAvaliadorSintatico); const traducao = this.resolvedor.resolver(resultadoTraducao); return traducao; } converterParaFolEsInterno(simbolos) { const resultadoAvaliadorSintaticoReverso = this.avaliadorSintaticoReverso.analisar(simbolos); const traducaoReversa = this.tradutorReverso.traduzir(resultadoAvaliadorSintaticoReverso); const resolvedorReverso = this.resolvedorReverso.resolver(traducaoReversa); return resolvedorReverso; } converterParaCss(nomeArquivo) { const resultadoLexador = this.importador.importar(nomeArquivo, true); return this.converterParaCssInterno(resultadoLexador[1].simbolos); } converterParaCssComMapas(nomeArquivo) { const resultadoLexador = this.importador.importar(nomeArquivo, true); const resultadoAvaliadorSintatico = this.avaliadorSintatico.analisar(resultadoLexador[1].simbolos); const traducao = this.resolvedor.resolver(resultadoAvaliadorSintatico); const resultadoTraducao = this.tradutor.traduzir(resultadoAvaliadorSintatico); // Extrair apenas o nome do arquivo (sem caminho) usando path.basename para compatibilidade cross-platform const nomeArquivoBase = path_1.default.basename(nomeArquivo); const nomeArquivoDestino = nomeArquivoBase.replace(/\.foles$/, '.css'); const mapa = this.geradorMapaCss.gerarMapaFontes(resultadoTraducao, resultadoLexador[0].join("\n"), nomeArquivoBase, nomeArquivoDestino); return [traducao, JSON.stringify(mapa)]; } converterParaFolEs(nomeArquivo) { const resultadoLexador = this.importadorReverso.importar(nomeArquivo); return this.converterParaFolEsInterno(resultadoLexador[1].simbolos); } converterTextoParaCss(texto) { const resultadoLexador = this.lexador.mapear(texto.split("\n")); return this.converterParaCssInterno(resultadoLexador.simbolos); } converterTextoParaFolEs(texto) { const resultadoLexadorReverso = this.lexadorReverso.mapear(texto.split("\n")); return this.converterParaFolEsInterno(resultadoLexadorReverso.simbolos); } } exports.FolEs = FolEs; // const testeFoles = new FolEs(false); // console.log(testeFoles.converterParaCss('../exemplos/exemplo2.foles')); // console.log(testeFoles.converterParaFolEs('../exemplos/reverso/exemplo-metodos.css')); // console.log(testeFoles.converterParaFolEs('../exemplos/reverso/exemplo-codigo.css')); //# sourceMappingURL=foles.js.map