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++; }
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); }
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); } }
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); }