Skip to content

Commit c1f3a4e

Browse files
committed
add an option to use quick tmx importing
1 parent e62fdd9 commit c1f3a4e

9 files changed

Lines changed: 442 additions & 22 deletions

File tree

BasicCAT/BasicCAT.b4j

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -271,22 +271,23 @@ Module68=TMDB
271271
Module69=TMEditor
272272
Module7=editDistance
273273
Module70=TMManager
274-
Module71=TMX
275-
Module72=txtFilter
276-
Module73=Utils
277-
Module74=viewSegment
278-
Module75=xliffFilter
279-
Module76=Xml2Map
280-
Module77=XMLBuilder2
281-
Module78=XmlNode
282-
Module79=XmlParser
274+
Module71=TMXExporter
275+
Module72=TMXImporter
276+
Module73=txtFilter
277+
Module74=Utils
278+
Module75=viewSegment
279+
Module76=xliffFilter
280+
Module77=Xml2Map
281+
Module78=XMLBuilder2
282+
Module79=XmlNode
283283
Module8=EnumClass
284-
Module80=XMLUtils
285-
Module81=zip4j
284+
Module80=XmlParser
285+
Module81=XMLUtils
286+
Module82=zip4j
286287
Module9=ErrorReporter
287288
NumberOfFiles=88
288289
NumberOfLibraries=26
289-
NumberOfModules=81
290+
NumberOfModules=82
290291
Version=8.9
291292
@EndOfDesignText@
292293
#Region Project Attributes

BasicCAT/BasicCAT.b4j.meta

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ ModuleBookmarks79=
7979
ModuleBookmarks8=
8080
ModuleBookmarks80=
8181
ModuleBookmarks81=
82+
ModuleBookmarks82=
8283
ModuleBookmarks9=
8384
ModuleBreakpoints0=
8485
ModuleBreakpoints1=
@@ -161,6 +162,7 @@ ModuleBreakpoints79=
161162
ModuleBreakpoints8=
162163
ModuleBreakpoints80=
163164
ModuleBreakpoints81=
165+
ModuleBreakpoints82=
164166
ModuleBreakpoints9=
165167
ModuleClosedNodes0=
166168
ModuleClosedNodes1=
@@ -243,7 +245,8 @@ ModuleClosedNodes79=
243245
ModuleClosedNodes8=
244246
ModuleClosedNodes80=
245247
ModuleClosedNodes81=
248+
ModuleClosedNodes82=
246249
ModuleClosedNodes9=
247-
NavigationStack=opennlp,Initialize,36,6,Term,termsInASentenceUsingIteration,323,0,Term,termsInASentenceUsingHashMap,287,4,xliffFilter,createWorkFile,66,0,xliffFilter,generateFile,296,0,xliffFilter,updateTransUnit,391,0,xliffFilter,updateNode,381,0,xliffFilter,insertTranslation,375,0,xliffFilter,buildMrk,439,0,Project,updateWithWorkfileMI_Action,893,0,Project,updateSegmentsWithWorkfile,931,6
250+
NavigationStack=Main,Process_Globals,71,0,TM,importExternalTranslationMemory,196,6,TMXImporter,importedList,77,6,TMXImporter,importedListQuick,92,0,TMXImporter,Parser_StartElement,35,0,TMManager,exportToFile,211,0,importDialog,loadTerm,115,0,ProjectSettings,Class_Globals,0,0,Main,MenuBar1_Action,398,0,Project,saveSettings,182,6
248251
SelectedBuild=0
249-
VisibleModules=10,45,51,72,60,25,46,42,41,47,75
252+
VisibleModules=10,45,51,73,60,25,46,42,41,47,72,71,70,20,81,67

BasicCAT/Files/version.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.10.3
1+
1.10.4

BasicCAT/Project.bas

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,11 +183,20 @@ End Sub
183183

184184
Public Sub saveSettings(newsettings As Map)
185185
projectFile.Put("settings",newsettings)
186+
settings = newsettings
186187
Log(newsettings)
187188
save
188189
If newsettings.Get("tmListChanged")="yes" Then
189190
projectTM.deleteExternalTranslationMemory
190-
wait for (projectTM.importExternalTranslationMemory(settings.Get("tmList"),projectFile)) complete (result As Boolean)
191+
Dim tmList As List = settings.Get("tmList")
192+
If tmList.Size>0 Then
193+
Dim response As Int = fx.Msgbox2(Main.MainForm,"Please select a TMX import method:","","Quick (for pure text)","","Accurate (for tagged text)",fx.MSGBOX_CONFIRMATION)
194+
Dim quickMode As Boolean = True
195+
If response = fx.DialogResponse.NEGATIVE Then
196+
quickMode = False
197+
End If
198+
wait for (projectTM.importExternalTranslationMemory(settings.Get("tmList"),projectFile,quickMode)) complete (result As Boolean)
199+
End If
191200
End If
192201
If newsettings.Get("termListChanged")="yes" Then
193202
projectTerm.deleteExternalTerminology

BasicCAT/TM.bas

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ Public Sub deleteExternalTranslationMemory
188188
externalTranslationMemory.DeleteAll
189189
End Sub
190190

191-
Public Sub importExternalTranslationMemory(tmList As List,projectFile As Map) As ResumableSub
191+
Public Sub importExternalTranslationMemory(tmList As List,projectFile As Map,quickMode As Boolean) As ResumableSub
192192
progressDialog.Show("Loading external memory","loadtm")
193193
Dim segments As List
194194
segments.Initialize
@@ -198,7 +198,9 @@ Public Sub importExternalTranslationMemory(tmList As List,projectFile As Map) As
198198
If tmfileLowercase.EndsWith(".txt") Then
199199
segments.AddAll(importedTxt(tmfile))
200200
Else if tmfileLowercase.EndsWith(".tmx") Then
201-
segments.AddAll(TMX.importedList(File.Combine(Main.currentProject.path,"TM"),tmfile,projectFile.Get("source"),projectFile.Get("target")))
201+
Dim importer As TMXImporter
202+
importer.Initialize
203+
segments.AddAll(importer.importedList(File.Combine(Main.currentProject.path,"TM"),tmfile,projectFile.Get("source"),projectFile.Get("target"),quickMode))
202204
else if tmfileLowercase.EndsWith(".xlsx") Then
203205
segments.AddAll(importedXlsx(tmfile))
204206
End If

BasicCAT/TMManager.bas

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,9 @@ Sub exportToFile
195195
segments.Add(bitext)
196196

197197
Next
198+
199+
Dim exporter As TMXExporter
200+
exporter.Initialize
198201
Dim result As Int
199202
result=fx.Msgbox2(frm,"Include tags?","","Yes","Cancel","No",fx.MSGBOX_CONFIRMATION)
200203
If result=fx.DialogResponse.CANCEL Then
@@ -203,15 +206,15 @@ Sub exportToFile
203206
If path.EndsWith(".tmx") Then
204207
Select result
205208
Case fx.DialogResponse.NEGATIVE
206-
TMX.export(segments,Main.currentProject.projectFile.Get("source"),Main.currentProject.projectFile.Get("target"),path,False,False)
209+
exporter.export(segments,Main.currentProject.projectFile.Get("source"),Main.currentProject.projectFile.Get("target"),path,False,False)
207210
Case fx.DialogResponse.POSITIVE
208211
Dim result2 As Int
209212
result2=fx.Msgbox2(frm,"How to handle tags?","","Keep the original format","Cancel","Conform to TMX Specification",fx.MSGBOX_CONFIRMATION)
210213
Select result2
211214
Case fx.DialogResponse.NEGATIVE
212-
TMX.export(segments,Main.currentProject.projectFile.Get("source"),Main.currentProject.projectFile.Get("target"),path,True,True)
215+
exporter.export(segments,Main.currentProject.projectFile.Get("source"),Main.currentProject.projectFile.Get("target"),path,True,True)
213216
Case fx.DialogResponse.POSITIVE
214-
TMX.export(segments,Main.currentProject.projectFile.Get("source"),Main.currentProject.projectFile.Get("target"),path,True,False)
217+
exporter.export(segments,Main.currentProject.projectFile.Get("source"),Main.currentProject.projectFile.Get("target"),path,True,False)
215218
Case fx.DialogResponse.CANCEL
216219
Return
217220
End Select

BasicCAT/TMXExporter.bas

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
B4J=true
2+
Group=Default Group
3+
ModulesStructureVersion=1
4+
Type=Class
5+
Version=8.9
6+
@EndOfDesignText@
7+
Sub Class_Globals
8+
Private fx As JFX
9+
End Sub
10+
11+
'Initializes the object. You can add parameters to this method if needed.
12+
Public Sub Initialize
13+
14+
End Sub
15+
16+
17+
public Sub export(segments As List,sourceLang As String,targetLang As String,path As String,includeTag As Boolean,isTMXTags As Boolean)
18+
Dim tmxNode As XmlNode
19+
tmxNode=CreateNode("tmx")
20+
tmxNode.Attributes.Put("version","1.4")
21+
Dim header As XmlNode
22+
header=CreateNode("header")
23+
header.Attributes.Put("creationtool","BasicCAT")
24+
header.Attributes.Put("creationtoolversion","1.0.0")
25+
header.Attributes.put("adminlang",sourceLang)
26+
header.Attributes.put("srclang",sourceLang)
27+
header.Attributes.put("segtype","sentence")
28+
header.Attributes.put("o-tmf","BasicCAT")
29+
Dim body As XmlNode
30+
body=CreateNode("body")
31+
Dim tuList As List
32+
tuList.Initialize
33+
For Each segment As List In segments
34+
Dim tu As XmlNode
35+
tu=CreateNode("tu")
36+
Dim tuvList As List
37+
tuvList.Initialize
38+
Dim targetMap As Map
39+
targetMap=segment.Get(2)
40+
For i=0 To 1
41+
Dim seg As String=segment.Get(i)
42+
If includeTag=False Then
43+
seg=XMLUtils.TagsRemoved(seg,False)
44+
End If
45+
If i = 1 Then
46+
Dim targetTuv As XmlNode
47+
targetTuv=CreateNode("tuv")
48+
targetTuv.Attributes.Put("xml:lang",targetLang)
49+
If targetMap.ContainsKey("creator") Then
50+
targetTuv.attributes.Put("creationid",targetMap.Get("creator"))
51+
End If
52+
If targetMap.ContainsKey("createdTime") Then
53+
Dim creationDate As String
54+
DateTime.DateFormat="yyyyMMdd"
55+
DateTime.TimeFormat="HHmmss"
56+
creationDate=DateTime.Date(targetMap.Get("createdTime"))&"T"&DateTime.Time(targetMap.Get("createdTime"))&"Z"
57+
targetTuv.attributes.Put("creationdate",creationDate)
58+
End If
59+
Dim segNode As XmlNode
60+
segNode=CreateNode("seg")
61+
setNodeText(segNode,seg,isTMXTags)
62+
targetTuv.Children.Add(segNode)
63+
tuvList.Add(targetTuv)
64+
Else if i = 0 Then
65+
Dim sourceTuv As XmlNode
66+
sourceTuv=CreateNode("tuv")
67+
sourceTuv.Attributes.Put("xml:lang",sourceLang)
68+
Dim segNode As XmlNode
69+
segNode=CreateNode("seg")
70+
setNodeText(segNode,seg,isTMXTags)
71+
sourceTuv.Children.Add(segNode)
72+
tuvList.Add(sourceTuv)
73+
End If
74+
Next
75+
If targetMap.ContainsKey("note") Then
76+
If targetMap.Get("note")<>"" Then
77+
Dim note As XmlNode
78+
note=CreateNode("note")
79+
Dim textNode As XmlNode
80+
textNode=CreateNode("text")
81+
textNode.Text=targetMap.Get("note")
82+
note.Children.Add(textNode)
83+
tu.Children.InsertAt(0,note)
84+
End If
85+
End If
86+
tu.Children.AddAll(tuvList)
87+
tuList.Add(tu)
88+
Next
89+
body.Children=tuList
90+
tmxNode.Children.Add(header)
91+
tmxNode.Children.Add(body)
92+
File.WriteString(path,"",XMLUtils.asString(tmxNode))
93+
End Sub
94+
95+
private Sub setNodeText(node As XmlNode,text As String,isTMXTags As Boolean)
96+
If isTMXTags=True Then
97+
Try
98+
text=XMLUtils.HandleXMLEntities(text,True)
99+
text=Regex.Replace2("`(&lt;.*?&gt;)`",32,text,"$1")
100+
node.innerXML=convertToTMXTags(text)
101+
Return
102+
Catch
103+
Log(LastException)
104+
End Try
105+
End If
106+
node.Children.Clear
107+
Dim textNode As XmlNode
108+
textNode.Initialize
109+
textNode.Name="text"
110+
textNode.Text=text
111+
node.Children.Add(textNode)
112+
End Sub
113+
114+
private Sub convertToTMXTags(xml As String) As String
115+
Dim sb As StringBuilder
116+
sb.Initialize
117+
Dim matcher As Matcher
118+
matcher=Regex.Matcher("</*(.*?)(\d+) */*>",xml)
119+
Dim previousEndIndex As Int=0
120+
Do While matcher.Find
121+
sb.Append(xml.SubString2(previousEndIndex,matcher.GetStart(0)))
122+
previousEndIndex=matcher.GetEnd(0)
123+
If matcher.Group(1).StartsWith("g") Then
124+
Dim id As Int
125+
id=matcher.Group(2)
126+
If matcher.match.Contains("/") Then
127+
sb.Append($"<ept i="${id}">"$)
128+
sb.Append(XMLUtils.EscapeXml(matcher.match))
129+
sb.Append("</ept>")
130+
Else
131+
sb.Append($"<bpt i="${id}">"$)
132+
sb.Append(XMLUtils.EscapeXml(matcher.match))
133+
sb.Append("</bpt>")
134+
End If
135+
Else If matcher.Group(1).StartsWith("x") Then
136+
sb.Append("<ph>")
137+
sb.Append(XMLUtils.EscapeXml(matcher.Match))
138+
sb.Append("</ph>")
139+
Else
140+
sb.Append(matcher.Match)
141+
End If
142+
Loop
143+
If previousEndIndex<>xml.Length-1 Then
144+
sb.Append(xml.SubString2(previousEndIndex,xml.Length))
145+
End If
146+
Return sb.ToString
147+
End Sub
148+
149+
private Sub CreateNode(name As String) As XmlNode
150+
Dim node As XmlNode
151+
node.Initialize
152+
node.Name=name
153+
node.Attributes.Initialize
154+
node.Children.Initialize
155+
Return node
156+
End Sub

0 commit comments

Comments
 (0)