// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
using System;
using System.IO;
using Markdig;
namespace Microsoft.PowerShell.MarkdownRender
{
///
/// Type of conversion from Markdown.
///
[Flags]
public enum MarkdownConversionType
{
///
/// Convert to HTML.
///
HTML = 1,
///
/// Convert to VT100 encoded string.
///
VT100 = 2
}
///
/// Object representing the conversion from Markdown.
///
public class MarkdownInfo
{
///
/// Gets the Html content after conversion.
///
public string Html { get; internal set; }
///
/// Gets the VT100 encoded string after conversion.
///
public string VT100EncodedString { get; internal set; }
///
/// Gets the AST of the Markdown string.
///
public Markdig.Syntax.MarkdownDocument Tokens { get; internal set; }
}
///
/// Class to convert a Markdown string to VT100, HTML or AST.
///
public sealed class MarkdownConverter
{
///
/// Convert from Markdown string to VT100 encoded string or HTML. Returns MarkdownInfo object.
///
/// String with Markdown content to be converted.
/// Specifies type of conversion, either VT100 or HTML.
/// Specifies the rendering options for VT100 rendering.
/// MarkdownInfo object with the converted output.
public static MarkdownInfo Convert(string markdownString, MarkdownConversionType conversionType, PSMarkdownOptionInfo optionInfo)
{
var renderInfo = new MarkdownInfo();
var writer = new StringWriter();
MarkdownPipeline pipeline = null;
if (conversionType.HasFlag(MarkdownConversionType.HTML))
{
pipeline = new MarkdownPipelineBuilder().UseAdvancedExtensions().Build();
var renderer = new Markdig.Renderers.HtmlRenderer(writer);
renderInfo.Html = Markdig.Markdown.Convert(markdownString, renderer, pipeline).ToString();
}
if (conversionType.HasFlag(MarkdownConversionType.VT100))
{
pipeline = new MarkdownPipelineBuilder().Build();
// Use the VT100 renderer.
var renderer = new VT100Renderer(writer, optionInfo);
renderInfo.VT100EncodedString = Markdig.Markdown.Convert(markdownString, renderer, pipeline).ToString();
}
// Always have AST available.
var parsed = Markdig.Markdown.Parse(markdownString, pipeline);
renderInfo.Tokens = parsed;
return renderInfo;
}
}
}