コード例 #1
0
        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();
            }
        }
コード例 #2
0
        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}");
            }
        }
コード例 #3
0
        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);
        }