diff --git a/osu.Game/Graphics/Containers/Markdown/OsuMarkdownContainer.cs b/osu.Game/Graphics/Containers/Markdown/OsuMarkdownContainer.cs
index a2370a76cb..62fefe201d 100644
--- a/osu.Game/Graphics/Containers/Markdown/OsuMarkdownContainer.cs
+++ b/osu.Game/Graphics/Containers/Markdown/OsuMarkdownContainer.cs
@@ -4,7 +4,9 @@
#nullable disable
using Markdig;
-using Markdig.Extensions.AutoIdentifiers;
+using Markdig.Extensions.AutoLinks;
+using Markdig.Extensions.EmphasisExtras;
+using Markdig.Extensions.Footnotes;
using Markdig.Extensions.Tables;
using Markdig.Extensions.Yaml;
using Markdig.Syntax;
@@ -18,6 +20,18 @@ namespace osu.Game.Graphics.Containers.Markdown
{
public class OsuMarkdownContainer : MarkdownContainer
{
+ ///
+ /// Allows this markdown container to parse and link footnotes.
+ ///
+ ///
+ protected virtual bool Footnotes => false;
+
+ ///
+ /// Allows this markdown container to make URL text clickable.
+ ///
+ ///
+ protected virtual bool Autolinks => false;
+
public OsuMarkdownContainer()
{
LineSpacing = 21;
@@ -78,10 +92,22 @@ namespace osu.Game.Graphics.Containers.Markdown
return new OsuMarkdownUnorderedListItem(level);
}
+ // reference: https://github.com/ppy/osu-web/blob/05488a96b25b5a09f2d97c54c06dd2bae59d1dc8/app/Libraries/Markdown/OsuMarkdown.php#L301
protected override MarkdownPipeline CreateBuilder()
- => new MarkdownPipelineBuilder().UseAutoIdentifiers(AutoIdentifierOptions.GitHub)
- .UseEmojiAndSmiley()
- .UseYamlFrontMatter()
- .UseAdvancedExtensions().Build();
+ {
+ var pipeline = new MarkdownPipelineBuilder()
+ .UseAutoIdentifiers()
+ .UsePipeTables()
+ .UseEmphasisExtras(EmphasisExtraOptions.Strikethrough)
+ .UseYamlFrontMatter();
+
+ if (Footnotes)
+ pipeline = pipeline.UseFootnotes();
+
+ if (Autolinks)
+ pipeline = pipeline.UseAutoLinks();
+
+ return pipeline.Build();
+ }
}
}
diff --git a/osu.Game/Overlays/Comments/CommentMarkdownContainer.cs b/osu.Game/Overlays/Comments/CommentMarkdownContainer.cs
index 8fc011b2bf..b32b1c74c4 100644
--- a/osu.Game/Overlays/Comments/CommentMarkdownContainer.cs
+++ b/osu.Game/Overlays/Comments/CommentMarkdownContainer.cs
@@ -11,6 +11,8 @@ namespace osu.Game.Overlays.Comments
{
public class CommentMarkdownContainer : OsuMarkdownContainer
{
+ protected override bool Autolinks => true;
+
protected override MarkdownHeading CreateHeading(HeadingBlock headingBlock) => new CommentMarkdownHeading(headingBlock);
private class CommentMarkdownHeading : OsuMarkdownHeading
diff --git a/osu.Game/Overlays/Wiki/Markdown/WikiMarkdownContainer.cs b/osu.Game/Overlays/Wiki/Markdown/WikiMarkdownContainer.cs
index 7754c1d450..4f1083a75c 100644
--- a/osu.Game/Overlays/Wiki/Markdown/WikiMarkdownContainer.cs
+++ b/osu.Game/Overlays/Wiki/Markdown/WikiMarkdownContainer.cs
@@ -15,6 +15,8 @@ namespace osu.Game.Overlays.Wiki.Markdown
{
public class WikiMarkdownContainer : OsuMarkdownContainer
{
+ protected override bool Footnotes => true;
+
public string CurrentPath
{
set => DocumentUrl = value;