private void ReplaceTagPair(string updatedText, ITagPair tagPair, IAbstractMarkupDataContainer parent, ConversionItem conversionItem) { var entitizer = new HtmlEntitizer(); var markupData = CreateMarkupData(updatedText, new HtmlTagTable(entitizer.Entitize(updatedText, conversionItem.Search.Text)), entitizer, conversionItem); var index = tagPair.IndexInParent; if (markupData.Count > 0) { foreach (var item in markupData) { parent.Insert(index++, item); } tagPair.RemoveFromParent(); } }
private void UpdateTagContent(string updatedText, ITagPair tagPair, ConversionItem conversionItem) { var match = Regex.Match(updatedText, "(<.+?>)(.+?)(</.+?>)"); if (match.Success) { var entitizer = new HtmlEntitizer(); var markupData = CreateMarkupData(match.Groups[2].Value, new HtmlTagTable(entitizer.Entitize(match.Groups[2].Value, conversionItem.Search.Text)), entitizer, conversionItem); if (markupData.Count > 0) { tagPair.Clear(); foreach (var item in markupData) { tagPair.Add(item); } } } else { Reporter.Report(this, ErrorLevel.Error, "Could not update tag content", $"Error: {updatedText}"); } }
private List <IAbstractMarkupData> CreateMarkupData(string input, HtmlTagTable tagTable, HtmlEntitizer entitizer, ConversionItem conversionItem) { var markupList = new List <IAbstractMarkupData>(); var parser = new HtmlHelper(entitizer.Entitize(input, conversionItem.Search.Text), tagTable); if (parser.ParseErrors.Any()) { return(ParseTagsFallback(input, markupList)); } foreach (var node in parser.Descendants()) { if (node.NodeType == HtmlNodeType.Element) { if (!tagTable.Table[node.OriginalName].HasEndTag) { var ph = parser.GetRawStartTag(node); var phTag = CreatePlaceHolderTag(ph); markupList.Add(phTag); } else if (tagTable.Table[node.OriginalName].IsEndGhostTag) { var eTag = parser.GetRawEndTag(node); markupList.Add(CreatePlaceHolderTag(eTag)); } else { var stTag = parser.GetRawStartTag(node); if (node.Closed) { var eTag = parser.GetRawEndTag(node); var startTag = CreateStartTag(stTag); var endTag = CreateEndTag(eTag); var tagPair = CreateTagPair(startTag, endTag); if (!ContainsTags(node.InnerHtml)) { if (!string.IsNullOrEmpty(node.InnerHtml)) { var itext = CreateIText(entitizer.DeEntitize(node.InnerHtml)); tagPair.Add(itext); } // Experimental: // Creation of new formatting CreateNewFormatting(node, tagPair); } else { var list = CreateMarkupData(node.InnerHtml, tagTable, entitizer, conversionItem); foreach (var item in list) { tagPair.Add(item); } } markupList.Add(tagPair); } else { var phTag = CreatePlaceHolderTag(stTag); markupList.Add(phTag); var list = CreateMarkupData(node.InnerHtml, tagTable, entitizer, conversionItem); foreach (var item in list) { markupList.Add(item); } } node.RemoveAllChildren(); } } else if (node.NodeType == HtmlNodeType.Text) { //check for data like {M:>0},{M:<0},{M:≥0} which is treated like a text but tghe intention is to convert them in placeholder if (Regex.IsMatch(input, "(?:>|≤|<|≥)\\d+")) { var originalTextSplited = entitizer.GetOriginalTextSplited(entitizer.DeEntitize(node.InnerText), conversionItem.Search.Text); ReplaceSpecialPlaceholders(originalTextSplited, markupList); } else { markupList.Add(CreateIText(entitizer.DeEntitize(node.InnerText))); } } else { markupList.Add(CreateIText(entitizer.DeEntitize(node.InnerHtml))); } } return(markupList); }