Made help system use markdown
Made a markdown widget to reuse in help system refactoring wpf to agg
This commit is contained in:
parent
32bd0bd2ee
commit
0afddd0531
14 changed files with 138 additions and 124 deletions
|
|
@ -7,7 +7,7 @@ using Markdig.Syntax;
|
|||
namespace Markdig.Renderers.Agg
|
||||
{
|
||||
/// <summary>
|
||||
/// A base class for WPF rendering <see cref="Block"/> and <see cref="Markdig.Syntax.Inlines.Inline"/> Markdown objects.
|
||||
/// A base class for Agg rendering <see cref="Block"/> and <see cref="Markdig.Syntax.Inlines.Inline"/> Markdown objects.
|
||||
/// </summary>
|
||||
/// <typeparam name="TObject">The type of the object.</typeparam>
|
||||
/// <seealso cref="Markdig.Renderers.IMarkdownObjectRenderer" />
|
||||
|
|
|
|||
|
|
@ -11,9 +11,9 @@ namespace Markdig.Renderers.Agg.Inlines
|
|||
public class AutoLinkInlineX : AutoFit{ }
|
||||
|
||||
/// <summary>
|
||||
/// A WPF renderer for a <see cref="AutolinkInline"/>.
|
||||
/// A Agg renderer for a <see cref="AutolinkInline"/>.
|
||||
/// </summary>
|
||||
/// <seealso cref="Markdig.Renderers.Agg.WpfObjectRenderer{Markdig.Syntax.Inlines.AutolinkInline}" />
|
||||
/// <seealso cref="Markdig.Renderers.Agg.AggObjectRenderer{Markdig.Syntax.Inlines.AutolinkInline}" />
|
||||
public class AggAutolinkInlineRenderer : AggObjectRenderer<AutolinkInline>
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
|
|
|
|||
|
|
@ -10,9 +10,9 @@ namespace Markdig.Renderers.Agg.Inlines
|
|||
public class DelimiterInlineX : AutoFit{ }
|
||||
|
||||
/// <summary>
|
||||
/// A WPF renderer for a <see cref="DelimiterInline"/>.
|
||||
/// A Agg renderer for a <see cref="DelimiterInline"/>.
|
||||
/// </summary>
|
||||
/// <seealso cref="Markdig.Renderers.Agg.WpfObjectRenderer{Markdig.Syntax.Inlines.DelimiterInline}" />
|
||||
/// <seealso cref="Markdig.Renderers.Agg.AggObjectRenderer{Markdig.Syntax.Inlines.DelimiterInline}" />
|
||||
public class AggDelimiterInlineRenderer : AggObjectRenderer<DelimiterInline>
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ namespace Markdig.Renderers.Agg.Inlines
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// A WPF renderer for an <see cref="EmphasisInline"/>.
|
||||
/// A Agg renderer for an <see cref="EmphasisInline"/>.
|
||||
/// </summary>
|
||||
/// <seealso cref="EmphasisInline" />
|
||||
public class AggEmphasisInlineRenderer : AggObjectRenderer<EmphasisInline>
|
||||
|
|
|
|||
|
|
@ -11,9 +11,9 @@ namespace Markdig.Renderers.Agg.Inlines
|
|||
public class LineBreakSoftX : AutoFit{ }
|
||||
|
||||
/// <summary>
|
||||
/// A WPF renderer for a <see cref="LineBreakInline"/>.
|
||||
/// A Agg renderer for a <see cref="LineBreakInline"/>.
|
||||
/// </summary>
|
||||
/// <seealso cref="Markdig.Renderers.Agg.WpfObjectRenderer{Markdig.Syntax.Inlines.LineBreakInline}" />
|
||||
/// <seealso cref="Markdig.Renderers.Agg.AggObjectRenderer{Markdig.Syntax.Inlines.LineBreakInline}" />
|
||||
public class AggLineBreakInlineRenderer : AggObjectRenderer<LineBreakInline>
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
|
|
|
|||
|
|
@ -128,9 +128,9 @@ namespace Markdig.Renderers.Agg.Inlines
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// A WPF renderer for a <see cref="LinkInline"/>.
|
||||
/// A Agg renderer for a <see cref="LinkInline"/>.
|
||||
/// </summary>
|
||||
/// <seealso cref="Markdig.Renderers.Agg.WpfObjectRenderer{Markdig.Syntax.Inlines.LinkInline}" />
|
||||
/// <seealso cref="Markdig.Renderers.Agg.AggObjectRenderer{Markdig.Syntax.Inlines.LinkInline}" />
|
||||
public class AggLinkInlineRenderer : AggObjectRenderer<LinkInline>
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
|
|
|
|||
|
|
@ -11,9 +11,9 @@ namespace Markdig.Renderers.Agg.Inlines
|
|||
public class LiteralInlineX : AutoFit{ }
|
||||
|
||||
/// <summary>
|
||||
/// A WPF renderer for a <see cref="LiteralInline"/>.
|
||||
/// A Agg renderer for a <see cref="LiteralInline"/>.
|
||||
/// </summary>
|
||||
/// <seealso cref="Markdig.Renderers.Agg.WpfObjectRenderer{Markdig.Syntax.Inlines.LiteralInline}" />
|
||||
/// <seealso cref="Markdig.Renderers.Agg.AggObjectRenderer{Markdig.Syntax.Inlines.LiteralInline}" />
|
||||
public class AggLiteralInlineRenderer : AggObjectRenderer<LiteralInline>
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
using System;
|
||||
|
||||
// ReSharper disable once CheckNamespace
|
||||
namespace Markdig.Wpf
|
||||
namespace Markdig.Agg
|
||||
{
|
||||
/// <summary>
|
||||
/// Provides extension methods for <see cref="MarkdownPipeline"/> to enable several Markdown extensions.
|
||||
|
|
@ -13,7 +13,7 @@ namespace Markdig.Wpf
|
|||
public static class MarkdownExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Uses all extensions supported by <c>Markdig.Wpf</c>.
|
||||
/// Uses all extensions supported by <c>Markdig.Agg</c>.
|
||||
/// </summary>
|
||||
/// <param name="pipeline">The pipeline.</param>
|
||||
/// <returns>The modified pipeline</returns>
|
||||
|
|
|
|||
|
|
@ -9,99 +9,15 @@ using Markdig.Renderers;
|
|||
using MatterHackers.Agg.UI;
|
||||
using MatterHackers.MatterControl;
|
||||
|
||||
namespace Markdig.Wpf
|
||||
namespace Markdig.Agg
|
||||
{
|
||||
public class MarkdownPage : DialogPage
|
||||
{
|
||||
private static readonly MarkdownPipeline DefaultPipeline = new MarkdownPipelineBuilder().UseSupportedExtensions().Build();
|
||||
|
||||
public MarkdownPipeline MarkdownPipeline { get; set; } = new MarkdownPipelineBuilder().UseSupportedExtensions().Build();
|
||||
|
||||
private string _markDownText = null;
|
||||
private MarkdownPipeline _pipeLine = null;
|
||||
private Uri uri;
|
||||
private FlowLayoutWidget contentPanel;
|
||||
|
||||
public MarkdownPage()
|
||||
{
|
||||
this.WindowTitle = this.HeaderText = "Markdown Tests";
|
||||
|
||||
uri = new Uri("https://raw.githubusercontent.com/lunet-io/markdig/master/readme.md");
|
||||
|
||||
var webClient = new WebClient();
|
||||
|
||||
var scrollableWidget = new ScrollableWidget(true)
|
||||
{
|
||||
HAnchor = HAnchor.Stretch,
|
||||
VAnchor = VAnchor.Stretch
|
||||
};
|
||||
scrollableWidget.ScrollArea.HAnchor = HAnchor.Stretch;
|
||||
scrollableWidget.ScrollArea.VAnchor = VAnchor.Fit;
|
||||
contentRow.AddChild(scrollableWidget);
|
||||
|
||||
contentPanel = new FlowLayoutWidget(FlowDirection.TopToBottom)
|
||||
{
|
||||
HAnchor = HAnchor.Stretch,
|
||||
VAnchor = VAnchor.Fit
|
||||
};
|
||||
|
||||
scrollableWidget.AddChild(contentPanel);
|
||||
|
||||
this.Markdown = webClient.DownloadString(uri);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the markdown to display.
|
||||
/// </summary>
|
||||
public string Markdown
|
||||
{
|
||||
get => _markDownText;
|
||||
set
|
||||
{
|
||||
if (_markDownText != value)
|
||||
{
|
||||
_markDownText = value;
|
||||
this.RefreshDocument();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the markdown pipeline to use.
|
||||
/// </summary>
|
||||
public MarkdownPipeline Pipeline
|
||||
{
|
||||
get => _pipeLine ?? DefaultPipeline;
|
||||
set
|
||||
{
|
||||
if (_pipeLine != value)
|
||||
{
|
||||
_pipeLine = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void RefreshDocument()
|
||||
{
|
||||
if (!string.IsNullOrEmpty(this.Markdown))
|
||||
{
|
||||
|
||||
var pipeline = Pipeline ?? DefaultPipeline;
|
||||
|
||||
contentPanel.CloseAllChildren();
|
||||
|
||||
pipeline = pipeline ?? new MarkdownPipelineBuilder().Build();
|
||||
|
||||
var renderer = new AggRenderer(contentPanel)
|
||||
{
|
||||
BaseUri = uri
|
||||
};
|
||||
|
||||
pipeline.Setup(renderer);
|
||||
|
||||
var document = Markdig.Markdown.Parse(this.Markdown, pipeline);
|
||||
renderer.Render(document);
|
||||
}
|
||||
contentRow.AddChild(new MarkdownWidget(new Uri("https://raw.githubusercontent.com/lunet-io/markdig/master/"),
|
||||
new Uri("https://raw.githubusercontent.com/lunet-io/markdig/master/readme.md")));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
115
Utilities/MarkdigAgg/MarkdownWidget.cs
Normal file
115
Utilities/MarkdigAgg/MarkdownWidget.cs
Normal file
|
|
@ -0,0 +1,115 @@
|
|||
// Copyright (c) 2016-2017 Nicolas Musset. All rights reserved.
|
||||
// This file is licensed under the MIT license.
|
||||
// See the LICENSE.md file in the project root for more information.
|
||||
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using Markdig.Renderers;
|
||||
using MatterHackers.Agg.UI;
|
||||
using MatterHackers.MatterControl;
|
||||
using MatterHackers.VectorMath;
|
||||
|
||||
namespace Markdig.Agg
|
||||
{
|
||||
public class MarkdownWidget : ScrollableWidget
|
||||
{
|
||||
private static readonly MarkdownPipeline DefaultPipeline = new MarkdownPipelineBuilder().UseSupportedExtensions().Build();
|
||||
|
||||
private string _markDownText = null;
|
||||
private MarkdownPipeline _pipeLine = null;
|
||||
private Uri baseUri;
|
||||
private FlowLayoutWidget contentPanel;
|
||||
|
||||
public MarkdownWidget(Uri baseUri, bool scrollContent = true)
|
||||
: base(scrollContent)
|
||||
{
|
||||
this.baseUri = baseUri;
|
||||
|
||||
this.HAnchor = HAnchor.Stretch;
|
||||
this.ScrollArea.HAnchor = HAnchor.Stretch;
|
||||
|
||||
if (scrollContent)
|
||||
{
|
||||
this.VAnchor = VAnchor.Stretch;
|
||||
this.ScrollArea.VAnchor = VAnchor.Fit;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.VAnchor = VAnchor.Fit;
|
||||
this.ScrollArea.VAnchor = VAnchor.Fit;
|
||||
}
|
||||
|
||||
contentPanel = new FlowLayoutWidget(FlowDirection.TopToBottom)
|
||||
{
|
||||
HAnchor = HAnchor.Stretch,
|
||||
VAnchor = VAnchor.Fit
|
||||
};
|
||||
|
||||
this.AddChild(contentPanel);
|
||||
}
|
||||
|
||||
public MarkdownWidget(Uri baseUri, Uri contentUri, bool scrollContent = true)
|
||||
: this(baseUri, scrollContent)
|
||||
{
|
||||
var webClient = new WebClient();
|
||||
this.Markdown = webClient.DownloadString(contentUri);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the markdown to display.
|
||||
/// </summary>
|
||||
public string Markdown
|
||||
{
|
||||
get => _markDownText;
|
||||
set
|
||||
{
|
||||
if (_markDownText != value)
|
||||
{
|
||||
_markDownText = value;
|
||||
this.RefreshDocument();
|
||||
this.Width = 10;
|
||||
this.ScrollPositionFromTop = Vector2.Zero;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the markdown pipeline to use.
|
||||
/// </summary>
|
||||
public MarkdownPipeline Pipeline
|
||||
{
|
||||
get => _pipeLine ?? DefaultPipeline;
|
||||
set
|
||||
{
|
||||
if (_pipeLine != value)
|
||||
{
|
||||
_pipeLine = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void RefreshDocument()
|
||||
{
|
||||
if (!string.IsNullOrEmpty(this.Markdown))
|
||||
{
|
||||
var pipeline = Pipeline;
|
||||
|
||||
contentPanel.CloseAllChildren();
|
||||
|
||||
// why do we check the pipeline here?
|
||||
pipeline = pipeline ?? new MarkdownPipelineBuilder().Build();
|
||||
|
||||
var renderer = new AggRenderer(contentPanel)
|
||||
{
|
||||
BaseUri = baseUri
|
||||
};
|
||||
|
||||
pipeline.Setup(renderer);
|
||||
|
||||
var document = Markdig.Markdown.Parse(this.Markdown, pipeline);
|
||||
renderer.Render(document);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue