diff --git a/modules/docs/src/Volo.Docs.Web/Markdown/Extensions/CustomCodeBlockExtension.cs b/modules/docs/src/Volo.Docs.Web/Markdown/Extensions/HighlightedCodeBlockExtension.cs similarity index 87% rename from modules/docs/src/Volo.Docs.Web/Markdown/Extensions/CustomCodeBlockExtension.cs rename to modules/docs/src/Volo.Docs.Web/Markdown/Extensions/HighlightedCodeBlockExtension.cs index 95995c839b..d2b7858d7a 100644 --- a/modules/docs/src/Volo.Docs.Web/Markdown/Extensions/CustomCodeBlockExtension.cs +++ b/modules/docs/src/Volo.Docs.Web/Markdown/Extensions/HighlightedCodeBlockExtension.cs @@ -6,7 +6,7 @@ using Volo.Docs.Markdown.Renderers; namespace Volo.Docs.Markdown.Extensions { - public class CustomCodeBlockExtension : IMarkdownExtension + public class HighlightedCodeBlockExtension : IMarkdownExtension { public void Setup(MarkdownPipelineBuilder pipeline) { @@ -27,7 +27,7 @@ namespace Volo.Docs.Markdown.Extensions htmlRenderer.ObjectRenderers.Remove(codeBlockRenderer); } - htmlRenderer.ObjectRenderers.AddIfNotAlready(new CustomCodeBlockRenderer()); + htmlRenderer.ObjectRenderers.AddIfNotAlready(new HighlightedCodeBlockRenderer()); } } } diff --git a/modules/docs/src/Volo.Docs.Web/Markdown/Extensions/MarkdownPipelineBuilderExtensions.cs b/modules/docs/src/Volo.Docs.Web/Markdown/Extensions/MarkdownPipelineBuilderExtensions.cs index 249bf31b49..7d9a70c80c 100644 --- a/modules/docs/src/Volo.Docs.Web/Markdown/Extensions/MarkdownPipelineBuilderExtensions.cs +++ b/modules/docs/src/Volo.Docs.Web/Markdown/Extensions/MarkdownPipelineBuilderExtensions.cs @@ -4,9 +4,9 @@ namespace Volo.Docs.Markdown.Extensions { public static class MarkdownPipelineBuilderExtensions { - public static MarkdownPipelineBuilder UseCustomCodeBlock(this MarkdownPipelineBuilder pipeline) + public static MarkdownPipelineBuilder UseHighlightedCodeBlocks(this MarkdownPipelineBuilder pipeline) { - pipeline.Extensions.AddIfNotAlready(); + pipeline.Extensions.AddIfNotAlready(); return pipeline; } } diff --git a/modules/docs/src/Volo.Docs.Web/Markdown/MarkDigMarkdownConverter.cs b/modules/docs/src/Volo.Docs.Web/Markdown/MarkDigMarkdownConverter.cs index 183eeabee2..a45dc0862f 100644 --- a/modules/docs/src/Volo.Docs.Web/Markdown/MarkDigMarkdownConverter.cs +++ b/modules/docs/src/Volo.Docs.Web/Markdown/MarkDigMarkdownConverter.cs @@ -16,7 +16,7 @@ namespace Volo.Docs.Markdown .UseBootstrap() .UseGridTables() .UsePipeTables() - .UseCustomCodeBlock() + .UseHighlightedCodeBlocks() .Build(); } diff --git a/modules/docs/src/Volo.Docs.Web/Markdown/Renderers/CustomCodeBlockRenderer.cs b/modules/docs/src/Volo.Docs.Web/Markdown/Renderers/HighlightedCodeBlockRenderer.cs similarity index 59% rename from modules/docs/src/Volo.Docs.Web/Markdown/Renderers/CustomCodeBlockRenderer.cs rename to modules/docs/src/Volo.Docs.Web/Markdown/Renderers/HighlightedCodeBlockRenderer.cs index bddc94c439..6ac3b178df 100644 --- a/modules/docs/src/Volo.Docs.Web/Markdown/Renderers/CustomCodeBlockRenderer.cs +++ b/modules/docs/src/Volo.Docs.Web/Markdown/Renderers/HighlightedCodeBlockRenderer.cs @@ -10,14 +10,14 @@ using Markdig.Syntax; namespace Volo.Docs.Markdown.Renderers { - public class CustomCodeBlockRenderer : HtmlObjectRenderer + public class HighlightedCodeBlockRenderer : HtmlObjectRenderer { private const string Pattern = @"\{([^}]+)\}"; public bool OutputAttributesOnPre { get; set; } public HashSet BlocksAsDiv { get; } - public CustomCodeBlockRenderer() + public HighlightedCodeBlockRenderer() { BlocksAsDiv = new HashSet(StringComparer.OrdinalIgnoreCase); } @@ -46,7 +46,6 @@ namespace Volo.Docs.Markdown.Renderers { renderer.WriteLine(""); } - } else { @@ -58,19 +57,8 @@ namespace Volo.Docs.Markdown.Renderers { renderer.WriteAttributes(obj); } - - var highlightedLines = GetHighlightedLines(fencedCodeBlock); - if (highlightedLines.Any()) - { - renderer.WriteAttributes(new HtmlAttributes {Classes = new List {"line-numbers"}}); - var lines = string.Join(",", highlightedLines); - renderer.Write($"data-line={lines}> {"line-numbers"} //prevents adding line-numbers for highlighted lines + }); + var lines = string.Join(",", highlightedLines); + renderer.Write($"data-line={lines}> GetHighlightedLines(FencedCodeBlock fencedCodeBlock) { var highlightedLines = new List(); - - if (string.IsNullOrWhiteSpace(fencedCodeBlock?.Arguments)) + if (string.IsNullOrWhiteSpace(fencedCodeBlock?.Arguments) || !Regex.IsMatch(pattern: Pattern, input: fencedCodeBlock.Arguments)) { return highlightedLines; } - if (Regex.IsMatch(pattern: Pattern, input: fencedCodeBlock.Arguments)) + var match = Regex.Match(fencedCodeBlock.Arguments, Pattern); + var groups = match.Groups; + if (groups.Count < 2 || string.IsNullOrWhiteSpace(groups[1].Value)) { - var match = Regex.Match(fencedCodeBlock.Arguments, Pattern); - var groups = match.Groups; - - if (groups.Count < 2 || string.IsNullOrWhiteSpace(groups[1].Value)) - { - return highlightedLines; - } + return highlightedLines; + } - var lines = groups[1].Value.Split(","); - foreach (var line in lines) + var lines = groups[1].Value.Split(","); + foreach (var line in lines) + { + if (line.Contains("-")) { - if (line.Contains("-")) + var numbers = line.Split("-"); + + foreach (var number in numbers) { - var numbers = line.Split("-"); - highlightedLines.AddRange(numbers.Select(number => Convert.ToInt32(number))); + if (int.TryParse(number, out var lineNumber)) + { + highlightedLines.Add(lineNumber); + } } - else + } + else + { + if (int.TryParse(line, out var lineNumber)) { - highlightedLines.Add(Convert.ToInt32(line)); + highlightedLines.Add(lineNumber); } } } - + return highlightedLines; } }