diff --git a/src/Yavsc/Helpers/Tags/MarkDownTagHelper.cs b/src/Yavsc/Helpers/Tags/MarkDownTagHelper.cs
index 623ed6d4..e15ca4f5 100644
--- a/src/Yavsc/Helpers/Tags/MarkDownTagHelper.cs
+++ b/src/Yavsc/Helpers/Tags/MarkDownTagHelper.cs
@@ -1,10 +1,11 @@
-using System.Text.RegularExpressions;
using System.Threading.Tasks;
-using MarkdownDeep;
using Microsoft.AspNet.Mvc.Rendering;
using Microsoft.AspNet.Razor.TagHelpers;
+using CommonMark;
+using CommonMark.Syntax;
+using System.IO;
namespace Yavsc.TagHelpers
{
@@ -32,45 +33,6 @@ namespace Yavsc.TagHelpers
[HtmlAttributeName(MarkdownContentAttributeName)]
public string MarkdownContent { get; set; }
- static Regex rxExtractLanguage = new Regex("^({{(.+)}}[\r\n])", RegexOptions.Compiled);
- private static string FormatCodePrettyPrint(MarkdownDeep.Markdown m, string code)
- {
- // Try to extract the language from the first line
- var match = rxExtractLanguage.Match(code);
- string language = null;
-
- if (match.Success)
- {
- // Save the language
- var g = (Group)match.Groups[2];
- language = g.ToString();
-
- // Remove the first line
- code = code.Substring(match.Groups[1].Length);
- }
-
- // If not specified, look for a link definition called "default_syntax" and
- // grab the language from its title
- if (language == null)
- {
- var d = m.GetLinkDefinition("default_syntax");
- if (d != null)
- language = d.title;
- }
-
- // Common replacements
- if (language == "C#")
- language = "csharp";
- if (language == "C++")
- language = "cpp";
-
- // Wrap code in pre/code tags and add PrettyPrint attributes if necessary
- if (string.IsNullOrEmpty(language))
- return string.Format("
{0}
\n", code);
- else
- return string.Format("{1}
\n",
- language.ToLowerInvariant(), code);
- }
///
@@ -79,28 +41,27 @@ namespace Yavsc.TagHelpers
/// The Markdown that should be transformed.
/// The url Base Location.
/// The HTML representation of the supplied Markdown.
- public string Markdown(string text, string urlBaseLocation = "")
+ public string Markdown(string commonMark, string urlBaseLocation = "")
{
// Transform the supplied text (Markdown) into HTML.
- var markdownTransformer = GetMarkdownTransformer();
- markdownTransformer.UrlBaseLocation = urlBaseLocation;
- string html = markdownTransformer.Transform(text);
- // Wrap the html in an MvcHtmlString otherwise it'll be HtmlEncoded and displayed to the user as HTML :(
- return html;
- }
+ string actual;
+ var settings = CommonMarkSettings.Default.Clone();
+ settings.OutputFormat = OutputFormat.Html;
+ // settings.PrologueLineHandler = null;
+ Block document;
- internal Markdown GetMarkdownTransformer()
- {
- var markdownTransformer = new Markdown();
- markdownTransformer.ExtraMode = true;
- markdownTransformer.NoFollowLinks = true;
- markdownTransformer.SafeMode = false;
- markdownTransformer.FormatCodeBlock = FormatCodePrettyPrint;
- markdownTransformer.ExtractHeadBlocks = true;
- markdownTransformer.UserBreaks = true;
- return markdownTransformer;
+ // Act
+ using (var reader = new StringReader(commonMark))
+ using (var writer = new StringWriter())
+ {
+ var prologue = CommonMarkConverter.ProcessPrologue(reader, settings);
+ document = CommonMarkConverter.ProcessStage1(reader, settings, prologue);
+ CommonMarkConverter.ProcessStage2(document, settings);
+ CommonMarkConverter.ProcessStage3(document, writer, settings);
+ actual = writer.ToString();
+ }
+ return actual;
}
-
public ModelExpression Content { get; set; }
public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
diff --git a/src/Yavsc/project.json b/src/Yavsc/project.json
index bc498286..166769f8 100644
--- a/src/Yavsc/project.json
+++ b/src/Yavsc/project.json
@@ -75,6 +75,7 @@
"defaultNamespace": "Yavsc"
},
"dependencies": {
+ "CommonMark": "0.11.0",
"EntityFramework.Commands": "7.0.0-rc1-final",
"EntityFramework.Core": "7.0.0-rc1-final",
"EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final",
@@ -82,7 +83,6 @@
"EntityFramework7.Npgsql": "3.1.0-rc1-3",
"EntityFramework7.Npgsql.Design": "3.1.0-rc1-5",
"MailKit": "1.12.0",
- "MarkdownDeep-av.NET": "1.5.8",
"Microsoft.AspNet.Authentication.Cookies": "1.0.0-rc1-final",
"Microsoft.AspNet.Authentication.Facebook": "1.0.0-rc1-final",
"Microsoft.AspNet.Authentication.Twitter": "1.0.0-rc1-final",