public void VisitPlaceholderTag(IPlaceholderTag tag) { PlaceholderTags.Add((IPlaceholderTag)tag.Clone()); if (tag.Properties.HasTextEquivalent && !IncludeTagText) { var objTag = new Tag { AlignmentAnchor = "", Anchor = TagCounter.ToString(), TagId = tag.TagProperties.TagId.Id, TextEquivalent = tag.Properties.TextEquivalent, SectionType = Tag.Type.Standalone }; TagUnits.Add(objTag); objTag.Revision = IsRevisionMarker ? RevisionMarker : null; SegmentSections.Add(objTag); PlainText.Append(tag.Properties.TextEquivalent); } else if (IncludeTagText) { var objTag = new Tag { AlignmentAnchor = "", Anchor = TagCounter.ToString(), TagId = tag.TagProperties.TagId.Id, TextEquivalent = tag.Properties.TagContent, SectionType = Tag.Type.Standalone }; TagUnits.Add(objTag); objTag.Revision = IsRevisionMarker ? RevisionMarker : null; SegmentSections.Add(objTag); PlainText.Append(tag.TagProperties.TagContent); var placeHolderTag = new Sdl.LanguagePlatform.Core.Tag { Type = TagType.TextPlaceholder, TagID = tag.TagProperties.TagId.Id, TextEquivalent = tag.Properties.TextEquivalent, Anchor = TagCounter }; Segment.Add(placeHolderTag); } TagCounter++; }
public void VisitTagPair(ITagPair tagPair) { TagPairs.Add((ITagPair)tagPair.Clone()); if (IncludeTagText) { var objTag = new Tag { AlignmentAnchor = "", Anchor = TagCounter.ToString(), TagId = tagPair.TagProperties.TagId.Id, TextEquivalent = tagPair.StartTagProperties.TagContent, SectionType = Tag.Type.Start }; TagUnits.Add(objTag); objTag.Revision = IsRevisionMarker ? RevisionMarker : null; SegmentSections.Add(objTag); PlainText.Append(tagPair.StartTagProperties.TagContent); var tgStart = new Sdl.LanguagePlatform.Core.Tag { Type = TagType.Start, Anchor = TagCounter, TagID = tagPair.StartTagProperties.TagId.Id, TextEquivalent = tagPair.StartTagProperties.DisplayText }; Segment.Add(tgStart); } VisitChildren(tagPair); if (IncludeTagText) { var objTag = new Tag { AlignmentAnchor = "", Anchor = TagCounter.ToString(), TagId = tagPair.TagProperties.TagId.Id, TextEquivalent = tagPair.EndTagProperties.TagContent, SectionType = Tag.Type.End }; TagUnits.Add(objTag); objTag.Revision = IsRevisionMarker ? RevisionMarker : null; SegmentSections.Add(objTag); PlainText.Append(tagPair.EndTagProperties.TagContent); var tgEnd = new Sdl.LanguagePlatform.Core.Tag { Type = TagType.End, TagID = tagPair.StartTagProperties.TagId.Id, Anchor = TagCounter, TextEquivalent = tagPair.EndTagProperties.DisplayText }; Segment.Add(tgEnd); } TagCounter++; }
static Sdl.LanguagePlatform.Core.Segment TranslatedHtml2Segment(Sdl.LanguagePlatform.Core.Segment sourceSegment, string translatedText) { 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); }