hybridtm 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/LICENSE +233 -0
  2. package/README.md +116 -0
  3. package/dist/batchimporter.d.ts +22 -0
  4. package/dist/batchimporter.js +203 -0
  5. package/dist/batchimporter.js.map +1 -0
  6. package/dist/constants.d.ts +15 -0
  7. package/dist/constants.js +16 -0
  8. package/dist/constants.js.map +1 -0
  9. package/dist/debug-progress.d.ts +12 -0
  10. package/dist/debug-progress.js +49 -0
  11. package/dist/debug-progress.js.map +1 -0
  12. package/dist/hybridtm.d.ts +66 -0
  13. package/dist/hybridtm.js +912 -0
  14. package/dist/hybridtm.js.map +1 -0
  15. package/dist/hybridtmFactory.d.ts +43 -0
  16. package/dist/hybridtmFactory.js +165 -0
  17. package/dist/hybridtmFactory.js.map +1 -0
  18. package/dist/importOptions.d.ts +21 -0
  19. package/dist/importOptions.js +24 -0
  20. package/dist/importOptions.js.map +1 -0
  21. package/dist/index.d.ts +25 -0
  22. package/dist/index.js +22 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/langEntry.d.ts +64 -0
  25. package/dist/langEntry.js +13 -0
  26. package/dist/langEntry.js.map +1 -0
  27. package/dist/match.d.ts +22 -0
  28. package/dist/match.js +38 -0
  29. package/dist/match.js.map +1 -0
  30. package/dist/matchQuality.d.ts +16 -0
  31. package/dist/matchQuality.js +83 -0
  32. package/dist/matchQuality.js.map +1 -0
  33. package/dist/ngramIndex.d.ts +31 -0
  34. package/dist/ngramIndex.js +132 -0
  35. package/dist/ngramIndex.js.map +1 -0
  36. package/dist/ngrams.d.ts +21 -0
  37. package/dist/ngrams.js +73 -0
  38. package/dist/ngrams.js.map +1 -0
  39. package/dist/pendingEntry.d.ts +24 -0
  40. package/dist/pendingEntry.js +13 -0
  41. package/dist/pendingEntry.js.map +1 -0
  42. package/dist/progressProvider.d.ts +17 -0
  43. package/dist/progressProvider.js +14 -0
  44. package/dist/progressProvider.js.map +1 -0
  45. package/dist/searchFilters.d.ts +24 -0
  46. package/dist/searchFilters.js +13 -0
  47. package/dist/searchFilters.js.map +1 -0
  48. package/dist/simplexlifftest.d.ts +1 -0
  49. package/dist/simplexlifftest.js +23 -0
  50. package/dist/simplexlifftest.js.map +1 -0
  51. package/dist/test-import.d.ts +12 -0
  52. package/dist/test-import.js +101 -0
  53. package/dist/test-import.js.map +1 -0
  54. package/dist/test-progress-fix.d.ts +1 -0
  55. package/dist/test-progress-fix.js +32 -0
  56. package/dist/test-progress-fix.js.map +1 -0
  57. package/dist/test-progress.d.ts +12 -0
  58. package/dist/test-progress.js +32 -0
  59. package/dist/test-progress.js.map +1 -0
  60. package/dist/tests/vectorSimilarityComparison.d.ts +12 -0
  61. package/dist/tests/vectorSimilarityComparison.js +153 -0
  62. package/dist/tests/vectorSimilarityComparison.js.map +1 -0
  63. package/dist/tmxhandler.d.ts +61 -0
  64. package/dist/tmxhandler.js +347 -0
  65. package/dist/tmxhandler.js.map +1 -0
  66. package/dist/tmxreader.d.ts +25 -0
  67. package/dist/tmxreader.js +51 -0
  68. package/dist/tmxreader.js.map +1 -0
  69. package/dist/tmxtest.d.ts +16 -0
  70. package/dist/tmxtest.js +316 -0
  71. package/dist/tmxtest.js.map +1 -0
  72. package/dist/utils.d.ts +17 -0
  73. package/dist/utils.js +49 -0
  74. package/dist/utils.js.map +1 -0
  75. package/dist/vectorSimilarityTester.d.ts +56 -0
  76. package/dist/vectorSimilarityTester.js +164 -0
  77. package/dist/vectorSimilarityTester.js.map +1 -0
  78. package/dist/xliffhandler.d.ts +67 -0
  79. package/dist/xliffhandler.js +522 -0
  80. package/dist/xliffhandler.js.map +1 -0
  81. package/dist/xliffreader.d.ts +25 -0
  82. package/dist/xliffreader.js +50 -0
  83. package/dist/xliffreader.js.map +1 -0
  84. package/dist/xlifftest.d.ts +54 -0
  85. package/dist/xlifftest.js +245 -0
  86. package/dist/xlifftest.js.map +1 -0
  87. package/package.json +33 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-progress.js","sourceRoot":"","sources":["../ts/test-progress.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;iFAUiF;;AAEjF,yCAAsC;AAEtC,KAAK,UAAU,oBAAoB;IAC/B,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAE9C,MAAM,EAAE,GAAG,IAAI,mBAAQ,CAAC,4BAA4B,EAAE,mBAAQ,CAAC,WAAW,CAAC,CAAC;IAE5E,0CAA0C;IAC1C,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAE5C,wEAAwE;IACxE,uEAAuE;IAEvE,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,4EAA4E,CAAC,CAAC;IAE1F,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;IAEjB,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;AACvF,CAAC;AAED,oBAAoB,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;IACjC,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ /*******************************************************************************
2
+ * Copyright (c) 2025 Maxprograms.
3
+ *
4
+ * This program and the accompanying materials
5
+ * are made available under the terms of the Eclipse Public 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
+ export {};
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ /*******************************************************************************
3
+ * Copyright (c) 2025 Maxprograms.
4
+ *
5
+ * This program and the accompanying materials
6
+ * are made available under the terms of the Eclipse Public License 1.0
7
+ * which accompanies this distribution, and is available at
8
+ * https://www.eclipse.org/org/documents/epl-v10.html
9
+ *
10
+ * Contributors:
11
+ * Maxprograms - initial API and implementation
12
+ *******************************************************************************/
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ const lancedb_1 = require("@lancedb/lancedb");
15
+ const node_path_1 = require("node:path");
16
+ const hybridtm_1 = require("../hybridtm");
17
+ const hybridtmFactory_1 = require("../hybridtmFactory");
18
+ const FRIENDLY_NAME = 'XLIFF Test TM';
19
+ const DB_PATH = 'my-tm.lancedb';
20
+ const DEFAULT_LIMIT = 5;
21
+ const EVALUATION_QUERIES = [
22
+ { query: 'Generate XLIFF files and optional word counts', src: 'en', tgt: 'es', similarity: 70 },
23
+ { query: 'Use the following parameters to import a translated XLIFF file', src: 'en', tgt: 'es', similarity: 65 },
24
+ { query: 'Select the Ignore Inline Tag Errors check box', src: 'en', tgt: 'es', similarity: 60 },
25
+ { query: 'Select inline tag errors ignore', src: 'en', tgt: 'es', similarity: 55 },
26
+ { query: 'Reuse ICE matches to translate reused content', src: 'en', tgt: 'es', similarity: 55 },
27
+ { query: 'Type the folder for XLIFF output', src: 'en', tgt: 'es', similarity: 50 }
28
+ ];
29
+ function cosineSimilarity(vecA, vecB) {
30
+ if (vecA.length !== vecB.length) {
31
+ throw new Error('Vectors must have the same length');
32
+ }
33
+ let dotProduct = 0;
34
+ let normA = 0;
35
+ let normB = 0;
36
+ for (let i = 0; i < vecA.length; i++) {
37
+ const a = vecA[i];
38
+ const b = vecB[i];
39
+ dotProduct += a * b;
40
+ normA += a * a;
41
+ normB += b * b;
42
+ }
43
+ if (normA === 0 || normB === 0) {
44
+ return 0;
45
+ }
46
+ return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));
47
+ }
48
+ async function acquireInstance(factory) {
49
+ const instances = await factory.listInstances();
50
+ const existing = instances.find(function (metadata) {
51
+ return metadata.name === FRIENDLY_NAME;
52
+ });
53
+ if (!existing) {
54
+ console.log('Creating translation memory for analysis: ' + FRIENDLY_NAME);
55
+ const tm = await factory.createInstance(FRIENDLY_NAME, DB_PATH, hybridtm_1.HybridTM.SPEED_MODEL);
56
+ return { tm, isNew: true };
57
+ }
58
+ const tm = await factory.openInstance(existing.name);
59
+ return { tm, isNew: false };
60
+ }
61
+ function asNumberArray(vector) {
62
+ if (Array.isArray(vector)) {
63
+ return vector.map((value) => Number(value));
64
+ }
65
+ if (vector instanceof Float32Array || vector instanceof Float64Array) {
66
+ return Array.from(vector);
67
+ }
68
+ if (vector && typeof vector === 'object' && 'toArray' in vector && typeof vector.toArray === 'function') {
69
+ return vector.toArray();
70
+ }
71
+ throw new Error('Unsupported vector format: ' + String(vector));
72
+ }
73
+ async function getTargetText(table, sourceEntry, targetLang) {
74
+ const targetId = sourceEntry.fileId + ':' + sourceEntry.unitId + ':' + targetLang;
75
+ const candidates = (await table
76
+ .query()
77
+ .where('id = ' + '\'' + targetId.replace(/'/g, "''") + '\'')
78
+ .toArray());
79
+ if (candidates.length === 0) {
80
+ return null;
81
+ }
82
+ return candidates[0].pureText ?? null;
83
+ }
84
+ async function ensureData(factory, tm, isNew) {
85
+ if (!isNew) {
86
+ return;
87
+ }
88
+ console.log('Importing sample XLIFF data into analysis TM...');
89
+ await tm.importXLIFF('/Users/rmraya/Documents/GitHub/FluentaPRO/Localization/fluenta_es.ditamap.xlf');
90
+ }
91
+ async function analyzeQueries() {
92
+ const factory = new hybridtmFactory_1.HybridTMFactory();
93
+ const { tm, isNew } = await acquireInstance(factory);
94
+ await ensureData(factory, tm, isNew);
95
+ const dbTable = await (await (0, lancedb_1.connect)(DB_PATH)).openTable('langEntry');
96
+ const embed = async function (text) {
97
+ const generator = tm;
98
+ return generator.generateEmbedding(text);
99
+ };
100
+ console.log('============================================================');
101
+ console.log('Vector similarity analysis (Cosine only)');
102
+ console.log('Database path: ' + (0, node_path_1.resolve)(DB_PATH));
103
+ console.log('============================================================');
104
+ for (const spec of EVALUATION_QUERIES) {
105
+ console.log('');
106
+ console.log('Query: "' + spec.query + '" [' + spec.src + ' -> ' + spec.tgt + ']');
107
+ const queryEmbedding = await embed(spec.query);
108
+ const candidates = (await dbTable
109
+ .vectorSearch(queryEmbedding)
110
+ .limit(DEFAULT_LIMIT)
111
+ .toArray());
112
+ const sourceCandidates = candidates.filter(function (candidate) {
113
+ return candidate.language === spec.src;
114
+ });
115
+ if (sourceCandidates.length === 0) {
116
+ console.log(' (no vector candidates for source language)');
117
+ continue;
118
+ }
119
+ for (let index = 0; index < sourceCandidates.length; index++) {
120
+ const candidate = sourceCandidates[index];
121
+ if (!candidate.vector) {
122
+ continue;
123
+ }
124
+ const candidateVector = asNumberArray(candidate.vector);
125
+ const cosine = cosineSimilarity(queryEmbedding, candidateVector);
126
+ const cosinePercent = Math.round(cosine * 100);
127
+ const distance = typeof candidate._distance === 'number' ? ' distance=' + candidate._distance.toFixed(6) : '';
128
+ const targetText = await getTargetText(dbTable, candidate, spec.tgt);
129
+ console.log(' #' + (index + 1) +
130
+ ' cosine=' + cosinePercent.toString().padStart(3, ' ') + '%'
131
+ + distance);
132
+ console.log(' source: ' + candidate.pureText);
133
+ if (targetText) {
134
+ console.log(' target: ' + targetText);
135
+ }
136
+ }
137
+ }
138
+ await tm.close();
139
+ }
140
+ async function main() {
141
+ try {
142
+ await analyzeQueries();
143
+ console.log('\nAnalysis complete.');
144
+ }
145
+ catch (err) {
146
+ console.error('Vector similarity analysis failed:', err);
147
+ process.exitCode = 1;
148
+ }
149
+ }
150
+ if (require.main === module) {
151
+ void main();
152
+ }
153
+ //# sourceMappingURL=vectorSimilarityComparison.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vectorSimilarityComparison.js","sourceRoot":"","sources":["../../ts/tests/vectorSimilarityComparison.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
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 { Catalog, CData, ContentHandler, Grammar, XMLAttribute, XMLElement } from "typesxml";
13
+ import { ImportOptions } from './importOptions.js';
14
+ export declare class TMXHandler implements ContentHandler {
15
+ inCdData: boolean;
16
+ currentCData: CData;
17
+ stack: Array<XMLElement>;
18
+ original: string;
19
+ currentTu: string;
20
+ fileId: string;
21
+ currentTuElement: XMLElement | null;
22
+ private writeStream;
23
+ private readonly completionPromise;
24
+ private entryCount;
25
+ private readonly options;
26
+ constructor(tempFilePath: string, filename: string, options?: ImportOptions);
27
+ setGrammar(grammar: Grammar | undefined): void;
28
+ getEntryCount(): number;
29
+ waitForCompletion(): Promise<void>;
30
+ initialize(): void;
31
+ setCatalog(catalog: Catalog): void;
32
+ startDocument(): void;
33
+ endDocument(): void;
34
+ xmlDeclaration(version: string, encoding: string, standalone: string | undefined): void;
35
+ startElement(name: string, atts: Array<XMLAttribute>): void;
36
+ endElement(name: string): void;
37
+ internalSubset(declaration: string): void;
38
+ characters(ch: string): void;
39
+ ignorableWhitespace(ch: string): void;
40
+ comment(ch: string): void;
41
+ processingInstruction(target: string, data: string): void;
42
+ startCDATA(): void;
43
+ endCDATA(): void;
44
+ startDTD(name: string, publicId: string, systemId: string): void;
45
+ endDTD(): void;
46
+ skippedEntity(name: string): void;
47
+ getGrammar(): Grammar | undefined;
48
+ private extractMetadata;
49
+ private readAttribute;
50
+ private assignMetadataString;
51
+ private parseNumber;
52
+ private collectNotes;
53
+ private collectProperties;
54
+ private hasMetadata;
55
+ private buildContextFromProperties;
56
+ private findDirectionalProperty;
57
+ private readSegmentIdProp;
58
+ private attachSegmentMetadata;
59
+ private describeSegmentReference;
60
+ private parseSegmentIdentifier;
61
+ }
@@ -0,0 +1,347 @@
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 TMXHandler {
17
+ inCdData = false;
18
+ currentCData = new CData('');
19
+ stack = [];
20
+ original = '';
21
+ currentTu = '';
22
+ fileId = '';
23
+ currentTuElement = null;
24
+ writeStream;
25
+ completionPromise;
26
+ entryCount = 0;
27
+ options;
28
+ constructor(tempFilePath, filename, options = DEFAULT_IMPORT_OPTIONS) {
29
+ this.fileId = filename;
30
+ this.writeStream = createWriteStream(tempFilePath, { encoding: 'utf8' });
31
+ this.completionPromise = new Promise((resolve, reject) => {
32
+ this.writeStream.once('finish', resolve);
33
+ this.writeStream.once('error', reject);
34
+ });
35
+ this.options = resolveImportOptions(options);
36
+ }
37
+ setGrammar(grammar) {
38
+ // do nothing
39
+ }
40
+ getEntryCount() {
41
+ return this.entryCount;
42
+ }
43
+ waitForCompletion() {
44
+ return this.completionPromise;
45
+ }
46
+ initialize() {
47
+ this.stack = new Array();
48
+ this.inCdData = false;
49
+ }
50
+ setCatalog(catalog) {
51
+ // do nothing
52
+ }
53
+ startDocument() {
54
+ // do nothing
55
+ }
56
+ endDocument() {
57
+ // Close the write stream when document ends
58
+ this.writeStream.end();
59
+ }
60
+ xmlDeclaration(version, encoding, standalone) {
61
+ // do nothing
62
+ }
63
+ startElement(name, atts) {
64
+ const element = new XMLElement(name);
65
+ atts.forEach((att) => {
66
+ element.setAttribute(att);
67
+ });
68
+ if ("tu" === name) {
69
+ const tuid = element.getAttribute("tuid");
70
+ if (tuid) {
71
+ this.currentTu = tuid.getValue();
72
+ }
73
+ else {
74
+ this.currentTu = Date.now().toString();
75
+ }
76
+ this.currentTuElement = element;
77
+ }
78
+ if (this.stack.length > 0) {
79
+ this.stack[this.stack.length - 1].addElement(element);
80
+ }
81
+ this.stack.push(element);
82
+ }
83
+ endElement(name) {
84
+ if ("tuv" === name) {
85
+ const tuv = this.stack[this.stack.length - 1];
86
+ let lang = tuv.getAttribute("xml:lang")?.getValue() || '';
87
+ if ('' === lang) {
88
+ lang = tuv.getAttribute("lang")?.getValue() || '';
89
+ }
90
+ if ('' === lang) {
91
+ throw new Error("Missing @xml:lang or @lang attribute in <tuv>");
92
+ }
93
+ const seg = tuv.getChild("seg");
94
+ if (!seg) {
95
+ throw new Error("Missing <seg> child element in <tuv>");
96
+ }
97
+ const pureText = Utils.getPureText(seg);
98
+ if (pureText.trim().length === 0 && this.options.skipEmpty) {
99
+ this.stack.pop();
100
+ return;
101
+ }
102
+ const metadata = this.options.extractMetadata
103
+ ? this.extractMetadata(this.currentTuElement, tuv)
104
+ : {};
105
+ const jsonEntry = {
106
+ language: lang,
107
+ fileId: this.fileId,
108
+ original: this.original,
109
+ unitId: this.currentTu,
110
+ pureText: pureText,
111
+ element: tuv.toString(),
112
+ segmentIndex: 0,
113
+ segmentCount: 1
114
+ };
115
+ if (this.hasMetadata(metadata)) {
116
+ jsonEntry.metadata = metadata;
117
+ }
118
+ this.writeStream.write(JSON.stringify(jsonEntry) + '\n');
119
+ this.entryCount++;
120
+ }
121
+ if ("tu" === name) {
122
+ this.currentTu = '';
123
+ this.currentTuElement = null;
124
+ }
125
+ this.stack.pop();
126
+ }
127
+ internalSubset(declaration) {
128
+ // do nothing
129
+ }
130
+ characters(ch) {
131
+ if (this.inCdData) {
132
+ this.currentCData.setValue(this.currentCData.getValue() + ch);
133
+ return;
134
+ }
135
+ const textNode = new TextNode(ch);
136
+ // ignore characters outside of elements
137
+ if (this.stack.length > 0) {
138
+ this.stack[this.stack.length - 1].addTextNode(textNode);
139
+ }
140
+ }
141
+ ignorableWhitespace(ch) {
142
+ const textNode = new TextNode(ch);
143
+ // ignore characters outside of elements
144
+ if (this.stack.length > 0) {
145
+ this.stack[this.stack.length - 1].addTextNode(textNode);
146
+ }
147
+ }
148
+ comment(ch) {
149
+ // do nothing
150
+ }
151
+ processingInstruction(target, data) {
152
+ // do nothing
153
+ }
154
+ startCDATA() {
155
+ this.inCdData = true;
156
+ }
157
+ endCDATA() {
158
+ this.inCdData = false;
159
+ }
160
+ startDTD(name, publicId, systemId) {
161
+ // do nothing
162
+ }
163
+ endDTD() {
164
+ // do nothing
165
+ }
166
+ skippedEntity(name) {
167
+ // do nothing
168
+ }
169
+ getGrammar() {
170
+ return undefined;
171
+ }
172
+ extractMetadata(tu, tuv) {
173
+ const metadata = {};
174
+ this.assignMetadataString(metadata, 'creationDate', this.readAttribute(tuv, 'creationdate') || (tu ? this.readAttribute(tu, 'creationdate') : undefined));
175
+ this.assignMetadataString(metadata, 'creationId', this.readAttribute(tuv, 'creationid') || (tu ? this.readAttribute(tu, 'creationid') : undefined));
176
+ this.assignMetadataString(metadata, 'changeDate', this.readAttribute(tuv, 'changedate') || (tu ? this.readAttribute(tu, 'changedate') : undefined));
177
+ this.assignMetadataString(metadata, 'changeId', this.readAttribute(tuv, 'changeid') || (tu ? this.readAttribute(tu, 'changeid') : undefined));
178
+ this.assignMetadataString(metadata, 'creationTool', this.readAttribute(tuv, 'creationtool') || (tu ? this.readAttribute(tu, 'creationtool') : undefined));
179
+ this.assignMetadataString(metadata, 'creationToolVersion', this.readAttribute(tuv, 'creationtoolversion') || (tu ? this.readAttribute(tu, 'creationtoolversion') : undefined));
180
+ const usageCount = this.parseNumber(tu ? this.readAttribute(tu, 'usagecount') : undefined);
181
+ if (usageCount !== undefined) {
182
+ metadata.usageCount = usageCount;
183
+ }
184
+ const lastUsage = this.readAttribute(tu, 'lastusagedate');
185
+ if (lastUsage) {
186
+ metadata.lastUsageDate = lastUsage;
187
+ }
188
+ const notes = [];
189
+ this.collectNotes(tu, notes);
190
+ this.collectNotes(tuv, notes);
191
+ if (notes.length > 0) {
192
+ metadata.notes = notes;
193
+ }
194
+ const properties = {};
195
+ this.collectProperties(tu, properties);
196
+ this.collectProperties(tuv, properties);
197
+ const segmentId = this.readSegmentIdProp(properties);
198
+ if (Object.keys(properties).length > 0) {
199
+ metadata.properties = properties;
200
+ const explicitContext = properties['x-context'] || properties['context'] || properties['domain'];
201
+ if (explicitContext) {
202
+ metadata.context = explicitContext;
203
+ }
204
+ const adjacencyContext = this.buildContextFromProperties(properties);
205
+ if (adjacencyContext) {
206
+ metadata.context = metadata.context
207
+ ? metadata.context + ' | ' + adjacencyContext
208
+ : adjacencyContext;
209
+ }
210
+ }
211
+ this.attachSegmentMetadata(metadata, segmentId || this.currentTu);
212
+ return metadata;
213
+ }
214
+ readAttribute(element, name) {
215
+ if (!element) {
216
+ return undefined;
217
+ }
218
+ const attribute = element.getAttribute(name);
219
+ if (!attribute) {
220
+ return undefined;
221
+ }
222
+ const value = attribute.getValue();
223
+ return value.length > 0 ? value : undefined;
224
+ }
225
+ assignMetadataString(metadata, key, value) {
226
+ if (value) {
227
+ metadata[key] = value;
228
+ }
229
+ }
230
+ parseNumber(value) {
231
+ if (!value) {
232
+ return undefined;
233
+ }
234
+ const parsed = Number(value);
235
+ return Number.isNaN(parsed) ? undefined : parsed;
236
+ }
237
+ collectNotes(element, accumulator) {
238
+ if (!element) {
239
+ return;
240
+ }
241
+ element.getChildren().forEach((child) => {
242
+ if (child.getName() === 'note') {
243
+ const value = Utils.getPureText(child).trim();
244
+ if (value.length > 0) {
245
+ accumulator.push(value);
246
+ }
247
+ }
248
+ });
249
+ }
250
+ collectProperties(element, accumulator) {
251
+ if (!element) {
252
+ return;
253
+ }
254
+ element.getChildren().forEach((child) => {
255
+ if (child.getName() === 'prop') {
256
+ const typeAttr = child.getAttribute('type')?.getValue();
257
+ const key = typeAttr ? typeAttr.trim() : '';
258
+ if (key.length === 0) {
259
+ return;
260
+ }
261
+ const value = Utils.getPureText(child).trim();
262
+ if (value.length > 0) {
263
+ accumulator[key] = value;
264
+ }
265
+ }
266
+ });
267
+ }
268
+ hasMetadata(metadata) {
269
+ return !!metadata && Object.keys(metadata).length > 0;
270
+ }
271
+ buildContextFromProperties(properties) {
272
+ const prevValue = this.findDirectionalProperty(properties, /^prev-/i);
273
+ const nextValue = this.findDirectionalProperty(properties, /^next-/i);
274
+ const segments = [];
275
+ if (prevValue) {
276
+ segments.push('prev=' + this.describeSegmentReference(prevValue));
277
+ }
278
+ if (nextValue) {
279
+ segments.push('next=' + this.describeSegmentReference(nextValue));
280
+ }
281
+ return segments.length > 0 ? segments.join('; ') : undefined;
282
+ }
283
+ findDirectionalProperty(properties, pattern) {
284
+ for (const [key, value] of Object.entries(properties)) {
285
+ if (pattern.test(key) && value.length > 0) {
286
+ return value;
287
+ }
288
+ }
289
+ return undefined;
290
+ }
291
+ readSegmentIdProp(properties) {
292
+ const propertyValue = properties['xliff-segment'];
293
+ if (!propertyValue) {
294
+ return undefined;
295
+ }
296
+ const trimmed = propertyValue.trim();
297
+ return trimmed.length === 0 ? undefined : trimmed;
298
+ }
299
+ attachSegmentMetadata(metadata, identifier) {
300
+ if (!identifier) {
301
+ return;
302
+ }
303
+ const parsed = this.parseSegmentIdentifier(identifier);
304
+ if (!parsed) {
305
+ return;
306
+ }
307
+ metadata.segment = {
308
+ provider: 'xliff-segment',
309
+ segmentKey: identifier,
310
+ fileHash: parsed.fileHash,
311
+ fileId: parsed.fileId,
312
+ unitId: parsed.unitId,
313
+ segmentId: parsed.segmentId
314
+ };
315
+ }
316
+ describeSegmentReference(value) {
317
+ const parsed = this.parseSegmentIdentifier(value);
318
+ if (!parsed) {
319
+ return value;
320
+ }
321
+ return value + ' (file ' + parsed.fileId + ', unit ' + parsed.unitId + ', segment ' + parsed.segmentId + ')';
322
+ }
323
+ parseSegmentIdentifier(identifier) {
324
+ if (!identifier) {
325
+ return null;
326
+ }
327
+ const trimmed = identifier.trim();
328
+ if (trimmed.length === 0) {
329
+ return null;
330
+ }
331
+ const parts = trimmed.split('-');
332
+ if (parts.length < 4) {
333
+ return null;
334
+ }
335
+ const tail = parts.slice(-3);
336
+ if (!tail.every((part) => /^\d+$/.test(part))) {
337
+ return null;
338
+ }
339
+ return {
340
+ fileHash: parts.slice(0, -3).join('-'),
341
+ fileId: tail[0],
342
+ unitId: tail[1],
343
+ segmentId: tail[2]
344
+ };
345
+ }
346
+ }
347
+ //# sourceMappingURL=tmxHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tmxHandler.js","sourceRoot":"","sources":["../ts/tmxHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
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 { TMXHandler } from './tmxHandler.js';
15
+ export declare class TMXReader {
16
+ parser: SAXParser;
17
+ filePath: string;
18
+ handler: TMXHandler;
19
+ jsonlTempPath: string;
20
+ private readonly options;
21
+ constructor(filePath: string, options?: ImportOptions);
22
+ parse(): Promise<void>;
23
+ getTempFilePath(): string;
24
+ getEntryCount(): number;
25
+ }