示例#1
0
        private async Task <string> FigureAsync(HtmlNode node)
        {
            var img = node.Child("img");

            if (Image.IsDataUrl(img.Attr("src")))
            {
                throw new InvalidOperationException("<img> src is not rendered yet.");
            }

            var src = img.Attr("src");

            img.Attributes.RemoveAll();
            img.SetAttributeValue("class", "lazyload lazyloading");
            img.SetAttributeValue("src", await _imageProcessor.Minimize(src));
            img.SetAttributeValue("data-src", src);

            var caption = node.Child("figcaption");

            if (string.IsNullOrWhiteSpace(caption?.InnerHtml))
            {
                return(Emmet.El("figure", img.OuterHtml));
            }

            if (caption.Attributes.Contains("contenteditable"))
            {
                caption.Attributes["contenteditable"].Remove();
            }

            img.SetAttributeValue("alt", caption.InnerText);

            return(Emmet.El("figure", string.Join("", img.OuterHtml, caption.OuterHtml)));
        }
示例#2
0
        private async Task <string> Code(HtmlNode node)
        {
            var plain            = node.InnerHtml.Trim();
            var highlightedLines = GetHighlightedLines(GetCode(plain));
            var formattedCode    = await _codeFormatter.FormatAsync(
                GetLanguage(plain),
                GetCode(plain).ReplaceWithPattern(@"\s*#hl", string.Empty));

            var lineNumbers = string.Empty;
            var lines       = formattedCode.SplitWithPattern(@"\r?\n");

            for (var i = 0; i < lines.Count(); i++)
            {
                var no = i + 1;
                if (highlightedLines.Contains(i))
                {
                    lines[i] = Emmet.El("span.highlight", lines[i]);
                    Increment(ref lineNumbers, Emmet.El("span.highlight", no));
                }
                else
                {
                    Increment(ref lineNumbers, no);
                }
            }

            formattedCode = lines.JoinLines();

            if (GetDefinitionLine(plain).Contains("no-line-number"))
            {
                return(Emmet.El("div.code>pre", formattedCode));
            }

            var table = $"<table><tr><td>{lineNumbers.Trim()}</td><td>{formattedCode}</td></tr></table>";

            return(Emmet.El("div.code>pre", table));
        }
示例#3
0
 public static string El(this HtmlNode node, string selector) =>
 Emmet.El(selector, node.InnerHtml.Trim());
示例#4
0
 public static string ElChildren(this HtmlNode node) =>
 Emmet.El(node.OriginalName, string.Join("", node.ChildNodes.Select(El)));
示例#5
0
 public static string El(this HtmlNode node) =>
 string.IsNullOrWhiteSpace(node.InnerHtml) ?
 string.Empty :
 Emmet.El(node.OriginalName, node.InnerHtml.Trim());