-
Notifications
You must be signed in to change notification settings - Fork 2
/
tradutor-reverso.ts
96 lines (80 loc) · 3.32 KB
/
tradutor-reverso.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import { Declaracao } from "../declaracoes";
import { Estrutura } from "../estruturas/estrutura";
import { SeletorEstruturasHtml } from "../estruturas/seletor-estruturas-html";
import { SeletorEstruturasLmht } from "../estruturas/seletor-estruturas-lmht";
import { Modificador } from "../modificadores";
import { PragmasModificador, SeletorModificador } from "../modificadores/superclasse";
import { PragmasSeletor, Seletor, SeletorEstrutura } from "../seletores";
import { Metodo } from "../valores/metodos/metodo";
import estruturasLmht from "./estruturas-lmht";
export class TradutorReverso {
linha: number;
atual: number;
constructor() {
this.linha = 1;
this.atual = 1;
}
private calcularPragmasModificador(modificador: Modificador) {
const novosPragmasModificador: PragmasModificador = {
linha: this.linha,
colunaInicial: this.atual,
colunaFinal: this.atual
}
this.atual += modificador.propriedadeCss.length;
novosPragmasModificador.colunaFinal = this.atual;
return novosPragmasModificador;
}
private calcularPragmasSeletor(traducaoSeletor: string) {
const novosPragmasSeletor: PragmasSeletor = {
linha: this.linha,
colunaInicial: this.atual,
colunaFinal: this.atual
}
this.atual += traducaoSeletor.length;
novosPragmasSeletor.colunaFinal = this.atual;
return novosPragmasSeletor;
}
private traduzirSeletorEstrutura(seletor: SeletorEstrutura): Seletor {
const estruturaHtml = seletor.estrutura.tagHtml;
const novosPragmasSeletor = this.calcularPragmasSeletor(estruturaHtml);
return new SeletorEstruturasHtml(
estruturaHtml,
novosPragmasSeletor
) as Seletor;
}
traduzir(declaracoes: Declaracao[]): Declaracao[] {
this.linha = 1;
this.atual = 1;
const declaracoesTraduzidas = [];
for (const declaracao of declaracoes) {
const seletoresTraduzidos: Seletor[] = [];
const modificadoresTraduzidos: Modificador[] = [];
for (const seletor of declaracao.seletores) {
this.linha = seletor.pragmas.linha;
if (seletor instanceof SeletorEstrutura) {
seletoresTraduzidos.push(this.traduzirSeletorEstrutura(seletor));
continue;
}
}
for (const modificador of declaracao.modificadores) {
this.linha = modificador.pragmas.linha;
modificadoresTraduzidos.push(
new SeletorModificador(
Array.isArray(modificador.nomeFoles) ? modificador.nomeFoles[0] : modificador.nomeFoles,
modificador.valor instanceof Metodo ? modificador.valor.paraTexto() : modificador.valor,
modificador.quantificador,
this.calcularPragmasModificador(modificador)
) as Modificador
);
}
declaracoesTraduzidas.push(
new Declaracao(
seletoresTraduzidos,
modificadoresTraduzidos,
[]
)
)
}
return declaracoesTraduzidas;
}
}