From 073c82f2501455560161b272cfef8cc387f8a086 Mon Sep 17 00:00:00 2001 From: Salman Ahmed Date: Sun, 18 Feb 2024 01:50:25 +0300 Subject: [PATCH 1/2] Generalise markdown code block implementation to support indented style --- .../TestSceneMarkdownContainer.cs | 22 ++++++++++++++-- ...encedCodeBlock.cs => MarkdownCodeBlock.cs} | 25 +++++++++++++------ .../Containers/Markdown/MarkdownContainer.cs | 10 ++++---- 3 files changed, 42 insertions(+), 15 deletions(-) rename osu.Framework/Graphics/Containers/Markdown/{MarkdownFencedCodeBlock.cs => MarkdownCodeBlock.cs} (72%) diff --git a/osu.Framework.Tests/Visual/UserInterface/TestSceneMarkdownContainer.cs b/osu.Framework.Tests/Visual/UserInterface/TestSceneMarkdownContainer.cs index 515e8753de..318eb4edec 100644 --- a/osu.Framework.Tests/Visual/UserInterface/TestSceneMarkdownContainer.cs +++ b/osu.Framework.Tests/Visual/UserInterface/TestSceneMarkdownContainer.cs @@ -86,9 +86,27 @@ public void TestQuote() } [Test] - public void TestFencedCode() + public void TestIndentedCodeBlock() { - AddStep("Markdown Fenced Code", () => + AddStep("Markdown Indented Code Block", () => + { + markdownContainer.Text = @" + [Escape me] + [[Escape me]] + + {{ + x = ""5"" # This assignment will not output anything + x # This expression will print 5 + x + 1 # This expression will print 6 + }} +"; + }); + } + + [Test] + public void TestFencedCodeBlock() + { + AddStep("Markdown Fenced Code Block", () => { markdownContainer.Text = @"```scriban-html diff --git a/osu.Framework/Graphics/Containers/Markdown/MarkdownFencedCodeBlock.cs b/osu.Framework/Graphics/Containers/Markdown/MarkdownCodeBlock.cs similarity index 72% rename from osu.Framework/Graphics/Containers/Markdown/MarkdownFencedCodeBlock.cs rename to osu.Framework/Graphics/Containers/Markdown/MarkdownCodeBlock.cs index 4d8b1d7b46..8a13d7d70a 100644 --- a/osu.Framework/Graphics/Containers/Markdown/MarkdownFencedCodeBlock.cs +++ b/osu.Framework/Graphics/Containers/Markdown/MarkdownCodeBlock.cs @@ -9,23 +9,32 @@ namespace osu.Framework.Graphics.Containers.Markdown { /// - /// Visualises a fenced code block. + /// Visualises an indented/fenced code block. /// /// /// ``` - /// code + /// code1 + /// code2 + /// code3 /// ``` /// - public partial class MarkdownFencedCodeBlock : CompositeDrawable, IMarkdownTextFlowComponent + /// + /// + /// code1 + /// code2 + /// code3 + /// + /// + public partial class MarkdownCodeBlock : CompositeDrawable, IMarkdownTextFlowComponent { - private readonly FencedCodeBlock fencedCodeBlock; + private readonly CodeBlock codeBlock; [Resolved] private IMarkdownTextFlowComponent parentFlowComponent { get; set; } = null!; - public MarkdownFencedCodeBlock(FencedCodeBlock fencedCodeBlock) + public MarkdownCodeBlock(CodeBlock codeBlock) { - this.fencedCodeBlock = fencedCodeBlock; + this.codeBlock = codeBlock; AutoSizeAxes = Axes.Y; RelativeSizeAxes = Axes.X; @@ -42,8 +51,8 @@ private void load() }; // Markdig sometimes appends empty lines to the processed block, only add original lines to the container - for (int i = 0; i < fencedCodeBlock.Lines.Count; i++) - textFlowContainer.AddParagraph(fencedCodeBlock.Lines.Lines[i].ToString()); + for (int i = 0; i < codeBlock.Lines.Count; i++) + textFlowContainer.AddParagraph(codeBlock.Lines.Lines[i].ToString()); } protected virtual Drawable CreateBackground() => new Box diff --git a/osu.Framework/Graphics/Containers/Markdown/MarkdownContainer.cs b/osu.Framework/Graphics/Containers/Markdown/MarkdownContainer.cs index 42bb556125..203773e4f5 100644 --- a/osu.Framework/Graphics/Containers/Markdown/MarkdownContainer.cs +++ b/osu.Framework/Graphics/Containers/Markdown/MarkdownContainer.cs @@ -241,8 +241,8 @@ protected virtual void AddMarkdownComponent(IMarkdownObject markdownObject, Fill container.Add(CreateQuoteBlock(quoteBlock)); break; - case FencedCodeBlock fencedCodeBlock: - container.Add(CreateFencedCodeBlock(fencedCodeBlock)); + case CodeBlock codeBlock: + container.Add(CreateCodeBlock(codeBlock)); break; case Table table: @@ -311,11 +311,11 @@ protected virtual void AddMarkdownComponent(IMarkdownObject markdownObject, Fill protected virtual MarkdownQuoteBlock CreateQuoteBlock(QuoteBlock quoteBlock) => new MarkdownQuoteBlock(quoteBlock); /// - /// Creates the visualiser for a . + /// Creates the visualiser for a . /// - /// The to visualise. + /// The to visualise. /// The visualiser. - protected virtual MarkdownFencedCodeBlock CreateFencedCodeBlock(FencedCodeBlock fencedCodeBlock) => new MarkdownFencedCodeBlock(fencedCodeBlock); + protected virtual MarkdownCodeBlock CreateCodeBlock(CodeBlock codeBlock) => new MarkdownCodeBlock(codeBlock); /// /// Creates the visualiser for a . From 4ba180ac7722f1d9b2201bff7e0ec0424ddcec51 Mon Sep 17 00:00:00 2001 From: Andrei Zavatski Date: Mon, 19 Feb 2024 01:07:08 +0300 Subject: [PATCH 2/2] Use SlimReadOnlyListWrapper for KeyBindingContainer.PressedActions --- osu.Framework/Input/Bindings/KeyBindingContainer.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/osu.Framework/Input/Bindings/KeyBindingContainer.cs b/osu.Framework/Input/Bindings/KeyBindingContainer.cs index 4e79082129..39c1a0fe7c 100644 --- a/osu.Framework/Input/Bindings/KeyBindingContainer.cs +++ b/osu.Framework/Input/Bindings/KeyBindingContainer.cs @@ -6,10 +6,12 @@ using System; using System.Collections.Generic; using System.Linq; +using osu.Framework.Extensions.ListExtensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Input.Events; using osu.Framework.Input.States; +using osu.Framework.Lists; using osu.Framework.Logging; using osuTK; @@ -45,7 +47,7 @@ protected KeyBindingContainer(SimultaneousBindingMode simultaneousMode = Simulta /// /// All actions in a currently pressed state. /// - public IEnumerable PressedActions => pressedActions; + public SlimReadOnlyListWrapper PressedActions => pressedActions.AsSlimReadOnly(); private readonly Dictionary> keyBindingQueues = new Dictionary>(); private readonly List queue = new List();