예제 #1
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);
        }
예제 #2
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);
        }
예제 #3
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);
        }
예제 #4
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);
        }