-
Notifications
You must be signed in to change notification settings - Fork 4
Retoma pendências da Issue 103 sobre atribuição de valores específicos #186
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
Changes from all commits
8aab0cd
fa05647
0c963e9
3d63609
85ffcda
8d8a728
bff0f31
e6c06e5
27587d4
9db4ee7
f65bdf4
deea15d
dd5bb8a
c217bff
95101d6
87d407a
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -30,4 +30,4 @@ | |
|
|
||
| lmht { | ||
| cor-fundo: hsl(50, 80%, 80%); | ||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,15 @@ | ||
| lmht { | ||
| recursos-fonte: "c2sc", "hist"; | ||
| } | ||
|
|
||
| lmht { | ||
| eventos-ponteiro: delimitarCaixa; | ||
| } | ||
|
|
||
| lmht { | ||
| espacamento-letras: .2rem; | ||
| } | ||
|
|
||
| lmht { | ||
| fonte-texto: "Times New Roman", sans-serifa; | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,15 @@ | ||
| export const fontes: { [nomeFoles: string]: string } = { | ||
| // Fontes (family font name) | ||
| Arial: "Arial", | ||
| "Brush Script MT": "Brush Script MT", | ||
| "Courier New": "Courier New", | ||
| Garamond: "Garamond", | ||
| "Gill Sans Extrabold": "Gill Sans Extrabold", | ||
| Georgia: "Georgia", | ||
| Helvetica: "Helvetica", | ||
| "Lucida Console": "Lucida Console", | ||
| Tahoma: "Tahoma", | ||
| "Trebuchet MS": "Trebuchet MS", | ||
| "Times New Roman": "Times New Roman", | ||
| Verdana: "Verdana", | ||
| }; |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,21 @@ | ||
| import { fontes } from "../atributos/fontes"; | ||
| import { valoresGlobais } from "../atributos/globais"; | ||
|
|
||
| export function validarValorFonte( | ||
| nomePropriedade: string, | ||
| valor: any, | ||
| valoresAceitos: { [valorFoles: string]: string }, | ||
| valoresExtra?: any, | ||
| ) { | ||
| if ( | ||
| !(valor in fontes) && | ||
| !(valor in valoresAceitos) && | ||
| !(valor in valoresGlobais) | ||
| ) { | ||
| throw new Error(`Propriedade '${nomePropriedade}' com valor ${valor} inválido. Valores aceitos: | ||
| ${Object.keys(fontes).reduce((final, atual) => (final += `, ${atual}`))}, | ||
|
Check warning on line 16 in fontes/modificadores/validacoes/fonte.ts
|
||
| ${Object.keys(valoresAceitos).reduce((final, atual) => (final += `, ${atual}`))}, | ||
|
Check warning on line 17 in fontes/modificadores/validacoes/fonte.ts
|
||
| ${Object.keys(valoresGlobais).reduce((final, atual) => (final += `, ${atual}`))}. | ||
|
Check warning on line 18 in fontes/modificadores/validacoes/fonte.ts
|
||
| `); | ||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -8,6 +8,7 @@ import estruturasHtml from "../tradutores/estruturas-html"; | |
| import { DeclaracaoVariavel } from "../declaracoes/declaracao-variavel"; | ||
| import { Declaracao } from "../declaracoes/declaracao"; | ||
| import { SeletorModificador } from "../modificadores/superclasse"; | ||
| import { fontes } from "../modificadores/atributos/fontes"; | ||
|
|
||
| /** | ||
| * A classe que efetivamente traduz FolEs para CSS. | ||
|
|
@@ -31,9 +32,8 @@ export class Serializador { | |
| ): string { | ||
| // Caso 1: Número-Quantificador ou somente Número. | ||
| if (Number(modificador.valor) || modificador.valor === "0") { | ||
| return `${" ".repeat(indentacao)}${modificador.propriedadeCss}: ${ | ||
| modificador.valor | ||
| }${modificador.quantificador || ""};\n`; | ||
| return `${" ".repeat(indentacao)}${modificador.propriedadeCss}: ${modificador.valor | ||
| }${modificador.quantificador || ""};\n`; | ||
| } | ||
|
|
||
| // Caso 2: Tradução do valor contida no objeto 'valoresAceitos'. | ||
|
|
@@ -43,19 +43,46 @@ export class Serializador { | |
| ) { | ||
| const objetoValores = modificador["valoresAceitos"]; | ||
| const valorTraduzido = objetoValores[modificador.valor]; | ||
| return `${" ".repeat(indentacao)}${ | ||
| modificador.propriedadeCss | ||
| }: ${valorTraduzido};\n`; | ||
| return `${" ".repeat(indentacao)}${modificador.propriedadeCss | ||
| }: ${valorTraduzido};\n`; | ||
| } | ||
|
|
||
| // Caso 3: Valor é RGB, RGBA, HSL, HSLA ou HEX, ou seja, um método. | ||
| if (modificador.valor instanceof Metodo) { | ||
| return `${" ".repeat(indentacao)}${modificador.propriedadeCss}: ${ | ||
| modificador.valor.paraTexto() || "" | ||
| };\n`; | ||
| return `${" ".repeat(indentacao)}${modificador.propriedadeCss}: ${modificador.valor.paraTexto() || "" | ||
| };\n`; | ||
| } | ||
|
|
||
| // Caso 4: Atribuição Abreviada | Múltiplos valores separados por espaço, vírgula ou barra | ||
| // Caso 4: Valor com aspas - como as fontes de texto. | ||
| if (modificador.valor.includes('"')) { | ||
| if (modificador.valor.includes(",")) { | ||
| const separarValores = modificador.valor.split(", "); | ||
| const valorSemAspas = separarValores[0].replace(/["']/g, ''); | ||
|
|
||
| // Trecho específico para tratamento de fontes com grafia | ||
| if (Object.keys(fontes).includes(valorSemAspas)) { | ||
| let unirValores = ''; | ||
| separarValores.forEach((valorIndividual) => { | ||
| if ( | ||
| modificador["valoresAceitos"] !== undefined && | ||
| modificador["valoresAceitos"].hasOwnProperty(valorIndividual) | ||
| ) { | ||
| const objetoValores = modificador["valoresAceitos"]; | ||
| const valorTraduzido = objetoValores[valorIndividual]; | ||
| separarValores[1] = valorTraduzido; | ||
| unirValores = separarValores.join(", "); | ||
| } | ||
| }); | ||
| return `${" ".repeat(indentacao)}${modificador.propriedadeCss}: ${unirValores};\n`; | ||
| } else { | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Via de regra: quando há |
||
| return `${" ".repeat(indentacao)}${modificador.propriedadeCss}: ${modificador.valor};\n`; | ||
| } | ||
| } else { | ||
| return `${" ".repeat(indentacao)}${modificador.propriedadeCss}: ${modificador.valor};\n`; | ||
| } | ||
| } | ||
|
|
||
| // Caso 5: Atribuição Abreviada | Múltiplos valores separados por espaço, vírgula ou barra | ||
| if (modificador.valor.includes(" ")) { | ||
| if (modificador.valor.includes(",")) { | ||
| const separarValores: Array<string> = | ||
|
|
@@ -80,26 +107,21 @@ export class Serializador { | |
| ); | ||
|
|
||
| if (valoresTraduzidos.length !== 0) { | ||
| return `${" ".repeat(indentacao)}${modificador.propriedadeCss}: ${ | ||
| valoresTraduzidos | ||
| };\n`; | ||
| return `${" ".repeat(indentacao)}${modificador.propriedadeCss}: ${valoresTraduzidos | ||
| };\n`; | ||
| } else { | ||
| return `${" ".repeat(indentacao)}${modificador.propriedadeCss}: ${ | ||
| modificador.valor | ||
| };\n`; | ||
| return `${" ".repeat(indentacao)}${modificador.propriedadeCss}: ${modificador.valor | ||
| };\n`; | ||
| } | ||
| } | ||
|
|
||
| return `${" ".repeat(indentacao)}${modificador.propriedadeCss}: ${ | ||
| modificador.valor | ||
| };\n`; | ||
| return `${" ".repeat(indentacao)}${modificador.propriedadeCss}: ${modificador.valor | ||
| };\n`; | ||
| } | ||
|
|
||
| // Caso 5: É um valor genérico, cuja tradução está na lista 'valoresGerais'. | ||
| // Caso 6: É um valor genérico, cuja tradução está na lista 'valoresGerais'. | ||
| const valorTraduzido = valoresGerais[modificador.valor]; | ||
| return `${" ".repeat(indentacao)}${ | ||
| modificador.propriedadeCss | ||
| }: ${valorTraduzido};\n`; | ||
| return `${" ".repeat(indentacao)}${modificador.propriedadeCss}: ${valorTraduzido};\n`; | ||
| } | ||
|
|
||
| serializarBlocoDeclaracao( | ||
|
|
@@ -193,7 +215,7 @@ export class Serializador { | |
| validarValoresVariaveis(declaracao: BlocoDeclaracao): void { | ||
| const nomeFolEs = | ||
| declaracao.modificadores[0].nomeFoles.length > 1 && | ||
| typeof declaracao.modificadores[0].nomeFoles === "object" | ||
| typeof declaracao.modificadores[0].nomeFoles === "object" | ||
| ? declaracao.modificadores[0].nomeFoles[0].toString() | ||
| : declaracao.modificadores[0].nomeFoles.toString(); | ||
|
|
||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Estou pensando em não mimetizar esse padrão
camelCasemais futuramente. Me parece que foi algo definido apressadamente no próprio padrão do CSS, mas não é algo que pretendo manter em FolEs. Por ora, deixamos assim.