예제 #1
0
        private TranslationContainer SplitUnit(Unit unit, string text, bool isCData = true)
        {
            string[] paragraphs;
            if (isCData)
            {
                paragraphs = text.SplitByDefaultTags();
            }
            else
            {
                paragraphs = text.SplitPlainText();
            }
            if (paragraphs.Count() == 0)
            {
                return(unit);
            }
            else if (!isCData && paragraphs.Count() == 1)
            {
                return(unit);
            }
            else
            {
                var newGroup = new Group(unit.Id + "-g");
                newGroup.Name = unit.Name;
                if (unit.Metadata != null)
                {
                    var newMetadataContainer = new MetadataContainer();
                    foreach (var metaGroup in unit.Metadata.Groups)
                    {
                        var newMetaGroup = new MetaGroup();
                        newMetaGroup.Id = metaGroup.Id;

                        foreach (Meta item in metaGroup.Containers)
                        {
                            var newElement = new Meta(item.Type, item.NonTranslatableText);
                            newMetaGroup.Containers.Add(newElement);
                        }
                        newMetadataContainer.Groups.Add(newMetaGroup);
                    }
                    newGroup.Metadata = newMetadataContainer;
                }

                var i = 0;
                foreach (var para in paragraphs)
                {
                    i++;
                    var paraUnit = new Unit(unit.Id + "-" + i);

                    var newSegment = new Segment();

                    var source = new Source();
                    ResourceStringContent content;
                    if (isCData)
                    {
                        string containingTag = para.GetContainingTag();
                        string newContent    = para.RemoveContainingTag();
                        paraUnit.Name = containingTag;
                        if (newContent.IsHtml())
                        {
                            content = new CDataTag(newContent);
                        }
                        else
                        {
                            content = new PlainText(newContent);
                        }
                    }
                    else
                    {
                        content = new PlainText(para);
                    }
                    source.Text.Add(content);
                    newSegment.Source = source;

                    paraUnit.Resources.Add(newSegment);

                    newGroup.Containers.Add(paraUnit);
                }

                var parentFile = unit.Parent as File;
                if (parentFile != null)
                {
                    var index = parentFile.Containers.IndexOf(unit);
                    parentFile.Containers[index] = newGroup;
                }
                else
                {
                    var parentGroup = unit.Parent as Group;
                    if (parentGroup != null)
                    {
                        var index = parentGroup.Containers.IndexOf(unit);
                        parentGroup.Containers[index] = newGroup;
                    }
                }
                return(newGroup);
            }
        }
예제 #2
0
        private TranslationContainer SplitUnit(Unit unit, string text, bool isCData = true)
        {
            SimplifiedHtmlContentItem[] paragraphs;
            if (isCData)
            {
                paragraphs = _htmlParser.SplitHtml(text);
            }
            else
            {
                paragraphs = _htmlParser.SplitPlainText(text);
            }

            if (paragraphs.Count() == 0)
            {
                return(unit);
            }
            else if (!isCData && paragraphs.Count() == 1)
            {
                return(unit);
            }
            else
            {
                var newGroup = new Group(unit.Id + "-g");
                newGroup.Type = unit.Type;
                newGroup.Name = unit.Name;
                if (unit.Metadata != null)
                {
                    var newMetadataContainer = new MetadataContainer();
                    foreach (var metaGroup in unit.Metadata.Groups)
                    {
                        var newMetaGroup = new MetaGroup();
                        newMetaGroup.Id = metaGroup.Id;

                        foreach (Meta item in metaGroup.Containers)
                        {
                            var newElement = new Meta(item.Type, item.NonTranslatableText);
                            newMetaGroup.Containers.Add(newElement);
                        }
                        newMetadataContainer.Groups.Add(newMetaGroup);
                    }
                    newGroup.Metadata = newMetadataContainer;
                }

                var i = 0;
                foreach (var para in paragraphs)
                {
                    i++;
                    var paraUnit = new Unit(unit.Id + "-" + i);

                    var newSegment = new Segment();

                    if (para.Attributes.Count() > 0)
                    {
                        var newMetadataContainer = new MetadataContainer();
                        var attributeMetaGroup   = new MetaGroup();
                        attributeMetaGroup.Id = ORIGINALATTRIBUTES;

                        foreach (var attribute in para.Attributes)
                        {
                            var newElement = new Meta(attribute.Key, attribute.Value);
                            attributeMetaGroup.Containers.Add(newElement);
                        }
                        newMetadataContainer.Groups.Add(attributeMetaGroup);
                        paraUnit.Metadata = newMetadataContainer;
                    }

                    var source = new Source();
                    ResourceStringContent content;
                    if (isCData)
                    {
                        string containingTag = para.Name;
                        string newContent    = para.InnerContent();
                        if (!string.IsNullOrWhiteSpace(containingTag))
                        {
                            paraUnit.Type = _htmlParser.ToXliffHtmlType(containingTag);
                        }
                        if (newContent.IsHtml())
                        {
                            content = new CDataTag(newContent);
                        }
                        else
                        {
                            content = new PlainText(newContent);
                        }
                    }
                    else
                    {
                        content = new PlainText(para.Content);
                    }
                    source.Text.Add(content);
                    newSegment.Source = source;

                    paraUnit.Resources.Add(newSegment);

                    newGroup.Containers.Add(paraUnit);
                }

                var parentFile = unit.Parent as File;
                if (parentFile != null)
                {
                    var index = parentFile.Containers.IndexOf(unit);
                    parentFile.Containers[index] = newGroup;
                }
                else
                {
                    var parentGroup = unit.Parent as Group;
                    if (parentGroup != null)
                    {
                        var index = parentGroup.Containers.IndexOf(unit);
                        parentGroup.Containers[index] = newGroup;
                    }
                }
                return(newGroup);
            }
        }
 public void TestInitialize()
 {
     this.element = new CDataTag();
     this.provider = this.element;
 }
예제 #4
0
 public void TestInitialize()
 {
     this.element  = new CDataTag();
     this.provider = this.element;
 }