Esempio n. 1
0
        private void WriteSegmentNotesPolyglot(XmlWriter writer, SegmentPair segmentPair)
        {
            var sourceComments = GetSegmentComments(segmentPair.Source.Elements);

            WriteNotes(writer, sourceComments, "source");

            if (IncludeTranslations)
            {
                var targetComments = GetSegmentComments(segmentPair.Target.Elements);
                WriteNotes(writer, targetComments, "target");
            }
        }
        private void WriteSegmentPolyglot(XmlWriter writer, SegmentPair segmentPair, bool isSource)
        {
            writer.WriteStartElement(isSource ? "source" : "target");

            var elements = isSource ? segmentPair.Source.Elements : segmentPair.Target.Elements;

            foreach (var element in elements)
            {
                WriteSegment(writer, element);
            }

            writer.WriteEndElement();             // source or target
        }
Esempio n. 3
0
        private void UpdateTargetSegment(ISegmentPair segmentPair, SegmentPair importedSegmentPair, SegmentPairInfo segmentPairInfo)
        {
            var targetSegment = segmentPair.Target;

            var originalSource = (ISegment)segmentPair.Source.Clone();
            var originalTarget = (ISegment)targetSegment.Clone();

            // clear the existing content from the target segment
            targetSegment.Clear();

            var containers = new Stack <IAbstractMarkupDataContainer>();

            containers.Push(targetSegment);

            var lockedContentId = 0;

            foreach (var element in importedSegmentPair.Target.Elements)
            {
                if (element is ElementComment elementComment)
                {
                    UpdateComment(elementComment, containers);
                }

                if (element is ElementTagPair elementTagPair)
                {
                    UpdateTagPair(elementTagPair, originalTarget, originalSource, containers);
                }

                if (element is ElementLocked elementLocked)
                {
                    lockedContentId = UpdateLockedContent(elementLocked, lockedContentId, originalTarget, originalSource, containers);
                }

                if (element is ElementPlaceholder elementPlaceholder)
                {
                    UpdatePlaceholder(elementPlaceholder, originalTarget, originalSource, containers);
                }

                if (element is ElementGenericPlaceholder genericPlaceholder)
                {
                    UpdateGenericPlaceholder(genericPlaceholder, originalTarget, originalSource, containers);
                }

                if (element is ElementText elementText && !string.IsNullOrEmpty(elementText.Text))
                {
                    UpdateText(elementText, containers);
                }
            }

            UpdateTranslationOrigin(originalTarget, targetSegment, segmentPairInfo);
        }
Esempio n. 4
0
        private void WriteSegmentPolyglot(XmlWriter writer, SegmentPair segmentPair, bool isSource)
        {
            writer.WriteStartElement(isSource ? "source" : "target");
            //writer.WriteAttributeString("xml", "space", null, "preserve");

            var elements = isSource ? segmentPair.Source.Elements : segmentPair.Target.Elements;

            foreach (var element in elements)
            {
                WriteSegment(writer, element);
            }

            writer.WriteEndElement();             // source or target
        }
Esempio n. 5
0
        private static string GetTranslationStatus(SegmentPair segmentPair)
        {
            var match = string.Empty;

            if (segmentPair.TranslationOrigin == null)
            {
                return(match);
            }
            if (segmentPair.TranslationOrigin.MatchPercentage >= 100)
            {
                if (string.Compare(segmentPair.TranslationOrigin.OriginType, "document-match", StringComparison.OrdinalIgnoreCase) == 0)
                {
                    match = "PM";
                }
                else if (string.Compare(segmentPair.TranslationOrigin.TextContextMatchLevel, "SourceAndTarget", StringComparison.OrdinalIgnoreCase) == 0)
                {
                    match = "CM";
                }
                else if (string.Compare(segmentPair.TranslationOrigin.OriginType, "mt", StringComparison.OrdinalIgnoreCase) == 0 ||
                         string.Compare(segmentPair.TranslationOrigin.OriginType, "nmt", StringComparison.OrdinalIgnoreCase) == 0 ||
                         string.Compare(segmentPair.TranslationOrigin.OriginType, "amt", StringComparison.OrdinalIgnoreCase) == 0)
                {
                    match = "AT";
                }

                else
                {
                    match = segmentPair.TranslationOrigin.MatchPercentage + "%";
                }
            }
            else if (string.Compare(segmentPair.TranslationOrigin.OriginType, "mt", StringComparison.OrdinalIgnoreCase) == 0 ||
                     string.Compare(segmentPair.TranslationOrigin.OriginType, "nmt", StringComparison.OrdinalIgnoreCase) == 0 ||
                     string.Compare(segmentPair.TranslationOrigin.OriginType, "amt", StringComparison.OrdinalIgnoreCase) == 0)
            {
                match = "AT";
            }
            else if (segmentPair.TranslationOrigin.MatchPercentage > 0)
            {
                match = segmentPair.TranslationOrigin.MatchPercentage + "%";
            }
            else
            {
                match = "";
            }
            return(match);
        }
Esempio n. 6
0
            private void RecalcNeighbor([NotNull] SegmentPartWithNeighbor neighbor,
                                        [NotNull] SegmentPartWithNeighbor part,
                                        [NotNull] SegmentPair hulls)
            {
                IFeatureRowsDistance rowsDistance =
                    NearDistanceProvider.GetRowsDistance(part.NeighborFeature,
                                                         part.NeighborTableIndex);

                SegmentHull neighborhull = CreateSegmentHull(
                    (SegmentProxy)part.NeighborProxy, rowsDistance,
                    hulls.Neighbor.StartCap, hulls.Neighbor.EndCap);

                SegmentHull hull = CreateNeighborSegmentHull(
                    (SegmentProxy)Assert.NotNull(part.SegmentProxy, "segmentproxy is null"),
                    rowsDistance, neighbor.NeighborFeature,          // == part.Feature
                    neighbor.NeighborTableIndex,                     // == part.TableIndex
                    hulls.Hull.StartCap, hulls.Hull.EndCap);

                RecalcPart(neighbor, neighborhull, hull);
            }
Esempio n. 7
0
        /// <summary>
        /// The route partial.
        /// </summary>
        /// <param name="content">
        /// The content.
        /// </param>
        /// <param name="segmentContext">
        /// The segment context.
        /// </param>
        /// <returns>
        /// The <see cref="object"/>.
        /// </returns>
        public object RoutePartial(PageData content, SegmentContext segmentContext)
        {
            if (segmentContext == null)
            {
                return(content);
            }

            // Use helper method GetNextValue to get the next part from the URL
            SegmentPair nextSegment = segmentContext.GetNextValue(segmentContext.RemainingPath);

            string output = nextSegment.Next;

            if (string.IsNullOrWhiteSpace(output))
            {
                return(content);
            }

            segmentContext.RemainingPath = nextSegment.Remaining;

            if (output.Equals(OutputConstants.PDF, StringComparison.OrdinalIgnoreCase) && OutputSettings.Instance.EnablePDF)
            {
                OutputHelper.HandlePdf(content);
            }

            if (output.Equals(OutputConstants.Text, StringComparison.OrdinalIgnoreCase) && OutputSettings.Instance.EnableTXT)
            {
                OutputHelper.HandleTxt(content);
            }

            if (output.Equals(OutputConstants.XML, StringComparison.OrdinalIgnoreCase) && OutputSettings.Instance.EnableXML)
            {
                OutputHelper.HandleXml(content);
            }

            if (output.Equals(OutputConstants.JSON, StringComparison.OrdinalIgnoreCase) && OutputSettings.Instance.EnableJSON)
            {
                OutputHelper.HandleJson(content);
            }

            return(content);
        }
Esempio n. 8
0
        private static bool ImportTranslation(SegmentPair segmentPair)
        {
            var importTranslation = true;

            if (segmentPair.IsLocked && Sdl.Community.XliffReadWrite.Processor.ProcessorSettings.DoNotImportLocked)
            {
                importTranslation = false;
            }
            else if (!segmentPair.IsLocked && Sdl.Community.XliffReadWrite.Processor.ProcessorSettings.DoNotImportUnLocked)
            {
                importTranslation = false;
            }
            else if (string.Compare(segmentPair.MatchTypeId, "Perfect Match", StringComparison.OrdinalIgnoreCase) == 0 &&
                     Sdl.Community.XliffReadWrite.Processor.ProcessorSettings.DoNotImportPerfectMatch)
            {
                importTranslation = false;
            }
            else if (string.Compare(segmentPair.MatchTypeId, "Context Match", StringComparison.OrdinalIgnoreCase) == 0 &&
                     Sdl.Community.XliffReadWrite.Processor.ProcessorSettings.DoNotImportContextMatch)
            {
                importTranslation = false;
            }
            else if (string.Compare(segmentPair.MatchTypeId, "Exact Match", StringComparison.OrdinalIgnoreCase) == 0 &&
                     Sdl.Community.XliffReadWrite.Processor.ProcessorSettings.DoNotImportExactMatch)
            {
                importTranslation = false;
            }
            else if (string.Compare(segmentPair.MatchTypeId, "Fuzzy Match", StringComparison.OrdinalIgnoreCase) == 0 &&
                     Sdl.Community.XliffReadWrite.Processor.ProcessorSettings.DoNotImportFuzzyMatch)
            {
                importTranslation = false;
            }
            else if (string.Compare(segmentPair.MatchTypeId, "No Match", StringComparison.OrdinalIgnoreCase) == 0 &&
                     Sdl.Community.XliffReadWrite.Processor.ProcessorSettings.DoNotImportNoMatch)
            {
                importTranslation = false;
            }
            return(importTranslation);
        }
        private SegmentPair ReadTransUnit(XmlReader xmlReader)
        {
            var segmentPair = new SegmentPair(_segmentBuilder);

            var index = 0;

            while (xmlReader.Read())
            {
                switch (xmlReader.NodeType)
                {
                case XmlNodeType.Element:
                    if (index == 0 && string.Compare(xmlReader.Name, "trans-unit", StringComparison.OrdinalIgnoreCase) == 0)
                    {
                        index++;
                        while (xmlReader.MoveToNextAttribute())
                        {
                            if (string.Compare(xmlReader.Name, "id", StringComparison.OrdinalIgnoreCase) == 0)
                            {
                                // for polyglot support, the segment id is represented by the trans-unit id
                                segmentPair.Id = xmlReader.Value;
                            }
                            if (string.Compare(xmlReader.Name, NsPrefix + ":conf", StringComparison.OrdinalIgnoreCase) == 0)
                            {
                                var success = Enum.TryParse <ConfirmationLevel>(xmlReader.Value, true, out var value);
                                segmentPair.ConfirmationLevel = success ? value : ConfirmationLevel.Unspecified;
                            }
                            if (string.Compare(xmlReader.Name, NsPrefix + ":locked", StringComparison.OrdinalIgnoreCase) == 0)
                            {
                                var success = bool.TryParse(xmlReader.Value, out var result);
                                segmentPair.IsLocked = success && result;
                            }
                            if (string.Compare(xmlReader.Name, NsPrefix + ":origin", StringComparison.OrdinalIgnoreCase) == 0)
                            {
                                segmentPair.TranslationOrigin.OriginType = xmlReader.Value;
                            }
                            if (string.Compare(xmlReader.Name, NsPrefix + ":origin-system", StringComparison.OrdinalIgnoreCase) == 0)
                            {
                                segmentPair.TranslationOrigin.OriginSystem = xmlReader.Value;
                            }
                            if (string.Compare(xmlReader.Name, NsPrefix + ":percent", StringComparison.OrdinalIgnoreCase) == 0)
                            {
                                var success = byte.TryParse(xmlReader.Value, out var result);
                                segmentPair.TranslationOrigin.MatchPercent = success ? result : (byte)0;
                            }
                            if (string.Compare(xmlReader.Name, NsPrefix + ":struct-match", StringComparison.OrdinalIgnoreCase) == 0)
                            {
                                var success = bool.TryParse(xmlReader.Value, out var result);
                                segmentPair.TranslationOrigin.IsStructureContextMatch = success && result;
                            }
                            if (string.Compare(xmlReader.Name, NsPrefix + ":text-match", StringComparison.OrdinalIgnoreCase) == 0)
                            {
                                var success = Enum.TryParse <TextContextMatchLevel>(xmlReader.Value, true, out var result);
                                segmentPair.TranslationOrigin.TextContextMatchLevel = success ? result : TextContextMatchLevel.None;
                            }
                        }
                    }
                    else if (string.Compare(xmlReader.Name, "source", StringComparison.OrdinalIgnoreCase) == 0)
                    {
                        var xmlReaderSub = xmlReader.ReadSubtree();
                        segmentPair.Source = ReadSource(xmlReaderSub);
                        xmlReaderSub.Close();
                    }
                    else if (string.Compare(xmlReader.Name, "target", StringComparison.OrdinalIgnoreCase) == 0)
                    {
                        var xmlReaderSub = xmlReader.ReadSubtree();
                        segmentPair.Target = ReadTarget(xmlReaderSub);
                        xmlReaderSub.Close();
                    }
                    else if (string.Compare(xmlReader.Name, "note", StringComparison.OrdinalIgnoreCase) == 0)
                    {
                        var xmlReaderSub = xmlReader.ReadSubtree();
                        var comment      = ReadComment(xmlReaderSub, out var id);

                        AddCommentToCollection(id, comment);

                        xmlReaderSub.Close();
                    }
                    break;
                }
            }

            return(segmentPair);
        }
Esempio n. 10
0
        public void ProcessParagraphUnit(IParagraphUnit paragraphUnit)
        {
            if (paragraphUnit.IsStructure || !paragraphUnit.SegmentPairs.Any())
            {
                return;
            }

            var transUnit = new TransUnit
            {
                Id = paragraphUnit.Properties.ParagraphUnitId.Id
            };

            foreach (var segmentPair in paragraphUnit.SegmentPairs)
            {
                var segmentPairInfo = SegmentPairProcessor.GetSegmentPairInfo(segmentPair);
                var status          = segmentPair.Properties.ConfirmationLevel.ToString();
                var match           = Enumerators.GetTranslationOriginType(segmentPair.Target.Properties.TranslationOrigin, _analysisBands);

                if (_exportOptions.ExcludeFilterIds != null)
                {
                    if ((segmentPair.Properties.IsLocked && _exportOptions.ExcludeFilterIds.Exists(a => a == "Locked")) ||
                        _exportOptions.ExcludeFilterIds.Exists(a => a == status) ||
                        _exportOptions.ExcludeFilterIds.Exists(a => a == match))
                    {
                        AddWordCounts(status, ConfirmationStatistics.WordCounts.Excluded, segmentPairInfo);
                        AddWordCounts(match, TranslationOriginStatistics.WordCounts.Excluded, segmentPairInfo);
                        continue;
                    }
                }

                SegmentVisitor.VisitSegment(segmentPair.Source);
                if (SegmentVisitor.HasRevisions)
                {
                    throw new Exception(PluginResources.Message_UnableToProcessFileWithTrackChanges +
                                        Environment.NewLine +
                                        PluginResources.Message_AccecptRejectTrackChangesBeforeExporting);
                }

                var sourceElements = SegmentVisitor.Elements;
                if (SegmentVisitor.Comments.Count > 0)
                {
                    foreach (var comment in SegmentVisitor.Comments)
                    {
                        if (!Xliff.DocInfo.Comments.ContainsKey(comment.Key))
                        {
                            Xliff.DocInfo.Comments.Add(comment.Key, comment.Value);
                        }
                    }
                }
                UpdateTagIds();

                if (segmentPair.Target?.Count == 0 && _exportOptions.CopySourceToTarget)
                {
                    segmentPair.Target.Clear();

                    foreach (var sourceElement in segmentPair.Source)
                    {
                        segmentPair.Target.Add(sourceElement.Clone() as IAbstractMarkupData);
                    }
                }

                SegmentVisitor.VisitSegment(segmentPair.Target);
                if (SegmentVisitor.HasRevisions)
                {
                    throw new Exception(PluginResources.Message_UnableToProcessFileWithTrackChanges +
                                        Environment.NewLine +
                                        PluginResources.Message_AccecptRejectTrackChangesBeforeExporting);
                }
                var targetElements = SegmentVisitor.Elements;
                if (SegmentVisitor.Comments.Count > 0)
                {
                    foreach (var comment in SegmentVisitor.Comments)
                    {
                        if (!Xliff.DocInfo.Comments.ContainsKey(comment.Key))
                        {
                            Xliff.DocInfo.Comments.Add(comment.Key, comment.Value);
                        }
                    }
                }
                UpdateTagIds();

                var newSegmentPair = new SegmentPair(_segmentBuilder)
                {
                    Id     = segmentPair.Properties.Id.Id,
                    Source = new Source {
                        Elements = sourceElements
                    },
                    Target = new Target {
                        Elements = targetElements
                    },
                    IsLocked          = segmentPair.Properties.IsLocked,
                    ConfirmationLevel = segmentPair.Properties.ConfirmationLevel,
                    TranslationOrigin = segmentPair.Properties.TranslationOrigin
                };
                transUnit.SegmentPairs.Add(newSegmentPair);

                AddWordCounts(status, ConfirmationStatistics.WordCounts.Processed, segmentPairInfo);
                AddWordCounts(match, TranslationOriginStatistics.WordCounts.Processed, segmentPairInfo);
            }

            if (transUnit.SegmentPairs.Count > 0)
            {
                Xliff.Files[Xliff.Files.Count - 1].Body.TransUnits.Add(transUnit);
            }
        }
Esempio n. 11
0
        private void UpdateTranslationOrigin(ISegment originalTarget, ISegment targetSegment, SegmentPairInfo segmentPairInfo, SegmentPair importedSegmentPair)
        {
            SegmentVisitor.VisitSegment(originalTarget);
            var originalText = SegmentVisitor.Text;

            SegmentVisitor.VisitSegment(targetSegment);
            var updatedText = SegmentVisitor.Text;

            if (string.Compare(originalText, updatedText, StringComparison.Ordinal) != 0)
            {
                if (!string.IsNullOrEmpty(_importOptions.StatusTranslationUpdatedId))
                {
                    if (targetSegment.Properties.TranslationOrigin == null)
                    {
                        targetSegment.Properties.TranslationOrigin = importedSegmentPair.TranslationOrigin;
                    }

                    if (targetSegment.Properties.TranslationOrigin != null)
                    {
                        var currentTranslationOrigin = (ITranslationOrigin)targetSegment.Properties.TranslationOrigin.Clone();
                        targetSegment.Properties.TranslationOrigin.OriginBeforeAdaptation = currentTranslationOrigin;
                    }
                    else
                    {
                        targetSegment.Properties.TranslationOrigin = _segmentBuilder.CreateTranslationOrigin();
                    }

                    SetTranslationOrigin(targetSegment);

                    var success = Enum.TryParse <ConfirmationLevel>(_importOptions.StatusTranslationUpdatedId, true, out var result);
                    var statusTranslationUpdated = success ? result : importedSegmentPair.ConfirmationLevel;

                    targetSegment.Properties.ConfirmationLevel = statusTranslationUpdated;
                    targetSegment.Properties.IsLocked          = importedSegmentPair.IsLocked;
                }
                else
                {
                    targetSegment.Properties.TranslationOrigin = importedSegmentPair.TranslationOrigin;
                    targetSegment.Properties.IsLocked          = importedSegmentPair.IsLocked;
                    targetSegment.Properties.ConfirmationLevel = importedSegmentPair.ConfirmationLevel;
                }

                var status = targetSegment.Properties.ConfirmationLevel.ToString();
                var match  = Enumerators.GetTranslationOriginType(targetSegment.Properties.TranslationOrigin, _analysisBands);

                AddWordCounts(status, segmentPairInfo, match);
            }
            else
            {
                if (!string.IsNullOrEmpty(_importOptions.StatusTranslationNotUpdatedId))
                {
                    var success = Enum.TryParse <ConfirmationLevel>(_importOptions.StatusTranslationNotUpdatedId, true, out var result);
                    var statusTranslationNotUpdated = success ? result : importedSegmentPair.ConfirmationLevel;

                    targetSegment.Properties.ConfirmationLevel = statusTranslationNotUpdated;
                }
                else
                {
                    targetSegment.Properties.ConfirmationLevel = importedSegmentPair.ConfirmationLevel;
                }

                targetSegment.Properties.TranslationOrigin = importedSegmentPair.TranslationOrigin;
                targetSegment.Properties.IsLocked          = importedSegmentPair.IsLocked;

                var status = targetSegment.Properties.ConfirmationLevel.ToString();
                var match  = Enumerators.GetTranslationOriginType(targetSegment.Properties.TranslationOrigin, _analysisBands);

                AddWordCounts(status, segmentPairInfo, match);
            }
        }
Esempio n. 12
0
        private void UpdateTargetSegment(ISegmentPair segmentPair, SegmentPair importedSegmentPair, SegmentPairInfo segmentPairInfo)
        {
            var sourceSegment = segmentPair.Source;
            var targetSegment = segmentPair.Target;

            var originalSource = (ISegment)sourceSegment.Clone();
            var originalTarget = (ISegment)targetSegment.Clone();

            if (_importBackTranslations &&
                importedSegmentPair.TranslationOrigin != null &&
                importedSegmentPair.TranslationOrigin.MetaDataContainsKey("back-translation"))
            {
                var backTranslation       = importedSegmentPair.TranslationOrigin.GetMetaData("back-translation");
                var backTranslationTokens = JsonConvert.DeserializeObject <List <Token> >(backTranslation);
                targetSegment = _segmentBuilder.GetUpdatedSegment(targetSegment,
                                                                  backTranslationTokens, sourceSegment);
            }
            else
            {
                // clear the existing content from the target segment
                targetSegment.Clear();

                var containers = new Stack <IAbstractMarkupDataContainer>();
                containers.Push(targetSegment);

                var lockedContentId = 0;
                foreach (var element in importedSegmentPair.Target.Elements)
                {
                    if (element is ElementComment elementComment)
                    {
                        UpdateComment(elementComment, containers);
                    }

                    if (element is ElementTagPair elementTagPair)
                    {
                        UpdateTagPair(elementTagPair, originalTarget, originalSource, containers);
                    }

                    if (element is ElementLocked elementLocked)
                    {
                        lockedContentId = UpdateLockedContent(elementLocked, lockedContentId, originalTarget,
                                                              originalSource, containers);
                    }

                    if (element is ElementPlaceholder elementPlaceholder)
                    {
                        UpdatePlaceholder(elementPlaceholder, originalTarget, originalSource, containers);
                    }

                    if (element is ElementGenericPlaceholder genericPlaceholder)
                    {
                        UpdateGenericPlaceholder(genericPlaceholder, originalTarget, originalSource, containers);
                    }

                    if (element is ElementText elementText && !string.IsNullOrEmpty(elementText.Text))
                    {
                        UpdateText(elementText, containers);
                    }
                }
            }

            UpdateTranslationOrigin(originalTarget, targetSegment, segmentPairInfo, importedSegmentPair);
        }
Esempio n. 13
0
        private TransUnit ReadTransUnit(XmlReader xmlReader)
        {
            var transUnit             = new TransUnit();
            var sourceSegments        = new List <Source>();
            var targetSegments        = new List <Target>();
            var segmentPairProperties = new List <ISegmentPairProperties>();

            var index = 0;

            while (xmlReader.Read())
            {
                switch (xmlReader.NodeType)
                {
                case XmlNodeType.Element:
                    if (index == 0 && string.Compare(xmlReader.Name, "trans-unit", StringComparison.OrdinalIgnoreCase) == 0)
                    {
                        index++;
                        while (xmlReader.MoveToNextAttribute())
                        {
                            if (string.Compare(xmlReader.Name, "id", StringComparison.OrdinalIgnoreCase) == 0)
                            {
                                transUnit.Id = xmlReader.Value;
                            }
                        }
                    }
                    if (string.Compare(xmlReader.Name, "seg-source", StringComparison.OrdinalIgnoreCase) == 0)
                    {
                        var xmlReaderSub = xmlReader.ReadSubtree();
                        sourceSegments = ReadSourceSegments(xmlReaderSub);
                        xmlReaderSub.Close();
                    }
                    else if (string.Compare(xmlReader.Name, "target", StringComparison.OrdinalIgnoreCase) == 0)
                    {
                        var xmlReaderSub = xmlReader.ReadSubtree();
                        targetSegments = ReadTargetSegments(xmlReaderSub);
                        xmlReaderSub.Close();
                    }
                    else if (string.Compare(xmlReader.Name, NsPrefix + ":seg-defs", StringComparison.OrdinalIgnoreCase) == 0)
                    {
                        var xmlReaderSub = xmlReader.ReadSubtree();
                        segmentPairProperties = ReadSegmentPairPropertyDefinitions(xmlReaderSub);
                        xmlReaderSub.Close();
                    }

                    break;
                }
            }

            foreach (var sourceSegment in sourceSegments)
            {
                var segmentPair = new SegmentPair(_segmentBuilder);
                segmentPair.Id = sourceSegment.Id;
                segmentPair.Source.Elements.AddRange(sourceSegment.Elements);

                var targetSegment = targetSegments.FirstOrDefault(a => a.Id.Equals(sourceSegment.Id));
                if (targetSegment != null)
                {
                    segmentPair.Target.Elements.AddRange(targetSegment.Elements);
                }

                var properties = segmentPairProperties.FirstOrDefault(a => a.Id.Id == segmentPair.Id);
                if (properties != null)
                {
                    segmentPair.ConfirmationLevel = properties.ConfirmationLevel;
                    segmentPair.IsLocked          = properties.IsLocked;
                    segmentPair.TranslationOrigin = properties.TranslationOrigin;
                }

                transUnit.SegmentPairs.Add(segmentPair);
            }

            return(transUnit);
        }
Esempio n. 14
0
        private void AddToComparision(ref ComparisonParagraphUnit comparisonParagraphUnit
                                      , ComparisonSegmentUnit comparisonSegmentUnit
                                      , SegmentPair segmentPairOriginal
                                      , SegmentPair segmentPairUpdated)
        {
            comparisonSegmentUnit.SegmentStatusOriginal = segmentPairOriginal.SegmentStatus;
            comparisonSegmentUnit.SegmentStatusUpdated  = segmentPairUpdated.SegmentStatus;

            comparisonSegmentUnit.TranslationStatusOriginal = GetTranslationStatus(segmentPairOriginal);
            comparisonSegmentUnit.TranslationStatusUpdated  = GetTranslationStatus(segmentPairUpdated);

            if (segmentPairOriginal.TranslationOrigin != null)
            {
                comparisonSegmentUnit.TranslationOriginTypeOriginal = segmentPairOriginal.TranslationOrigin.OriginType;
            }
            if (segmentPairUpdated.TranslationOrigin != null)
            {
                comparisonSegmentUnit.TranslationOriginTypeUpdated = segmentPairUpdated.TranslationOrigin.OriginType;
            }


            comparisonSegmentUnit.TranslationSectionsWordsIdentical      = 0;
            comparisonSegmentUnit.TranslationSectionsCharactersIdentical = 0;
            comparisonSegmentUnit.TranslationSectionsTagsIdentical       = 0;

            comparisonSegmentUnit.TranslationSectionsWordsNew      = 0;
            comparisonSegmentUnit.TranslationSectionsCharactersNew = 0;
            comparisonSegmentUnit.TranslationSectionsTagsNew       = 0;

            comparisonSegmentUnit.TranslationSectionsWordsRemoved      = 0;
            comparisonSegmentUnit.TranslationSectionsCharactersRemoved = 0;
            comparisonSegmentUnit.TranslationSectionsTagsRemoved       = 0;


            comparisonSegmentUnit.TranslationSectionsWords      = 0;
            comparisonSegmentUnit.TranslationSectionsCharacters = 0;
            comparisonSegmentUnit.TranslationSectionsTags       = 0;

            comparisonSegmentUnit.TranslationSectionsChangedWords      = 0;
            comparisonSegmentUnit.TranslationSectionsChangedCharacters = 0;
            comparisonSegmentUnit.TranslationSectionsChangedTags       = 0;


            if (string.Compare(segmentPairOriginal.Target, segmentPairUpdated.Target, StringComparison.OrdinalIgnoreCase) != 0)
            {
                try
                {
                    comparisonSegmentUnit.ComparisonTextUnits = GetComparisonTextUnits(segmentPairOriginal.TargetSections, segmentPairUpdated.TargetSections);



                    foreach (var comparisonTextUnit in comparisonSegmentUnit.ComparisonTextUnits)
                    {
                        switch (comparisonTextUnit.ComparisonTextUnitType)
                        {
                        case ComparisonTextUnitType.Identical:
                            foreach (var segmentSection in comparisonTextUnit.TextSections)
                            {
                                if (segmentSection.Content.Trim() != string.Empty)
                                {
                                    if (segmentSection.IsText)
                                    {
                                        comparisonSegmentUnit.TranslationSectionsWordsIdentical++;
                                    }
                                    else
                                    {
                                        comparisonSegmentUnit.TranslationSectionsTagsIdentical++;
                                    }
                                }
                                if (segmentSection.IsText)
                                {
                                    comparisonSegmentUnit.TranslationSectionsCharactersIdentical += segmentSection.Content.ToCharArray().Length;
                                }
                            }
                            break;

                        case ComparisonTextUnitType.New:
                            foreach (var segmentSection in comparisonTextUnit.TextSections)
                            {
                                if (segmentSection.Content.Trim() != string.Empty)
                                {
                                    if (segmentSection.IsText)
                                    {
                                        comparisonSegmentUnit.TranslationSectionsWordsNew++;
                                    }
                                    else
                                    {
                                        comparisonSegmentUnit.TranslationSectionsTagsNew++;
                                    }
                                }
                                if (segmentSection.IsText)
                                {
                                    comparisonSegmentUnit.TranslationSectionsCharactersNew += segmentSection.Content.ToCharArray().Length;
                                }
                            }
                            break;

                        case ComparisonTextUnitType.Removed:

                            foreach (var segmentSection in comparisonTextUnit.TextSections)
                            {
                                if (segmentSection.Content.Trim() != string.Empty)
                                {
                                    if (segmentSection.IsText)
                                    {
                                        comparisonSegmentUnit.TranslationSectionsWordsRemoved++;
                                    }
                                    else
                                    {
                                        comparisonSegmentUnit.TranslationSectionsTagsRemoved++;
                                    }
                                }
                                if (segmentSection.IsText)
                                {
                                    comparisonSegmentUnit.TranslationSectionsCharactersRemoved += segmentSection.Content.ToCharArray().Length;
                                }
                            }
                            break;
                        }
                    }

                    comparisonSegmentUnit.TranslationSectionsWords      = comparisonSegmentUnit.TranslationSectionsWordsIdentical + comparisonSegmentUnit.TranslationSectionsWordsRemoved;
                    comparisonSegmentUnit.TranslationSectionsCharacters = comparisonSegmentUnit.TranslationSectionsCharactersIdentical + comparisonSegmentUnit.TranslationSectionsCharactersRemoved;
                    comparisonSegmentUnit.TranslationSectionsTags       = comparisonSegmentUnit.TranslationSectionsTagsIdentical + comparisonSegmentUnit.TranslationSectionsTagsRemoved;

                    var totalChangesWords      = comparisonSegmentUnit.TranslationSectionsWordsNew + comparisonSegmentUnit.TranslationSectionsWordsRemoved;
                    var totalChangesCharacters = comparisonSegmentUnit.TranslationSectionsCharactersNew + comparisonSegmentUnit.TranslationSectionsCharactersRemoved;
                    var totalChangesTags       = comparisonSegmentUnit.TranslationSectionsTagsNew + comparisonSegmentUnit.TranslationSectionsTagsRemoved;



                    comparisonSegmentUnit.TranslationSectionsChangedWords      = totalChangesWords;
                    comparisonSegmentUnit.TranslationSectionsChangedCharacters = totalChangesCharacters;
                    comparisonSegmentUnit.TranslationSectionsChangedTags       = totalChangesTags;
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }

                comparisonSegmentUnit.SegmentTextUpdated   = true;
                comparisonParagraphUnit.ParagraphIsUpdated = true;
            }



            if (string.Compare(comparisonSegmentUnit.SegmentStatusOriginal, comparisonSegmentUnit.SegmentStatusUpdated, StringComparison.OrdinalIgnoreCase) != 0)
            {
                comparisonSegmentUnit.SegmentSegmentStatusUpdated = true;
                comparisonParagraphUnit.ParagraphStatusChanged    = true;
            }

            if (segmentPairUpdated.Comments != null && segmentPairUpdated.Comments.Count > 0)
            {
                comparisonSegmentUnit.Comments           = segmentPairUpdated.Comments;
                comparisonSegmentUnit.SegmentHasComments = true;

                comparisonParagraphUnit.ParagraphHasComments = true;
            }


            comparisonParagraphUnit.ComparisonSegmentUnits.Add(comparisonSegmentUnit);
        }
Esempio n. 15
0
        internal Dictionary <string, Dictionary <string, ComparisonParagraphUnit> > GetComparisonParagraphUnits(Dictionary <string, Dictionary <string, ParagraphUnit> > fileParagraphUnitsOriginal
                                                                                                                , Dictionary <string, Dictionary <string, ParagraphUnit> > fileParagraphUnitsUpdated)
        {
            var comparisonFileParagraphUnits = new Dictionary <string, Dictionary <string, ComparisonParagraphUnit> >();


            var iProgressCurrent = 0;

            var iProgressMaximum = fileParagraphUnitsOriginal.Sum(fileParagraphUnits => fileParagraphUnits.Value.Count);


            foreach (var fileParagraphUnitOriginal in fileParagraphUnitsOriginal)
            {
                var comparisonParagraphUnits = new Dictionary <string, ComparisonParagraphUnit>();

                if (!fileParagraphUnitsUpdated.ContainsKey(fileParagraphUnitOriginal.Key))
                {
                    throw new Exception("Error: Structure mismatch; unable to locate the corresponding file : '"
                                        + fileParagraphUnitOriginal.Key + "' in the updated file");
                }



                var fileParagraphUnitUdpated = fileParagraphUnitsUpdated[fileParagraphUnitOriginal.Key];
                foreach (var xParagraphUnitOriginalPair in fileParagraphUnitOriginal.Value)
                {
                    OnProgress(iProgressMaximum, iProgressCurrent++, "");

                    var comparisonParagraphUnit = new ComparisonParagraphUnit
                    {
                        ParagraphId            = xParagraphUnitOriginalPair.Key,
                        ParagraphIsUpdated     = false,
                        ParagraphStatusChanged = false,
                        ParagraphHasComments   = false
                    };



                    var           paragraphUnitOriginal = xParagraphUnitOriginalPair.Value;
                    ParagraphUnit paragraphUnitUpdated;



                    if (fileParagraphUnitUdpated.ContainsKey(paragraphUnitOriginal.ParagraphUnitId))
                    {
                        paragraphUnitUpdated = fileParagraphUnitUdpated[paragraphUnitOriginal.ParagraphUnitId];
                    }
                    else
                    {
                        throw new Exception("Error: Structure mismatch; unable to locate the corresponding paragraph ID: '"
                                            + paragraphUnitOriginal.ParagraphUnitId + "' in the updated file");
                    }


                    if (paragraphUnitOriginal.SegmentPairs.Count >= paragraphUnitUpdated.SegmentPairs.Count)
                    {
                        //if segment count has not changed (or greater than the segment count in the updated file)
                        for (var i = 0; i < paragraphUnitOriginal.SegmentPairs.Count; i++)
                        {
                            var segmentPairOriginal = paragraphUnitOriginal.SegmentPairs[i];

                            var segmentPairUpdated = new SegmentPair();
                            if (paragraphUnitUpdated.SegmentPairs.Count > i)
                            {
                                segmentPairUpdated = paragraphUnitUpdated.SegmentPairs[i];
                            }

                            var comparisonSegmentUnit = new ComparisonSegmentUnit(segmentPairOriginal.Id, segmentPairOriginal.SourceSections, segmentPairOriginal.TargetSections, segmentPairUpdated.TargetSections);

                            AddToComparision(ref comparisonParagraphUnit, comparisonSegmentUnit, segmentPairOriginal, segmentPairUpdated);
                        }
                    }
                    else if (paragraphUnitOriginal.SegmentPairs.Count < paragraphUnitUpdated.SegmentPairs.Count)
                    {
                        //if more segments now exist in the updated file
                        for (var i = 0; i < paragraphUnitUpdated.SegmentPairs.Count; i++)
                        {
                            var segmentPairOriginal = new SegmentPair();
                            if (paragraphUnitOriginal.SegmentPairs.Count > i)
                            {
                                segmentPairOriginal = paragraphUnitOriginal.SegmentPairs[i];
                            }

                            var segmentPairUpdated = paragraphUnitUpdated.SegmentPairs[i];

                            var comparisonSegmentUnit = new ComparisonSegmentUnit(segmentPairUpdated.Id, segmentPairOriginal.SourceSections, segmentPairOriginal.TargetSections, segmentPairUpdated.TargetSections);

                            AddToComparision(ref comparisonParagraphUnit, comparisonSegmentUnit, segmentPairOriginal, segmentPairUpdated);
                        }
                    }

                    comparisonParagraphUnits.Add(comparisonParagraphUnit.ParagraphId, comparisonParagraphUnit);
                }

                comparisonFileParagraphUnits.Add(fileParagraphUnitOriginal.Key, comparisonParagraphUnits);
            }

            return(comparisonFileParagraphUnits);
        }
Esempio n. 16
0
        internal Dictionary <string, Dictionary <string, ComparisonParagraphUnit> > GetComparisonParagraphUnits(Dictionary <string, Dictionary <string, ParagraphUnit> > xFileParagraphUnitsOriginal
                                                                                                                , Dictionary <string, Dictionary <string, ParagraphUnit> > xFileParagraphUnitsUpdated)
        {
            var comparisonFileParagraphUnits = new Dictionary <string, Dictionary <string, ComparisonParagraphUnit> >();


            var iProgressCurrent = 0;

            var iProgressMaximum = xFileParagraphUnitsOriginal.Sum(xFileParagraphUnits => xFileParagraphUnits.Value.Count());


            var errorMatchingFileLevel01      = false;
            var errorMatchingFileLevel        = false;
            var errorMatchingFileLevelMessage = string.Empty;

            var errorMatchingParagraphLevel = false;

            #region  |  check for initial errors  |
            foreach (var fileParagraphUnitOriginal in xFileParagraphUnitsOriginal)
            {
                if (!xFileParagraphUnitsUpdated.ContainsKey(fileParagraphUnitOriginal.Key))
                {
                    errorMatchingFileLevel        = true;
                    errorMatchingFileLevelMessage =
                        string.Format(
                            "Error: Structure mismatch; unable to locate the corresponding file : '{0}' in the updated file",
                            fileParagraphUnitOriginal.Key);


                    var fileNameOriginal = Path.GetFileName(fileParagraphUnitOriginal.Key);

                    errorMatchingFileLevel01 = xFileParagraphUnitsUpdated.Select(kvp => Path.GetFileName(kvp.Key)).All(fileNameUpdated => string.Compare(fileNameOriginal, fileNameUpdated, StringComparison.OrdinalIgnoreCase) != 0);

                    break;
                }

                var fileParagraphUnitUpdated = xFileParagraphUnitsUpdated[fileParagraphUnitOriginal.Key];
                if ((from paragraphUnitOriginalPair in fileParagraphUnitOriginal.Value
                     select paragraphUnitOriginalPair.Value into paragraphUnitOriginal
                     let paragraphUnitUpdated = new ParagraphUnit(paragraphUnitOriginal.ParagraphUnitId, new List <SegmentPair>())
                                                select paragraphUnitOriginal).Any(paragraphUnitOriginal => !fileParagraphUnitUpdated.ContainsKey(paragraphUnitOriginal.ParagraphUnitId)))
                {
                    errorMatchingParagraphLevel = true;
                }
            }
            #endregion

            if (errorMatchingFileLevel01)
            {
                //not possible to compare these files; excluding the file path information, the file names are different...
                throw new Exception(errorMatchingFileLevelMessage);
            }
            if (errorMatchingFileLevel || errorMatchingParagraphLevel)
            {
                #region  |  compare structure missmatch  |


                foreach (var fileParagraphUnitOriginal in xFileParagraphUnitsOriginal)
                {
                    var fileName = Path.GetFileName(fileParagraphUnitOriginal.Key);

                    var comparisonParagraphUnits = new Dictionary <string, ComparisonParagraphUnit>();


                    var fileParagraphUnitOriginalTmp = fileParagraphUnitOriginal.Value;


                    var nameOriginal             = Path.GetFileName(fileParagraphUnitOriginal.Key);
                    var fileParagraphUnitUpdated = (from kvp in xFileParagraphUnitsUpdated let fileNameUpdated = Path.GetFileName(kvp.Key)
                                                                                                                 where string.Compare(nameOriginal, fileNameUpdated, StringComparison.OrdinalIgnoreCase) == 0
                                                                                                                 select kvp.Value).FirstOrDefault();

                    if (fileParagraphUnitUpdated == null)
                    {
                        throw new Exception(
                                  string.Format(
                                      "Error: Structure mismatch; unable to locate the corresponding file : '{0}' in the updated file",
                                      fileParagraphUnitOriginal.Key));
                    }
                    //update paragraph ids in the updated object xFileParagraphUnit_updated
                    fileParagraphUnitUpdated = GetUpdatedParagraphsIds(fileParagraphUnitOriginalTmp, fileParagraphUnitUpdated);


                    foreach (var paragraphUnitOriginalPair in fileParagraphUnitOriginalTmp)
                    {
                        OnProgress(iProgressMaximum, iProgressCurrent++, fileName);

                        var comparisonParagraphUnit = new ComparisonParagraphUnit
                        {
                            ParagraphId            = paragraphUnitOriginalPair.Key,
                            ParagraphIsUpdated     = false,
                            ParagraphStatusChanged = false,
                            ParagraphHasComments   = false
                        };



                        var paragraphUnitOriginal = paragraphUnitOriginalPair.Value;
                        var paragraphUnitUpdated  = new ParagraphUnit(paragraphUnitOriginal.ParagraphUnitId, new List <SegmentPair>());



                        if (fileParagraphUnitUpdated.ContainsKey(paragraphUnitOriginal.ParagraphUnitId))
                        {
                            paragraphUnitUpdated = fileParagraphUnitUpdated[paragraphUnitOriginal.ParagraphUnitId];
                        }


                        if (paragraphUnitUpdated != null)
                        {
                            if (paragraphUnitOriginal.SegmentPairs.Count >= paragraphUnitUpdated.SegmentPairs.Count)
                            {
                                #region  |  xParagraphUnit_original.xSegmentPairs.Count >= xParagraphUnit_updated.xSegmentPairs.Count  |

                                //if segment count has not changed (or greater than the segment count in the updated file)
                                for (var i = 0; i < paragraphUnitOriginal.SegmentPairs.Count; i++)
                                {
                                    var segmentPairOriginal = paragraphUnitOriginal.SegmentPairs[i];

                                    var segmentPairUpdated = new SegmentPair();
                                    if (paragraphUnitUpdated.SegmentPairs.Count > i)
                                    {
                                        segmentPairUpdated = paragraphUnitUpdated.SegmentPairs[i];
                                    }

                                    var comparisonSegmentUnit = new ComparisonSegmentUnit(segmentPairOriginal.Id, segmentPairOriginal.SourceSections, segmentPairOriginal.TargetSections, segmentPairUpdated.TargetSections, segmentPairOriginal.IsLocked);

                                    AddToComparision(ref comparisonParagraphUnit, comparisonSegmentUnit, segmentPairOriginal, segmentPairUpdated);
                                }
                                #endregion
                            }
                            else if (paragraphUnitOriginal.SegmentPairs.Count < paragraphUnitUpdated.SegmentPairs.Count)
                            {
                                #region  |  xParagraphUnit_original.xSegmentPairs.Count < xParagraphUnit_updated.xSegmentPairs.Count  |
                                //if more segments now exist in the updated file
                                for (var i = 0; i < paragraphUnitUpdated.SegmentPairs.Count; i++)
                                {
                                    var segmentPairOriginal = new SegmentPair();
                                    if (paragraphUnitOriginal.SegmentPairs.Count > i)
                                    {
                                        segmentPairOriginal = paragraphUnitOriginal.SegmentPairs[i];
                                    }

                                    var segmentPairUpdated = paragraphUnitUpdated.SegmentPairs[i];

                                    var comparisonSegmentUnit = new ComparisonSegmentUnit(segmentPairUpdated.Id, segmentPairOriginal.SourceSections, segmentPairOriginal.TargetSections, segmentPairUpdated.TargetSections, segmentPairOriginal.IsLocked);

                                    AddToComparision(ref comparisonParagraphUnit, comparisonSegmentUnit, segmentPairOriginal, segmentPairUpdated);
                                }
                                #endregion
                            }
                        }
                        else
                        {
                            #region  |  else  |

                            foreach (var segmentPairOriginal in paragraphUnitOriginal.SegmentPairs)
                            {
                                var segmentPairUpdated    = new SegmentPair();
                                var comparisonSegmentUnit = new ComparisonSegmentUnit(segmentPairOriginal.Id, segmentPairOriginal.SourceSections, segmentPairOriginal.TargetSections, segmentPairUpdated.TargetSections, segmentPairOriginal.IsLocked);
                                AddToComparision(ref comparisonParagraphUnit, comparisonSegmentUnit, segmentPairOriginal, segmentPairUpdated);
                            }
                            #endregion
                        }

                        comparisonParagraphUnits.Add(comparisonParagraphUnit.ParagraphId, comparisonParagraphUnit);
                    }

                    comparisonFileParagraphUnits.Add(fileParagraphUnitOriginal.Key, comparisonParagraphUnits);
                }


                #endregion
            }
            else
            {
                #region  |  compare normal  |

                foreach (var fileParagraphUnitOriginal in xFileParagraphUnitsOriginal)
                {
                    var fileName = Path.GetFileName(fileParagraphUnitOriginal.Key);

                    var comparisonParagraphUnits = new Dictionary <string, ComparisonParagraphUnit>();

                    if (!xFileParagraphUnitsUpdated.ContainsKey(fileParagraphUnitOriginal.Key))
                    {
                        throw new Exception(
                                  string.Format(
                                      "Error: Structure mismatch; unable to locate the corresponding file : '{0}' in the updated file",
                                      fileParagraphUnitOriginal.Key));
                    }

                    var fileParagraphUnitUpdated = xFileParagraphUnitsUpdated[fileParagraphUnitOriginal.Key];
                    foreach (var paragraphUnitOriginalPair in fileParagraphUnitOriginal.Value)
                    {
                        OnProgress(iProgressMaximum, iProgressCurrent++, fileName);

                        var comparisonParagraphUnit = new ComparisonParagraphUnit
                        {
                            ParagraphId            = paragraphUnitOriginalPair.Key,
                            ParagraphIsUpdated     = false,
                            ParagraphStatusChanged = false,
                            ParagraphHasComments   = false
                        };



                        var           paragraphUnitOriginal = paragraphUnitOriginalPair.Value;
                        ParagraphUnit paragraphUnitUpdated;

                        if (fileParagraphUnitUpdated.ContainsKey(paragraphUnitOriginal.ParagraphUnitId))
                        {
                            paragraphUnitUpdated = fileParagraphUnitUpdated[paragraphUnitOriginal.ParagraphUnitId];
                        }
                        else
                        {
                            throw new Exception(
                                      string.Format(
                                          "Error: Structure mismatch; unable to locate the corresponding paragraph ID: '{0}' in the updated file",
                                          paragraphUnitOriginal.ParagraphUnitId));
                        }

                        if (paragraphUnitOriginal.SegmentPairs.Count >= paragraphUnitUpdated.SegmentPairs.Count)
                        {
                            #region  |  xParagraphUnit_original.xSegmentPairs.Count >= xParagraphUnit_updated.xSegmentPairs.Count  |

                            //if segment count has not changed (or greater than the segment count in the updated file)
                            for (var i = 0; i < paragraphUnitOriginal.SegmentPairs.Count; i++)
                            {
                                var segmentPairOriginal = paragraphUnitOriginal.SegmentPairs[i];

                                var segmentPairUpdated = new SegmentPair();
                                if (paragraphUnitUpdated.SegmentPairs.Count > i)
                                {
                                    segmentPairUpdated = paragraphUnitUpdated.SegmentPairs[i];
                                }

                                var comparisonSegmentUnit = new ComparisonSegmentUnit(segmentPairOriginal.Id, segmentPairOriginal.SourceSections, segmentPairOriginal.TargetSections, segmentPairUpdated.TargetSections, segmentPairOriginal.IsLocked);

                                AddToComparision(ref comparisonParagraphUnit, comparisonSegmentUnit, segmentPairOriginal, segmentPairUpdated);
                            }
                            #endregion
                        }
                        else if (paragraphUnitOriginal.SegmentPairs.Count < paragraphUnitUpdated.SegmentPairs.Count)
                        {
                            #region  |  xParagraphUnit_original.xSegmentPairs.Count < xParagraphUnit_updated.xSegmentPairs.Count  |
                            //if more segments now exist in the updated file
                            for (var i = 0; i < paragraphUnitUpdated.SegmentPairs.Count; i++)
                            {
                                var segmentPairOriginal = new SegmentPair();
                                if (paragraphUnitOriginal.SegmentPairs.Count > i)
                                {
                                    segmentPairOriginal = paragraphUnitOriginal.SegmentPairs[i];
                                }

                                var segmentPairUpdated = paragraphUnitUpdated.SegmentPairs[i];

                                var comparisonSegmentUnit = new ComparisonSegmentUnit(segmentPairUpdated.Id, segmentPairOriginal.SourceSections, segmentPairOriginal.TargetSections, segmentPairUpdated.TargetSections, segmentPairOriginal.IsLocked);

                                AddToComparision(ref comparisonParagraphUnit, comparisonSegmentUnit, segmentPairOriginal, segmentPairUpdated);
                            }
                            #endregion
                        }

                        comparisonParagraphUnits.Add(comparisonParagraphUnit.ParagraphId, comparisonParagraphUnit);
                    }

                    comparisonFileParagraphUnits.Add(fileParagraphUnitOriginal.Key, comparisonParagraphUnits);
                }
                #endregion
            }

            return(comparisonFileParagraphUnits);
        }
Esempio n. 17
0
        private void AddToComparision(ref ComparisonParagraphUnit comparisonParagraphUnit
                                      , ComparisonSegmentUnit comparisonSegmentUnit
                                      , SegmentPair segmentPairOriginal
                                      , SegmentPair segmentPairUpdated)
        {
            comparisonSegmentUnit.SegmentStatusOriginal = segmentPairOriginal.SegmentStatus;
            comparisonSegmentUnit.SegmentStatusUpdated  = segmentPairUpdated.SegmentStatus;

            comparisonSegmentUnit.TranslationStatusOriginal = GetTranslationStatus(segmentPairOriginal);
            comparisonSegmentUnit.TranslationStatusUpdated  = GetTranslationStatus(segmentPairUpdated);

            if (segmentPairOriginal.TranslationOrigin != null)
            {
                comparisonSegmentUnit.TranslationOriginTypeOriginal = segmentPairOriginal.TranslationOrigin.OriginType;
            }
            if (segmentPairUpdated.TranslationOrigin != null)
            {
                comparisonSegmentUnit.TranslationOriginTypeUpdated = segmentPairUpdated.TranslationOrigin.OriginType;
            }



            if (string.CompareOrdinal(segmentPairOriginal.Target, segmentPairUpdated.Target) != 0)
            {
                comparisonSegmentUnit.ComparisonTextUnits = GetComparisonTextUnits(segmentPairOriginal.TargetSections, segmentPairUpdated.TargetSections);

                comparisonSegmentUnit.SegmentTextUpdated   = true;
                comparisonParagraphUnit.ParagraphIsUpdated = true;
            }


            comparisonSegmentUnit.SourceWordsOriginal = segmentPairOriginal.SourceWords;
            comparisonSegmentUnit.SourceCharsOriginal = segmentPairOriginal.SourceChars;
            comparisonSegmentUnit.SourceTagsOriginal  = segmentPairOriginal.SourceTags;

            comparisonSegmentUnit.SourceWordsUpdated = segmentPairUpdated.SourceWords;
            comparisonSegmentUnit.SourceCharsUpdated = segmentPairUpdated.SourceChars;
            comparisonSegmentUnit.SourceTagsUpdated  = segmentPairUpdated.SourceTags;


            if (string.Compare(comparisonSegmentUnit.SegmentStatusOriginal, comparisonSegmentUnit.SegmentStatusUpdated, StringComparison.OrdinalIgnoreCase) != 0)
            {
                comparisonSegmentUnit.SegmentSegmentStatusUpdated = true;
                comparisonParagraphUnit.ParagraphStatusChanged    = true;
            }

            if (segmentPairUpdated.Comments != null && segmentPairUpdated.Comments.Count > 0)
            {
                comparisonSegmentUnit.Comments           = segmentPairUpdated.Comments;
                comparisonSegmentUnit.SegmentHasComments = true;

                comparisonParagraphUnit.ParagraphHasComments = true;
            }

            comparisonSegmentUnit.TargetOriginalRevisionMarkers = new List <SegmentSection>();
            foreach (var section in segmentPairOriginal.TargetSections)
            {
                if (section.RevisionMarker != null)
                {
                    comparisonSegmentUnit.TargetOriginalRevisionMarkers.Add(section);
                }
            }

            comparisonSegmentUnit.TargetUpdatedRevisionMarkers = new List <SegmentSection>();
            foreach (var section in segmentPairUpdated.TargetSections)
            {
                if (section.RevisionMarker != null)
                {
                    comparisonSegmentUnit.TargetUpdatedRevisionMarkers.Add(section);
                }
            }
            comparisonParagraphUnit.ComparisonSegmentUnits.Add(comparisonSegmentUnit);
        }
Esempio n. 18
0
        private static SegmentPair GetBackTranslationSegmentPair(File backTranslationDataFile, SegmentPair segmentPair)
        {
            if (backTranslationDataFile?.Body == null)
            {
                return(null);
            }

            foreach (var transUnit in backTranslationDataFile.Body.TransUnits)
            {
                foreach (var pair in transUnit.SegmentPairs)
                {
                    if (pair.Id == segmentPair.Id)
                    {
                        return(pair);
                    }
                }
            }

            return(null);
        }
Esempio n. 19
0
            private SegmentPair RecalcFlatEnd(
                [NotNull] FeaturePoint end,
                [NotNull] SegmentPartWithNeighbor segWithNb,
                [NotNull] Dictionary <FeaturePoint, SegmentInfo> flatEnds,
                out bool neighborIsFlatEnd)
            {
                IFeatureRowsDistance rowsDistance =
                    NearDistanceProvider.GetRowsDistance(end.Feature, end.TableIndex);

                SegmentInfo segmentInfo;

                Find(end, segWithNb.SegmentIndex, flatEnds, out segmentInfo);

                SegmentCap startCap = segmentInfo.FlatStart
                                                              ? (SegmentCap) new RectCap(0)
                                                              : new RoundCap();

                SegmentCap endCap = segmentInfo.FlatEnd
                                                            ? (SegmentCap) new RectCap(0)
                                                            : new RoundCap();

                SegmentHull hull = CreateSegmentHull(
                    (SegmentProxy)Assert.NotNull(segWithNb.SegmentProxy, "segmentproxy is null"),
                    rowsDistance, startCap, endCap);

                var neighborKey = new FeaturePoint(segWithNb.NeighborFeature,
                                                   segWithNb.NeighborTableIndex,
                                                   segWithNb.PartIndex, 0);

                neighborIsFlatEnd = false;

                SegmentInfo neighborInfo;

                SegmentCap nbStartCap;
                SegmentCap nbEndCap;

                if (Find(neighborKey, segWithNb.NeighborProxy.SegmentIndex, flatEnds,
                         out neighborInfo))
                {
                    neighborIsFlatEnd = true;

                    nbStartCap = neighborInfo.FlatStart
                                                             ? (SegmentCap) new RectCap(0)
                                                             : new RoundCap();
                    nbEndCap = neighborInfo.FlatEnd
                                                           ? (SegmentCap) new RectCap(0)
                                                           : new RoundCap();
                }
                else
                {
                    nbStartCap = new RoundCap();
                    nbEndCap   = new RoundCap();
                }

                SegmentHull neighborhull = CreateNeighborSegmentHull(
                    (SegmentProxy)segWithNb.NeighborProxy, rowsDistance, segWithNb.NeighborFeature,
                    segWithNb.NeighborTableIndex, nbStartCap, nbEndCap);

                SegmentPair segPair = RecalcPart(segWithNb, hull, neighborhull);

                return(segPair);
            }
Esempio n. 20
0
        internal Dictionary <string, ParagraphUnit> ReadRtf(string rtfFile)
        {
            var rtb = new RichTextBox
            {
                Enabled             = false,
                LanguageOption      = RichTextBoxLanguageOptions.AutoFont,
                ReadOnly            = true,
                Visible             = false,
                WordWrap            = false,
                ShowSelectionMargin = false
            };

            rtb.SendToBack();
            rtb.SuspendLayout();
            rtb.LoadFile(rtfFile, RichTextBoxStreamType.RichText);
            rtb.Rtf = rtb.Rtf.Replace("\\v\\", "\\v0\\");
            rtb.AppendText("\n");



            var indexProcessingCurrent = 0;

            OnProgress(1000, indexProcessingCurrent, "Initialzing...");


            var paragraphUnits = new Dictionary <string, ParagraphUnit>();

            var file           = rtfFile;
            var fileAttributes = new FileAttributes();

            var iTagId        = 10000;
            var innerFileName = string.Empty;


            var regexFile   = new Regex(@"\<file source\=""(?<x1>[^""]*)""\s+target\=""(?<x2>[^""]*)""\s+segmentCount\=""(?<x3>[^""]*)""\s+path\=""(?<x4>[^""]*)""[^\>]*\>", RegexOptions.IgnoreCase | RegexOptions.Singleline);
            var regexSeg    = new Regex(@"\<seg id\=""(?<x1>[^""]*)""\s+pid\=""(?<x2>[^""]*)""\s+status\=""(?<x3>[^""]*)""\s+locked\=""(?<x4>[^""]*)""\s+match\=""(?<x5>[^""]*)""[^\>]*\>" + "\n" + @"(?<x6>.*?)" + "\n" + @"\<\/seg\>" + "\n", RegexOptions.IgnoreCase | RegexOptions.Singleline);
            var regexSource = new Regex(@"\{0\>(?<xSource>.*?)\<\}(?<xPercentage>[^\{]*)\{\>", RegexOptions.IgnoreCase | RegexOptions.Singleline);


            var matchFile = regexFile.Match(rtb.Text);

            if (matchFile.Success)
            {
                fileAttributes.FileSource       = matchFile.Groups["x1"].Value;
                fileAttributes.FileTarget       = matchFile.Groups["x2"].Value;
                fileAttributes.FileSegmentCount = matchFile.Groups["x3"].Value;
                fileAttributes.FilePath         = matchFile.Groups["x4"].Value;
            }

            var matchesSeg = regexSeg.Matches(rtb.Text);

            foreach (Match matchSeg in matchesSeg)
            {
                #region  |  init   |

                var isSource = false;

                var colorFormat = new StringColorType();

                var sourceSections = new List <SegmentSection>();
                var targetSections = new List <SegmentSection>();
                var segmentPairs   = new List <SegmentPair>();
                var comments       = new List <Comment>();

                #endregion

                var segmentPair = new SegmentPair
                {
                    Id            = matchSeg.Groups["x1"].Value,
                    ParagraphId   = matchSeg.Groups["x2"].Value,
                    SegmentStatus = Core.Processor.GetSegmentStatusFromVisual(matchSeg.Groups["x3"].Value),
                    IsLocked      = Convert.ToBoolean(matchSeg.Groups["x4"].Value),
                    MatchTypeId   = matchSeg.Groups["x5"].Value,
                    Comments      = comments
                };


                var importTranslation = ImportTranslation(segmentPair);
                if (!importTranslation)
                {
                    continue;
                }

                var content = matchSeg.Groups["x6"].Value;

                var paragraphUnit = new ParagraphUnit(segmentPair.ParagraphId, segmentPairs, innerFileName);

                var startIndex = matchSeg.Groups["x6"].Index;
                var endIndex   = startIndex + content.Length;


                segmentPair.TranslationOrigin = new TranslationOrigin();;


                var matchSource = regexSource.Match(content);
                if (matchSource.Success)
                {
                    var text       = matchSource.Groups["xSource"].Value;
                    var percentage = matchSource.Groups["xPercentage"].Value;

                    if (colorFormat.Black != string.Empty)
                    {
                        sourceSections.Add(new SegmentSection(SegmentSection.ContentType.Text, string.Empty, text));
                    }


                    segmentPair.Source         = Core.Processor.GetSectionsToText(sourceSections);
                    segmentPair.SourceSections = sourceSections;

                    startIndex = startIndex + matchSource.Groups["xPercentage"].Index + percentage.Length + 2;

                    var isTarget = true;


                    for (var i = startIndex; i <= endIndex; i++)
                    {
                        rtb.SelectionStart  = i;
                        rtb.SelectionLength = 1;
                        text = rtb.Text[i].ToString();

                        var color = rtb.SelectionColor;

                        if (color == Color.Black)
                        {
                            if (colorFormat.Red != string.Empty)
                            {
                                UpdateTagFormatting(colorFormat, isSource ? sourceSections : targetSections);

                                colorFormat.Red    = string.Empty;
                                colorFormat.Black  = string.Empty;
                                colorFormat.Purple = string.Empty;
                                colorFormat.Gray   = string.Empty;
                                colorFormat.Black += text;
                            }
                            else
                            {
                                colorFormat.Black += text;
                            }
                        }
                        else if (color == Color.Red)
                        {
                            colorFormat.Red += text;
                        }
                        else if (color == Color.Purple)
                        {
                            if (colorFormat.Red != string.Empty)
                            {
                                UpdateTagFormatting(colorFormat, isSource ? sourceSections : targetSections);

                                colorFormat.Red   = string.Empty;
                                colorFormat.Black = string.Empty;
                                colorFormat.Red   = string.Empty;
                            }

                            colorFormat.Purple += text;

                            if (!isTarget)
                            {
                                continue;
                            }

                            if (!colorFormat.Purple.Trim().EndsWith("<0}"))
                            {
                                continue;
                            }

                            if (colorFormat.Black != string.Empty)
                            {
                                targetSections.Add(new SegmentSection(SegmentSection.ContentType.Text, string.Empty, colorFormat.Black));
                            }

                            isSource           = false;
                            isTarget           = false;
                            colorFormat.Black  = string.Empty;
                            colorFormat.Purple = string.Empty;
                            colorFormat.Red    = string.Empty;
                            colorFormat.Gray   = string.Empty;
                        }
                        else
                        {
                            //outside the scope of the markup; error
                            colorFormat.Misc += text;
                        }
                    }

                    if (colorFormat.Red != string.Empty)
                    {
                        UpdateTagFormatting(colorFormat, isSource ? sourceSections : targetSections);

                        colorFormat.Red   = string.Empty;
                        colorFormat.Black = string.Empty;
                        colorFormat.Red   = string.Empty;
                    }

                    isSource           = false;
                    isTarget           = false;
                    colorFormat.Black  = string.Empty;
                    colorFormat.Purple = string.Empty;
                    colorFormat.Red    = string.Empty;



                    MarkupTagContent(targetSections, ref iTagId);


                    segmentPair.Target         = Core.Processor.GetSectionsToText(targetSections);
                    segmentPair.TargetSections = targetSections;

                    paragraphUnit.SegmentPairs.Add(segmentPair);

                    if (segmentPair.ParagraphId != string.Empty)
                    {
                        if (!paragraphUnits.ContainsKey(segmentPair.ParagraphId))
                        {
                            paragraphUnits.Add(segmentPair.ParagraphId, paragraphUnit);
                        }
                        else
                        {
                            paragraphUnits[segmentPair.ParagraphId].SegmentPairs.AddRange(paragraphUnit.SegmentPairs);
                        }
                    }
                }

                indexProcessingCurrent++;
                OnProgress(matchesSeg.Count, indexProcessingCurrent, string.Format("Processing segment id: {0}", segmentPair.Id));
            }


            return(paragraphUnits);
        }