primocode 8.42.2 → 9.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +41 -37
- package/bin/primocode.js +598 -360
- package/lib/acervo.js +8 -1
- package/lib/act.js +205 -114
- package/lib/api.js +35 -4
- package/lib/boas-vindas.js +42 -195
- package/lib/catalogo.js +100 -61
- package/lib/config.js +1 -1
- package/lib/conta.js +3 -24
- package/lib/diff.js +161 -0
- package/lib/diretor.js +37 -47
- package/lib/entrada.js +576 -0
- package/lib/especialistas.js +2 -2
- package/lib/estudio/assets.js +343 -0
- package/lib/estudio/identidade.js +560 -0
- package/lib/estudio/index.js +565 -0
- package/lib/estudio/plano.js +327 -0
- package/lib/estudio/projeto.js +246 -0
- package/lib/estudio/remotion.js +644 -0
- package/lib/estudio/slides.js +190 -0
- package/lib/estudio/video.js +296 -0
- package/lib/fala.js +49 -6
- package/lib/marca.js +4 -1
- package/lib/markdown.js +376 -0
- package/lib/marketplace.js +189 -0
- package/lib/pasta.js +15 -4
- package/lib/permissao.js +137 -0
- package/lib/registro.js +229 -0
- package/lib/skills.js +329 -0
- package/lib/tools.js +106 -187
- package/lib/ui.js +7 -3
- package/lib/voz.js +239 -0
- package/package.json +12 -3
- package/skills/acessibilidade/SKILL.md +28 -0
- package/skills/api-que-nao-quebra/SKILL.md +27 -0
- package/skills/depurar-de-verdade/SKILL.md +29 -0
- package/skills/editar-meu-video/SKILL.md +59 -0
- package/skills/escrever-em-portugues/SKILL.md +28 -0
- package/skills/git-limpo/SKILL.md +28 -0
- package/skills/motion-de-primeira/SKILL.md +62 -0
- package/skills/pagina-que-converte/SKILL.md +28 -0
- package/skills/performance-web/SKILL.md +28 -0
- package/skills/revisao-antes-de-entregar/SKILL.md +27 -0
- package/skills/slides-que-prendem/SKILL.md +40 -0
- package/studio/edge.py +16 -66
- package/studio/narrar.py +274 -0
- package/studio/pessoa.py +199 -0
- package/voz/primo_voz/__init__.py +0 -0
- package/voz/primo_voz/__main__.py +383 -0
- package/voz/primo_voz/escuta.py +235 -0
- package/voz/primo_voz/orbe.py +216 -0
- package/lib/audio-livre.js +0 -177
- package/lib/chaves.js +0 -149
- package/lib/claude-engine.js +0 -631
- package/lib/codex-engine.js +0 -208
- package/lib/remotion.js +0 -663
- package/lib/studio.js +0 -960
- package/studio/PRIMOCODE.md +0 -58
- package/studio/README.md +0 -154
- package/studio/__pycache__/edge.cpython-311.pyc +0 -0
- package/studio/__pycache__/elevenlabs.cpython-311.pyc +0 -0
- package/studio/__pycache__/voz.cpython-311.pyc +0 -0
- package/studio/arquivos/corte-teste-de-camera-fb823.json +0 -57
- package/studio/ferramentas/00-protocolo.md +0 -125
- package/studio/ferramentas/01-modelos.md +0 -270
- package/studio/ferramentas/README.md +0 -32
- package/studio/ferramentas/corte.md +0 -919
- package/studio/ferramentas/grade.md +0 -92
- package/studio/ferramentas/prisma.md +0 -107
- package/studio/ferramentas/prosa.md +0 -86
- package/studio/ferramentas/tela.md +0 -93
- package/studio/ferramentas/traco.md +0 -79
- package/studio/server.py +0 -2254
- package/studio/studio.log +0 -57
- package/studio/voz.py +0 -388
- package/studio/web/analise.html +0 -52
- package/studio/web/core.css +0 -1167
- package/studio/web/fontes/bebas.woff2 +0 -0
- package/studio/web/fontes/grotesk-700.woff2 +0 -0
- package/studio/web/fontes/inter-400.woff2 +0 -0
- package/studio/web/fontes/inter-700.woff2 +0 -0
- package/studio/web/fontes/jetbrains-400.woff2 +0 -0
- package/studio/web/fontes/playfair-700.woff2 +0 -0
- package/studio/web/fontes.css +0 -23
- package/studio/web/home.html +0 -217
- package/studio/web/js/analise.js +0 -510
- package/studio/web/js/audio.js +0 -607
- package/studio/web/js/editor.js +0 -1802
- package/studio/web/js/exportar.js +0 -222
- package/studio/web/js/ferramentas.js +0 -108
- package/studio/web/js/icones.js +0 -120
- package/studio/web/js/midia.js +0 -157
- package/studio/web/js/narracao.js +0 -325
- package/studio/web/js/player.js +0 -903
- package/studio/web/js/render-grade.js +0 -243
- package/studio/web/js/render-prosa.js +0 -104
- package/studio/web/js/render.js +0 -1852
- package/studio/web/js/sfx.js +0 -233
- package/studio/web/js/video.js +0 -464
- package/studio/web/js/voz-neural.js +0 -152
- package/studio/web/render.css +0 -1352
- package/studio/web/tf.html +0 -15
- package/studio/web/tool.html +0 -78
- package/studio/web/view.html +0 -27
|
@@ -1,243 +0,0 @@
|
|
|
1
|
-
/* ==========================================================================
|
|
2
|
-
render-grade.js — desenha uma PLANILHA (ferramenta Grade) e resolve fórmulas.
|
|
3
|
-
doc = { tema, abas: [ {nome, colunas, linhas, formatos?, totais?, regras?} ] }
|
|
4
|
-
Fórmulas na célula: "=SOMA(A1:A9)", "=B2*1.2", "=MEDIA(C1:C4)"
|
|
5
|
-
========================================================================== */
|
|
6
|
-
|
|
7
|
-
function _soma(v) { return v.reduce(function (s, x) { return s + x; }, 0); }
|
|
8
|
-
|
|
9
|
-
var FUNCOES = {
|
|
10
|
-
SOMA: _soma,
|
|
11
|
-
MEDIA: function (v) { return v.length ? _soma(v) / v.length : 0; },
|
|
12
|
-
MIN: function (v) { return v.length ? Math.min.apply(null, v) : 0; },
|
|
13
|
-
MAX: function (v) { return v.length ? Math.max.apply(null, v) : 0; },
|
|
14
|
-
CONT: function (v) { return v.length; },
|
|
15
|
-
ARRED: function (v) { return v.length > 1 ? +(v[0]).toFixed(v[1]) : Math.round(v[0] || 0); },
|
|
16
|
-
ABS: function (v) { return Math.abs(v[0] || 0); },
|
|
17
|
-
RAIZ: function (v) { return Math.sqrt(Math.abs(v[0] || 0)); },
|
|
18
|
-
POT: function (v) { return Math.pow(v[0] || 0, v[1] || 2); },
|
|
19
|
-
TETO: function (v) { return Math.ceil(v[0] || 0); },
|
|
20
|
-
PISO: function (v) { return Math.floor(v[0] || 0); },
|
|
21
|
-
MEDIANA: function (v) {
|
|
22
|
-
if (!v.length) return 0;
|
|
23
|
-
var o = v.slice().sort(function (a, b) { return a - b; });
|
|
24
|
-
var m = Math.floor(o.length / 2);
|
|
25
|
-
return o.length % 2 ? o[m] : (o[m - 1] + o[m]) / 2;
|
|
26
|
-
},
|
|
27
|
-
MAIOR: function (v) {
|
|
28
|
-
var k = v.pop();
|
|
29
|
-
return v.sort(function (a, b) { return b - a; })[Math.max(0, (k || 1) - 1)] || 0;
|
|
30
|
-
},
|
|
31
|
-
MENOR: function (v) {
|
|
32
|
-
var k = v.pop();
|
|
33
|
-
return v.sort(function (a, b) { return a - b; })[Math.max(0, (k || 1) - 1)] || 0;
|
|
34
|
-
},
|
|
35
|
-
SE: function (v) { return v[0] ? (v[1] != null ? v[1] : 1) : (v[2] != null ? v[2] : 0); },
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
/* Compara valores de uma faixa com um critério tipo ">100" ou "<>0". */
|
|
39
|
-
function _criterio(texto) {
|
|
40
|
-
var m = String(texto).trim().replace(/^["']|["']$/g, "").match(/^(<=|>=|<>|!=|<|>|=)?\s*(-?[\d.,]+)$/);
|
|
41
|
-
if (!m) return function () { return false; };
|
|
42
|
-
var op = m[1] || "=", alvo = parseFloat(m[2].replace(",", "."));
|
|
43
|
-
return function (x) {
|
|
44
|
-
switch (op) {
|
|
45
|
-
case ">": return x > alvo;
|
|
46
|
-
case "<": return x < alvo;
|
|
47
|
-
case ">=": return x >= alvo;
|
|
48
|
-
case "<=": return x <= alvo;
|
|
49
|
-
case "<>": case "!=": return x !== alvo;
|
|
50
|
-
default: return x === alvo;
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
function _colParaIndice(letras) {
|
|
56
|
-
var n = 0;
|
|
57
|
-
for (var i = 0; i < letras.length; i++) n = n * 26 + (letras.charCodeAt(i) - 64);
|
|
58
|
-
return n - 1;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
function _numero(v) {
|
|
62
|
-
if (typeof v === "number") return v;
|
|
63
|
-
if (v == null || v === "") return 0;
|
|
64
|
-
var s = String(v).replace(/[R$\s%.]/g, "").replace(",", ".");
|
|
65
|
-
var n = parseFloat(s);
|
|
66
|
-
return isNaN(n) ? 0 : n;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/* Resolve todas as fórmulas de uma aba. Retorna matriz de valores calculados. */
|
|
70
|
-
function calcular(aba) {
|
|
71
|
-
var linhas = (aba.linhas || []).map(function (l) { return l.slice(); });
|
|
72
|
-
var cache = {};
|
|
73
|
-
|
|
74
|
-
function valorCelula(col, lin, profundidade) {
|
|
75
|
-
var chave = col + ":" + lin;
|
|
76
|
-
if (cache[chave] !== undefined) return cache[chave];
|
|
77
|
-
if (profundidade > 24) return 0;
|
|
78
|
-
var bruto = (linhas[lin] || [])[col];
|
|
79
|
-
var v;
|
|
80
|
-
if (typeof bruto === "string" && bruto.charAt(0) === "=") {
|
|
81
|
-
v = avaliar(bruto.slice(1), profundidade + 1);
|
|
82
|
-
} else {
|
|
83
|
-
v = bruto;
|
|
84
|
-
}
|
|
85
|
-
cache[chave] = v;
|
|
86
|
-
return v;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
function faixa(ref, profundidade) {
|
|
90
|
-
var m = ref.match(/^([A-Z]+)(\d+):([A-Z]+)(\d+)$/);
|
|
91
|
-
if (!m) return [];
|
|
92
|
-
var c1 = _colParaIndice(m[1]), l1 = +m[2] - 1;
|
|
93
|
-
var c2 = _colParaIndice(m[3]), l2 = +m[4] - 1;
|
|
94
|
-
var fora = [];
|
|
95
|
-
for (var l = Math.min(l1, l2); l <= Math.max(l1, l2); l++) {
|
|
96
|
-
for (var c = Math.min(c1, c2); c <= Math.max(c1, c2); c++) {
|
|
97
|
-
fora.push(_numero(valorCelula(c, l, profundidade)));
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
return fora;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
function avaliar(expr, profundidade) {
|
|
104
|
-
var e = expr;
|
|
105
|
-
|
|
106
|
-
// funções: NOME(faixa ou lista)
|
|
107
|
-
// repete até esgotar: resolve de dentro para fora em fórmula aninhada
|
|
108
|
-
var voltas = 0;
|
|
109
|
-
while (/[A-ZÇ]+\(/.test(e) && voltas++ < 12) {
|
|
110
|
-
e = umaVolta(e);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
function umaVolta(expr) {
|
|
114
|
-
return expr.replace(/([A-ZÇ]+)\(([^()]*)\)/g, function (_, nome, args) {
|
|
115
|
-
var partes = args.split(";").map(function (p) { return p.trim(); });
|
|
116
|
-
|
|
117
|
-
// SOMASE(faixa; critério) e CONTSE(faixa; critério)
|
|
118
|
-
if (nome === "SOMASE" || nome === "CONTSE") {
|
|
119
|
-
var vals0 = /^[A-Z]+\d+:[A-Z]+\d+$/.test(partes[0]) ? faixa(partes[0], profundidade) : [];
|
|
120
|
-
var testa = _criterio(partes[1] || "");
|
|
121
|
-
var passou = vals0.filter(testa);
|
|
122
|
-
return String(nome === "SOMASE" ? _soma(passou) : passou.length);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
var fn = FUNCOES[nome];
|
|
126
|
-
if (!fn) return "0";
|
|
127
|
-
var vals = [];
|
|
128
|
-
partes.forEach(function (parte) {
|
|
129
|
-
if (/^[A-Z]+\d+:[A-Z]+\d+$/.test(parte)) vals = vals.concat(faixa(parte, profundidade));
|
|
130
|
-
// qualquer outro argumento é uma expressão: resolve antes de somar
|
|
131
|
-
else if (parte !== "") vals.push(_numero(avaliar(parte, profundidade)));
|
|
132
|
-
});
|
|
133
|
-
return String(fn(vals));
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
// referências soltas: A1
|
|
138
|
-
e = e.replace(/\b([A-Z]+)(\d+)\b/g, function (todo) {
|
|
139
|
-
return String(_numero(refCelula(todo, profundidade)));
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
// comparações são permitidas para o SE funcionar
|
|
143
|
-
if (!/^[-+*/().\d\s,<>=!]*$/.test(e)) return "#ERRO";
|
|
144
|
-
try {
|
|
145
|
-
var pronto = e.replace(/,/g, ".")
|
|
146
|
-
.replace(/<>/g, "!==")
|
|
147
|
-
.replace(/([^<>!=])=(?!=)/g, "$1===") || "0";
|
|
148
|
-
var r = Function('"use strict";return (' + pronto + ")")();
|
|
149
|
-
if (typeof r === "boolean") return r ? 1 : 0;
|
|
150
|
-
return typeof r === "number" && isFinite(r) ? r : "#ERRO";
|
|
151
|
-
} catch (_) {
|
|
152
|
-
return "#ERRO";
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
function refCelula(ref, profundidade) {
|
|
157
|
-
var m = ref.match(/^([A-Z]+)(\d+)$/);
|
|
158
|
-
if (!m) return 0;
|
|
159
|
-
return valorCelula(_colParaIndice(m[1]), +m[2] - 1, profundidade);
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
return linhas.map(function (linha, li) {
|
|
163
|
-
return linha.map(function (_, ci) { return valorCelula(ci, li, 0); });
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
function formatar(valor, formato) {
|
|
168
|
-
if (valor == null || valor === "") return "";
|
|
169
|
-
if (!formato) return String(valor);
|
|
170
|
-
var n = _numero(valor);
|
|
171
|
-
if (formato === "moeda") return "R$ " + n.toLocaleString("pt-BR", { minimumFractionDigits: 2, maximumFractionDigits: 2 });
|
|
172
|
-
if (formato === "percentual") return n.toLocaleString("pt-BR", { maximumFractionDigits: 1 }) + "%";
|
|
173
|
-
if (formato === "inteiro") return Math.round(n).toLocaleString("pt-BR");
|
|
174
|
-
if (formato === "decimal") return n.toLocaleString("pt-BR", { minimumFractionDigits: 2, maximumFractionDigits: 2 });
|
|
175
|
-
return String(valor);
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
function renderGrade(doc, op) {
|
|
179
|
-
op = op || {};
|
|
180
|
-
var aba = (doc.abas || [])[op.aba || 0] || { colunas: [], linhas: [] };
|
|
181
|
-
var calculadas = calcular(aba);
|
|
182
|
-
var formatos = aba.formatos || {};
|
|
183
|
-
var regras = aba.regras || [];
|
|
184
|
-
|
|
185
|
-
var no = document.createElement("div");
|
|
186
|
-
no.className = "planilha";
|
|
187
|
-
no.setAttribute("data-tema", doc.tema || "claro");
|
|
188
|
-
|
|
189
|
-
var colunas = aba.colunas || [];
|
|
190
|
-
var h = ["<table><thead><tr><th></th>"];
|
|
191
|
-
colunas.forEach(function (c, i) {
|
|
192
|
-
h.push("<th>" + String.fromCharCode(65 + i) + " · " + _pFugir(c) + "</th>");
|
|
193
|
-
});
|
|
194
|
-
h.push("</tr></thead><tbody>");
|
|
195
|
-
|
|
196
|
-
(aba.linhas || []).forEach(function (linha, li) {
|
|
197
|
-
h.push("<tr><th>" + (li + 1) + "</th>");
|
|
198
|
-
colunas.forEach(function (nomeCol, ci) {
|
|
199
|
-
var calc = (calculadas[li] || [])[ci];
|
|
200
|
-
var bruto = linha[ci];
|
|
201
|
-
var fmt = formatos[nomeCol] || formatos[String.fromCharCode(65 + ci)];
|
|
202
|
-
var ehNum = typeof calc === "number" || (fmt && fmt !== "texto");
|
|
203
|
-
var cls = [];
|
|
204
|
-
if (ehNum) cls.push("num");
|
|
205
|
-
if (typeof bruto === "string" && bruto.charAt(0) === "=") cls.push("total");
|
|
206
|
-
|
|
207
|
-
regras.forEach(function (r) {
|
|
208
|
-
if (r.coluna !== nomeCol) return;
|
|
209
|
-
var v = _numero(calc);
|
|
210
|
-
if (r.acima != null && v > r.acima) cls.push("alto");
|
|
211
|
-
if (r.abaixo != null && v < r.abaixo) cls.push("baixo");
|
|
212
|
-
});
|
|
213
|
-
|
|
214
|
-
h.push('<td class="' + cls.join(" ") + '" data-l="' + li + '" data-c="' + ci + '">' +
|
|
215
|
-
_pFugir(formatar(calc, fmt)) + "</td>");
|
|
216
|
-
});
|
|
217
|
-
h.push("</tr>");
|
|
218
|
-
});
|
|
219
|
-
|
|
220
|
-
h.push("</tbody></table>");
|
|
221
|
-
no.innerHTML = h.join("");
|
|
222
|
-
|
|
223
|
-
if (aba.grafico) {
|
|
224
|
-
var dados = (aba.linhas || []).map(function (l, li) {
|
|
225
|
-
var ci = colunas.indexOf(aba.grafico.valor);
|
|
226
|
-
var ri = colunas.indexOf(aba.grafico.rotulo);
|
|
227
|
-
return [l[ri >= 0 ? ri : 0], _numero((calculadas[li] || [])[ci >= 0 ? ci : 1])];
|
|
228
|
-
}).filter(function (d) { return d[0] != null && String(d[0]).charAt(0) !== "="; });
|
|
229
|
-
|
|
230
|
-
var cx = document.createElement("div");
|
|
231
|
-
cx.className = "cena";
|
|
232
|
-
cx.setAttribute("data-tema", doc.tema || "claro");
|
|
233
|
-
cx.style.cssText = "width:100%;height:340px;margin-top:18px;border-radius:12px;padding:10px";
|
|
234
|
-
cx.innerHTML = svgGrafico({ grafico: aba.grafico.tipo || "barras", dados: dados }, 900, 320);
|
|
235
|
-
no.appendChild(cx);
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
return no;
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
if (typeof module !== "undefined" && module.exports) {
|
|
242
|
-
module.exports = { renderGrade: renderGrade, calcular: calcular, formatar: formatar };
|
|
243
|
-
}
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
/* ==========================================================================
|
|
2
|
-
render-prosa.js — desenha um DOCUMENTO (ferramenta Prosa).
|
|
3
|
-
doc = { tema, capa?, blocos: [ {tipo, ...} ] }
|
|
4
|
-
========================================================================== */
|
|
5
|
-
|
|
6
|
-
function _pFugir(s) {
|
|
7
|
-
return String(s == null ? "" : s).replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
function _pRico(s) {
|
|
11
|
-
return _pFugir(s)
|
|
12
|
-
.replace(/\*\*([^*]+)\*\*/g, "<strong>$1</strong>")
|
|
13
|
-
.replace(/(^|[^*])\*([^*\n]+)\*/g, "$1<em>$2</em>")
|
|
14
|
-
.replace(/`([^`]+)`/g, "<code>$1</code>")
|
|
15
|
-
.replace(/\[([^\]]+)\]\(([^)\s]+)\)/g, '<a href="$2">$1</a>');
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
function renderProsa(doc, op) {
|
|
19
|
-
op = op || {};
|
|
20
|
-
var folha = document.createElement("div");
|
|
21
|
-
folha.className = "folha-doc";
|
|
22
|
-
folha.setAttribute("data-tema", doc.tema || "papel");
|
|
23
|
-
if (doc.largura) folha.style.width = doc.largura + "px";
|
|
24
|
-
|
|
25
|
-
var h = [];
|
|
26
|
-
|
|
27
|
-
if (doc.capa) {
|
|
28
|
-
var c = doc.capa;
|
|
29
|
-
h.push('<div class="capa-doc" style="min-height:520px;display:flex;flex-direction:column;justify-content:center;gap:10px">');
|
|
30
|
-
if (c.chapeu) h.push('<div class="chapeu-doc">' + _pFugir(c.chapeu) + "</div>");
|
|
31
|
-
if (c.titulo) h.push("<h1>" + _pRico(c.titulo) + "</h1>");
|
|
32
|
-
if (c.apoio) h.push('<p class="apoio">' + _pRico(c.apoio) + "</p>");
|
|
33
|
-
if (c.autor || c.data) {
|
|
34
|
-
h.push('<p class="apoio" style="font-size:14px;margin-top:20px">' +
|
|
35
|
-
_pFugir([c.autor, c.data].filter(Boolean).join(" · ")) + "</p>");
|
|
36
|
-
}
|
|
37
|
-
h.push("</div><hr>");
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
var indice = [];
|
|
41
|
-
(doc.blocos || []).forEach(function (b, i) {
|
|
42
|
-
if (b.tipo === "secao") indice.push({ i: i, texto: b.texto });
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
(doc.blocos || []).forEach(function (b) {
|
|
46
|
-
var t = b.tipo || "paragrafo";
|
|
47
|
-
var texto = b.texto || "";
|
|
48
|
-
|
|
49
|
-
switch (t) {
|
|
50
|
-
case "titulo": h.push("<h1>" + _pRico(texto) + "</h1>"); break;
|
|
51
|
-
case "chapeu": h.push('<div class="chapeu-doc">' + _pFugir(texto) + "</div>"); break;
|
|
52
|
-
case "apoio": h.push('<p class="apoio">' + _pRico(texto) + "</p>"); break;
|
|
53
|
-
case "secao": h.push("<h2>" + _pRico(texto) + "</h2>"); break;
|
|
54
|
-
case "subsecao": h.push("<h3>" + _pRico(texto) + "</h3>"); break;
|
|
55
|
-
case "citacao":
|
|
56
|
-
h.push("<blockquote>" + _pRico(texto) +
|
|
57
|
-
(b.autor ? '<div style="font-size:13px;margin-top:8px">— ' + _pFugir(b.autor) + "</div>" : "") +
|
|
58
|
-
"</blockquote>");
|
|
59
|
-
break;
|
|
60
|
-
case "lista":
|
|
61
|
-
h.push("<ul>" + (b.itens || []).map(function (i) { return "<li>" + _pRico(i) + "</li>"; }).join("") + "</ul>");
|
|
62
|
-
break;
|
|
63
|
-
case "numerada":
|
|
64
|
-
h.push("<ol>" + (b.itens || []).map(function (i) { return "<li>" + _pRico(i) + "</li>"; }).join("") + "</ol>");
|
|
65
|
-
break;
|
|
66
|
-
case "codigo":
|
|
67
|
-
h.push("<pre>" + _pFugir(texto) + "</pre>");
|
|
68
|
-
break;
|
|
69
|
-
case "tabela": {
|
|
70
|
-
var linhas = b.linhas || [];
|
|
71
|
-
var tab = "<table>";
|
|
72
|
-
linhas.forEach(function (l, i) {
|
|
73
|
-
tab += "<tr>" + l.map(function (cel) {
|
|
74
|
-
return i === 0 ? "<th>" + _pFugir(cel) + "</th>" : "<td>" + _pRico(cel) + "</td>";
|
|
75
|
-
}).join("") + "</tr>";
|
|
76
|
-
});
|
|
77
|
-
h.push(tab + "</table>");
|
|
78
|
-
break;
|
|
79
|
-
}
|
|
80
|
-
case "imagem":
|
|
81
|
-
h.push("<figure><img src=\"" + _pFugir(b.src) + "\" alt=\"" + _pFugir(b.alt || "") + "\">" +
|
|
82
|
-
(b.legenda ? "<figcaption>" + _pRico(b.legenda) + "</figcaption>" : "") + "</figure>");
|
|
83
|
-
break;
|
|
84
|
-
case "destaque":
|
|
85
|
-
h.push('<div style="background:var(--c-cartao);border:1px solid var(--c-linha);' +
|
|
86
|
-
'border-left:3px solid var(--c-tom);border-radius:10px;padding:16px 20px">' +
|
|
87
|
-
(b.titulo ? "<strong>" + _pFugir(b.titulo) + "</strong><br>" : "") +
|
|
88
|
-
_pRico(texto) + "</div>");
|
|
89
|
-
break;
|
|
90
|
-
case "sumario":
|
|
91
|
-
h.push("<h2>" + _pFugir(texto || "Sumário") + "</h2><ol>" +
|
|
92
|
-
indice.map(function (s) { return "<li>" + _pFugir(s.texto) + "</li>"; }).join("") + "</ol>");
|
|
93
|
-
break;
|
|
94
|
-
case "divisor": h.push("<hr>"); break;
|
|
95
|
-
case "quebra": h.push('<div style="break-after:page;page-break-after:always;height:1px"></div>'); break;
|
|
96
|
-
default: h.push("<p>" + _pRico(texto) + "</p>");
|
|
97
|
-
}
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
folha.innerHTML = h.join("\n");
|
|
101
|
-
return folha;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
if (typeof module !== "undefined" && module.exports) module.exports = { renderProsa: renderProsa };
|