Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
23 changes: 22 additions & 1 deletion exemplos/exemplo2.foles
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
/** Valores específicos */
lmht {
recuo: 10px 10px 100px 20px;
borda-direita: 2px pontilhado;
Expand All @@ -17,4 +18,24 @@ lmht {

lmht {
ajustar-tamanho-fonte: altura-cap 0.5;
}
}

lmht {
propriedade-transicao: todas, test1;
}

lmht {
definir-contador: meu-contador 5 contador2 0;
ao-mudar: left, top;
coluna-em-grade: 3 span;
estilo-lista: dentro meu-estilo;
fim-linha-em-grade: span 3;
fim-coluna-em-grade: span 3;
incrementar-contador: meu-contador -4;
início-linha-em-grade: span 2;
inicio-coluna-em-grade: span 2;
linha-em-grade: span some-grid-area;
nome-animacao: test_05;
propriedade-transicao: test1, animation4;
tamanho-grade: span 2;
}
2 changes: 1 addition & 1 deletion fontes/foles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,6 @@ export class FolEs {
}

// const testeFoles = new FolEs(false);
// console.log(testeFoles.converterParaCss('../exemplos/exemplo6.foles'));
// console.log(testeFoles.converterParaCss('../exemplos/exemplo2.foles'));
// console.log(a.converterParaFolEs('../exemplos/reverso/exemplo-metodos.css'));
// console.log(a.converterParaFolEs('../exemplos/reverso/exemplo-codigo.css'));
10 changes: 8 additions & 2 deletions fontes/modificadores/ao-mudar.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { valoresGlobais } from "./atributos/globais";
import { validarValores } from "./validacoes/comum";
import { Modificador, PragmasModificador } from "./superclasse";
import { validarAtribuicaoAbreviada } from "./validacoes/atribuicao-abreviada";

export class AoMudar extends Modificador {
valoresAceitos: { [valorFoles: string]: string } = {
Expand All @@ -19,8 +20,13 @@ export class AoMudar extends Modificador {
) {
super("ao-mudar", "will-change", pragmas);

if (!valorVariavel)
validarValores("ao-mudar", valor, this.valoresAceitos);
if (!valorVariavel) {
if (valor.includes(" ")) {
validarAtribuicaoAbreviada("comum", "ao-mudar", valor, this.valoresAceitos, undefined, false, true);
} else {
validarValores("ao-mudar", valor, this.valoresAceitos);
}
}

this.valor = valor;
}
Expand Down
10 changes: 3 additions & 7 deletions fontes/modificadores/coluna-em-grade.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,10 @@ export class ColunaEmGrade extends Modificador {
super("coluna-em-grade", "grid-column", pragmas);

if (!valorVariavel) {
if (valor.includes("/")) {
validarAtribuicaoAbreviada("numérica", "coluna-em-grade", valor, this.valoresAceitos);
if (valor.includes("/") || valor.includes(" ")) {
validarAtribuicaoAbreviada("numérica", "coluna-em-grade", valor, this.valoresAceitos, undefined, false, true);
} else {
validarValorNumerico(
"coluna-em-grade",
valor,
this.valoresAceitos,
);
validarValorNumerico("coluna-em-grade", valor, this.valoresAceitos);
}
}

Expand Down
14 changes: 10 additions & 4 deletions fontes/modificadores/definir-contador.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { Modificador, PragmasModificador } from "./superclasse";
import { validarValores } from "./validacoes/comum";
import { validarAtribuicaoAbreviada } from "./validacoes/atribuicao-abreviada";
import { validarValorNumerico } from "./validacoes/numerica";

export class DefinirContador extends Modificador {
valoresAceitos: { [valorFoles: string]: string } = {
Expand All @@ -13,9 +14,14 @@ export class DefinirContador extends Modificador {
valorVariavel: boolean = false,
) {
super("definir-contador", "counter-set", pragmas);

if (!valorVariavel)
validarValores("definir-contador", valor, this.valoresAceitos);

if (!valorVariavel) {
if (valor.includes(" ")) {
validarAtribuicaoAbreviada("numérica", "definir-contador", valor, this.valoresAceitos, undefined, false, true);
} else {
validarValorNumerico("definir-contador", valor, this.valoresAceitos);
}
}

this.valor = valor;
}
Expand Down
2 changes: 1 addition & 1 deletion fontes/modificadores/estilo-lista.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ export class EstiloLista extends Modificador {

if (!valorVariavel) {
if (typeof valor === 'string' && valor.includes(" ")) {
validarAtribuicaoAbreviada("numérica", "estilo-lista", valor, this.valoresAceitos, valoresExtra);
validarAtribuicaoAbreviada("numérica", "estilo-lista", valor, this.valoresAceitos, valoresExtra, false, true);
} else {
validarValorNumerico("estilo-lista", valor, this.valoresAceitos, valoresExtra);
}
Expand Down
14 changes: 8 additions & 6 deletions fontes/modificadores/fim-coluna-em-grade.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { Modificador, PragmasModificador } from "./superclasse";
import { validarAtribuicaoAbreviada } from "./validacoes/atribuicao-abreviada";
import { validarValorNumerico } from "./validacoes/numerica";
import { proibirQuantificador } from "./validacoes/proibir-quantificador";

Expand All @@ -15,12 +16,13 @@ export class FimColunaEmGrade extends Modificador {
) {
super("fim-coluna-em-grade", "grid-column-end", pragmas);

if (!valorVariavel)
validarValorNumerico(
"fim-coluna-em-grade",
valor,
this.valoresAceitos,
);
if (!valorVariavel) {
if (valor.includes(" ")) {
validarAtribuicaoAbreviada("numérica", "fim-coluna-em-grade", valor, this.valoresAceitos, undefined, false, true);
} else {
validarValorNumerico("fim-coluna-em-grade", valor, this.valoresAceitos);
}
}

this.valor = valor;

Expand Down
14 changes: 8 additions & 6 deletions fontes/modificadores/fim-linha-em-grade.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { Modificador, PragmasModificador } from "./superclasse";
import { validarAtribuicaoAbreviada } from "./validacoes/atribuicao-abreviada";
import { validarValorNumerico } from "./validacoes/numerica";
import { proibirQuantificador } from "./validacoes/proibir-quantificador";

Expand All @@ -15,12 +16,13 @@ export class FimLinhaEmGrade extends Modificador {
) {
super("fim-linha-em-grade", "grid-row-end", pragmas);

if (!valorVariavel)
validarValorNumerico(
"fim-linha-em-grade",
valor,
this.valoresAceitos,
);
if (!valorVariavel) {
if (valor.includes(" ")) {
validarAtribuicaoAbreviada("numérica", "fim-linha-em-grade", valor, this.valoresAceitos, undefined, false, true);
} else {
validarValorNumerico("fim-linha-em-grade", valor, this.valoresAceitos);
}
}

this.valor = valor;

Expand Down
21 changes: 8 additions & 13 deletions fontes/modificadores/incrementar-contador.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { Modificador, PragmasModificador } from "./superclasse";
import { validarAtribuicaoAbreviada } from "./validacoes/atribuicao-abreviada";
import { validarValorNumerico } from "./validacoes/numerica";

export class IncrementarContador extends Modificador {
Expand All @@ -14,19 +15,13 @@ export class IncrementarContador extends Modificador {
) {
super("incrementar-contador", "counter-increment", pragmas);

// OBS.: A sintaxe desse modificador espera receber:
// 1. o NOME do contador (<custom-ident>);
// 2. um NÚMERO INTEIRO que represente a incrementação do contador.

// Ex.: incrementar-contador: meu-contador -4;

// A lógica abaixo cobre somente o recebimento de 'nenhum' e de números positivos.
if (!valorVariavel)
validarValorNumerico(
"incrementar-contador",
valor,
this.valoresAceitos,
);
if (!valorVariavel) {
if (valor.includes(" ")) {
validarAtribuicaoAbreviada("numérica", "incrementar-contador", valor, this.valoresAceitos, undefined, false, true);
} else {
validarValorNumerico("incrementar-contador", valor, this.valoresAceitos);
}
}

this.valor = valor;
}
Expand Down
11 changes: 6 additions & 5 deletions fontes/modificadores/inicio-coluna-em-grade.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { Modificador, PragmasModificador } from "./superclasse";
import { validarAtribuicaoAbreviada } from "./validacoes/atribuicao-abreviada";
import { validarValorNumerico } from "./validacoes/numerica";
import { proibirQuantificador } from "./validacoes/proibir-quantificador";

Expand All @@ -20,11 +21,11 @@ export class InicioColunaEmGrade extends Modificador {
);

if (!valorVariavel) {
validarValorNumerico(
"início-coluna-em-grade",
valor,
this.valoresAceitos,
);
if (valor.includes(" ")) {
validarAtribuicaoAbreviada("numérica", 'início-coluna-em-grade', valor, this.valoresAceitos, undefined, false, true);
} else {
validarValorNumerico("início-coluna-em-grade", valor, this.valoresAceitos);
}

proibirQuantificador("início-coluna-em-grade", quantificador);
}
Expand Down
11 changes: 6 additions & 5 deletions fontes/modificadores/inicio-linha-em-grade.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { Modificador, PragmasModificador } from "./superclasse";
import { validarAtribuicaoAbreviada } from "./validacoes/atribuicao-abreviada";
import { validarValorNumerico } from "./validacoes/numerica";
import { proibirQuantificador } from "./validacoes/proibir-quantificador";

Expand All @@ -20,11 +21,11 @@ export class InicioLinhaEmGrade extends Modificador {
);

if (!valorVariavel) {
validarValorNumerico(
"início-linha-em-grade",
valor,
this.valoresAceitos,
);
if (valor.includes(" ")) {
validarAtribuicaoAbreviada("numérica", 'início-linha-em-grade', valor, this.valoresAceitos, undefined, false, true);
} else {
validarValorNumerico("início-linha-em-grade", valor, this.valoresAceitos);
}

proibirQuantificador("início-linha-em-grade", quantificador);
}
Expand Down
4 changes: 2 additions & 2 deletions fontes/modificadores/linha-em-grade.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ export class LinhaEmGrade extends Modificador {
super("linha-em-grade", "grid-row", pragmas);

if (!valorVariavel) {
if (valor.includes(" ")) {
validarAtribuicaoAbreviada("numérica", "linha-em-grade", valor, this.valoresAceitos);
if (valor.includes(" ") || valor.includes("/")) {
validarAtribuicaoAbreviada("numérica", "linha-em-grade", valor, this.valoresAceitos, undefined, false, true);
} else {
validarValorNumerico("linha-em-grade", valor, this.valoresAceitos);
}
Expand Down
18 changes: 16 additions & 2 deletions fontes/modificadores/nome-animacao.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
import { valoresGlobais } from "./atributos/globais";
import { Modificador, PragmasModificador } from "./superclasse";
import { validarAtribuicaoAbreviada } from "./validacoes/atribuicao-abreviada";
import { validarValores } from "./validacoes/comum";
import { validarIdentificacaoPersonalizada } from "./validacoes/identificacao-personalizada";

export class NomeAnimacao extends Modificador {
valoresAceitos: { [valorFoles: string]: string } = {
Expand All @@ -14,8 +17,19 @@ export class NomeAnimacao extends Modificador {
) {
super(["nome-animacao", "nome-animação"], "animation-name", pragmas);

if (!valorVariavel)
validarValores("nome-animação", valor, this.valoresAceitos);
if (!valorVariavel) {
if (valor.includes(" ") || valor.includes(",")) {
validarAtribuicaoAbreviada("comum", "nome-animação", valor, this.valoresAceitos, undefined, false, true);
} else {
if (!(Object.keys(this.valoresAceitos).includes(valor)) && !(Object.keys(valoresGlobais).includes(valor))) {

validarIdentificacaoPersonalizada("nome-animação", valor);
this.valoresAceitos[valor] = valor;
}
validarValores("nome-animação", valor, this.valoresAceitos);
}
}

this.valor = valor;
}
}
10 changes: 8 additions & 2 deletions fontes/modificadores/propriedade-transicao.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { Modificador, PragmasModificador } from "./superclasse";
import { validarAtribuicaoAbreviada } from "./validacoes/atribuicao-abreviada";
import { validarValores } from "./validacoes/comum";

export class PropriedadeTransicao extends Modificador {
Expand All @@ -19,8 +20,13 @@ export class PropriedadeTransicao extends Modificador {
pragmas,
);

if (!valorVariavel)
validarValores("propriedade-transição", valor, this.valoresAceitos);
if (!valorVariavel) {
if (valor.includes(" ")) {
validarAtribuicaoAbreviada("comum", "propriedade-transição", valor, this.valoresAceitos, undefined, false, true);
} else {
validarValores("propriedade-transição", valor, this.valoresAceitos);
}
}

this.valor = valor;
}
Expand Down
4 changes: 2 additions & 2 deletions fontes/modificadores/tamanho-grade.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ export class TamanhoGrade extends Modificador {
super("tamanho-grade", "grid-area", pragmas);

if (!valorVariavel) {
if (valor.includes("/")) {
validarAtribuicaoAbreviada("numérica", "tamanho-grade", valor, this.valoresAceitos);
if (valor.includes("/") || valor.includes(" ")) {
validarAtribuicaoAbreviada("numérica", "tamanho-grade", valor, this.valoresAceitos, undefined, false, true);
} else {
validarValorNumerico("tamanho-grade", valor, this.valoresAceitos);
}
Expand Down
14 changes: 14 additions & 0 deletions fontes/modificadores/validacoes/atribuicao-abreviada.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { validarValores } from "./comum";
import { validarValoresAdicionais } from "./condicao-extra";
import { validarValorCor } from "./cor";
import { validarValorFonte } from "./fonte";
import { validarIdentificacaoPersonalizada } from "./identificacao-personalizada";
import { validarMultiplosQualitativos } from "./multiplos-qualitativos";
import { validarValorNumerico } from "./numerica";
import { validarValorString } from "./string";
Expand All @@ -13,6 +14,7 @@ export function validarAtribuicaoAbreviada(
valoresAceitos: { [valorFoles: string]: string } = undefined,
valoresExtra: any = undefined,
validacaoString: boolean = false,
validacaoPersonalizada: boolean = false,
): void {
let separarValores: Array<string>;

Expand All @@ -30,6 +32,18 @@ export function validarAtribuicaoAbreviada(
if (stringValida) valorIndividual = valorIndividual.replace(/^["']|["']$/g, '');
}

if (validacaoPersonalizada) {
if (
!(Object.keys(valoresAceitos).includes(valorIndividual))
&& typeof valorIndividual !== 'number'
&& !(Number(valorIndividual))
&& valorIndividual !== '0'
) {
validarIdentificacaoPersonalizada(nomePropriedade, valorIndividual);
valoresAceitos[valorIndividual] = valorIndividual;
}
}

switch (tipoValidacao) {
case "comum":
validarValores(nomePropriedade, valorIndividual, valoresAceitos, valoresExtra);
Expand Down
37 changes: 37 additions & 0 deletions fontes/modificadores/validacoes/identificacao-personalizada.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
export function validarIdentificacaoPersonalizada(
nomePropriedade: string,
valor: any,
): void {
// Regex para um identificador CSS válido
const validarIdentificador: RegExp = /^-?[_a-zA-Z][-_a-zA-Z0-9]*$/;

// Listagem de valores globais (não permitidos)
const valoresGlobais: Array<string> = [
'herdar',
'inicial',
'reverter',
'reverter-camada',
'desarmar',
];

// Validações de um valor <custom-indent> válido
const validacoesIdentificador = typeof valor === "string"
&& validarIdentificador.test(valor)
&& !(valoresGlobais.includes(valor))
&& !(valor.startsWith("--"));

// Retorna erro caso não passe nas validações acima
if (!(validacoesIdentificador)) {
throw new Error(`Propriedade '${nomePropriedade}' com valor personalizado ${valor} inválido.
O valor deve seguir as regras de sintaxe de uma identificação personalizada (<custom-indent>).`);
}
}

/**
Regras principais para um <custom-ident> válido:
- Não pode ser um valor global (herdar, inicial, reverter)
- Não pode começar com um dígito.
- Não pode começar com --.
- Pode conter letras, números, traços e sublinhados.
- Pode começar com - ou _.
*/
Loading