@cabin-icarus/tooltip_generator 1.7.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/.gitattributes +2 -0
- package/.github/workflows/npm-publish.yml +30 -0
- package/ModifierProperties.d.ts +237 -0
- package/README.md +39 -0
- package/_package.json +30 -0
- package/fsWatcher.js +81 -0
- package/fsWatcher.ts +70 -0
- package/init.js +146 -0
- package/init.ts +143 -0
- package/install.js +192 -0
- package/install.ts +144 -0
- package/languages.js +33 -0
- package/languages.ts +30 -0
- package/localization/localizationData.js +26 -0
- package/localization/localizationData.ts +31 -0
- package/localizationCompiler.js +438 -0
- package/localizationCompiler.ts +362 -0
- package/localizationInterfaces.js +2 -0
- package/localizationInterfaces.ts +100 -0
- package/package.json +49 -0
- package/tsconfig.json +72 -0
|
@@ -0,0 +1,438 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
var __values = (this && this.__values) || function(o) {
|
|
22
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
23
|
+
if (m) return m.call(o);
|
|
24
|
+
if (o && typeof o.length === "number") return {
|
|
25
|
+
next: function () {
|
|
26
|
+
if (o && i >= o.length) o = void 0;
|
|
27
|
+
return { value: o && o[i++], done: !o };
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
31
|
+
};
|
|
32
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
33
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
34
|
+
if (!m) return o;
|
|
35
|
+
var i = m.call(o), r, ar = [], e;
|
|
36
|
+
try {
|
|
37
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
38
|
+
}
|
|
39
|
+
catch (error) { e = { error: error }; }
|
|
40
|
+
finally {
|
|
41
|
+
try {
|
|
42
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
43
|
+
}
|
|
44
|
+
finally { if (e) throw e.error; }
|
|
45
|
+
}
|
|
46
|
+
return ar;
|
|
47
|
+
};
|
|
48
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
49
|
+
exports.LocalizationCompiler = void 0;
|
|
50
|
+
var fs = __importStar(require("fs"));
|
|
51
|
+
var path = __importStar(require("path"));
|
|
52
|
+
var valve_kv_1 = require("valve-kv");
|
|
53
|
+
var languages_1 = require("~resource/languages");
|
|
54
|
+
var LocalizationCompiler = /** @class */ (function () {
|
|
55
|
+
function LocalizationCompiler() {
|
|
56
|
+
this.addon_filepath = path.join("node_modules/~resource", "addon_");
|
|
57
|
+
this.filepath_format = ".txt";
|
|
58
|
+
this.currentWrites = new Set();
|
|
59
|
+
}
|
|
60
|
+
// Helper functions
|
|
61
|
+
LocalizationCompiler.prototype.TransformForLocalization = function (text, modifier) {
|
|
62
|
+
if (modifier) {
|
|
63
|
+
text = text.replace(/\{([^f]\w+)\}($|[^%])/g, "%d$1%$2");
|
|
64
|
+
text = text.replace(/\{([^f]\w+)\}%/g, "%d$1%%%");
|
|
65
|
+
text = text.replace(/\{f(\w+)\}($|[^%])/g, "%f$1%$2");
|
|
66
|
+
text = text.replace(/\{f(\w+)\}%/g, "%f$1%%%");
|
|
67
|
+
text = text.replace(/%\{([^f]\w+)\}/g, "%%%d$1%");
|
|
68
|
+
text = text.replace(/%\{f(\w+)\}/g, "%%%f$1%");
|
|
69
|
+
return text;
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
text = text.replace(/\{(\w*)}($|[^%])/g, "%$1%$2");
|
|
73
|
+
text = text.replace(/\{(\w*)}%/g, "%$1%%%");
|
|
74
|
+
text = text.replace(/%\{(\w*)}/g, "%%%$1%");
|
|
75
|
+
return text;
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
LocalizationCompiler.prototype.OnLocalizationDataChanged = function (allData) {
|
|
79
|
+
var e_1, _a, e_2, _b;
|
|
80
|
+
// console.log("Localization event fired");
|
|
81
|
+
var Abilities = new Array();
|
|
82
|
+
var Modifiers = new Array();
|
|
83
|
+
var StandardTooltips = new Array();
|
|
84
|
+
//let Talents: Array<HeroTalents> = new Array<HeroTalents>();
|
|
85
|
+
var localization_info = {
|
|
86
|
+
AbilityArray: Abilities,
|
|
87
|
+
ModifierArray: Modifiers,
|
|
88
|
+
StandardArray: StandardTooltips,
|
|
89
|
+
};
|
|
90
|
+
try {
|
|
91
|
+
for (var _c = __values(Object.entries(allData)), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
92
|
+
var _e = __read(_d.value, 2), key = _e[0], data = _e[1];
|
|
93
|
+
if (data.AbilityArray) {
|
|
94
|
+
Array.prototype.push.apply(Abilities, data.AbilityArray);
|
|
95
|
+
}
|
|
96
|
+
if (data.ModifierArray) {
|
|
97
|
+
Array.prototype.push.apply(Modifiers, data.ModifierArray);
|
|
98
|
+
}
|
|
99
|
+
if (data.StandardArray) {
|
|
100
|
+
Array.prototype.push.apply(StandardTooltips, data.StandardArray);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
105
|
+
finally {
|
|
106
|
+
try {
|
|
107
|
+
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
108
|
+
}
|
|
109
|
+
finally { if (e_1) throw e_1.error; }
|
|
110
|
+
}
|
|
111
|
+
// Generate information for every language
|
|
112
|
+
var languages = Object.values(languages_1.Language).filter(function (v) { return typeof v !== "number"; });
|
|
113
|
+
try {
|
|
114
|
+
for (var languages_2 = __values(languages), languages_2_1 = languages_2.next(); !languages_2_1.done; languages_2_1 = languages_2.next()) {
|
|
115
|
+
var language = languages_2_1.value;
|
|
116
|
+
if (language !== languages_1.Language.None) {
|
|
117
|
+
var tokens = this.GenerateContentStringForLanguage(language, localization_info);
|
|
118
|
+
this.WriteContentToAddonFile(language, tokens);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
123
|
+
finally {
|
|
124
|
+
try {
|
|
125
|
+
if (languages_2_1 && !languages_2_1.done && (_b = languages_2.return)) _b.call(languages_2);
|
|
126
|
+
}
|
|
127
|
+
finally { if (e_2) throw e_2.error; }
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
LocalizationCompiler.prototype.GenerateContentStringForLanguage = function (language, localized_data) {
|
|
131
|
+
var e_3, _a, e_4, _b, e_5, _c, e_6, _d, e_7, _e, e_8, _f, e_9, _g, e_10, _h;
|
|
132
|
+
var tokens = {};
|
|
133
|
+
// Go over standard tooltips
|
|
134
|
+
if (localized_data.StandardArray) {
|
|
135
|
+
try {
|
|
136
|
+
for (var _j = __values(localized_data.StandardArray), _k = _j.next(); !_k.done; _k = _j.next()) {
|
|
137
|
+
var standardLocalization = _k.value;
|
|
138
|
+
// Check for name override for the language we're checking
|
|
139
|
+
var standard_tooltip_string = standardLocalization.name;
|
|
140
|
+
if (standardLocalization.language_overrides && standardLocalization.language_overrides.length > 0) {
|
|
141
|
+
try {
|
|
142
|
+
for (var _l = (e_4 = void 0, __values(standardLocalization.language_overrides)), _m = _l.next(); !_m.done; _m = _l.next()) {
|
|
143
|
+
var language_override = _m.value;
|
|
144
|
+
if (language_override.language === language) {
|
|
145
|
+
standard_tooltip_string = language_override.name_override;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
150
|
+
finally {
|
|
151
|
+
try {
|
|
152
|
+
if (_m && !_m.done && (_b = _l.return)) _b.call(_l);
|
|
153
|
+
}
|
|
154
|
+
finally { if (e_4) throw e_4.error; }
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
tokens[standardLocalization.classname] = standard_tooltip_string;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
161
|
+
finally {
|
|
162
|
+
try {
|
|
163
|
+
if (_k && !_k.done && (_a = _j.return)) _a.call(_j);
|
|
164
|
+
}
|
|
165
|
+
finally { if (e_3) throw e_3.error; }
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// Go over abilities for this language
|
|
169
|
+
if (localized_data.AbilityArray) {
|
|
170
|
+
try {
|
|
171
|
+
for (var _o = __values(localized_data.AbilityArray), _p = _o.next(); !_p.done; _p = _o.next()) {
|
|
172
|
+
var ability = _p.value;
|
|
173
|
+
// Class name is identical for all languages, so we would always use it
|
|
174
|
+
var ability_string = "DOTA_Tooltip_Ability_" + ability.ability_classname;
|
|
175
|
+
// Name
|
|
176
|
+
var ability_name = ability.name;
|
|
177
|
+
var ability_description = ability.description;
|
|
178
|
+
//let reimagined_effects = ability.reimagined_effects;
|
|
179
|
+
var ability_lore = ability.lore;
|
|
180
|
+
var ability_notes = ability.notes;
|
|
181
|
+
var scepter_description = ability.scepter_description;
|
|
182
|
+
var shard_description = ability.shard_description;
|
|
183
|
+
var ability_specials = ability.ability_specials;
|
|
184
|
+
if (ability.language_overrides) {
|
|
185
|
+
try {
|
|
186
|
+
for (var _q = (e_6 = void 0, __values(ability.language_overrides)), _r = _q.next(); !_r.done; _r = _q.next()) {
|
|
187
|
+
var language_override = _r.value;
|
|
188
|
+
if (language_override.language === language) {
|
|
189
|
+
// Check for name override
|
|
190
|
+
if (language_override.name_override) {
|
|
191
|
+
ability_name = language_override.name_override;
|
|
192
|
+
}
|
|
193
|
+
// Check for description overrides
|
|
194
|
+
if (language_override.description_override) {
|
|
195
|
+
ability_description = language_override.description_override;
|
|
196
|
+
}
|
|
197
|
+
// Check for reimagined effect overrides
|
|
198
|
+
//if (language_override.reimagined_effects_override)
|
|
199
|
+
//{
|
|
200
|
+
//reimagined_effects = language_override.reimagined_effects_override;
|
|
201
|
+
//}
|
|
202
|
+
// Check for lore override
|
|
203
|
+
if (language_override.lore_override) {
|
|
204
|
+
ability_lore = language_override.lore_override;
|
|
205
|
+
}
|
|
206
|
+
// Check for note override
|
|
207
|
+
if (language_override.notes_override) {
|
|
208
|
+
ability_notes = language_override.notes_override;
|
|
209
|
+
}
|
|
210
|
+
// Check for scepter override
|
|
211
|
+
if (language_override.scepter_description_override) {
|
|
212
|
+
scepter_description = language_override.scepter_description_override;
|
|
213
|
+
}
|
|
214
|
+
// Check for shard override
|
|
215
|
+
if (language_override.shard_description_override) {
|
|
216
|
+
shard_description = language_override.shard_description_override;
|
|
217
|
+
}
|
|
218
|
+
// Check for ability specials override, if any
|
|
219
|
+
if (language_override.ability_specials_override) {
|
|
220
|
+
ability_specials = language_override.ability_specials_override;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
226
|
+
finally {
|
|
227
|
+
try {
|
|
228
|
+
if (_r && !_r.done && (_d = _q.return)) _d.call(_q);
|
|
229
|
+
}
|
|
230
|
+
finally { if (e_6) throw e_6.error; }
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
// Add name localization
|
|
234
|
+
if (ability_name) {
|
|
235
|
+
tokens[ability_string] = ability_name;
|
|
236
|
+
}
|
|
237
|
+
// Add description localization
|
|
238
|
+
if (ability_description) {
|
|
239
|
+
ability_description = this.TransformForLocalization(ability_description, false);
|
|
240
|
+
tokens[ability_string + "_description"] = ability_description;
|
|
241
|
+
}
|
|
242
|
+
// Lore, if any
|
|
243
|
+
if (ability_lore) {
|
|
244
|
+
var transformed_lore = this.TransformForLocalization(ability_lore, false);
|
|
245
|
+
tokens[ability_string + "_Lore"] = transformed_lore;
|
|
246
|
+
}
|
|
247
|
+
// Notes, if any
|
|
248
|
+
if (ability_notes) {
|
|
249
|
+
var counter = 0;
|
|
250
|
+
try {
|
|
251
|
+
for (var ability_notes_1 = (e_7 = void 0, __values(ability_notes)), ability_notes_1_1 = ability_notes_1.next(); !ability_notes_1_1.done; ability_notes_1_1 = ability_notes_1.next()) {
|
|
252
|
+
var note = ability_notes_1_1.value;
|
|
253
|
+
var transformed_note = this.TransformForLocalization(note, false);
|
|
254
|
+
tokens[ability_string + "_Note" + counter] = transformed_note;
|
|
255
|
+
counter++;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
catch (e_7_1) { e_7 = { error: e_7_1 }; }
|
|
259
|
+
finally {
|
|
260
|
+
try {
|
|
261
|
+
if (ability_notes_1_1 && !ability_notes_1_1.done && (_e = ability_notes_1.return)) _e.call(ability_notes_1);
|
|
262
|
+
}
|
|
263
|
+
finally { if (e_7) throw e_7.error; }
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
// Scepter, if any
|
|
267
|
+
if (scepter_description) {
|
|
268
|
+
var ability_scepter_description = this.TransformForLocalization(scepter_description, false);
|
|
269
|
+
tokens[ability_string + "_scepter_description"] = ability_scepter_description;
|
|
270
|
+
}
|
|
271
|
+
// Shard, if any
|
|
272
|
+
if (shard_description) {
|
|
273
|
+
var ability_shard_description = this.TransformForLocalization(shard_description, false);
|
|
274
|
+
tokens[ability_string + "_shard_description"] = ability_shard_description;
|
|
275
|
+
}
|
|
276
|
+
// Ability specials, if any
|
|
277
|
+
if (ability_specials) {
|
|
278
|
+
try {
|
|
279
|
+
for (var ability_specials_1 = (e_8 = void 0, __values(ability_specials)), ability_specials_1_1 = ability_specials_1.next(); !ability_specials_1_1.done; ability_specials_1_1 = ability_specials_1.next()) {
|
|
280
|
+
var ability_special = ability_specials_1_1.value;
|
|
281
|
+
// Construct the ability special
|
|
282
|
+
var ability_special_text = "";
|
|
283
|
+
if (ability_special.percentage) {
|
|
284
|
+
ability_special_text = "%";
|
|
285
|
+
}
|
|
286
|
+
else if (ability_special.item_stat) {
|
|
287
|
+
ability_special_text = "+$";
|
|
288
|
+
}
|
|
289
|
+
ability_special_text += ability_special.text;
|
|
290
|
+
tokens[ability_string + "_" + ability_special.ability_special] = ability_special_text;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
catch (e_8_1) { e_8 = { error: e_8_1 }; }
|
|
294
|
+
finally {
|
|
295
|
+
try {
|
|
296
|
+
if (ability_specials_1_1 && !ability_specials_1_1.done && (_f = ability_specials_1.return)) _f.call(ability_specials_1);
|
|
297
|
+
}
|
|
298
|
+
finally { if (e_8) throw e_8.error; }
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
304
|
+
finally {
|
|
305
|
+
try {
|
|
306
|
+
if (_p && !_p.done && (_c = _o.return)) _c.call(_o);
|
|
307
|
+
}
|
|
308
|
+
finally { if (e_5) throw e_5.error; }
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
// Go over modifiers
|
|
312
|
+
if (localized_data.ModifierArray) {
|
|
313
|
+
try {
|
|
314
|
+
for (var _s = __values(localized_data.ModifierArray), _t = _s.next(); !_t.done; _t = _s.next()) {
|
|
315
|
+
var modifier = _t.value;
|
|
316
|
+
var modifier_string = "DOTA_Tooltip_" + modifier.modifier_classname;
|
|
317
|
+
// Name
|
|
318
|
+
var modifier_name = modifier.name;
|
|
319
|
+
var modifier_description = modifier.description;
|
|
320
|
+
if (modifier.language_overrides) {
|
|
321
|
+
try {
|
|
322
|
+
for (var _u = (e_10 = void 0, __values(modifier.language_overrides)), _v = _u.next(); !_v.done; _v = _u.next()) {
|
|
323
|
+
var language_override = _v.value;
|
|
324
|
+
if (language_override.language === language) {
|
|
325
|
+
// Name overrides for a specific language, if necessary
|
|
326
|
+
if (language_override.name_override) {
|
|
327
|
+
modifier_name = language_override.name_override;
|
|
328
|
+
}
|
|
329
|
+
// Description overrides for a specific language, if necessary
|
|
330
|
+
if (language_override.description_override) {
|
|
331
|
+
modifier_description = language_override.description_override;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
catch (e_10_1) { e_10 = { error: e_10_1 }; }
|
|
337
|
+
finally {
|
|
338
|
+
try {
|
|
339
|
+
if (_v && !_v.done && (_h = _u.return)) _h.call(_u);
|
|
340
|
+
}
|
|
341
|
+
finally { if (e_10) throw e_10.error; }
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
// Add name to localization string
|
|
345
|
+
if (modifier_name) {
|
|
346
|
+
tokens[modifier_string] = modifier_name;
|
|
347
|
+
}
|
|
348
|
+
// Add description to localization string
|
|
349
|
+
if (modifier_description) {
|
|
350
|
+
modifier_description = this.TransformForLocalization(modifier_description, true);
|
|
351
|
+
tokens[modifier_string + "_description"] = modifier_description;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
catch (e_9_1) { e_9 = { error: e_9_1 }; }
|
|
356
|
+
finally {
|
|
357
|
+
try {
|
|
358
|
+
if (_t && !_t.done && (_g = _s.return)) _g.call(_s);
|
|
359
|
+
}
|
|
360
|
+
finally { if (e_9) throw e_9.error; }
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
return tokens;
|
|
364
|
+
};
|
|
365
|
+
LocalizationCompiler.prototype.WriteContentToAddonFile = function (language, tokens) {
|
|
366
|
+
var _this = this;
|
|
367
|
+
// Set based on language
|
|
368
|
+
var filepath = this.addon_filepath + language.toString() + this.filepath_format;
|
|
369
|
+
// Add the opening tokens
|
|
370
|
+
var kv = { lang: { Language: language, Tokens: tokens } };
|
|
371
|
+
// Serialize!
|
|
372
|
+
var write_string = valve_kv_1.serialize(kv);
|
|
373
|
+
// Try writing if the output is not busy
|
|
374
|
+
this.TryWriting(filepath, write_string, function () {
|
|
375
|
+
// Prepare the output
|
|
376
|
+
_this.currentWrites.add(language);
|
|
377
|
+
if (_this.writeTimeout) {
|
|
378
|
+
clearTimeout(_this.writeTimeout);
|
|
379
|
+
}
|
|
380
|
+
_this.writeTimeout = setTimeout(function () { return _this.FinishWrite(); }, 500);
|
|
381
|
+
});
|
|
382
|
+
};
|
|
383
|
+
LocalizationCompiler.prototype.TryWriting = function (filepath, write_string, success, tries) {
|
|
384
|
+
var _this = this;
|
|
385
|
+
if (tries === void 0) { tries = 0; }
|
|
386
|
+
if (tries > 5) {
|
|
387
|
+
console.log("\x1b[31m%s\x1b[0m", "Tried too many times to write without success!");
|
|
388
|
+
return;
|
|
389
|
+
}
|
|
390
|
+
try {
|
|
391
|
+
// Remove file contents, or create a fresh one if it doesn't exists yet.
|
|
392
|
+
var fd = fs.openSync(filepath, 'w');
|
|
393
|
+
fs.closeSync(fd);
|
|
394
|
+
// Write to the file
|
|
395
|
+
fs.writeFileSync(filepath, write_string);
|
|
396
|
+
}
|
|
397
|
+
catch (_a) {
|
|
398
|
+
// try again after a short time
|
|
399
|
+
setTimeout(function () { return _this.TryWriting(filepath, write_string, success, tries + 1); }, 1000);
|
|
400
|
+
return;
|
|
401
|
+
}
|
|
402
|
+
success();
|
|
403
|
+
};
|
|
404
|
+
// Print the output
|
|
405
|
+
LocalizationCompiler.prototype.FinishWrite = function () {
|
|
406
|
+
var e_11, _a;
|
|
407
|
+
if (this.currentWrites.size === 0)
|
|
408
|
+
return;
|
|
409
|
+
var languages = [];
|
|
410
|
+
try {
|
|
411
|
+
for (var _b = __values(this.currentWrites.values()), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
412
|
+
var language = _c.value;
|
|
413
|
+
languages.push(language);
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
catch (e_11_1) { e_11 = { error: e_11_1 }; }
|
|
417
|
+
finally {
|
|
418
|
+
try {
|
|
419
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
420
|
+
}
|
|
421
|
+
finally { if (e_11) throw e_11.error; }
|
|
422
|
+
}
|
|
423
|
+
this.currentWrites.clear();
|
|
424
|
+
var languageText = languages[0];
|
|
425
|
+
if (languages.length > 1) {
|
|
426
|
+
var lastLang = languages.splice(-1)[0];
|
|
427
|
+
var otherLangs = languages.join(", ");
|
|
428
|
+
if (otherLangs !== "") {
|
|
429
|
+
languageText = otherLangs;
|
|
430
|
+
}
|
|
431
|
+
languageText += " and " + lastLang;
|
|
432
|
+
}
|
|
433
|
+
console.log("Finished writing tooltips for " + languageText);
|
|
434
|
+
console.log("");
|
|
435
|
+
};
|
|
436
|
+
return LocalizationCompiler;
|
|
437
|
+
}());
|
|
438
|
+
exports.LocalizationCompiler = LocalizationCompiler;
|