From 3ad3045b2596e034bf1a585c349117aad19ea527 Mon Sep 17 00:00:00 2001 From: Yan Maniez Date: Sat, 21 Jul 2018 09:18:25 +0200 Subject: [PATCH] Extensions Markdig --- .../AideDeJeu/Markdig/LinkInlineRendererEx.cs | 60 +++++++++++++++++++ .../AideDeJeu/Markdig/MarkdownExtensions.cs | 4 ++ AideDeJeu/AideDeJeu/Markdig/TableRenderer.cs | 51 ++++++++++++++++ .../AideDeJeu/Models/Conditions/Generic.cs | 10 ++-- 4 files changed, 121 insertions(+), 4 deletions(-) create mode 100644 AideDeJeu/AideDeJeu/Markdig/LinkInlineRendererEx.cs create mode 100644 AideDeJeu/AideDeJeu/Markdig/TableRenderer.cs diff --git a/AideDeJeu/AideDeJeu/Markdig/LinkInlineRendererEx.cs b/AideDeJeu/AideDeJeu/Markdig/LinkInlineRendererEx.cs new file mode 100644 index 00000000..2ff7472a --- /dev/null +++ b/AideDeJeu/AideDeJeu/Markdig/LinkInlineRendererEx.cs @@ -0,0 +1,60 @@ +// Copyright (c) Alexandre Mutel. All rights reserved. +// This file is licensed under the BSD-Clause 2 license. +// See the license.txt file in the project root for more information. +using Markdig.Syntax.Inlines; + +namespace Markdig.Renderers.Normalize.Inlines +{ + /// + /// A Normalize renderer for a . + /// + /// + public class LinkInlineRendererEx : NormalizeObjectRenderer + { + protected override void Write(NormalizeRenderer renderer, LinkInline link) + { + if (link.IsImage) + { + renderer.Write('!'); + } + renderer.Write('['); + renderer.WriteChildren(link); + renderer.Write(']'); + + //if (link.Label != null) + //{ + + // var literal = link.FirstChild as LiteralInline; + // if (literal != null && literal.Content.Match(link.Label) && literal.Content.Length == link.Label.Length) + // { + // // collapsed reference and shortcut links + // if (!link.IsShortcut) + // { + // renderer.Write("[]"); + // } + // } + // else + // { + // // full link + // renderer.Write('[').Write(link.Label).Write(']'); + // } + //} + //else + //{ + if (!string.IsNullOrEmpty(link.Url)) + { + renderer.Write('(').Write(link.Url); + + if (!string.IsNullOrEmpty(link.Title)) + { + renderer.Write(" \""); + renderer.Write(link.Title.Replace(@"""", @"\""")); + renderer.Write("\""); + } + + renderer.Write(')'); + } + //} + } + } +} \ No newline at end of file diff --git a/AideDeJeu/AideDeJeu/Markdig/MarkdownExtensions.cs b/AideDeJeu/AideDeJeu/Markdig/MarkdownExtensions.cs index fada8620..a461e51d 100644 --- a/AideDeJeu/AideDeJeu/Markdig/MarkdownExtensions.cs +++ b/AideDeJeu/AideDeJeu/Markdig/MarkdownExtensions.cs @@ -9,6 +9,7 @@ using Markdig.Syntax.Inlines; using Markdig.Parsers; using System.IO; using Markdig.Renderers.Normalize; +using Markdig.Renderers.Normalize.Inlines; namespace AideDeJeu.Tools { @@ -93,6 +94,9 @@ namespace AideDeJeu.Tools using (var writer = new StringWriter()) { var renderer = new NormalizeRenderer(writer); + renderer.ObjectRenderers.Remove(renderer.ObjectRenderers.FirstOrDefault(i => i is LinkInlineRenderer)); + renderer.ObjectRenderers.Add(new LinkInlineRendererEx()); + renderer.ObjectRenderers.Add(new TableRenderer()); pipeline.Setup(renderer); renderer.Render(block); diff --git a/AideDeJeu/AideDeJeu/Markdig/TableRenderer.cs b/AideDeJeu/AideDeJeu/Markdig/TableRenderer.cs new file mode 100644 index 00000000..8e7c5861 --- /dev/null +++ b/AideDeJeu/AideDeJeu/Markdig/TableRenderer.cs @@ -0,0 +1,51 @@ +// Copyright (c) Alexandre Mutel. All rights reserved. +// This file is licensed under the BSD-Clause 2 license. +// See the license.txt file in the project root for more information. +using System.Globalization; +using AideDeJeu.Tools; +using Markdig.Syntax; + +namespace Markdig.Renderers.Normalize +{ + /// + /// An Normalize renderer for a . + /// + /// + public class TableRenderer : NormalizeObjectRenderer + { + protected override void Write(NormalizeRenderer renderer, Markdig.Extensions.Tables.Table obj) + { + foreach (Markdig.Extensions.Tables.TableRow row in obj) + { + renderer.Write("|"); + foreach (Markdig.Extensions.Tables.TableCell cell in row) + { + foreach (Markdig.Syntax.ParagraphBlock block in cell) + { + renderer.Write(block.ToMarkdownString().Replace("\n", "")); + } + renderer.Write("|"); + } + if (row.IsHeader) + { + renderer.Write("\n|"); + for (int i = 0; i < row.Count; i++) + { + renderer.Write("---|"); + } + } + renderer.Write("\n"); + } + + //renderer.Write("\n\n" + obj.ToMarkdownString() + "\n\n"); + //var headingText = obj.Level > 0 && obj.Level <= 6 + // ? HeadingTexts[obj.Level - 1] + // : new string('#', obj.Level); + + //renderer.Write(headingText).Write(' '); + //renderer.WriteLeafInline(obj); + + //renderer.FinishBlock(renderer.Options.EmptyLineAfterHeading); + } + } +} \ No newline at end of file diff --git a/AideDeJeu/AideDeJeu/Models/Conditions/Generic.cs b/AideDeJeu/AideDeJeu/Models/Conditions/Generic.cs index aa98d1e7..8382e058 100644 --- a/AideDeJeu/AideDeJeu/Models/Conditions/Generic.cs +++ b/AideDeJeu/AideDeJeu/Models/Conditions/Generic.cs @@ -56,8 +56,9 @@ namespace AideDeJeuLib { return; } - var paragraphBlock = block as ParagraphBlock; - this.Text += paragraphBlock.ToMarkdownString() + "\n"; + //var paragraphBlock = block as ParagraphBlock; + //this.Text += paragraphBlock.ToMarkdownString() + "\n"; + this.Text += block.ToMarkdownString(); } else if (block is ListBlock) { @@ -103,8 +104,9 @@ namespace AideDeJeuLib } else if (block is Markdig.Extensions.Tables.Table) { - var tableBlock = block as Markdig.Extensions.Tables.Table; - this.Text += "\n\n" + tableBlock.ToMarkdownString() + "\n\n"; + this.Text += block.ToMarkdownString(); + //var tableBlock = block as Markdig.Extensions.Tables.Table; + //this.Text += "\n\n" + tableBlock.ToMarkdownString() + "\n\n"; } else {