@designliquido/foles
Version:
Linguagem de folhas de estilo para documentos em geral em português
89 lines • 4.91 kB
JavaScript
"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