Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Retificação palavras reservada e Pseudo-classes #70

Merged
merged 6 commits into from
May 5, 2023
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion exemplos/exemplo.foles
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ aspas {
recortar: auto;
fluxo: nenhum;
conteudo: auto;
citações: nenhuma;
citações: nenhum;
}

.minha-classe {
Expand Down
8 changes: 5 additions & 3 deletions fontes/foles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,13 @@ export class FolEs {
this.tradutorReverso = new TradutorReverso();
}

//Texto em FolEs
private converterParaCssInterno(conteudo: string[]) {
const resultadoLexador = this.lexador.mapear(conteudo);
const resultadoAvaliadorSintatico = this.avaliadorSintatico.analisar(resultadoLexador.simbolos);
const traducao = this.tradutor.traduzir(resultadoAvaliadorSintatico);
return traducao;
return traducao;
//Texto em css
}

private converterParaFolEsInterno(conteudoDoArquivo: string[]) {
Expand Down Expand Up @@ -65,5 +67,5 @@ export class FolEs {
}
}

// const a = new FolEs();
// console.log(a.converterParaCss('../exemplos/exemplo.foles'));
// const a = new FolEs();
// console.log(a.converterParaCss('../exemplos/exemplo.foles'));
839 changes: 424 additions & 415 deletions fontes/lexador/palavras-reservadas/foles.ts

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions fontes/modificadores/decoracao-cor-texto .ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ export class DecoracaoCorTexto extends Modificador {
!(valorString.includes('rgb')) &&
!(valorString.includes('rgba')) &&
!(valorString.includes('hsl')) &&
Number.isNaN(parseInt(valor)) &&
!(valorString.startsWith('#') && valorString.length <= 7)
) {
throw new Error(`Propriedade 'decoração-cor-texto' com valor ${valor} inválido. Valores aceitos:
Expand All @@ -30,5 +31,6 @@ export class DecoracaoCorTexto extends Modificador {

// Não recebe quantificador
// this.quantificador = quantificador;

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
import { Sobrepor } from "../modificadores-pseudo-classes/sobrepor";
import { DirecaoTexto } from "../modificadores-pseudo-classes/direção-de-texto";
import { IdiomaGlobal } from "../modificadores-pseudo-classes/idioma-global";
import { TodoLink } from "../modificadores-pseudo-classes/todo-link";
import { Link } from "../modificadores-pseudo-classes/link"; // Olhar
import { Visitado} from "../modificadores-pseudo-classes/visitado";
import { LinkLocal } from "../modificadores-pseudo-classes/link-local";
import { EstiloAlvo } from "../modificadores-pseudo-classes/estilo-alvo";
import { AlvoDestaque } from "../modificadores-pseudo-classes/alvo-destaque";
import {Escopo} from "../modificadores-pseudo-classes/escopo";
import {Ativo } from "../modificadores-pseudo-classes/ativo";
import {Foco} from "../modificadores-pseudo-classes/foco";
import { FocoVisivel } from "../modificadores-pseudo-classes/foco-visivel";
import { FocoInterno } from "../modificadores-pseudo-classes/foco-interno";
import { Atual } from "../modificadores-pseudo-classes/atual";
import { Passado } from "../modificadores-pseudo-classes/passado";
import { Futuro } from "../modificadores-pseudo-classes/futuro";
import {Reproduzir} from "../modificadores-pseudo-classes/reproduzir";
import { Pausa} from "../modificadores-pseudo-classes/pausa";
import { Habilitado } from "../modificadores-pseudo-classes/habilitado";
import { Desabilitado } from "../modificadores-pseudo-classes/desabilitado";
import { SomenteLeitura } from "../modificadores-pseudo-classes/somente-leitura";
import { LerEscrever } from "../modificadores-pseudo-classes/ler-escrever";
import { LocalReservadoMostrado } from "../modificadores-pseudo-classes/local-reservado-mostrado";
import { EstiloPadrao } from "../modificadores-pseudo-classes/estilo-padrao";
import { Verificado } from "../modificadores-pseudo-classes/verificado";
import { Indeterminado } from "../modificadores-pseudo-classes/indeterminado";
import { EmBranco} from "../modificadores-pseudo-classes/em-branco";
import { Valido } from "../modificadores-pseudo-classes/valido";
import { Invalido } from "../modificadores-pseudo-classes/invalido";
import { DentroDoLimite } from "../modificadores-pseudo-classes/dentro-do-limite";
import { ForaDoLimite} from "../modificadores-pseudo-classes/fora-do-limite";
import { Obrigatorio } from "../modificadores-pseudo-classes/obrigatorio";
import {Opcional } from "../modificadores-pseudo-classes/opcional";
import { UsuarioInvalido} from "../modificadores-pseudo-classes/usuario-invalido";
import { EstruturaEstilo } from "../modificadores-pseudo-classes/estrutura-estilo";
import { Vazio} from "../modificadores-pseudo-classes/vazio";
import { NFilho } from "../modificadores-pseudo-classes/n-filho";
import { NUltimoFilho} from "../modificadores-pseudo-classes/n-último-filho";
import { PrimeiroFilho } from "../modificadores-pseudo-classes/primeiro-filho";
import { UltimoFilho} from "../modificadores-pseudo-classes/ultimo-filho";
import { FilhoUnico } from "../modificadores-pseudo-classes/filho-unico";
import { NTipo } from "../modificadores-pseudo-classes/n-tipo";
import { NUltimoTipo } from "../modificadores-pseudo-classes/n-ultimo-tipo";
import { PrimeiroTipo } from "../modificadores-pseudo-classes/primeiro-tipo";
import { UltimoTipo } from "../modificadores-pseudo-classes/ultimo-tipo";
import { UnicoTipo } from "../modificadores-pseudo-classes/unico-tipo";



export const DicionarioPseudoClasses: { [nomeFolEs: string]: any } = {
"sobrepor": Sobrepor,
"direção-de-texto ": DirecaoTexto ,// Recebe parametro
"todo-link": TodoLink,
"link": Link,
"visitado": Visitado,
"link-local": LinkLocal,
"estilo-alvo":EstiloAlvo,
"alvo-destaque": AlvoDestaque,
"escopo": Escopo,
"ativo": Ativo,
"foco": Foco,
"foco-visivel": FocoVisivel,
"foco-interno": FocoInterno,
"atual": Atual,
"passado": Passado,
"futuro":Futuro,
"reproduzir": Reproduzir,
"pausa": Pausa,
"habilitado": Habilitado,
"desabilitado": Desabilitado,
"somente-leitura": SomenteLeitura,
"ler-escrever": LerEscrever,
"local-reservado-mostrado": LocalReservadoMostrado,
"estilo-padrão":EstiloPadrao,
"verificado": Verificado,
"indeterminado": Indeterminado,
"em-branco": EmBranco,
"válido": Valido,
"inválido": Invalido,
"invalido": Invalido,
"dentro-do-limite": DentroDoLimite,
"fora-do-limite": ForaDoLimite,
"obrigatorio":Obrigatorio,
"opcional": Opcional,
"usuário-inválido": UsuarioInvalido,
"usuario-invalido": UsuarioInvalido,
"estrutura-estilo": EstruturaEstilo,
"vazio":Vazio,
"n-filho": NFilho, // Recebe parametro
"n-último-filho": NUltimoFilho,// Recebe parametro
"primeiro-filho": PrimeiroFilho,
"último-filho":UltimoFilho,
"filho-unico": FilhoUnico,
"n-tipo": NTipo, //Recebe parametro
"n-último-tipo": NUltimoTipo,//Recebe parametro
"n-ultimo-tipo": NUltimoTipo,//Recebe parametro
"primeiro-tipo":PrimeiroTipo,
"ultimo-tipo":UltimoTipo,
"unico-tipo": UnicoTipo,

}
34 changes: 34 additions & 0 deletions fontes/modificadores/modificadores-pseudo-classes/alvo-destaque.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import { cores } from "../atributos/cores";
import { estilos } from "../atributos/estilo";
import { valoresGerais } from "../atributos/gerais";
import { unidadesMedida } from "../atributos/quantificadores";
import { Modificador } from "../superclasse/modificador";

export class AlvoDestaque extends Modificador {

constructor(valor: string, quantificador?: string) {
super("alvo-destaque", "target-within");

if (Number.isNaN(parseInt(valor)) &&

!(valor in estilos) &&
!(valor in cores) &&
!(valor in valoresGerais)) {
throw new Error(`Propriedade 'alvo-destaque' com valor ${valor} inválido. Valores aceitos:
${Object.keys(estilos).reduce((final, atual) => final += `, ${atual}`)},
${Object.keys(cores).reduce((final, atual) => final += `, ${atual}`)},
${Object.keys(valoresGerais).reduce((final, atual) => final += `, ${atual}`)}.`);
}

this.valor = valor;

if (Number(parseInt(valor))) {
if (!(quantificador in unidadesMedida) || quantificador === undefined) {
throw new Error(`Propriedade 'alvo-destaque' com quantificador inválido. Valores aceitos:
${Object.keys(unidadesMedida).reduce((final, atual) => final += `, ${atual}`)}.`);
}

this.quantificador = quantificador;
}
}
}
37 changes: 37 additions & 0 deletions fontes/modificadores/modificadores-pseudo-classes/ativo.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { cores } from "../atributos/cores";
import { valoresGlobais } from "../atributos/globais";
import { Modificador } from "../superclasse/modificador";
import { unidadesMedida } from "../atributos/quantificadores";

export class Ativo extends Modificador {
constructor(valor: string, quantificador?: string) {
super( "ativo","active" );

const valorString = valor.toString();

if (!(valor in cores) &&

!(valor in valoresGlobais) &&
!(valorString.includes('rgb')) &&
!(valorString.includes('rgba')) &&
!(valorString.includes('hsl')) &&
!(valorString.startsWith('#') && valorString.length <= 7)
) {
throw new Error(`Propriedade 'ativo' com valor ${valor} inválido. Valores aceitos:
${Object.keys(cores).reduce((final, atual) => final += `, ${atual}`)},
${Object.keys(valoresGlobais).reduce((final, atual) => final += `, ${atual}`)}.`)
}

this.valor = valor;

if (Number(parseInt(valor))) {
if (!(quantificador in unidadesMedida) || quantificador === undefined) {
throw new Error(`Propriedade 'ativo' com quantificador inválido. Valores aceitos:
${Object.keys(unidadesMedida).reduce((final, atual) => final += `, ${atual}`)}.`);
}

this.quantificador = quantificador;
}

}
}
29 changes: 29 additions & 0 deletions fontes/modificadores/modificadores-pseudo-classes/atual.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import { cores } from "../atributos/cores";
import { valoresGerais } from "../atributos/gerais";
import { Modificador } from "../superclasse/modificador";

export class Atual extends Modificador {
constructor(valor: string, quantificador?: string) {
super("atual", "current");

// O valor é recebido como objeto, o que impossibilita de utilizar a função includes().
// A constante abaixo é criada para não ocorrer esse problema.
const valorString = valor.toString();

if (!(valor in cores) &&
!(valor in valoresGerais) &&
!(valorString.includes('rgb')) &&
!(valorString.includes('rgba')) &&
!(valorString.includes('hsl')) &&
!(valorString.startsWith('#') && valorString.length <= 7)
) {
throw new Error(`Propriedade 'atual' com valor ${valor} inválido. Valores aceitos:
rgb, rgba, hsl, #HEX,
${Object.keys(cores).reduce((final, atual) => final += `, ${atual}`)},
${Object.keys(valoresGerais).reduce((final, atual) => final += `, ${atual}`)}.`)
}

this.valor = valor;

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { cores } from "../atributos/cores";
import { valoresGerais } from "../atributos/gerais";
import { Modificador } from "../superclasse/modificador";

export class DentroDoLimite extends Modificador {
constructor(valor: string, quantificador?: string) {
super("dentro-do-limite", "in-range");
const valorString = valor.toString();

if (!(valor in cores) &&
!(valor in valoresGerais) &&
!(valorString.includes('rgb')) &&
!(valorString.includes('rgba')) &&
!(valorString.includes('hsl')) &&
!(valorString.startsWith('#') && valorString.length <= 7)
) {
throw new Error(`Propriedade 'dentro-do-limite' com valor ${valor} inválido. Valores aceitos:
rgb, rgba, hsl, #HEX,
${Object.keys(cores).reduce((final, atual) => final += `, ${atual}`)},
${Object.keys(valoresGerais).reduce((final, atual) => final += `, ${atual}`)}.`)
}

this.valor = valor;

}
}
41 changes: 41 additions & 0 deletions fontes/modificadores/modificadores-pseudo-classes/desabilitado.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import { cores } from "../atributos/cores";
import { valoresGlobais} from "../atributos/globais";
import { unidadesMedida } from "../atributos/quantificadores";
import { Modificador } from "../superclasse/modificador";

export class Desabilitado extends Modificador {

constructor(valor: string, quantificador?: string) {
super("desabilitado", "disabled");


const valorString = valor.toString();

const validaçõesCor = !(valorString.includes('rgb')) && !(valorString.includes('rgba')) &&
!(valorString.includes('hsl')) && !(valorString.includes('hsla'));

const validaçõesHEX = !(valorString.startsWith('#') && valorString.length <= 7);

if (Number.isNaN(parseInt(valor)) &&
validaçõesCor &&
validaçõesHEX &&
!(valor in cores) &&
!(valor in valoresGlobais)) {
throw new Error(`Propriedade 'desabilitado' com valor ${valor} inválido. Valores aceitos:
${Object.keys(cores).reduce((final, atual) => final += `, ${atual}`)},
${Object.keys(valoresGlobais).reduce((final, atual) => final += `, ${atual}`)}.`);
}

this.valor = valor;

if (Number(parseInt(valor))) {
if (!(quantificador in unidadesMedida) || quantificador === undefined) {
throw new Error(`Propriedade 'desabilitado' com quantificador inválido. Valores aceitos:
número-quantificador,
${Object.keys(unidadesMedida).reduce((final, atual) => final += `, ${atual}`)}.`);
}

this.quantificador = quantificador;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@

import { posicoes } from "../atributos/posicoes";
import { Modificador } from "../../modificadores";

export class DirecaoTexto extends Modificador {
valoresAceitos: { [valorFoles: string]: string } = {


"direita": "right",
"esquerda": "left",

}
valor: string;

constructor(valor: string, quantificador?: string) {
super(["direção-de-texto", "direção-de-texto"], "dir");

// Pode receber valores próprios ou valores da lista de posições
if (!(valor in this.valoresAceitos) &&
!(valor in posicoes)
) {
throw new Error(`Propriedade 'alinhar-conteúdo' com valor ${valor} inválido. Valores aceitos:
${Object.keys(posicoes).reduce((final, atual) => final += `, ${atual}`)},
${Object.keys(this.valoresAceitos).reduce((final, atual) => final += `, ${atual}`)},
${Object.keys(posicoes).reduce((final, atual) => final += `, ${atual}`)}.`);
}

this.valor = valor;

// Não recebe quantificador
// this.quantificador = quantificador;
}
}
Loading