execonvert 0.4.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/CHANGELOG.md +79 -0
- package/README.md +194 -0
- package/THIRD_PARTY_NOTICES.md +42 -0
- package/bin/execonvert.js +21 -0
- package/dist/cli/app/public/THIRD_PARTY_NOTICES.md +32 -0
- package/dist/cli/app/public/base.elpx +0 -0
- package/dist/cli/app/public/exe_math_assets.zip +0 -0
- package/dist/cli/app/public/exelearning/app/common/common_i18n.js +79 -0
- package/dist/cli/app/public/exelearning/app/common/exe_powered_logo/exe_powered_logo.png +0 -0
- package/dist/cli/app/public/exelearning/app/common/i18n/common_i18n.ca.js +79 -0
- package/dist/cli/app/public/exelearning/app/common/i18n/common_i18n.de.js +79 -0
- package/dist/cli/app/public/exelearning/app/common/i18n/common_i18n.en.js +79 -0
- package/dist/cli/app/public/exelearning/app/common/i18n/common_i18n.eo.js +79 -0
- package/dist/cli/app/public/exelearning/app/common/i18n/common_i18n.es.js +79 -0
- package/dist/cli/app/public/exelearning/app/common/i18n/common_i18n.eu.js +79 -0
- package/dist/cli/app/public/exelearning/app/common/i18n/common_i18n.gl.js +79 -0
- package/dist/cli/app/public/exelearning/app/common/i18n/common_i18n.it.js +79 -0
- package/dist/cli/app/public/exelearning/app/common/i18n/common_i18n.pt.js +79 -0
- package/dist/cli/app/public/exelearning/app/common/i18n/common_i18n.ro.js +79 -0
- package/dist/cli/app/public/exelearning/app/common/i18n/common_i18n.va.js +79 -0
- package/dist/cli/app/public/exelearning/bundles/common.zip +0 -0
- package/dist/cli/app/public/exelearning/bundles/content-css.zip +0 -0
- package/dist/cli/app/public/exelearning/bundles/idevices.zip +0 -0
- package/dist/cli/app/public/exelearning/bundles/libs.zip +0 -0
- package/dist/cli/app/public/exelearning/bundles/manifest.json +110 -0
- package/dist/cli/app/public/exelearning/bundles/themes/base.zip +0 -0
- package/dist/cli/app/public/exelearning/bundles/themes/flux.zip +0 -0
- package/dist/cli/app/public/exelearning/bundles/themes/neo.zip +0 -0
- package/dist/cli/app/public/exelearning/bundles/themes/nova.zip +0 -0
- package/dist/cli/app/public/exelearning/bundles/themes/universal.zip +0 -0
- package/dist/cli/app/public/exelearning/bundles/themes/zen.zip +0 -0
- package/dist/cli/app/public/exelearning/exporters.bundle.js +12638 -0
- package/dist/cli/app/public/exelearning/importers.bundle.js +14061 -0
- package/dist/cli/app/public/exelearning/runtime-source.json +10 -0
- package/dist/cli/app/public/favicon.svg +11 -0
- package/dist/cli/app/public/idevices/text/text.css +16 -0
- package/dist/cli/app/public/idevices/text/text.html +3 -0
- package/dist/cli/app/public/idevices/text/text.js +291 -0
- package/dist/cli/app/public/info/cli.html +955 -0
- package/dist/cli/app/public/info/docx.svg +7 -0
- package/dist/cli/app/public/info/elpx-icon.png +0 -0
- package/dist/cli/app/public/info/exe-old.png +0 -0
- package/dist/cli/app/public/info/execonvert-cli-icon.svg +16 -0
- package/dist/cli/app/public/info/execonvert-icon.svg +11 -0
- package/dist/cli/app/public/info/index.html +723 -0
- package/dist/cli/app/public/info/markdown.svg +1 -0
- package/dist/cli/app/public/info/pdf.svg +14 -0
- package/dist/cli/app/public/libs/exe_math/LICENSE +202 -0
- package/dist/cli/app/public/libs/exe_math/a11y/assistive-mml.js +1 -0
- package/dist/cli/app/public/libs/exe_math/a11y/complexity.js +1 -0
- package/dist/cli/app/public/libs/exe_math/a11y/explorer.js +1 -0
- package/dist/cli/app/public/libs/exe_math/a11y/semantic-enrich.js +1 -0
- package/dist/cli/app/public/libs/exe_math/a11y/speech.js +1 -0
- package/dist/cli/app/public/libs/exe_math/a11y/sre.js +1 -0
- package/dist/cli/app/public/libs/exe_math/adaptors/jsdom.js +1 -0
- package/dist/cli/app/public/libs/exe_math/adaptors/linkedom.js +1 -0
- package/dist/cli/app/public/libs/exe_math/adaptors/liteDOM.js +1 -0
- package/dist/cli/app/public/libs/exe_math/core.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/asciimath.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/mml/entities.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/mml/extensions/mml3.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/mml/extensions/mml3.sef.json +1 -0
- package/dist/cli/app/public/libs/exe_math/input/mml.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/action.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/ams.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/amscd.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/autoload.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/bbm.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/bboldx.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/bbox.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/begingroup.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/boldsymbol.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/braket.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/bussproofs.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/cancel.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/cases.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/centernot.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/color.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/colortbl.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/colorv2.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/configmacros.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/dsfont.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/empheq.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/enclose.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/extpfeil.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/gensymb.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/html.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/mathtools.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/mhchem.js +34 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/newcommand.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/noerrors.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/noundefined.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/physics.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/require.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/setoptions.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/tagformat.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/texhtml.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/textcomp.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/textmacros.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/unicode.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/units.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/upgreek.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex/extensions/verb.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex-base.js +1 -0
- package/dist/cli/app/public/libs/exe_math/input/tex.js +1 -0
- package/dist/cli/app/public/libs/exe_math/loader.js +1 -0
- package/dist/cli/app/public/libs/exe_math/output/chtml.js +1 -0
- package/dist/cli/app/public/libs/exe_math/output/svg.js +1 -0
- package/dist/cli/app/public/libs/exe_math/sre/mathmaps/af.json +146 -0
- package/dist/cli/app/public/libs/exe_math/sre/mathmaps/base.json +137 -0
- package/dist/cli/app/public/libs/exe_math/sre/mathmaps/ca.json +140 -0
- package/dist/cli/app/public/libs/exe_math/sre/mathmaps/da.json +140 -0
- package/dist/cli/app/public/libs/exe_math/sre/mathmaps/de.json +146 -0
- package/dist/cli/app/public/libs/exe_math/sre/mathmaps/en.json +158 -0
- package/dist/cli/app/public/libs/exe_math/sre/mathmaps/es.json +140 -0
- package/dist/cli/app/public/libs/exe_math/sre/mathmaps/euro.json +32 -0
- package/dist/cli/app/public/libs/exe_math/sre/mathmaps/fr.json +146 -0
- package/dist/cli/app/public/libs/exe_math/sre/mathmaps/hi.json +146 -0
- package/dist/cli/app/public/libs/exe_math/sre/mathmaps/it.json +146 -0
- package/dist/cli/app/public/libs/exe_math/sre/mathmaps/ko.json +146 -0
- package/dist/cli/app/public/libs/exe_math/sre/mathmaps/nb.json +146 -0
- package/dist/cli/app/public/libs/exe_math/sre/mathmaps/nemeth.json +125 -0
- package/dist/cli/app/public/libs/exe_math/sre/mathmaps/nn.json +146 -0
- package/dist/cli/app/public/libs/exe_math/sre/mathmaps/sv.json +146 -0
- package/dist/cli/app/public/libs/exe_math/sre/require.d.mts +1 -0
- package/dist/cli/app/public/libs/exe_math/sre/require.mjs +2 -0
- package/dist/cli/app/public/libs/exe_math/sre/speech-worker.js +1 -0
- package/dist/cli/app/public/libs/exe_math/startup.js +1 -0
- package/dist/cli/app/public/libs/exe_math/tex-mml-svg.js +1 -0
- package/dist/cli/app/public/libs/exe_math/ui/lazy.js +1 -0
- package/dist/cli/app/public/libs/exe_math/ui/menu.js +1 -0
- package/dist/cli/app/public/libs/exe_math/ui/safe.js +1 -0
- package/dist/cli/cli/execonvert.js +807 -0
- package/dist/cli/cli/runtime.js +237 -0
- package/dist/cli/package.json +3 -0
- package/dist/cli/src/converter.js +5078 -0
- package/dist/cli/src/docx-import.js +1121 -0
- package/dist/cli/src/elpx-markdown.js +201 -0
- package/dist/cli/src/i18n.js +485 -0
- package/dist/cli/src/index.js +1 -0
- package/dist/cli/src/legacy-elp.js +846 -0
- package/dist/cli/src/markdown-import.js +26 -0
- package/package.json +68 -0
|
@@ -0,0 +1,955 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="es">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
+
<meta name="analytics-endpoint" content="https://bilateria.org/app/estadistica/execonvert-cli/track.php" />
|
|
7
|
+
<meta name="analytics-stats-url" content="https://bilateria.org/app/estadistica/execonvert-cli/admin-stats.php" />
|
|
8
|
+
<meta name="analytics-site-id" content="execonvert-cli" />
|
|
9
|
+
<title>eXeConvert CLI</title>
|
|
10
|
+
<link rel="icon" href="./execonvert-cli-icon.svg" type="image/svg+xml" />
|
|
11
|
+
<style>
|
|
12
|
+
:root {
|
|
13
|
+
--bg: #f3f7ef;
|
|
14
|
+
--panel: rgba(255, 255, 255, 0.96);
|
|
15
|
+
--line: #bfd0b7;
|
|
16
|
+
--ink: #243024;
|
|
17
|
+
--muted: #5b685a;
|
|
18
|
+
--brand-dark: #2f5d2f;
|
|
19
|
+
--brand-soft: #e5f1de;
|
|
20
|
+
--accent: #184c7c;
|
|
21
|
+
--shadow: 0 18px 44px rgba(53, 77, 47, 0.1);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
* {
|
|
25
|
+
box-sizing: border-box;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
body {
|
|
29
|
+
margin: 0;
|
|
30
|
+
min-height: 100vh;
|
|
31
|
+
font-family: Candara, "Trebuchet MS", "Gill Sans", sans-serif;
|
|
32
|
+
color: var(--ink);
|
|
33
|
+
background:
|
|
34
|
+
radial-gradient(circle at 86% 10%, rgba(95, 155, 61, 0.14), transparent 18rem),
|
|
35
|
+
radial-gradient(circle at 10% 90%, rgba(24, 76, 124, 0.08), transparent 18rem),
|
|
36
|
+
linear-gradient(180deg, #f8fbf6 0%, var(--bg) 100%);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
a {
|
|
40
|
+
color: var(--accent);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
code,
|
|
44
|
+
pre {
|
|
45
|
+
font-family: "Cascadia Code", "Fira Code", Consolas, monospace;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.wrap {
|
|
49
|
+
width: min(1120px, calc(100% - 40px));
|
|
50
|
+
margin: 0 auto;
|
|
51
|
+
padding: 30px 0 46px;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.hero {
|
|
55
|
+
padding: 26px 28px;
|
|
56
|
+
border: 2px solid var(--line);
|
|
57
|
+
border-radius: 30px;
|
|
58
|
+
background: var(--panel);
|
|
59
|
+
box-shadow: var(--shadow);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.hero-head {
|
|
63
|
+
display: flex;
|
|
64
|
+
justify-content: space-between;
|
|
65
|
+
gap: 18px;
|
|
66
|
+
align-items: flex-start;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.hero-top {
|
|
70
|
+
display: flex;
|
|
71
|
+
align-items: center;
|
|
72
|
+
gap: 18px;
|
|
73
|
+
margin-bottom: 10px;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.hero-top img {
|
|
77
|
+
width: 72px;
|
|
78
|
+
height: 72px;
|
|
79
|
+
flex: 0 0 72px;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.locale-picker select {
|
|
83
|
+
min-width: 140px;
|
|
84
|
+
border-radius: 999px;
|
|
85
|
+
border: 1px solid rgba(47, 93, 47, 0.16);
|
|
86
|
+
background: rgba(255, 255, 255, 0.92);
|
|
87
|
+
color: var(--brand-dark);
|
|
88
|
+
padding: 10px 16px;
|
|
89
|
+
font: inherit;
|
|
90
|
+
font-weight: 700;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
h1 {
|
|
94
|
+
margin: 0;
|
|
95
|
+
font-size: clamp(2.4rem, 4vw, 4rem);
|
|
96
|
+
line-height: 0.96;
|
|
97
|
+
letter-spacing: -0.05em;
|
|
98
|
+
color: var(--brand-dark);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.title-row {
|
|
102
|
+
display: flex;
|
|
103
|
+
align-items: flex-end;
|
|
104
|
+
gap: 10px;
|
|
105
|
+
flex-wrap: wrap;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.cli-version {
|
|
109
|
+
color: var(--muted);
|
|
110
|
+
font-size: 0.95rem;
|
|
111
|
+
font-weight: 700;
|
|
112
|
+
line-height: 1.2;
|
|
113
|
+
letter-spacing: 0;
|
|
114
|
+
white-space: nowrap;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.subtitle {
|
|
118
|
+
margin: 0;
|
|
119
|
+
font-size: 1.14rem;
|
|
120
|
+
color: var(--muted);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.intro {
|
|
124
|
+
margin: 14px 0 0;
|
|
125
|
+
font-size: 1.12rem;
|
|
126
|
+
line-height: 1.45;
|
|
127
|
+
color: var(--muted);
|
|
128
|
+
max-width: 52rem;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.cta-row {
|
|
132
|
+
display: flex;
|
|
133
|
+
flex-wrap: wrap;
|
|
134
|
+
gap: 12px;
|
|
135
|
+
margin-top: 18px;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.button {
|
|
139
|
+
display: inline-flex;
|
|
140
|
+
align-items: center;
|
|
141
|
+
justify-content: center;
|
|
142
|
+
gap: 10px;
|
|
143
|
+
min-height: 48px;
|
|
144
|
+
padding: 0 18px;
|
|
145
|
+
border-radius: 999px;
|
|
146
|
+
border: 1px solid transparent;
|
|
147
|
+
font-weight: 700;
|
|
148
|
+
text-decoration: none;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
.button.primary {
|
|
152
|
+
background: linear-gradient(135deg, #6aa844 0%, #48792e 100%);
|
|
153
|
+
color: white;
|
|
154
|
+
box-shadow: 0 12px 24px rgba(72, 121, 46, 0.22);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.meta {
|
|
158
|
+
margin-top: 14px;
|
|
159
|
+
font-size: 0.98rem;
|
|
160
|
+
color: var(--muted);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.grid {
|
|
164
|
+
display: grid;
|
|
165
|
+
grid-template-columns: 1.3fr 0.9fr;
|
|
166
|
+
gap: 20px;
|
|
167
|
+
margin-top: 22px;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
.panel {
|
|
171
|
+
padding: 24px;
|
|
172
|
+
border: 2px solid var(--line);
|
|
173
|
+
border-radius: 26px;
|
|
174
|
+
background: var(--panel);
|
|
175
|
+
box-shadow: var(--shadow);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.panel h2 {
|
|
179
|
+
margin: 0 0 12px;
|
|
180
|
+
font-size: 1.45rem;
|
|
181
|
+
color: var(--brand-dark);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
.panel p,
|
|
185
|
+
.panel li {
|
|
186
|
+
font-size: 1rem;
|
|
187
|
+
line-height: 1.46;
|
|
188
|
+
color: var(--muted);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
.downloads {
|
|
192
|
+
display: grid;
|
|
193
|
+
gap: 12px;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
.download-card {
|
|
197
|
+
padding: 16px 16px 18px;
|
|
198
|
+
border-radius: 20px;
|
|
199
|
+
border: 1px solid rgba(47, 93, 47, 0.12);
|
|
200
|
+
background: linear-gradient(180deg, rgba(255, 255, 255, 0.96) 0%, #f7fbf4 100%);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
.download-card strong {
|
|
204
|
+
display: block;
|
|
205
|
+
margin-bottom: 4px;
|
|
206
|
+
font-size: 1.02rem;
|
|
207
|
+
color: var(--brand-dark);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
.download-card p {
|
|
211
|
+
margin: 0;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
pre {
|
|
215
|
+
margin: 12px 0 0;
|
|
216
|
+
padding: 14px 16px;
|
|
217
|
+
overflow-x: auto;
|
|
218
|
+
border-radius: 18px;
|
|
219
|
+
background: #182117;
|
|
220
|
+
color: #eef7eb;
|
|
221
|
+
font-size: 0.95rem;
|
|
222
|
+
line-height: 1.45;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
.note {
|
|
226
|
+
margin-top: 14px;
|
|
227
|
+
padding: 14px 16px;
|
|
228
|
+
border-radius: 18px;
|
|
229
|
+
background: var(--brand-soft);
|
|
230
|
+
color: var(--ink);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
.step-list,
|
|
234
|
+
.faq {
|
|
235
|
+
display: grid;
|
|
236
|
+
gap: 12px;
|
|
237
|
+
margin-top: 12px;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
.step,
|
|
241
|
+
.faq-item {
|
|
242
|
+
padding: 14px 16px;
|
|
243
|
+
border-radius: 18px;
|
|
244
|
+
background: #f8fbf6;
|
|
245
|
+
border: 1px solid rgba(47, 93, 47, 0.08);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
.step strong,
|
|
249
|
+
.faq-item strong {
|
|
250
|
+
display: block;
|
|
251
|
+
margin-bottom: 5px;
|
|
252
|
+
color: var(--brand-dark);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
.back {
|
|
256
|
+
margin-top: 20px;
|
|
257
|
+
font-size: 0.98rem;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
.footer {
|
|
261
|
+
margin-top: 20px;
|
|
262
|
+
padding: 18px 24px;
|
|
263
|
+
border: 1px solid var(--line);
|
|
264
|
+
border-radius: 18px;
|
|
265
|
+
background: linear-gradient(180deg, var(--panel) 0%, #f6faf4 100%);
|
|
266
|
+
box-shadow: var(--shadow);
|
|
267
|
+
text-align: center;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
.footer p {
|
|
271
|
+
margin: 8px 0;
|
|
272
|
+
color: var(--muted);
|
|
273
|
+
line-height: 1.5;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
.footer-links {
|
|
277
|
+
display: flex;
|
|
278
|
+
flex-wrap: wrap;
|
|
279
|
+
justify-content: center;
|
|
280
|
+
gap: 8px;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
.footer a {
|
|
284
|
+
font-weight: 700;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
@media (max-width: 920px) {
|
|
288
|
+
.grid {
|
|
289
|
+
grid-template-columns: 1fr;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
@media (max-width: 640px) {
|
|
294
|
+
.wrap {
|
|
295
|
+
width: min(100% - 24px, 1120px);
|
|
296
|
+
padding-top: 18px;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
.hero,
|
|
300
|
+
.panel {
|
|
301
|
+
padding: 20px;
|
|
302
|
+
border-radius: 22px;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
.hero-head {
|
|
306
|
+
flex-direction: column;
|
|
307
|
+
align-items: stretch;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
.hero-top {
|
|
311
|
+
align-items: flex-start;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
.hero-top img {
|
|
315
|
+
width: 56px;
|
|
316
|
+
height: 56px;
|
|
317
|
+
flex-basis: 56px;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
.title-row {
|
|
321
|
+
gap: 6px;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
</style>
|
|
325
|
+
</head>
|
|
326
|
+
<body>
|
|
327
|
+
<div class="wrap">
|
|
328
|
+
<section class="hero">
|
|
329
|
+
<div class="hero-head">
|
|
330
|
+
<div>
|
|
331
|
+
<div class="hero-top">
|
|
332
|
+
<img src="./execonvert-cli-icon.svg" alt="" />
|
|
333
|
+
<div>
|
|
334
|
+
<div class="title-row">
|
|
335
|
+
<h1 id="cli-title">eXeConvert CLI</h1>
|
|
336
|
+
<span id="release-value" class="cli-version">...</span>
|
|
337
|
+
</div>
|
|
338
|
+
<p id="cli-subtitle" class="subtitle">La versión para usar desde un terminal o para automatizar conversiones</p>
|
|
339
|
+
</div>
|
|
340
|
+
</div>
|
|
341
|
+
</div>
|
|
342
|
+
<div class="locale-picker">
|
|
343
|
+
<select id="language-select" aria-label="Idioma">
|
|
344
|
+
<option value="es">Español</option>
|
|
345
|
+
<option value="ca">Català</option>
|
|
346
|
+
<option value="en">English</option>
|
|
347
|
+
</select>
|
|
348
|
+
</div>
|
|
349
|
+
</div>
|
|
350
|
+
|
|
351
|
+
<p id="cli-intro" class="intro">
|
|
352
|
+
eXeConvert convierte archivos entre los formatos de eXeLearning (<code>.elpx</code>, <code>.elp</code>), Word (<code>.docx</code>), PDF y Markdown (<code>.md</code>).
|
|
353
|
+
Esta es la versión de terminal o consola. Se usa desde una ventana de Terminal, PowerShell o cmd y
|
|
354
|
+
es útil para convertir muchos archivos o automatizar tareas.
|
|
355
|
+
</p>
|
|
356
|
+
|
|
357
|
+
<div class="cta-row">
|
|
358
|
+
<a id="cli-download-button" class="button primary" href="https://github.com/eXeConvert/eXeConvert.github.io/releases/latest" target="_blank" rel="noopener">Descargar la última versión</a>
|
|
359
|
+
</div>
|
|
360
|
+
|
|
361
|
+
</section>
|
|
362
|
+
|
|
363
|
+
<div class="grid">
|
|
364
|
+
<section class="panel">
|
|
365
|
+
<h2 id="downloads-title">Qué descargar</h2>
|
|
366
|
+
<div class="downloads">
|
|
367
|
+
<div class="download-card">
|
|
368
|
+
<strong id="download-deb-title">Ubuntu y otros sistemas basados en Debian</strong>
|
|
369
|
+
<p id="download-deb-text">Descarga el paquete <code>.deb</code> desde la última release y ábrelo con el instalador del sistema.</p>
|
|
370
|
+
</div>
|
|
371
|
+
<div class="download-card">
|
|
372
|
+
<strong id="download-appimage-title">Linux genérico</strong>
|
|
373
|
+
<p id="download-appimage-text">Usa el archivo <code>.AppImage</code> si no quieres instalar un paquete del sistema.</p>
|
|
374
|
+
</div>
|
|
375
|
+
<div class="download-card">
|
|
376
|
+
<strong id="download-windows-title">Windows</strong>
|
|
377
|
+
<p id="download-windows-text">Descarga el instalador <code>.exe</code> y sigue el asistente.</p>
|
|
378
|
+
</div>
|
|
379
|
+
<div class="download-card">
|
|
380
|
+
<strong id="download-macos-title">macOS</strong>
|
|
381
|
+
<p id="download-macos-text">Descarga el instalador <code>.pkg</code> y sigue el proceso habitual de instalación.</p>
|
|
382
|
+
</div>
|
|
383
|
+
</div>
|
|
384
|
+
|
|
385
|
+
<div id="cli-note" class="note">
|
|
386
|
+
<strong>Importante:</strong> la CLI está pensada para terminal. Si prefieres trabajar con una interfaz gráfica, usa <a href="../index.html">la página principal de eXeConvert</a>.
|
|
387
|
+
</div>
|
|
388
|
+
</section>
|
|
389
|
+
|
|
390
|
+
<section class="panel">
|
|
391
|
+
<h2 id="first-use-title">Primer uso</h2>
|
|
392
|
+
<div class="step-list">
|
|
393
|
+
<div class="step">
|
|
394
|
+
<strong id="step-1-title">1. Instala la versión adecuada para tu sistema</strong>
|
|
395
|
+
<span id="step-1-text">En la release verás varios archivos. Elige el instalador que corresponda a tu equipo.</span>
|
|
396
|
+
</div>
|
|
397
|
+
<div class="step">
|
|
398
|
+
<strong id="step-2-title">2. Abre un terminal</strong>
|
|
399
|
+
<span id="step-2-text">En Linux o macOS puedes abrir la app Terminal. En Windows puedes usar PowerShell o cmd.</span>
|
|
400
|
+
</div>
|
|
401
|
+
<div class="step">
|
|
402
|
+
<strong id="step-3-title">3. Comprueba que funciona</strong>
|
|
403
|
+
<span id="step-3-text">Ejecuta <code>execonvert --help</code>. Si aparece la ayuda, ya está listo.</span>
|
|
404
|
+
</div>
|
|
405
|
+
<div class="step">
|
|
406
|
+
<strong id="step-4-title">4. Convierte un archivo</strong>
|
|
407
|
+
<span id="step-4-text">Escribe el archivo de entrada y el de salida en el mismo comando.</span>
|
|
408
|
+
</div>
|
|
409
|
+
</div>
|
|
410
|
+
</section>
|
|
411
|
+
</div>
|
|
412
|
+
|
|
413
|
+
<section class="panel" style="margin-top: 20px;">
|
|
414
|
+
<h2 id="commands-title">Comandos más habituales</h2>
|
|
415
|
+
<p id="commands-intro">Los nombres de archivo pueden ser rutas completas o relativas. Algunos ejemplos:</p>
|
|
416
|
+
<pre>execonvert proyecto.elpx proyecto.pdf
|
|
417
|
+
execonvert proyecto.elpx proyecto.docx
|
|
418
|
+
execonvert proyecto.elpx resumen.md
|
|
419
|
+
execonvert apuntes.md apuntes.elpx
|
|
420
|
+
execonvert legacy.elp actualizado.elpx
|
|
421
|
+
execonvert inspect proyecto.elpx</pre>
|
|
422
|
+
|
|
423
|
+
<p id="commands-note" class="note">
|
|
424
|
+
Si un nombre de archivo o carpeta tiene espacios, ponlo entre comillas. Ejemplo: <code>execonvert "Mi proyecto.elpx" "Mi proyecto.pdf"</code>
|
|
425
|
+
</p>
|
|
426
|
+
</section>
|
|
427
|
+
|
|
428
|
+
<section class="panel" style="margin-top: 20px;">
|
|
429
|
+
<h2 id="batch-title">Conversión en masa</h2>
|
|
430
|
+
<p id="batch-intro">Con <code>--to</code> puedes convertir varios archivos a la vez. El shell expande el comodín y la CLI procesa cada archivo, ignorando automáticamente los que no son compatibles con el formato de salida.</p>
|
|
431
|
+
<p id="batch-example-1-label">Convertir todos los <code>.elpx</code> de una carpeta a PDF:</p>
|
|
432
|
+
<pre>execonvert *.elpx --to pdf</pre>
|
|
433
|
+
<p id="batch-example-2-label">Convertir todos los archivos compatibles y guardarlos en otra carpeta:</p>
|
|
434
|
+
<pre>execonvert * --to docx --out-dir ./salida</pre>
|
|
435
|
+
<p id="batch-note" class="note" style="margin-top: 14px;"></p>
|
|
436
|
+
</section>
|
|
437
|
+
|
|
438
|
+
<section class="panel" style="margin-top: 20px;">
|
|
439
|
+
<h2 id="examples-title">Ejemplos útiles</h2>
|
|
440
|
+
<p id="example-1-label">Exportar solo algunas páginas de un proyecto:</p>
|
|
441
|
+
<pre>execonvert proyecto.elpx seleccion.pdf --pages 1,2.1</pre>
|
|
442
|
+
|
|
443
|
+
<p id="example-2-label">Inspeccionar la estructura interna de páginas:</p>
|
|
444
|
+
<pre>execonvert inspect proyecto.elpx</pre>
|
|
445
|
+
|
|
446
|
+
<p id="example-3-label">Importar Markdown y convertirlo en un proyecto eXeLearning:</p>
|
|
447
|
+
<pre>execonvert apuntes.md apuntes.elpx</pre>
|
|
448
|
+
|
|
449
|
+
<p id="example-4-label">Convertir un proyecto antiguo <code>.elp</code> directamente a PDF:</p>
|
|
450
|
+
<pre>execonvert legacy.elp legacy.pdf</pre>
|
|
451
|
+
|
|
452
|
+
<p id="example-5-label">Convertir todos los <code>.elpx</code> de una carpeta a PDF:</p>
|
|
453
|
+
<pre>execonvert *.elpx --to pdf</pre>
|
|
454
|
+
|
|
455
|
+
<p id="example-6-label">Convertir todos los archivos compatibles a <code>.docx</code> y guardarlos en otra carpeta:</p>
|
|
456
|
+
<pre>execonvert * --to docx --out-dir ./salida</pre>
|
|
457
|
+
</section>
|
|
458
|
+
|
|
459
|
+
<section class="panel" style="margin-top: 20px;">
|
|
460
|
+
<h2 id="faq-title">Preguntas frecuentes</h2>
|
|
461
|
+
<div class="faq">
|
|
462
|
+
<div class="faq-item">
|
|
463
|
+
<strong id="faq-1-title">No sé cuál descargar</strong>
|
|
464
|
+
<span id="faq-1-text">Si usas Ubuntu u otro sistema basado en Debian, normalmente elige <code>.deb</code>. En Windows, el instalador <code>.exe</code>. En macOS, el archivo <code>.pkg</code>. En otras distribuciones Linux, prueba con <code>.AppImage</code>.</span>
|
|
465
|
+
</div>
|
|
466
|
+
<div class="faq-item">
|
|
467
|
+
<strong id="faq-2-title">¿Se puede usar sin conocimientos técnicos?</strong>
|
|
468
|
+
<span id="faq-2-text">Sí, si solo necesitas ejecutar comandos básicos. Esta página está pensada precisamente para ese caso. Si prefieres no usar terminal, sigue siendo mejor <a href="../index.html">la página principal de eXeConvert</a>.</span>
|
|
469
|
+
</div>
|
|
470
|
+
<div class="faq-item">
|
|
471
|
+
<strong id="faq-3-title">¿Dónde están siempre los archivos más nuevos?</strong>
|
|
472
|
+
<span id="faq-3-text">En la <a href="https://github.com/eXeConvert/eXeConvert.github.io/releases/latest" target="_blank" rel="noopener">última release de GitHub</a>.</span>
|
|
473
|
+
</div>
|
|
474
|
+
</div>
|
|
475
|
+
|
|
476
|
+
<p class="back">
|
|
477
|
+
<a id="back-link" href="../index.html">Volver a la página principal de eXeConvert</a>
|
|
478
|
+
</p>
|
|
479
|
+
</section>
|
|
480
|
+
|
|
481
|
+
<footer class="footer">
|
|
482
|
+
<p class="footer-links">
|
|
483
|
+
<span id="footer-version">Versión v0.1.2 · ©</span>
|
|
484
|
+
<a href="https://bilateria.org/" target="_blank" rel="noopener noreferrer">Juan José de Haro</a>
|
|
485
|
+
<span>·</span>
|
|
486
|
+
<a id="footer-license" href="https://www.gnu.org/licenses/agpl-3.0.html" target="_blank" rel="noopener noreferrer">Licencia AGPLv3</a>
|
|
487
|
+
<span>·</span>
|
|
488
|
+
<a id="footer-repo" href="https://github.com/eXeConvert/eXeConvert.github.io" target="_blank" rel="noopener noreferrer">Repositorio GitHub</a>
|
|
489
|
+
<span>·</span>
|
|
490
|
+
<a id="footer-issues" href="https://github.com/eXeConvert/eXeConvert.github.io/issues" target="_blank" rel="noopener noreferrer">Problemas y sugerencias</a>
|
|
491
|
+
</p>
|
|
492
|
+
<p id="footer-independent">Proyecto independiente. No está afiliado ni avalado oficialmente por eXeLearning o INTEF.</p>
|
|
493
|
+
<p>
|
|
494
|
+
<span id="footer-third-party">Este proyecto reutiliza recursos de eXeLearning para compatibilidad con <code>.elpx</code>. Consulta las atribuciones en</span>
|
|
495
|
+
<a href="../THIRD_PARTY_NOTICES.md" target="_blank" rel="noopener noreferrer">THIRD_PARTY_NOTICES</a>
|
|
496
|
+
<span>·</span>
|
|
497
|
+
<a id="footer-privacy-link" href="#">Privacidad</a>.
|
|
498
|
+
</p>
|
|
499
|
+
<p id="footer-privacy" hidden>
|
|
500
|
+
Esta aplicación recoge únicamente estadísticas de uso agregadas con un sistema propio para conocer su utilización y mejorar la herramienta. No se almacenan direcciones IP ni se usan cookies de analítica para los visitantes.
|
|
501
|
+
</p>
|
|
502
|
+
</footer>
|
|
503
|
+
</div>
|
|
504
|
+
|
|
505
|
+
<script>
|
|
506
|
+
const STORAGE_KEY = "execonvert.locale";
|
|
507
|
+
const SUPPORTED_LOCALES = ["es", "ca", "en"];
|
|
508
|
+
const RELEASES_API_URL = "https://api.github.com/repos/eXeConvert/eXeConvert.github.io/releases/latest";
|
|
509
|
+
|
|
510
|
+
const translations = {
|
|
511
|
+
es: {
|
|
512
|
+
pageTitle: "eXeConvert CLI",
|
|
513
|
+
langLabel: "Idioma",
|
|
514
|
+
title: "eXeConvert CLI",
|
|
515
|
+
releaseLabel: "Última versión publicada:",
|
|
516
|
+
subtitle: "La versión para usar desde un terminal o para automatizar conversiones",
|
|
517
|
+
intro:
|
|
518
|
+
"eXeConvert convierte archivos entre los formatos de eXeLearning (<code>.elpx</code>, <code>.elp</code>), Word (<code>.docx</code>), PDF y Markdown (<code>.md</code>). Esta es la versión de terminal o consola. Se usa desde una ventana de Terminal, PowerShell o cmd y es útil para convertir muchos archivos o automatizar tareas (si prefieres una interfaz gráfica, puedes usar <a href=\"../index.html\">la versión web de eXeConvert</a>).",
|
|
519
|
+
downloadButton: "Descargar la última versión",
|
|
520
|
+
downloadsTitle: "Qué descargar",
|
|
521
|
+
debTitle: "Ubuntu y otros sistemas basados en Debian",
|
|
522
|
+
debText: "Descarga el paquete <code>.deb</code> desde la última release y ábrelo con el instalador del sistema.",
|
|
523
|
+
appImageTitle: "Linux genérico",
|
|
524
|
+
appImageText: "Usa el archivo <code>.AppImage</code> si no quieres instalar un paquete del sistema.",
|
|
525
|
+
windowsTitle: "Windows",
|
|
526
|
+
windowsText: "Descarga el instalador <code>.exe</code> y sigue el asistente.",
|
|
527
|
+
macosTitle: "macOS",
|
|
528
|
+
macosText: "Descarga el instalador <code>.pkg</code> y sigue el proceso habitual de instalación.",
|
|
529
|
+
note:
|
|
530
|
+
"<strong>Importante:</strong> la CLI está pensada para terminal. Si prefieres trabajar con una interfaz gráfica, usa <a href=\"../index.html\">la página principal de eXeConvert</a>.",
|
|
531
|
+
firstUseTitle: "Primer uso",
|
|
532
|
+
step1Title: "1. Instala la versión adecuada para tu sistema",
|
|
533
|
+
step1Text: "En la release verás varios archivos. Elige el instalador que corresponda a tu equipo.",
|
|
534
|
+
step2Title: "2. Abre un terminal",
|
|
535
|
+
step2Text: "En Linux o macOS puedes abrir la app Terminal. En Windows puedes usar PowerShell o cmd.",
|
|
536
|
+
step3Title: "3. Comprueba que funciona",
|
|
537
|
+
step3Text: "Ejecuta <code>execonvert --help</code>. Si aparece la ayuda, ya está listo.",
|
|
538
|
+
step4Title: "4. Convierte un archivo",
|
|
539
|
+
step4Text: "Escribe el archivo de entrada y el de salida en el mismo comando.",
|
|
540
|
+
commandsTitle: "Comandos más habituales",
|
|
541
|
+
commandsIntro: "Los nombres de archivo pueden ser rutas completas o relativas. Algunos ejemplos:",
|
|
542
|
+
commandsNote:
|
|
543
|
+
"Si un nombre de archivo o carpeta tiene espacios, ponlo entre comillas. Ejemplo: <code>execonvert \"Mi proyecto.elpx\" \"Mi proyecto.pdf\"</code>",
|
|
544
|
+
batchTitle: "Conversión en masa",
|
|
545
|
+
batchIntro: "Con <code>--to</code> puedes convertir varios archivos a la vez. El shell expande el comodín y la CLI procesa cada archivo, ignorando automáticamente los que no son compatibles con el formato de salida.",
|
|
546
|
+
batchExample1: "Convertir todos los <code>.elpx</code> de una carpeta a PDF:",
|
|
547
|
+
batchExample2: "Convertir todos los archivos compatibles y guardarlos en otra carpeta:",
|
|
548
|
+
batchNote: "<strong>--out-dir</strong> es opcional. Si se omite, los archivos convertidos se guardan en la misma carpeta que el original.",
|
|
549
|
+
examplesTitle: "Ejemplos útiles",
|
|
550
|
+
example1: "Exportar solo algunas páginas de un proyecto:",
|
|
551
|
+
example2: "Inspeccionar la estructura interna de páginas:",
|
|
552
|
+
example3: "Importar Markdown y convertirlo en un proyecto eXeLearning:",
|
|
553
|
+
example4: "Convertir un proyecto antiguo <code>.elp</code> directamente a PDF:",
|
|
554
|
+
example5: "Convertir todos los <code>.elpx</code> de una carpeta a PDF:",
|
|
555
|
+
example6: "Convertir todos los archivos compatibles a <code>.docx</code> y guardarlos en otra carpeta:",
|
|
556
|
+
faqTitle: "Preguntas frecuentes",
|
|
557
|
+
faq1Title: "No sé cuál descargar",
|
|
558
|
+
faq1Text:
|
|
559
|
+
"Si usas Ubuntu u otro sistema basado en Debian, normalmente elige <code>.deb</code>. En Windows, el instalador <code>.exe</code>. En macOS, el archivo <code>.pkg</code>. En otras distribuciones Linux, prueba con <code>.AppImage</code>.",
|
|
560
|
+
faq2Title: "¿Se puede usar sin conocimientos técnicos?",
|
|
561
|
+
faq2Text:
|
|
562
|
+
"Sí, si solo necesitas ejecutar comandos básicos. Esta página está pensada precisamente para ese caso. Si prefieres no usar terminal, sigue siendo mejor <a href=\"../index.html\">la página principal de eXeConvert</a>.",
|
|
563
|
+
faq3Title: "¿Dónde están siempre los archivos más nuevos?",
|
|
564
|
+
faq3Text:
|
|
565
|
+
"En la <a href=\"https://github.com/eXeConvert/eXeConvert.github.io/releases/latest\" target=\"_blank\" rel=\"noopener\">última release de GitHub</a>.",
|
|
566
|
+
backLink: "Volver a la página principal de eXeConvert",
|
|
567
|
+
footerVersion: "Versión {version} · ©",
|
|
568
|
+
footerLicense: "Licencia AGPLv3",
|
|
569
|
+
footerRepo: "Repositorio GitHub",
|
|
570
|
+
footerIssues: "Problemas y sugerencias",
|
|
571
|
+
footerIndependent: "Proyecto independiente. No está afiliado ni avalado oficialmente por eXeLearning o INTEF.",
|
|
572
|
+
footerThirdParty: "Este proyecto reutiliza recursos de eXeLearning para compatibilidad con <code>.elpx</code>. Consulta las atribuciones en",
|
|
573
|
+
footerPrivacyLink: "Privacidad",
|
|
574
|
+
footerPrivacy:
|
|
575
|
+
"Esta aplicación recoge únicamente estadísticas de uso agregadas con un sistema propio para conocer su utilización y mejorar la herramienta. No se almacenan direcciones IP ni se usan cookies de analítica para los visitantes."
|
|
576
|
+
},
|
|
577
|
+
ca: {
|
|
578
|
+
pageTitle: "eXeConvert CLI",
|
|
579
|
+
langLabel: "Idioma",
|
|
580
|
+
title: "eXeConvert CLI",
|
|
581
|
+
releaseLabel: "Última versió publicada:",
|
|
582
|
+
subtitle: "La versió per fer servir des d'un terminal o per automatitzar conversions",
|
|
583
|
+
intro:
|
|
584
|
+
"eXeConvert converteix fitxers entre els formats d'eXeLearning (<code>.elpx</code>, <code>.elp</code>), Word (<code>.docx</code>), PDF i Markdown (<code>.md</code>). Aquesta és la versió de terminal o consola. Es fa servir des d'una finestra de Terminal, PowerShell o cmd i és útil per convertir molts fitxers o automatitzar tasques (si prefereixes una interfície gràfica, pots fer servir <a href=\"../index.html\">la versió web d'eXeConvert</a>).",
|
|
585
|
+
downloadButton: "Descarregar l'última versió",
|
|
586
|
+
downloadsTitle: "Què descarregar",
|
|
587
|
+
debTitle: "Ubuntu i altres sistemes basats en Debian",
|
|
588
|
+
debText: "Descarrega el paquet <code>.deb</code> des de l'última release i obre'l amb l'instal·lador del sistema.",
|
|
589
|
+
appImageTitle: "Linux genèric",
|
|
590
|
+
appImageText: "Fes servir el fitxer <code>.AppImage</code> si no vols instal·lar un paquet del sistema.",
|
|
591
|
+
windowsTitle: "Windows",
|
|
592
|
+
windowsText: "Descarrega l'instal·lador <code>.exe</code> i segueix l'assistent.",
|
|
593
|
+
macosTitle: "macOS",
|
|
594
|
+
macosText: "Descarrega l'instal·lador <code>.pkg</code> i segueix el procés habitual d'instal·lació.",
|
|
595
|
+
note:
|
|
596
|
+
"<strong>Important:</strong> la CLI està pensada per al terminal. Si prefereixes treballar amb una interfície gràfica, fes servir <a href=\"../index.html\">la pàgina principal d'eXeConvert</a>.",
|
|
597
|
+
firstUseTitle: "Primer ús",
|
|
598
|
+
step1Title: "1. Instal·la la versió adequada per al teu sistema",
|
|
599
|
+
step1Text: "A la release veuràs diversos fitxers. Tria l'instal·lador que correspongui al teu equip.",
|
|
600
|
+
step2Title: "2. Obre un terminal",
|
|
601
|
+
step2Text: "A Linux o macOS pots obrir l'app Terminal. A Windows pots fer servir PowerShell o cmd.",
|
|
602
|
+
step3Title: "3. Comprova que funciona",
|
|
603
|
+
step3Text: "Executa <code>execonvert --help</code>. Si apareix l'ajuda, ja està a punt.",
|
|
604
|
+
step4Title: "4. Converteix un fitxer",
|
|
605
|
+
step4Text: "Escriu el fitxer d'entrada i el de sortida en el mateix comandament.",
|
|
606
|
+
commandsTitle: "Comandes més habituals",
|
|
607
|
+
commandsIntro: "Els noms de fitxer poden ser rutes completes o relatives. Alguns exemples:",
|
|
608
|
+
commandsNote:
|
|
609
|
+
"Si un nom de fitxer o carpeta té espais, posa'l entre cometes. Exemple: <code>execonvert \"El meu projecte.elpx\" \"El meu projecte.pdf\"</code>",
|
|
610
|
+
batchTitle: "Conversió en massa",
|
|
611
|
+
batchIntro: "Amb <code>--to</code> pots convertir diversos fitxers alhora. La shell expandeix el comodí i la CLI processa cada fitxer, ignorant automàticament els que no són compatibles amb el format de sortida.",
|
|
612
|
+
batchExample1: "Convertir tots els <code>.elpx</code> d'una carpeta a PDF:",
|
|
613
|
+
batchExample2: "Convertir tots els fitxers compatibles i desar-los en una altra carpeta:",
|
|
614
|
+
batchNote: "<strong>--out-dir</strong> és opcional. Si s'omet, els fitxers convertits es desen a la mateixa carpeta que l'original.",
|
|
615
|
+
examplesTitle: "Exemples útils",
|
|
616
|
+
example1: "Exportar només algunes pàgines d'un projecte:",
|
|
617
|
+
example2: "Inspeccionar l'estructura interna de pàgines:",
|
|
618
|
+
example3: "Importar Markdown i convertir-lo en un projecte eXeLearning:",
|
|
619
|
+
example4: "Convertir un projecte antic <code>.elp</code> directament a PDF:",
|
|
620
|
+
example5: "Convertir tots els <code>.elpx</code> d'una carpeta a PDF:",
|
|
621
|
+
example6: "Convertir tots els fitxers compatibles a <code>.docx</code> i desar-los en una altra carpeta:",
|
|
622
|
+
faqTitle: "Preguntes freqüents",
|
|
623
|
+
faq1Title: "No sé quin descarregar",
|
|
624
|
+
faq1Text:
|
|
625
|
+
"Si fas servir Ubuntu o un altre sistema basat en Debian, normalment tria <code>.deb</code>. A Windows, l'instal·lador <code>.exe</code>. A macOS, el fitxer <code>.pkg</code>. En altres distribucions Linux, prova amb <code>.AppImage</code>.",
|
|
626
|
+
faq2Title: "Es pot fer servir sense coneixements tècnics?",
|
|
627
|
+
faq2Text:
|
|
628
|
+
"Sí, si només necessites executar comandes bàsiques. Aquesta pàgina està pensada precisament per a aquest cas. Si prefereixes no fer servir el terminal, continua sent millor <a href=\"../index.html\">la pàgina principal d'eXeConvert</a>.",
|
|
629
|
+
faq3Title: "On hi ha sempre els fitxers més nous?",
|
|
630
|
+
faq3Text:
|
|
631
|
+
"A l'<a href=\"https://github.com/eXeConvert/eXeConvert.github.io/releases/latest\" target=\"_blank\" rel=\"noopener\">última release de GitHub</a>.",
|
|
632
|
+
backLink: "Tornar a la pàgina principal d'eXeConvert",
|
|
633
|
+
footerVersion: "Versió {version} · ©",
|
|
634
|
+
footerLicense: "Llicència AGPLv3",
|
|
635
|
+
footerRepo: "Repositori GitHub",
|
|
636
|
+
footerIssues: "Problemes i suggeriments",
|
|
637
|
+
footerIndependent: "Projecte independent. No està afiliat ni avalat oficialment per eXeLearning o INTEF.",
|
|
638
|
+
footerThirdParty: "Aquest projecte reutilitza recursos d'eXeLearning per compatibilitat amb <code>.elpx</code>. Consulta les atribucions a",
|
|
639
|
+
footerPrivacyLink: "Privadesa",
|
|
640
|
+
footerPrivacy:
|
|
641
|
+
"Aquesta aplicació recull únicament estadístiques d'ús agregades amb un sistema propi per conèixer-ne la utilització i millorar l'eina. No s'emmagatzemen adreces IP ni s'utilitzen cookies d'analítica per als visitants."
|
|
642
|
+
},
|
|
643
|
+
en: {
|
|
644
|
+
pageTitle: "eXeConvert CLI",
|
|
645
|
+
langLabel: "Language",
|
|
646
|
+
title: "eXeConvert CLI",
|
|
647
|
+
releaseLabel: "Latest published version:",
|
|
648
|
+
subtitle: "The version to use from a terminal or for automating conversions",
|
|
649
|
+
intro:
|
|
650
|
+
"eXeConvert converts files between eXeLearning formats (<code>.elpx</code>, <code>.elp</code>), Word (<code>.docx</code>), PDF, and Markdown (<code>.md</code>). This is the terminal or console version. It is used from a Terminal, PowerShell, or cmd window and is useful for converting many files or automating tasks (if you prefer a graphical interface, you can use <a href=\"../index.html\">the web version of eXeConvert</a>).",
|
|
651
|
+
downloadButton: "Download the latest version",
|
|
652
|
+
downloadsTitle: "What to download",
|
|
653
|
+
debTitle: "Ubuntu and other Debian-based systems",
|
|
654
|
+
debText: "Download the <code>.deb</code> package from the latest release and open it with the system installer.",
|
|
655
|
+
appImageTitle: "Generic Linux",
|
|
656
|
+
appImageText: "Use the <code>.AppImage</code> file if you do not want to install a system package.",
|
|
657
|
+
windowsTitle: "Windows",
|
|
658
|
+
windowsText: "Download the <code>.exe</code> installer and follow the setup wizard.",
|
|
659
|
+
macosTitle: "macOS",
|
|
660
|
+
macosText: "Download the <code>.pkg</code> installer and follow the usual installation process.",
|
|
661
|
+
note:
|
|
662
|
+
"<strong>Important:</strong> the CLI is intended for terminal use. If you prefer a graphical interface, use <a href=\"../index.html\">the main eXeConvert page</a>.",
|
|
663
|
+
firstUseTitle: "First steps",
|
|
664
|
+
step1Title: "1. Install the version that matches your system",
|
|
665
|
+
step1Text: "The release includes several files. Choose the installer that matches your computer.",
|
|
666
|
+
step2Title: "2. Open a terminal",
|
|
667
|
+
step2Text: "On Linux or macOS you can open the Terminal app. On Windows you can use PowerShell or cmd.",
|
|
668
|
+
step3Title: "3. Check that it works",
|
|
669
|
+
step3Text: "Run <code>execonvert --help</code>. If the help appears, it is ready.",
|
|
670
|
+
step4Title: "4. Convert a file",
|
|
671
|
+
step4Text: "Write the input file and the output file in the same command.",
|
|
672
|
+
commandsTitle: "Most common commands",
|
|
673
|
+
commandsIntro: "File names can be full or relative paths. Some examples:",
|
|
674
|
+
commandsNote:
|
|
675
|
+
"If a file or folder name contains spaces, put it in quotes. Example: <code>execonvert \"My project.elpx\" \"My project.pdf\"</code>",
|
|
676
|
+
batchTitle: "Batch conversion",
|
|
677
|
+
batchIntro: "With <code>--to</code> you can convert multiple files at once. The shell expands the wildcard and the CLI processes each file, automatically skipping those that are not compatible with the output format.",
|
|
678
|
+
batchExample1: "Convert all <code>.elpx</code> files in a folder to PDF:",
|
|
679
|
+
batchExample2: "Convert all compatible files and save them in another folder:",
|
|
680
|
+
batchNote: "<strong>--out-dir</strong> is optional. If omitted, converted files are saved in the same folder as the original.",
|
|
681
|
+
examplesTitle: "Useful examples",
|
|
682
|
+
example1: "Export only some pages from a project:",
|
|
683
|
+
example2: "Inspect the internal page structure:",
|
|
684
|
+
example3: "Import Markdown and turn it into an eXeLearning project:",
|
|
685
|
+
example4: "Convert an old <code>.elp</code> project directly to PDF:",
|
|
686
|
+
example5: "Convert all <code>.elpx</code> files in a folder to PDF:",
|
|
687
|
+
example6: "Convert all compatible files to <code>.docx</code> and save them in another folder:",
|
|
688
|
+
faqTitle: "Frequently asked questions",
|
|
689
|
+
faq1Title: "I do not know which file to download",
|
|
690
|
+
faq1Text:
|
|
691
|
+
"If you use Ubuntu or another Debian-based system, choose <code>.deb</code> in most cases. On Windows, use the <code>.exe</code> installer. On macOS, use the <code>.pkg</code> file. On other Linux distributions, try <code>.AppImage</code>.",
|
|
692
|
+
faq2Title: "Can it be used without technical knowledge?",
|
|
693
|
+
faq2Text:
|
|
694
|
+
"Yes, if you only need basic commands. This page is designed for that case. If you prefer not to use a terminal, <a href=\"../index.html\">the main eXeConvert page</a> is still the better option.",
|
|
695
|
+
faq3Title: "Where are the newest files always available?",
|
|
696
|
+
faq3Text:
|
|
697
|
+
"In the <a href=\"https://github.com/eXeConvert/eXeConvert.github.io/releases/latest\" target=\"_blank\" rel=\"noopener\">latest GitHub release</a>.",
|
|
698
|
+
backLink: "Back to the main eXeConvert page",
|
|
699
|
+
footerVersion: "Version {version} · ©",
|
|
700
|
+
footerLicense: "AGPLv3 License",
|
|
701
|
+
footerRepo: "GitHub repository",
|
|
702
|
+
footerIssues: "Issues and suggestions",
|
|
703
|
+
footerIndependent: "Independent project. Not officially affiliated with or endorsed by eXeLearning or INTEF.",
|
|
704
|
+
footerThirdParty: "This project reuses eXeLearning resources for <code>.elpx</code> compatibility. See attributions in",
|
|
705
|
+
footerPrivacyLink: "Privacy",
|
|
706
|
+
footerPrivacy:
|
|
707
|
+
"This application only collects aggregated usage statistics with an in-house system to understand how it is used and improve the tool. No IP addresses are stored and no analytics cookies are used for visitors."
|
|
708
|
+
}
|
|
709
|
+
};
|
|
710
|
+
|
|
711
|
+
function resolveLocale() {
|
|
712
|
+
const params = new URLSearchParams(window.location.search);
|
|
713
|
+
const queryLocale = params.get("lang");
|
|
714
|
+
if (SUPPORTED_LOCALES.includes(queryLocale)) {
|
|
715
|
+
return queryLocale;
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
const stored = localStorage.getItem(STORAGE_KEY);
|
|
719
|
+
if (SUPPORTED_LOCALES.includes(stored)) {
|
|
720
|
+
return stored;
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
const nav = (navigator.language || "es").toLowerCase();
|
|
724
|
+
if (nav.startsWith("ca")) return "ca";
|
|
725
|
+
if (nav.startsWith("en")) return "en";
|
|
726
|
+
return "es";
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
function setHtml(id, value) {
|
|
730
|
+
const node = document.getElementById(id);
|
|
731
|
+
if (node) {
|
|
732
|
+
node.innerHTML = value;
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
function setText(id, value) {
|
|
737
|
+
const node = document.getElementById(id);
|
|
738
|
+
if (node) {
|
|
739
|
+
node.textContent = value;
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
function applyTranslations(locale) {
|
|
744
|
+
const copy = translations[locale] || translations.es;
|
|
745
|
+
document.documentElement.lang = locale;
|
|
746
|
+
document.title = copy.pageTitle;
|
|
747
|
+
|
|
748
|
+
const select = document.getElementById("language-select");
|
|
749
|
+
if (select) {
|
|
750
|
+
select.setAttribute("aria-label", copy.langLabel);
|
|
751
|
+
select.value = locale;
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
setText("cli-title", copy.title);
|
|
755
|
+
setText("release-label", copy.releaseLabel);
|
|
756
|
+
setText("cli-subtitle", copy.subtitle);
|
|
757
|
+
setHtml("cli-intro", copy.intro);
|
|
758
|
+
setText("cli-download-button", copy.downloadButton);
|
|
759
|
+
setText("downloads-title", copy.downloadsTitle);
|
|
760
|
+
setText("download-deb-title", copy.debTitle);
|
|
761
|
+
setHtml("download-deb-text", copy.debText);
|
|
762
|
+
setText("download-appimage-title", copy.appImageTitle);
|
|
763
|
+
setHtml("download-appimage-text", copy.appImageText);
|
|
764
|
+
setText("download-windows-title", copy.windowsTitle);
|
|
765
|
+
setHtml("download-windows-text", copy.windowsText);
|
|
766
|
+
setText("download-macos-title", copy.macosTitle);
|
|
767
|
+
setHtml("download-macos-text", copy.macosText);
|
|
768
|
+
setHtml("cli-note", copy.note);
|
|
769
|
+
setText("first-use-title", copy.firstUseTitle);
|
|
770
|
+
setText("step-1-title", copy.step1Title);
|
|
771
|
+
setHtml("step-1-text", copy.step1Text);
|
|
772
|
+
setText("step-2-title", copy.step2Title);
|
|
773
|
+
setHtml("step-2-text", copy.step2Text);
|
|
774
|
+
setText("step-3-title", copy.step3Title);
|
|
775
|
+
setHtml("step-3-text", copy.step3Text);
|
|
776
|
+
setText("step-4-title", copy.step4Title);
|
|
777
|
+
setHtml("step-4-text", copy.step4Text);
|
|
778
|
+
setText("commands-title", copy.commandsTitle);
|
|
779
|
+
setText("commands-intro", copy.commandsIntro);
|
|
780
|
+
setHtml("commands-note", copy.commandsNote);
|
|
781
|
+
setText("batch-title", copy.batchTitle);
|
|
782
|
+
setHtml("batch-intro", copy.batchIntro);
|
|
783
|
+
setHtml("batch-example-1-label", copy.batchExample1);
|
|
784
|
+
setHtml("batch-example-2-label", copy.batchExample2);
|
|
785
|
+
setHtml("batch-note", copy.batchNote);
|
|
786
|
+
setText("examples-title", copy.examplesTitle);
|
|
787
|
+
setHtml("example-1-label", copy.example1);
|
|
788
|
+
setHtml("example-2-label", copy.example2);
|
|
789
|
+
setHtml("example-3-label", copy.example3);
|
|
790
|
+
setHtml("example-4-label", copy.example4);
|
|
791
|
+
setHtml("example-5-label", copy.example5);
|
|
792
|
+
setHtml("example-6-label", copy.example6);
|
|
793
|
+
setText("faq-title", copy.faqTitle);
|
|
794
|
+
setText("faq-1-title", copy.faq1Title);
|
|
795
|
+
setHtml("faq-1-text", copy.faq1Text);
|
|
796
|
+
setText("faq-2-title", copy.faq2Title);
|
|
797
|
+
setHtml("faq-2-text", copy.faq2Text);
|
|
798
|
+
setText("faq-3-title", copy.faq3Title);
|
|
799
|
+
setHtml("faq-3-text", copy.faq3Text);
|
|
800
|
+
setText("back-link", copy.backLink);
|
|
801
|
+
setText("footer-version", copy.footerVersion.replace("{version}", document.getElementById("release-value")?.textContent || "..."));
|
|
802
|
+
setText("footer-license", copy.footerLicense);
|
|
803
|
+
setText("footer-repo", copy.footerRepo);
|
|
804
|
+
setText("footer-issues", copy.footerIssues);
|
|
805
|
+
setText("footer-independent", copy.footerIndependent);
|
|
806
|
+
setHtml("footer-third-party", copy.footerThirdParty);
|
|
807
|
+
setText("footer-privacy-link", copy.footerPrivacyLink);
|
|
808
|
+
setText("footer-privacy", copy.footerPrivacy);
|
|
809
|
+
}
|
|
810
|
+
|
|
811
|
+
function persistLocale(locale) {
|
|
812
|
+
localStorage.setItem(STORAGE_KEY, locale);
|
|
813
|
+
const url = new URL(window.location.href);
|
|
814
|
+
url.searchParams.set("lang", locale);
|
|
815
|
+
window.history.replaceState({}, "", url);
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
async function loadLatestVersion() {
|
|
819
|
+
try {
|
|
820
|
+
const response = await fetch(RELEASES_API_URL, {
|
|
821
|
+
headers: {
|
|
822
|
+
Accept: "application/vnd.github+json"
|
|
823
|
+
}
|
|
824
|
+
});
|
|
825
|
+
if (!response.ok) {
|
|
826
|
+
throw new Error(`HTTP ${response.status}`);
|
|
827
|
+
}
|
|
828
|
+
const data = await response.json();
|
|
829
|
+
const version = data.tag_name || data.name || "...";
|
|
830
|
+
const releaseValue = document.getElementById("release-value");
|
|
831
|
+
if (releaseValue) {
|
|
832
|
+
releaseValue.textContent = version;
|
|
833
|
+
}
|
|
834
|
+
applyTranslations(document.documentElement.lang || activeLocale);
|
|
835
|
+
} catch {
|
|
836
|
+
const releaseValue = document.getElementById("release-value");
|
|
837
|
+
if (releaseValue) {
|
|
838
|
+
releaseValue.textContent = "...";
|
|
839
|
+
}
|
|
840
|
+
applyTranslations(document.documentElement.lang || activeLocale);
|
|
841
|
+
}
|
|
842
|
+
}
|
|
843
|
+
|
|
844
|
+
function loadAnalyticsInBackground() {
|
|
845
|
+
const endpoint = document.querySelector('meta[name="analytics-endpoint"]')?.content;
|
|
846
|
+
const siteId = document.querySelector('meta[name="analytics-site-id"]')?.content;
|
|
847
|
+
if (!endpoint || !siteId) {
|
|
848
|
+
return;
|
|
849
|
+
}
|
|
850
|
+
|
|
851
|
+
const cooldownMs = 30 * 60 * 1000;
|
|
852
|
+
const timeoutMs = 2500;
|
|
853
|
+
const storageKey = `analytics:last-visit:${siteId}`;
|
|
854
|
+
let summaryOnly = false;
|
|
855
|
+
|
|
856
|
+
try {
|
|
857
|
+
const lastVisit = Number(localStorage.getItem(storageKey) || "0");
|
|
858
|
+
if (lastVisit > 0 && Date.now() - lastVisit < cooldownMs) {
|
|
859
|
+
summaryOnly = true;
|
|
860
|
+
}
|
|
861
|
+
} catch {
|
|
862
|
+
summaryOnly = false;
|
|
863
|
+
}
|
|
864
|
+
|
|
865
|
+
const callbackName = `analyticsCallback_${Date.now()}_${Math.random().toString(36).slice(2)}`;
|
|
866
|
+
const url = new URL(endpoint);
|
|
867
|
+
const currentUrl = new URL(window.location.href);
|
|
868
|
+
|
|
869
|
+
url.searchParams.set("callback", callbackName);
|
|
870
|
+
url.searchParams.set("page_url", currentUrl.href);
|
|
871
|
+
if (document.referrer) {
|
|
872
|
+
url.searchParams.set("referrer", document.referrer);
|
|
873
|
+
}
|
|
874
|
+
for (const key of ["utm_source", "utm_medium", "utm_campaign"]) {
|
|
875
|
+
const value = currentUrl.searchParams.get(key);
|
|
876
|
+
if (value) {
|
|
877
|
+
url.searchParams.set(key, value);
|
|
878
|
+
}
|
|
879
|
+
}
|
|
880
|
+
if (summaryOnly) {
|
|
881
|
+
url.searchParams.set("summary_only", "1");
|
|
882
|
+
}
|
|
883
|
+
|
|
884
|
+
const script = document.createElement("script");
|
|
885
|
+
let finished = false;
|
|
886
|
+
let timeoutId = 0;
|
|
887
|
+
|
|
888
|
+
const cleanup = () => {
|
|
889
|
+
if (finished) {
|
|
890
|
+
return;
|
|
891
|
+
}
|
|
892
|
+
finished = true;
|
|
893
|
+
window.clearTimeout(timeoutId);
|
|
894
|
+
delete window[callbackName];
|
|
895
|
+
script.remove();
|
|
896
|
+
};
|
|
897
|
+
|
|
898
|
+
window[callbackName] = () => {
|
|
899
|
+
if (!summaryOnly) {
|
|
900
|
+
try {
|
|
901
|
+
localStorage.setItem(storageKey, String(Date.now()));
|
|
902
|
+
} catch {
|
|
903
|
+
// Ignore storage failures and keep the page working.
|
|
904
|
+
}
|
|
905
|
+
}
|
|
906
|
+
cleanup();
|
|
907
|
+
};
|
|
908
|
+
|
|
909
|
+
script.async = true;
|
|
910
|
+
script.src = url.toString();
|
|
911
|
+
script.onerror = cleanup;
|
|
912
|
+
timeoutId = window.setTimeout(cleanup, timeoutMs);
|
|
913
|
+
document.head.appendChild(script);
|
|
914
|
+
}
|
|
915
|
+
|
|
916
|
+
function scheduleAnalyticsLoad() {
|
|
917
|
+
if ("requestIdleCallback" in window) {
|
|
918
|
+
window.requestIdleCallback(loadAnalyticsInBackground, { timeout: 2000 });
|
|
919
|
+
return;
|
|
920
|
+
}
|
|
921
|
+
const run = () => {
|
|
922
|
+
window.setTimeout(loadAnalyticsInBackground, 0);
|
|
923
|
+
};
|
|
924
|
+
if (document.readyState === "complete") {
|
|
925
|
+
run();
|
|
926
|
+
} else {
|
|
927
|
+
window.addEventListener("load", run, { once: true });
|
|
928
|
+
}
|
|
929
|
+
}
|
|
930
|
+
|
|
931
|
+
const activeLocale = resolveLocale();
|
|
932
|
+
applyTranslations(activeLocale);
|
|
933
|
+
loadLatestVersion();
|
|
934
|
+
scheduleAnalyticsLoad();
|
|
935
|
+
|
|
936
|
+
document.getElementById("language-select")?.addEventListener("change", event => {
|
|
937
|
+
const locale = event.target.value;
|
|
938
|
+
if (!SUPPORTED_LOCALES.includes(locale)) {
|
|
939
|
+
return;
|
|
940
|
+
}
|
|
941
|
+
persistLocale(locale);
|
|
942
|
+
applyTranslations(locale);
|
|
943
|
+
});
|
|
944
|
+
|
|
945
|
+
document.getElementById("footer-privacy-link")?.addEventListener("click", event => {
|
|
946
|
+
event.preventDefault();
|
|
947
|
+
const privacy = document.getElementById("footer-privacy");
|
|
948
|
+
if (!privacy) {
|
|
949
|
+
return;
|
|
950
|
+
}
|
|
951
|
+
privacy.hidden = !privacy.hidden;
|
|
952
|
+
});
|
|
953
|
+
</script>
|
|
954
|
+
</body>
|
|
955
|
+
</html>
|