diff --git a/src/Markdig/Markdown.cs b/src/Markdig/Markdown.cs index 3e1d4248..c0effe38 100644 --- a/src/Markdig/Markdown.cs +++ b/src/Markdig/Markdown.cs @@ -54,7 +54,7 @@ private static MarkdownPipeline GetPipeline(MarkdownPipeline? pipeline, string m /// The pipeline. /// A parser context used for the parsing. /// A normalized markdown text. - public static string Normalize(string markdown, NormalizeOptions? options = null, MarkdownPipeline? pipeline = null, MarkdownParserContext? context = null) + public static string Normalize([StringSyntax("Markdown")] string markdown, NormalizeOptions? options = null, MarkdownPipeline? pipeline = null, MarkdownParserContext? context = null) { var writer = new StringWriter(); Normalize(markdown, writer, options, pipeline, context); @@ -70,7 +70,7 @@ public static string Normalize(string markdown, NormalizeOptions? options = null /// The pipeline. /// A parser context used for the parsing. /// A normalized markdown text. - public static MarkdownDocument Normalize(string markdown, TextWriter writer, NormalizeOptions? options = null, MarkdownPipeline? pipeline = null, MarkdownParserContext? context = null) + public static MarkdownDocument Normalize([StringSyntax("Markdown")] string markdown, TextWriter writer, NormalizeOptions? options = null, MarkdownPipeline? pipeline = null, MarkdownParserContext? context = null) { if (markdown is null) ThrowHelper.ArgumentNullException_markdown(); @@ -95,7 +95,7 @@ public static MarkdownDocument Normalize(string markdown, TextWriter writer, Nor /// A parser context used for the parsing. /// The HTML string. /// If is null. - public static string ToHtml(string markdown, MarkdownPipeline? pipeline = null, MarkdownParserContext? context = null) + public static string ToHtml([StringSyntax("Markdown")] string markdown, MarkdownPipeline? pipeline = null, MarkdownParserContext? context = null) { if (markdown is null) ThrowHelper.ArgumentNullException_markdown(); @@ -159,7 +159,7 @@ public static void ToHtml(this MarkdownDocument document, TextWriter writer, Mar /// A parser context used for the parsing. /// The Markdown document that has been parsed /// if reader or writer variable are null - public static MarkdownDocument ToHtml(string markdown, TextWriter writer, MarkdownPipeline? pipeline = null, MarkdownParserContext? context = null) + public static MarkdownDocument ToHtml([StringSyntax("Markdown")] string markdown, TextWriter writer, MarkdownPipeline? pipeline = null, MarkdownParserContext? context = null) { if (markdown is null) ThrowHelper.ArgumentNullException_markdown(); if (writer is null) ThrowHelper.ArgumentNullException_writer(); @@ -181,7 +181,7 @@ public static MarkdownDocument ToHtml(string markdown, TextWriter writer, Markdo /// The pipeline used for the conversion. /// A parser context used for the parsing. /// if markdown or writer variable are null - public static object Convert(string markdown, IMarkdownRenderer renderer, MarkdownPipeline? pipeline = null, MarkdownParserContext? context = null) + public static object Convert([StringSyntax("Markdown")] string markdown, IMarkdownRenderer renderer, MarkdownPipeline? pipeline = null, MarkdownParserContext? context = null) { if (markdown is null) ThrowHelper.ArgumentNullException_markdown(); if (renderer is null) ThrowHelper.ArgumentNullException(nameof(renderer)); @@ -201,7 +201,7 @@ public static object Convert(string markdown, IMarkdownRenderer renderer, Markdo /// Whether to parse trivia such as whitespace, extra heading characters and unescaped string values. /// An AST Markdown document /// if markdown variable is null - public static MarkdownDocument Parse(string markdown, bool trackTrivia = false) + public static MarkdownDocument Parse([StringSyntax("Markdown")] string markdown, bool trackTrivia = false) { if (markdown is null) ThrowHelper.ArgumentNullException_markdown(); @@ -218,7 +218,7 @@ public static MarkdownDocument Parse(string markdown, bool trackTrivia = false) /// A parser context used for the parsing. /// An AST Markdown document /// if markdown variable is null - public static MarkdownDocument Parse(string markdown, MarkdownPipeline? pipeline, MarkdownParserContext? context = null) + public static MarkdownDocument Parse([StringSyntax("Markdown")] string markdown, MarkdownPipeline? pipeline, MarkdownParserContext? context = null) { if (markdown is null) ThrowHelper.ArgumentNullException_markdown(); @@ -236,7 +236,7 @@ public static MarkdownDocument Parse(string markdown, MarkdownPipeline? pipeline /// A parser context used for the parsing. /// The Markdown document that has been parsed /// if reader or writer variable are null - public static MarkdownDocument ToPlainText(string markdown, TextWriter writer, MarkdownPipeline? pipeline = null, MarkdownParserContext? context = null) + public static MarkdownDocument ToPlainText([StringSyntax("Markdown")] string markdown, TextWriter writer, MarkdownPipeline? pipeline = null, MarkdownParserContext? context = null) { if (markdown is null) ThrowHelper.ArgumentNullException_markdown(); if (writer is null) ThrowHelper.ArgumentNullException_writer(); @@ -268,7 +268,7 @@ public static MarkdownDocument ToPlainText(string markdown, TextWriter writer, M /// A parser context used for the parsing. /// The result of the conversion /// if markdown variable is null - public static string ToPlainText(string markdown, MarkdownPipeline? pipeline = null, MarkdownParserContext? context = null) + public static string ToPlainText([StringSyntax("Markdown")] string markdown, MarkdownPipeline? pipeline = null, MarkdownParserContext? context = null) { if (markdown is null) ThrowHelper.ArgumentNullException_markdown(); var writer = new StringWriter(); diff --git a/src/Markdig/Parsers/MarkdownParser.cs b/src/Markdig/Parsers/MarkdownParser.cs index d7c67b17..082242f6 100644 --- a/src/Markdig/Parsers/MarkdownParser.cs +++ b/src/Markdig/Parsers/MarkdownParser.cs @@ -2,6 +2,7 @@ // This file is licensed under the BSD-Clause 2 license. // See the license.txt file in the project root for more information. +using System.Diagnostics.CodeAnalysis; using System.Runtime.CompilerServices; using Markdig.Helpers; @@ -28,7 +29,7 @@ public static class MarkdownParser /// A parser context used for the parsing. /// An AST Markdown document /// if reader variable is null - public static MarkdownDocument Parse(string text, MarkdownPipeline? pipeline = null, MarkdownParserContext? context = null) + public static MarkdownDocument Parse([StringSyntax("Markdown")] string text, MarkdownPipeline? pipeline = null, MarkdownParserContext? context = null) { if (text is null) ThrowHelper.ArgumentNullException_text(); diff --git a/src/Markdig/Polyfills/StringSyntaxAttribute.cs b/src/Markdig/Polyfills/StringSyntaxAttribute.cs new file mode 100644 index 00000000..482c1eec --- /dev/null +++ b/src/Markdig/Polyfills/StringSyntaxAttribute.cs @@ -0,0 +1,29 @@ +#if !NET7_0_OR_GREATER +namespace System.Diagnostics.CodeAnalysis; + +[AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Field | AttributeTargets.Property)] +internal sealed class StringSyntaxAttribute : Attribute +{ + public const string Regex = nameof(Regex); + public const string Uri = nameof(Uri); + public const string Json = nameof(Json); + public const string Xml = nameof(Xml); + public const string CompositeFormat = nameof(CompositeFormat); + + public StringSyntaxAttribute(string syntax) + { + Syntax = syntax; + Arguments = Array.Empty(); + } + + public StringSyntaxAttribute(string syntax, params object?[] arguments) + { + Syntax = syntax; + Arguments = arguments; + } + + public string Syntax { get; } + + public object?[] Arguments { get; } +} +#endif