Example #1
0
        public void VisitTagPair(ITagPair tagPair)
        {
            if (IncludeTagText)
            {
                TagUnits.Add(new TagUnit(tagPair.TagProperties.TagId.Id, tagPair.TagProperties.DisplayText, tagPair.StartTagProperties.TagContent, TagUnit.TagUnitState.IsOpening, TagUnit.TagUnitType.IsTag));

                SegmentSections.Add(IsRevisionMarker
                    ? new SegmentSection(SegmentSection.ContentType.Tag, tagPair.TagProperties.TagId.Id,
                                         tagPair.StartTagProperties.TagContent, RevisionMarker)
                    : new SegmentSection(SegmentSection.ContentType.Tag, tagPair.TagProperties.TagId.Id,
                                         tagPair.StartTagProperties.TagContent));


                PlainText.Append(tagPair.StartTagProperties.TagContent);
            }

            var tgStart = new Sdl.LanguagePlatform.Core.Tag
            {
                Type           = Sdl.LanguagePlatform.Core.TagType.Start,
                Anchor         = TagCounter,
                TagID          = tagPair.StartTagProperties.TagId.Id,
                TextEquivalent = tagPair.StartTagProperties.DisplayText
            };


            Segment.Add(tgStart);



            VisitChildren(tagPair);



            var tgEnd = new Sdl.LanguagePlatform.Core.Tag
            {
                Type           = Sdl.LanguagePlatform.Core.TagType.End,
                TagID          = tagPair.StartTagProperties.TagId.Id,
                Anchor         = TagCounter,
                TextEquivalent = tagPair.EndTagProperties.DisplayText
            };

            Segment.Add(tgEnd);

            if (IncludeTagText)
            {
                TagUnits.Add(new TagUnit(tagPair.TagProperties.TagId.Id, string.Empty, tagPair.EndTagProperties.TagContent, TagUnit.TagUnitState.IsClosing, TagUnit.TagUnitType.IsTag));

                SegmentSections.Add(IsRevisionMarker
                    ? new SegmentSection(SegmentSection.ContentType.TagClosing,
                                         tagPair.TagProperties.TagId.Id, tagPair.EndTagProperties.TagContent, RevisionMarker)
                    : new SegmentSection(SegmentSection.ContentType.TagClosing,
                                         tagPair.TagProperties.TagId.Id, tagPair.EndTagProperties.TagContent));

                PlainText.Append(tagPair.EndTagProperties.TagContent);
            }
            TagCounter++;
        }
Example #2
0
        public void VisitLockedContent(ILockedContent lockedContent)
        {
            var lockedTag = new Sdl.LanguagePlatform.Core.Tag
            {
                Type           = Sdl.LanguagePlatform.Core.TagType.LockedContent,
                TextEquivalent = lockedContent.Content.ToString(),
                Anchor         = TagCounter
            };

            Segment.Add(lockedTag);

            TagCounter++;

            SegmentSections.Add(IsRevisionMarker
                ? new SegmentSection(SegmentSection.ContentType.LockedContent, string.Empty,
                                     lockedContent.Content.ToString(), RevisionMarker)
                : new SegmentSection(SegmentSection.ContentType.LockedContent, string.Empty,
                                     lockedContent.Content.ToString()));

            PlainText.Append(lockedContent.Content);
        }
Example #3
0
        public void VisitPlaceholderTag(IPlaceholderTag tag)
        {
            var placeHolderTag = new Sdl.LanguagePlatform.Core.Tag
            {
                Type           = Sdl.LanguagePlatform.Core.TagType.TextPlaceholder,
                TagID          = tag.TagProperties.TagId.Id,
                TextEquivalent = tag.Properties.TextEquivalent,
                Anchor         = TagCounter
            };

            Segment.Add(placeHolderTag);

            TagCounter++;

            if (tag.Properties.HasTextEquivalent && !IncludeTagText)
            {
                SegmentSections.Add(IsRevisionMarker
                    ? new SegmentSection(SegmentSection.ContentType.Placeholder, tag.TagProperties.TagId.Id,
                                         tag.Properties.TextEquivalent, RevisionMarker)
                    : new SegmentSection(SegmentSection.ContentType.Placeholder, tag.TagProperties.TagId.Id,
                                         tag.Properties.TextEquivalent));


                PlainText.Append(tag.Properties.TextEquivalent);
            }
            else if (IncludeTagText)
            {
                SegmentSections.Add(IsRevisionMarker
                    ? new SegmentSection(SegmentSection.ContentType.Placeholder, tag.TagProperties.TagId.Id,
                                         tag.Properties.TagContent, RevisionMarker)
                    : new SegmentSection(SegmentSection.ContentType.Placeholder, tag.TagProperties.TagId.Id,
                                         tag.Properties.TagContent));

                PlainText.Append(tag.TagProperties.TagContent);
            }
        }
Example #4
0
        public static Sdl.LanguagePlatform.Core.Segment ToSegment(this string translatedText, Sdl.LanguagePlatform.Core.Segment sourceSegment)
        {
            var htmlTagName       = "span"; // the only we feed for translation is span, so we expect the translation only has span tags too.
            var xmlFragment       = "<segment>" + translatedText + "</segment>";
            var xmlReader         = new System.Xml.XmlTextReader(xmlFragment, System.Xml.XmlNodeType.Element, null);
            var tagStack          = new Stack <Sdl.LanguagePlatform.Core.Tag>();
            var translatedSegment = new Sdl.LanguagePlatform.Core.Segment();

            try
            {
                while (xmlReader.Read())
                {
                    switch (xmlReader.NodeType)
                    {
                    case System.Xml.XmlNodeType.Element:
                        if (xmlReader.Name == htmlTagName)
                        {
                            var tagClass = xmlReader.GetAttribute("class");
                            var tagType  = (Sdl.LanguagePlatform.Core.TagType)
                                           Enum.Parse(typeof(Sdl.LanguagePlatform.Core.TagType), tagClass);
                            int id = Convert.ToInt32(xmlReader.GetAttribute("id"));
                            Sdl.LanguagePlatform.Core.Tag sourceTag = sourceSegment.FindTag(tagType, id);
                            if (tagType != Sdl.LanguagePlatform.Core.TagType.Standalone && !xmlReader.IsEmptyElement)
                            {
                                tagStack.Push(sourceTag);
                            }
                            translatedSegment.Add(sourceTag.Duplicate());
                            if (tagType != Sdl.LanguagePlatform.Core.TagType.Standalone && xmlReader.IsEmptyElement)
                            // the API translated <span></span> to <span/> (it does that if the tag is empty).
                            // must fetch the end tag as there is no EndElement to triger the next case block.
                            {
                                var endTag = sourceSegment.FindTag(Sdl.LanguagePlatform.Core.TagType.End, id);
                                translatedSegment.Add(endTag.Duplicate());
                            }
                        }
                        break;

                    case System.Xml.XmlNodeType.EndElement:
                    {
                        if (xmlReader.Name == htmlTagName)
                        {
                            var startTag = tagStack.Pop();
                            if (startTag.Type != Sdl.LanguagePlatform.Core.TagType.Standalone)
                            {
                                var endTag = sourceSegment.FindTag(
                                    Sdl.LanguagePlatform.Core.TagType.End, startTag.Anchor);
                                if (endTag != null)
                                {
                                    translatedSegment.Add(endTag.Duplicate());
                                }
                            }
                        }
                    }
                    break;

                    case System.Xml.XmlNodeType.Text:
                        translatedSegment.Add(xmlReader.Value);
                        break;

                    case System.Xml.XmlNodeType.Whitespace:
                        translatedSegment.Add(xmlReader.Value);
                        break;

                    default:
                        break;
                    }
                }
            }
            catch (Exception)
            {
                var    paintextSegment = new Sdl.LanguagePlatform.Core.Segment();
                string plaitext        = Regex.Replace(translatedText, "<[^>]+>", "");
                paintextSegment.Add(plaitext);
                return(paintextSegment);
            }

            return(translatedSegment);
        }