Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
using System.Xml;
using Multilingual.XML.FileType.BatchTasks.Pages;
using Multilingual.XML.FileType.BatchTasks.Settings;
using Multilingual.XML.FileType.Extensions;
using Multilingual.XML.FileType.FileType.Processors;
using Multilingual.XML.FileType.FileType.Settings;
using Multilingual.XML.FileType.Models;
Expand Down Expand Up @@ -220,6 +221,8 @@ public override void TaskComplete()
outputDocument.Load(outputXmlReader);

var nsmgr = new XmlNamespaceManager(outputDocument.NameTable);
outputDocument.AddAllNamespaces(nsmgr);

var namespaceUri = _defaultNamespaceHelper.GetXmlNameSpaceUri(
multilingualFileInfo.MultilingualFilePath, multilingualFileInfo.FileEncoding);
if (!string.IsNullOrEmpty(namespaceUri))
Expand Down Expand Up @@ -288,8 +291,8 @@ public override void TaskComplete()
: multilingualFileInfo.TargetLanguage.XPath;


var outputXmlNode = outputNode.SelectSingleNode(outputlanguagePath, nsmgr);
var multilingualXmlNode = multilingualNode.SelectSingleNode(outputlanguagePath, nsmgr);
var outputXmlNode = outputNode.SafeSelectSingleNode(outputlanguagePath, nsmgr);
var multilingualXmlNode = multilingualNode.SafeSelectSingleNode(outputlanguagePath, nsmgr);

if (multilingualXmlNode == null)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -276,22 +276,32 @@ private List<IParagraphUnit> AlignParagraphUnits(IReadOnlyList<MultilingualParag
// Target segmentation is unknown at this point.
// TODO: investigate if we can run pretranslation task reverting the language direction
for (var m = 0; m < paragraphUnitInfo.SegmentPairs.Count; m++)
{
{
var originalSegmentPairInfo = paragraphUnitInfo.SegmentPairs[m];
var segmentPairProperties = originalSegmentPairInfo.SegmentPair.Properties.Clone() as ISegmentPairProperties;
var sourceSegment = _segmentBuilder.CreateSegment(segmentPairProperties);
var targetSegment = sourceSegment.Clone() as ISegment;

foreach (var item in originalSegmentPairInfo.SegmentPair.Source)
{
if (item is IPlaceholderTag placeholder)
{
EnsureTagSubSegments(placeholder, paragraphUnitInfo);
}

sourceSegment.Add(item.Clone() as IAbstractMarkupData);
}

if (m == 0)
{
foreach (var item in updatedParagraphUnitInfo.ParagraphUnit.Source)
{
targetSegment.Add(item.Clone() as IAbstractMarkupData);
if (item is IPlaceholderTag placeholder)
{
EnsureTagSubSegments(placeholder, paragraphUnitInfo);
}

targetSegment.Add(item.Clone() as IAbstractMarkupData);
}
}

Expand Down Expand Up @@ -400,7 +410,15 @@ private List<IParagraphUnit> AlignParagraphUnits(IReadOnlyList<MultilingualParag
return paragraphUnits;
}

private void UpdateSegments(IAbstractMarkupDataContainer container, IEnumerable<ISegmentPair> segmentPairs, bool isSource)
private void EnsureTagSubSegments(IPlaceholderTag placeholder, ParagraphUnitInfo paragraphUnitInfo)
{
foreach (var subSegment in placeholder.SubSegments)
{
subSegment.ParagraphUnitId = new ParagraphUnitId(paragraphUnitInfo.ParagraphUnitId);
}
}

private void UpdateSegments(IAbstractMarkupDataContainer container, IEnumerable<ISegmentPair> segmentPairs, bool isSource)
{
for (var index = 0; index < container.Count; index++)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;

namespace Multilingual.XML.FileType.Extensions
{
public static class XMLDocumentExtensions
{
public static void AddAllNamespaces(this XmlDocument doc, XmlNamespaceManager nsmgr)
{
var root = doc.DocumentElement;
if (root == null) return;

foreach (XmlAttribute attr in root.Attributes)
{
if (attr.Prefix == "xmlns")
{
nsmgr.AddNamespace(attr.LocalName, attr.Value);
}
else if (attr.Name == "xmlns")
{
nsmgr.AddNamespace(string.Empty, attr.Value); // default namespace
}
}
}

public static XmlNode SafeSelectSingleNode(this XmlNode node, string path, XmlNamespaceManager nsmgr)
{
if (string.IsNullOrWhiteSpace(path))
return null;

if (path.TrimStart().StartsWith("["))
path = "(.)" + path; // parentheses make it valid for .NET XPath

return node.SelectSingleNode(path, nsmgr);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net48</TargetFramework>
<TradosFolder>C:\Program Files (x86)\Trados\Trados Studio\Studio18beta</TradosFolder>
<TradosFolder>C:\Program Files (x86)\Trados\Trados Studio\Studio18</TradosFolder>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<PluginDeploymentPath>$(AppData)\Trados\Trados Studio\18beta\Plugins</PluginDeploymentPath>
<PluginDeploymentPath>$(AppData)\Trados\Trados Studio\18\Plugins</PluginDeploymentPath>
<UseWindowsForms>true</UseWindowsForms>
<UseWPF>true</UseWPF>
<ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,4 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("3.0.0.0")]
[assembly: AssemblyFileVersion("3.1.1.0")]
[assembly: AssemblyFileVersion("3.1.2.1")]
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,7 @@ public bool ParseNext()

_document.Load(_xmlReader);
_nsmgr = new XmlNamespaceManager(_document.NameTable);
_document.AddAllNamespaces(_nsmgr);

UpdateLanguageMappingSettings(_nsmgr);

Expand All @@ -195,7 +196,7 @@ public bool ParseNext()

var xmlNode = nodes[index];

var sourceXmlNode = xmlNode.SelectSingleNode(_sourceLanguage.XPath, _nsmgr);
var sourceXmlNode = xmlNode.SafeSelectSingleNode(_sourceLanguage.XPath, _nsmgr);
var childNode = sourceXmlNode?.FirstChild;
var isCdata = childNode?.NodeType == XmlNodeType.CDATA;

Expand Down Expand Up @@ -237,7 +238,7 @@ private List<XmlNode> GetParagraphLevelCommentNodes(XmlNode xmlNode)
var allSegmentCommentXmlNodes = new List<XmlNode>();
foreach (var languageMappingLanguage in LanguageMappingSettings.LanguageMappingLanguages)
{
var languageXmlNode = xmlNode.SelectSingleNode(languageMappingLanguage.XPath, _nsmgr);
var languageXmlNode = xmlNode.SafeSelectSingleNode(languageMappingLanguage.XPath, _nsmgr);
var languageComments = languageXmlNode?.SelectNodes(".//" + CommentMappingSettings.CommentElementName, _nsmgr);
if (languageComments != null)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
using Sdl.FileTypeSupport.Framework.BilingualApi;
using Sdl.FileTypeSupport.Framework.NativeApi;
using Sdl.FileTypeSupport.Framework.IntegrationApi;
using Multilingual.XML.FileType.Extensions;

namespace Multilingual.XML.FileType.Services
{
Expand Down Expand Up @@ -167,8 +168,9 @@ public void SetFileProperties(IFileProperties fileInfo)
_targetDocument.Load(_xmlReader);

_nsmgr = new XmlNamespaceManager(_targetDocument.NameTable);
_targetDocument.AddAllNamespaces(_nsmgr);

if (_originalFileProperties.FileSnifferInfo != null && _originalFileProperties.FileSnifferInfo.MetaDataContainsKey(Constants.DefaultNamespace))
if (_originalFileProperties.FileSnifferInfo != null && _originalFileProperties.FileSnifferInfo.MetaDataContainsKey(Constants.DefaultNamespace))
{
var namespaceUri = _originalFileProperties.FileSnifferInfo.GetMetaData(Constants.DefaultNamespace);
if (!string.IsNullOrEmpty(namespaceUri))
Expand Down Expand Up @@ -439,7 +441,7 @@ private XmlNode GetXmlNode(bool isSource)

private XmlNode GetXmlUnitNode(XmlNode xmlUnit, string xPath)
{
var xmlNode = xmlUnit.SelectSingleNode(xPath, _nsmgr);
var xmlNode = xmlUnit.SafeSelectSingleNode(xPath, _nsmgr);
if (xmlNode == null)
{
xmlNode = _xmlNodeService.AddXmlNode(xmlUnit, xPath);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,25 @@ public DefaultNamespaceHelper(XmlReaderFactory xmlReaderFactory)
_xmlReaderFactory = xmlReaderFactory;
}

public string GetXmlNameSpaceUri(string filePath, Encoding encoding)
public void AddAllNamespacesFromDocument(XmlDocument doc, XmlNamespaceManager nsmgr)
{
var root = doc.DocumentElement;
if (root == null) return;

foreach (XmlAttribute attr in root.Attributes)
{
if (attr.Prefix == "xmlns")
{
nsmgr.AddNamespace(attr.LocalName, attr.Value);
}
else if (attr.Name == "xmlns")
{
nsmgr.AddNamespace(string.Empty, attr.Value); // default namespace
}
}
}

public string GetXmlNameSpaceUri(string filePath, Encoding encoding)
{
string namespaceUri;
using (var fs = new FileStream(filePath, FileMode.Open))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using System.Linq;
using System.Text;
using System.Xml;
using Multilingual.XML.FileType.Extensions;
using Multilingual.XML.FileType.FileType.Settings;
using Sdl.Core.Globalization;
using Sdl.Core.Settings;
Expand Down Expand Up @@ -86,7 +87,9 @@ private bool IsFileSupported(string filePath, string namespaceUri, Encoding enco
document.Load(reader);

var nsmgr = new XmlNamespaceManager(document.NameTable);
if (!string.IsNullOrEmpty(namespaceUri))
document.AddAllNamespaces(nsmgr);

if (!string.IsNullOrEmpty(namespaceUri))
{
var defaultNameSpace = new XmlNameSpace { Name = Constants.DefaultNamespace, Value = namespaceUri };
_defaultNamespaceHelper.AddXmlNameSpacesFromDocument(nsmgr, document, defaultNameSpace);
Expand All @@ -107,14 +110,19 @@ private bool IsFileSupported(string filePath, string namespaceUri, Encoding enco
}

var nodes = document.SelectNodes(_languageMappingSettings.LanguageMappingLanguagesXPath, nsmgr);
var node = nodes?.Item(0);

supported = _languageMappingSettings.LanguageMappingLanguages.Select(language =>
node?.SelectSingleNode(language.XPath, nsmgr)).Any(target => target != null);
foreach (XmlNode node in nodes)
{
if (_languageMappingSettings.LanguageMappingLanguages.Select(language =>
node?.SafeSelectSingleNode(language.XPath, nsmgr)).Any(target => target != null) == true)
{
return true;
}

}
}
}

return supported;
return false;
}
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using Multilingual.XML.FileType.Extensions;
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Xml;
Expand Down Expand Up @@ -50,12 +51,12 @@ public XmlNode AddXmlNode(XmlNode xmlUnit, string xPath)

var queryNode = GetQueryNode(xmlNodeName, validAttributes);

var existingNode = xmlNode.SelectSingleNode(queryNode, _nsmgr);
var existingNode = xmlNode.SafeSelectSingleNode(queryNode, _nsmgr);
if (existingNode == null && !string.IsNullOrEmpty(normalizedXmlNodeName))
{
xmlNodeName = normalizedXmlNodeName;
queryNode = GetQueryNode(normalizedXmlNodeName, validAttributes);
existingNode = xmlNode.SelectSingleNode(queryNode, _nsmgr);
existingNode = xmlNode.SafeSelectSingleNode(queryNode, _nsmgr);
}
if (existingNode == null)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<PluginPackage xmlns="http://www.sdl.com/Plugins/PluginPackage/1.0">
<PlugInName>Multilingual XML FileType</PlugInName>
<Version>3.1.1.0</Version>
<Version>3.1.2.1</Version>
<Description>Multilingual XML File Type</Description>
<Author>Trados AppStore Team</Author>
<RequiredProduct name="TradosStudio" minversion="18.1" maxversion="18.1.9"/>
Expand Down