hybridtm 0.3.0 → 0.5.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.
Files changed (107) hide show
  1. package/dist/{ts/tmxHandler.d.ts → tmxHandler.d.ts} +1 -0
  2. package/dist/{ts/tmxHandler.js → tmxHandler.js} +10 -0
  3. package/dist/{tmxhandler.js.map → tmxHandler.js.map} +1 -1
  4. package/dist/{ts/xliffHandler.d.ts → xliffHandler.d.ts} +1 -0
  5. package/dist/{ts/xliffHandler.js → xliffHandler.js} +10 -0
  6. package/dist/{xliffhandler.js.map → xliffHandler.js.map} +1 -1
  7. package/package.json +14 -9
  8. package/dist/batchimporter.d.ts +0 -22
  9. package/dist/batchimporter.js +0 -203
  10. package/dist/constants.d.ts +0 -15
  11. package/dist/constants.js +0 -16
  12. package/dist/constants.js.map +0 -1
  13. package/dist/debug-progress.d.ts +0 -12
  14. package/dist/debug-progress.js +0 -49
  15. package/dist/debug-progress.js.map +0 -1
  16. package/dist/ngramIndex.d.ts +0 -31
  17. package/dist/ngramIndex.js +0 -132
  18. package/dist/ngramIndex.js.map +0 -1
  19. package/dist/ngrams.d.ts +0 -21
  20. package/dist/ngrams.js +0 -73
  21. package/dist/ngrams.js.map +0 -1
  22. package/dist/package.json +0 -35
  23. package/dist/progressProvider.d.ts +0 -17
  24. package/dist/progressProvider.js +0 -14
  25. package/dist/progressProvider.js.map +0 -1
  26. package/dist/simplexlifftest.d.ts +0 -1
  27. package/dist/simplexlifftest.js +0 -23
  28. package/dist/simplexlifftest.js.map +0 -1
  29. package/dist/test-import.d.ts +0 -12
  30. package/dist/test-import.js +0 -101
  31. package/dist/test-import.js.map +0 -1
  32. package/dist/test-progress-fix.d.ts +0 -1
  33. package/dist/test-progress-fix.js +0 -32
  34. package/dist/test-progress-fix.js.map +0 -1
  35. package/dist/test-progress.d.ts +0 -12
  36. package/dist/test-progress.js +0 -32
  37. package/dist/test-progress.js.map +0 -1
  38. package/dist/tests/vectorSimilarityComparison.d.ts +0 -12
  39. package/dist/tests/vectorSimilarityComparison.js +0 -153
  40. package/dist/tests/vectorSimilarityComparison.js.map +0 -1
  41. package/dist/tmxhandler.d.ts +0 -61
  42. package/dist/tmxhandler.js +0 -347
  43. package/dist/tmxreader.d.ts +0 -25
  44. package/dist/tmxreader.js +0 -51
  45. package/dist/tmxtest.d.ts +0 -16
  46. package/dist/tmxtest.js +0 -316
  47. package/dist/tmxtest.js.map +0 -1
  48. package/dist/ts/batchImporter.js.map +0 -1
  49. package/dist/ts/hybridtm.d.ts +0 -67
  50. package/dist/ts/hybridtm.js +0 -932
  51. package/dist/ts/hybridtm.js.map +0 -1
  52. package/dist/ts/hybridtmFactory.d.ts +0 -43
  53. package/dist/ts/hybridtmFactory.js +0 -165
  54. package/dist/ts/hybridtmFactory.js.map +0 -1
  55. package/dist/ts/importOptions.d.ts +0 -21
  56. package/dist/ts/importOptions.js +0 -24
  57. package/dist/ts/importOptions.js.map +0 -1
  58. package/dist/ts/index.d.ts +0 -25
  59. package/dist/ts/index.js +0 -22
  60. package/dist/ts/index.js.map +0 -1
  61. package/dist/ts/langEntry.d.ts +0 -64
  62. package/dist/ts/langEntry.js +0 -13
  63. package/dist/ts/langEntry.js.map +0 -1
  64. package/dist/ts/match.d.ts +0 -22
  65. package/dist/ts/match.js +0 -38
  66. package/dist/ts/match.js.map +0 -1
  67. package/dist/ts/matchQuality.d.ts +0 -16
  68. package/dist/ts/matchQuality.js +0 -83
  69. package/dist/ts/matchQuality.js.map +0 -1
  70. package/dist/ts/pendingEntry.d.ts +0 -24
  71. package/dist/ts/pendingEntry.js +0 -13
  72. package/dist/ts/pendingEntry.js.map +0 -1
  73. package/dist/ts/searchFilters.d.ts +0 -24
  74. package/dist/ts/searchFilters.js +0 -13
  75. package/dist/ts/searchFilters.js.map +0 -1
  76. package/dist/ts/tmxHandler.js.map +0 -1
  77. package/dist/ts/tmxReader.js.map +0 -1
  78. package/dist/ts/tmxtest.d.ts +0 -16
  79. package/dist/ts/tmxtest.js +0 -316
  80. package/dist/ts/tmxtest.js.map +0 -1
  81. package/dist/ts/utils.d.ts +0 -17
  82. package/dist/ts/utils.js +0 -49
  83. package/dist/ts/utils.js.map +0 -1
  84. package/dist/ts/xliffHandler.js.map +0 -1
  85. package/dist/ts/xliffReader.js.map +0 -1
  86. package/dist/ts/xlifftest.d.ts +0 -54
  87. package/dist/ts/xlifftest.js +0 -245
  88. package/dist/ts/xlifftest.js.map +0 -1
  89. package/dist/vectorSimilarityTester.d.ts +0 -56
  90. package/dist/vectorSimilarityTester.js +0 -164
  91. package/dist/vectorSimilarityTester.js.map +0 -1
  92. package/dist/xliffhandler.d.ts +0 -67
  93. package/dist/xliffhandler.js +0 -522
  94. package/dist/xliffreader.d.ts +0 -25
  95. package/dist/xliffreader.js +0 -50
  96. package/dist/xlifftest.d.ts +0 -54
  97. package/dist/xlifftest.js +0 -245
  98. package/dist/xlifftest.js.map +0 -1
  99. /package/dist/{ts/batchImporter.d.ts → batchImporter.d.ts} +0 -0
  100. /package/dist/{ts/batchImporter.js → batchImporter.js} +0 -0
  101. /package/dist/{batchimporter.js.map → batchImporter.js.map} +0 -0
  102. /package/dist/{ts/tmxReader.d.ts → tmxReader.d.ts} +0 -0
  103. /package/dist/{ts/tmxReader.js → tmxReader.js} +0 -0
  104. /package/dist/{tmxreader.js.map → tmxReader.js.map} +0 -0
  105. /package/dist/{ts/xliffReader.d.ts → xliffReader.d.ts} +0 -0
  106. /package/dist/{ts/xliffReader.js → xliffReader.js} +0 -0
  107. /package/dist/{xliffreader.js.map → xliffReader.js.map} +0 -0
@@ -1,522 +0,0 @@
1
- /*******************************************************************************
2
- * Copyright (c) 2025-2026 Maxprograms.
3
- *
4
- * This program and the accompanying materials
5
- * are made available under the terms of the Eclipse License 1.0
6
- * which accompanies this distribution, and is available at
7
- * https://www.eclipse.org/org/documents/epl-v10.html
8
- *
9
- * Contributors:
10
- * Maxprograms - initial API and implementation
11
- *******************************************************************************/
12
- import { createWriteStream } from "node:fs";
13
- import { CData, TextNode, XMLElement } from "typesxml";
14
- import { DEFAULT_IMPORT_OPTIONS, resolveImportOptions } from './importOptions.js';
15
- import { Utils } from './utils.js';
16
- export class XLIFFHandler {
17
- inCdData = false;
18
- currentCData = new CData('');
19
- stack = [];
20
- srcLang = '';
21
- tgtLang = '';
22
- original = '';
23
- fileId = '';
24
- writeStream;
25
- completionPromise;
26
- entryCount = 0;
27
- options;
28
- constructor(tempFilePath, options = DEFAULT_IMPORT_OPTIONS) {
29
- this.writeStream = createWriteStream(tempFilePath, { encoding: 'utf8' });
30
- this.completionPromise = new Promise((resolve, reject) => {
31
- this.writeStream.once('finish', resolve);
32
- this.writeStream.once('error', reject);
33
- });
34
- this.options = resolveImportOptions(options);
35
- }
36
- setGrammar(grammar) {
37
- // do nothing
38
- }
39
- getEntryCount() {
40
- return this.entryCount;
41
- }
42
- waitForCompletion() {
43
- return this.completionPromise;
44
- }
45
- initialize() {
46
- this.stack = new Array();
47
- this.inCdData = false;
48
- }
49
- setCatalog(catalog) {
50
- // do nothing
51
- }
52
- startDocument() {
53
- // do nothing
54
- }
55
- endDocument() {
56
- // Close the write stream when document ends
57
- this.writeStream.end();
58
- }
59
- xmlDeclaration(version, encoding, standalone) {
60
- // do nothing
61
- }
62
- startElement(name, atts) {
63
- const element = new XMLElement(name);
64
- atts.forEach((att) => {
65
- element.setAttribute(att);
66
- });
67
- if ("xliff" === name) {
68
- const version = element.getAttribute("version");
69
- if (!version || !version.getValue().startsWith("2.")) {
70
- throw new Error("Unsupported XLIFF version");
71
- }
72
- const srcLang = element.getAttribute("srcLang");
73
- if (!srcLang) {
74
- throw new Error("Missing @srcLang attribute in <xliff>");
75
- }
76
- const trgLang = element.getAttribute("trgLang");
77
- if (!trgLang) {
78
- throw new Error("Missing @trgLang attribute in <xliff>");
79
- }
80
- this.srcLang = srcLang.getValue();
81
- this.tgtLang = trgLang.getValue();
82
- }
83
- if ("file" === name) {
84
- const original = element.getAttribute("original");
85
- this.original = original ? original.getValue() : '';
86
- const id = element.getAttribute("id");
87
- if (!id) {
88
- throw new Error("Missing @id attribute in <file>");
89
- }
90
- this.fileId = id.getValue();
91
- }
92
- if (this.stack.length > 0) {
93
- this.stack[this.stack.length - 1].addElement(element);
94
- }
95
- this.stack.push(element);
96
- }
97
- endElement(name) {
98
- if ("unit" === name) {
99
- const unit = this.stack[this.stack.length - 1];
100
- this.processUnit(unit);
101
- }
102
- this.stack.pop();
103
- }
104
- internalSubset(declaration) {
105
- // do nothing
106
- }
107
- characters(ch) {
108
- if (this.inCdData) {
109
- this.currentCData.setValue(this.currentCData.getValue() + ch);
110
- return;
111
- }
112
- const textNode = new TextNode(ch);
113
- // ignore characters outside of elements
114
- if (this.stack.length > 0) {
115
- this.stack[this.stack.length - 1].addTextNode(textNode);
116
- }
117
- }
118
- ignorableWhitespace(ch) {
119
- const textNode = new TextNode(ch);
120
- // ignore characters outside of elements
121
- if (this.stack.length > 0) {
122
- this.stack[this.stack.length - 1].addTextNode(textNode);
123
- }
124
- }
125
- comment(ch) {
126
- // do nothing
127
- }
128
- processingInstruction(target, data) {
129
- // do nothing
130
- }
131
- startCDATA() {
132
- this.inCdData = true;
133
- }
134
- endCDATA() {
135
- this.inCdData = false;
136
- }
137
- startDTD(name, publicId, systemId) {
138
- // do nothing
139
- }
140
- endDTD() {
141
- // do nothing
142
- }
143
- skippedEntity(name) {
144
- // do nothing
145
- }
146
- processUnit(unit) {
147
- const id = unit.getAttribute('id');
148
- if (!id) {
149
- throw new Error('Missing @id attribute in <unit>');
150
- }
151
- const unitId = id.getValue();
152
- const segmentElements = unit.getChildren().filter((child) => child.getName() === 'segment');
153
- let segments = [];
154
- if (segmentElements.length > 0) {
155
- segments = this.buildSegments(unitId, unit, segmentElements);
156
- if (segments.length === 0) {
157
- return;
158
- }
159
- }
160
- else {
161
- const fallback = this.buildSingleSegment(unitId, unit);
162
- if (!fallback) {
163
- return;
164
- }
165
- segments = [fallback];
166
- }
167
- const segmentCount = segments.length;
168
- segments.forEach((segment, index) => {
169
- const segmentIndex = index + 1;
170
- this.writeSegmentEntries(unitId, segmentIndex, segmentCount, segment);
171
- });
172
- if (segmentCount > 1) {
173
- this.writeMergedEntry(unitId, segments);
174
- }
175
- }
176
- buildSegments(unitId, unit, segmentElements) {
177
- const segments = [];
178
- segmentElements.forEach((segment) => {
179
- const processed = this.buildSegmentData(unitId, unit, segment);
180
- if (processed) {
181
- segments.push(processed);
182
- }
183
- });
184
- return segments;
185
- }
186
- buildSegmentData(unitId, unit, segment) {
187
- const sourceElement = segment.getChild('source');
188
- const targetElement = segment.getChild('target');
189
- if (!sourceElement || !targetElement) {
190
- return null;
191
- }
192
- const pureSource = Utils.getPureText(sourceElement);
193
- const pureTarget = Utils.getPureText(targetElement);
194
- if (pureSource.trim().length === 0) {
195
- return null;
196
- }
197
- if (this.options.skipEmpty && pureTarget.trim().length === 0) {
198
- return null;
199
- }
200
- const rawState = segment.getAttribute('state')?.getValue();
201
- const stateRank = this.getStateRank(rawState);
202
- const minRank = this.getStateRankFromOption(this.options.minState);
203
- if (stateRank > 0 && stateRank < minRank) {
204
- return null;
205
- }
206
- if (stateRank === 0 && this.options.skipUnconfirmed) {
207
- return null;
208
- }
209
- const segmentId = segment.getAttribute('id')?.getValue();
210
- const metadata = this.options.extractMetadata
211
- ? this.extractMetadata(unitId, unit, segment, rawState, segmentId)
212
- : undefined;
213
- return {
214
- source: sourceElement,
215
- target: targetElement,
216
- pureSource,
217
- pureTarget,
218
- metadata,
219
- segmentId
220
- };
221
- }
222
- buildSingleSegment(unitId, unit) {
223
- const combinedSource = new XMLElement('source');
224
- const combinedTarget = new XMLElement('target');
225
- unit.getChildren().forEach((child) => {
226
- if (child.getName() === 'segment' || child.getName() === 'ignorable') {
227
- const source = child.getChild('source');
228
- if (source) {
229
- this.appendElementContent(combinedSource, source);
230
- }
231
- const target = child.getChild('target');
232
- if (target) {
233
- this.appendElementContent(combinedTarget, target);
234
- }
235
- }
236
- });
237
- const pureSource = Utils.getPureText(combinedSource);
238
- const pureTarget = Utils.getPureText(combinedTarget);
239
- if (pureSource.trim().length === 0) {
240
- return null;
241
- }
242
- if (this.options.skipEmpty && pureTarget.trim().length === 0) {
243
- return null;
244
- }
245
- const metadata = this.options.extractMetadata
246
- ? this.extractMetadata(unitId, unit, unit)
247
- : undefined;
248
- return {
249
- source: combinedSource,
250
- target: combinedTarget,
251
- pureSource,
252
- pureTarget,
253
- metadata
254
- };
255
- }
256
- writeSegmentEntries(unitId, segmentIndex, segmentCount, segment) {
257
- const metadata = this.applySegmentPosition(segment.metadata, unitId, segment.segmentId, segmentIndex, segmentCount);
258
- this.writeEntry({
259
- language: this.srcLang,
260
- fileId: this.fileId,
261
- unitId,
262
- original: this.original,
263
- pureText: segment.pureSource,
264
- element: segment.source.toString(),
265
- segmentIndex,
266
- segmentCount,
267
- metadata
268
- });
269
- this.writeEntry({
270
- language: this.tgtLang,
271
- fileId: this.fileId,
272
- unitId,
273
- original: this.original,
274
- pureText: segment.pureTarget,
275
- element: segment.target.toString(),
276
- segmentIndex,
277
- segmentCount,
278
- metadata
279
- });
280
- }
281
- applySegmentPosition(metadata, unitId, explicitSegmentId, segmentIndex, segmentCount) {
282
- if (!metadata) {
283
- return undefined;
284
- }
285
- if (!metadata.segment) {
286
- metadata.segment = {
287
- provider: 'xliff',
288
- fileId: this.fileId,
289
- unitId,
290
- segmentId: explicitSegmentId
291
- };
292
- }
293
- else {
294
- metadata.segment.provider = metadata.segment.provider || 'xliff';
295
- metadata.segment.fileId = metadata.segment.fileId || this.fileId;
296
- metadata.segment.unitId = metadata.segment.unitId || unitId;
297
- if (!metadata.segment.segmentId && explicitSegmentId) {
298
- metadata.segment.segmentId = explicitSegmentId;
299
- }
300
- }
301
- if (!metadata.segment.segmentId && segmentIndex > 0) {
302
- metadata.segment.segmentId = explicitSegmentId || segmentIndex.toString();
303
- }
304
- metadata.segment.segmentIndex = segmentIndex;
305
- metadata.segment.segmentCount = segmentCount;
306
- return metadata;
307
- }
308
- writeMergedEntry(unitId, segments) {
309
- const mergedSource = new XMLElement('source');
310
- const mergedTarget = new XMLElement('target');
311
- segments.forEach((segment) => {
312
- this.appendElementContent(mergedSource, segment.source);
313
- this.appendElementContent(mergedTarget, segment.target);
314
- });
315
- const pureSource = Utils.getPureText(mergedSource);
316
- const pureTarget = Utils.getPureText(mergedTarget);
317
- if (pureSource.trim().length === 0) {
318
- return;
319
- }
320
- if (this.options.skipEmpty && pureTarget.trim().length === 0) {
321
- return;
322
- }
323
- this.writeEntry({
324
- language: this.srcLang,
325
- fileId: this.fileId,
326
- unitId,
327
- original: this.original,
328
- pureText: pureSource,
329
- element: mergedSource.toString(),
330
- segmentIndex: 0,
331
- segmentCount: segments.length
332
- });
333
- this.writeEntry({
334
- language: this.tgtLang,
335
- fileId: this.fileId,
336
- unitId,
337
- original: this.original,
338
- pureText: pureTarget,
339
- element: mergedTarget.toString(),
340
- segmentIndex: 0,
341
- segmentCount: segments.length
342
- });
343
- }
344
- writeEntry(entry) {
345
- const payload = {
346
- language: entry.language,
347
- fileId: entry.fileId,
348
- original: entry.original,
349
- unitId: entry.unitId,
350
- pureText: entry.pureText,
351
- element: entry.element,
352
- segmentIndex: entry.segmentIndex,
353
- segmentCount: entry.segmentCount
354
- };
355
- if (this.hasMetadata(entry.metadata)) {
356
- payload.metadata = entry.metadata;
357
- }
358
- this.writeStream.write(JSON.stringify(payload) + '\n');
359
- this.entryCount++;
360
- }
361
- hasMetadata(metadata) {
362
- return !!metadata && Object.keys(metadata).length > 0;
363
- }
364
- appendElementContent(target, element) {
365
- const content = element.getContent();
366
- content.forEach((node) => {
367
- if (node instanceof TextNode) {
368
- target.addTextNode(node);
369
- }
370
- else if (node instanceof XMLElement) {
371
- target.addElement(node);
372
- }
373
- });
374
- }
375
- extractMetadata(unitId, unit, segment, rawState, segmentId) {
376
- const metadata = {};
377
- if (this.isTranslationState(rawState)) {
378
- metadata.state = rawState;
379
- }
380
- const subState = this.readSubState(segment);
381
- if (subState) {
382
- metadata.subState = subState;
383
- }
384
- this.assignMetadataString(metadata, 'creationDate', this.readAttribute(segment, 'creationDate') || this.readAttribute(unit, 'creationDate'));
385
- this.assignMetadataString(metadata, 'creationId', this.readAttribute(segment, 'creationId') || this.readAttribute(unit, 'creationId'));
386
- this.assignMetadataString(metadata, 'changeDate', this.readAttribute(segment, 'changeDate') || this.readAttribute(unit, 'changeDate'));
387
- this.assignMetadataString(metadata, 'changeId', this.readAttribute(segment, 'changeId') || this.readAttribute(unit, 'changeId'));
388
- this.assignMetadataString(metadata, 'creationTool', this.readAttribute(segment, 'creationTool') || this.readAttribute(unit, 'creationTool'));
389
- this.assignMetadataString(metadata, 'creationToolVersion', this.readAttribute(segment, 'creationToolVersion') || this.readAttribute(unit, 'creationToolVersion'));
390
- this.assignMetadataString(metadata, 'context', this.readAttribute(segment, 'context') || this.readAttribute(unit, 'context'));
391
- const notes = [];
392
- this.collectNotes(unit, notes);
393
- this.collectNotes(segment, notes);
394
- if (notes.length > 0) {
395
- metadata.notes = notes;
396
- }
397
- const properties = {};
398
- this.collectMetadataProperties(unit, properties);
399
- this.collectMetadataProperties(segment, properties);
400
- if (Object.keys(properties).length > 0) {
401
- metadata.properties = properties;
402
- if (!metadata.context) {
403
- const contextKey = Object.keys(properties).find((key) => key.toLowerCase().includes('context'));
404
- if (contextKey) {
405
- metadata.context = properties[contextKey];
406
- }
407
- }
408
- }
409
- metadata.segment = {
410
- provider: 'xliff',
411
- fileId: this.fileId,
412
- unitId,
413
- segmentId
414
- };
415
- return metadata;
416
- }
417
- assignMetadataString(metadata, key, value) {
418
- if (value && value.length > 0) {
419
- metadata[key] = value;
420
- }
421
- }
422
- readAttribute(element, name) {
423
- const attribute = element.getAttribute(name);
424
- if (!attribute) {
425
- return undefined;
426
- }
427
- const value = attribute.getValue();
428
- return value && value.length > 0 ? value : undefined;
429
- }
430
- readSubState(segment) {
431
- const direct = this.readAttribute(segment, 'subState');
432
- if (direct) {
433
- return direct;
434
- }
435
- const target = segment.getChild('target');
436
- if (target) {
437
- const targetValue = this.readAttribute(target, 'subState');
438
- if (targetValue) {
439
- return targetValue;
440
- }
441
- }
442
- const source = segment.getChild('source');
443
- if (source) {
444
- const sourceValue = this.readAttribute(source, 'subState');
445
- if (sourceValue) {
446
- return sourceValue;
447
- }
448
- }
449
- return undefined;
450
- }
451
- collectNotes(element, accumulator) {
452
- element.getChildren().forEach((child) => {
453
- if (child.getName() === 'notes') {
454
- child.getChildren().forEach((noteElement) => {
455
- if (noteElement.getName() === 'note') {
456
- const value = Utils.getPureText(noteElement).trim();
457
- if (value.length > 0) {
458
- accumulator.push(value);
459
- }
460
- }
461
- });
462
- }
463
- });
464
- }
465
- collectMetadataProperties(element, properties) {
466
- element.getChildren().forEach((child) => {
467
- const name = child.getName();
468
- if (name.endsWith('metadata')) {
469
- child.getChildren().forEach((metaGroup) => {
470
- if (!metaGroup.getName().endsWith('metaGroup')) {
471
- return;
472
- }
473
- const category = metaGroup.getAttribute('category')?.getValue();
474
- metaGroup.getChildren().forEach((meta) => {
475
- if (!meta.getName().endsWith('meta')) {
476
- return;
477
- }
478
- const typeValue = meta.getAttribute('type')?.getValue();
479
- const key = category ? category + ':' + (typeValue || '') : (typeValue || '');
480
- const content = Utils.getPureText(meta).trim();
481
- if (key.length > 0 && content.length > 0) {
482
- properties[key] = content;
483
- }
484
- });
485
- });
486
- }
487
- });
488
- }
489
- getStateRank(rawState) {
490
- if (!this.isTranslationState(rawState)) {
491
- return 0;
492
- }
493
- return this.getStateRankFromOption(rawState);
494
- }
495
- getStateRankFromOption(state) {
496
- if (!state) {
497
- return 0;
498
- }
499
- switch (state) {
500
- case 'initial':
501
- return 0;
502
- case 'translated':
503
- return 1;
504
- case 'reviewed':
505
- return 2;
506
- case 'final':
507
- return 3;
508
- default:
509
- return 0;
510
- }
511
- }
512
- isTranslationState(value) {
513
- return value === 'initial'
514
- || value === 'translated'
515
- || value === 'reviewed'
516
- || value === 'final';
517
- }
518
- getGrammar() {
519
- return undefined;
520
- }
521
- }
522
- //# sourceMappingURL=xliffHandler.js.map
@@ -1,25 +0,0 @@
1
- /*******************************************************************************
2
- * Copyright (c) 2025-2026 Maxprograms.
3
- *
4
- * This program and the accompanying materials
5
- * are made available under the terms of the Eclipse License 1.0
6
- * which accompanies this distribution, and is available at
7
- * https://www.eclipse.org/org/documents/epl-v10.html
8
- *
9
- * Contributors:
10
- * Maxprograms - initial API and implementation
11
- *******************************************************************************/
12
- import { SAXParser } from "typesxml";
13
- import { ImportOptions } from './importOptions.js';
14
- import { XLIFFHandler } from './xliffHandler.js';
15
- export declare class XLIFFReader {
16
- parser: SAXParser;
17
- tempFilePath: string;
18
- handler: XLIFFHandler;
19
- filePath: string;
20
- private readonly options;
21
- constructor(filePath: string, options?: ImportOptions);
22
- parse(): Promise<void>;
23
- getTempFilePath(): string;
24
- getEntryCount(): number;
25
- }
@@ -1,50 +0,0 @@
1
- /*******************************************************************************
2
- * Copyright (c) 2025-2026 Maxprograms.
3
- *
4
- * This program and the accompanying materials
5
- * are made available under the terms of the Eclipse License 1.0
6
- * which accompanies this distribution, and is available at
7
- * https://www.eclipse.org/org/documents/epl-v10.html
8
- *
9
- * Contributors:
10
- * Maxprograms - initial API and implementation
11
- *******************************************************************************/
12
- import { tmpdir } from "node:os";
13
- import { join } from 'node:path';
14
- import { SAXParser } from "typesxml";
15
- import { DEFAULT_IMPORT_OPTIONS, resolveImportOptions } from './importOptions.js';
16
- import { XLIFFHandler } from './xliffHandler.js';
17
- export class XLIFFReader {
18
- parser;
19
- tempFilePath;
20
- handler;
21
- filePath;
22
- options;
23
- constructor(filePath, options = DEFAULT_IMPORT_OPTIONS) {
24
- this.filePath = filePath;
25
- this.options = resolveImportOptions(options);
26
- // Generate temp file path
27
- const tempDir = tmpdir();
28
- const tempFileName = 'xliff_' + Date.now() + '_' + Math.random().toString(36).substring(7) + '.jsonl';
29
- this.tempFilePath = join(tempDir, tempFileName);
30
- this.parser = new SAXParser();
31
- this.handler = new XLIFFHandler(this.tempFilePath, this.options);
32
- this.parser.setContentHandler(this.handler);
33
- }
34
- async parse() {
35
- try {
36
- this.parser.parseFile(this.filePath);
37
- await this.handler.waitForCompletion();
38
- }
39
- catch (error) {
40
- throw error instanceof Error ? error : new Error(String(error));
41
- }
42
- }
43
- getTempFilePath() {
44
- return this.tempFilePath;
45
- }
46
- getEntryCount() {
47
- return this.handler.getEntryCount();
48
- }
49
- }
50
- //# sourceMappingURL=xliffReader.js.map
@@ -1,54 +0,0 @@
1
- export declare class XLIFFTest {
2
- private static readonly NAME;
3
- private static readonly DB_PATH;
4
- private static readonly SAMPLE_XLIFF;
5
- runTest(): Promise<void>;
6
- private resetEnvironment;
7
- private verifyEntry;
8
- private expectTranslationMatch;
9
- private expectConcordanceMatch;
10
- private verifyMetadataRoundtrip;
11
- private assertMetadataEquals;
12
- }
13
- /*******************************************************************************
14
-
15
- Follow the steps to create a translation project from your DITA map
16
-
17
- I need to edit the name or description of a translation memory
18
-
19
- How do I add more target languages to my project?
20
-
21
- What should I do after updating my DITA content?
22
-
23
- Export a memory as a TMX file to save the translation data
24
-
25
- Associate existing memories with the new project to reuse translations
26
-
27
- I want to permanently remove a project from the system
28
-
29
- Select a name and location for the TMX file containing memory data
30
-
31
- Import a TMX file into a memory from the command line
32
-
33
- Fluenta recovers exact matches from translations stored in the previous cycle
34
-
35
- You don't need to pay again for translation of content that didn't change
36
-
37
- A company specialized in providing translation and localization services
38
-
39
- Before using the Command Line Interface you must start Fluenta from the GUI at least once
40
-
41
- Create a JSON file containing the data required for creating the memory
42
-
43
- An XLIFF file is generated for each selected target language
44
-
45
- Check your email and register the evaluation key using the instructions
46
-
47
- Additional configurations can be added by the user as required
48
-
49
- Use the buttons in the dialog to update the configuration file
50
-
51
- The configuration file is automatically updated as you add or remove elements
52
-
53
- Avoid using folders that could be modified by other programs while you work
54
- */