shuhelohelo’s blog

Xamarin.Forms多めです.

C#マークダウンパーサmarkdigを使ってみる

Markdigをインストール

Nugetからインストールします。

f:id:shuhelohelo:20190428124611p:plain

使い方

使い方は簡単です。もちろんもっといろいろできるでしょうが、マークダウンテキストをHTMLに変換するには以下のようにします。

using System;
using Markdig;

namespace MarkdigTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");

            var html = Markdown.ToHtml("This is a text with some **emphasis**");

            Console.WriteLine(html);

        }
    }
}

Markdown.ToHtmlメソッドにマークダウンの文字列を与えるだけです。

実行結果は以下のようになります。

Hello World!
<p>This is a text with some <strong>emphasis</strong></p>

**で囲んだ場所がstrongタグで囲まれていますね。 すごい。

もう少ししっかりしたマークダウンを読み込ませてみる

しかし、上のような非常に簡単な例だとイマイチすごさが伝わりにくいかと思うので、もっとちゃんとしたマークダウンをHTMLに変換してみます。

読み込ませるのは、このmarkdigのReadMeです。

このReadMeの編集ボタン(ペンマーク)を押して、マークダウン表記を表示します。

f:id:shuhelohelo:20190428131407p:plain

このようにReadMeのマークダウン表記が表示されるので、それをまるっとコピーしてテキストファイルに貼り付けて保存します。 ファイル名、拡張子はなんでも良いです。 私は「markdigReadMe.md」としました。

f:id:shuhelohelo:20190428131529p:plain

プログラムの方もマークダウンファイルを読み込んで、HTMLファイルを出力するように変更しましょう。

using System;
using System.IO;
using Markdig;

namespace MarkdigTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");

            //マークダウンファイルの読み込み
            var md = File.ReadAllText(@"C:\Users\hoge\Desktop\markdigReadMe.md");

            //HTMLへの変換
            var html = Markdown.ToHtml(md);

            //HTMLファイルの出力
            File.WriteAllText(@"C:\Users\hoge\Desktop\markdigReadMe.html", html);

            Console.WriteLine(html);

        }
    }
}

サンプルなのでパスを直打ちです。

実行と比較

これを実行すると、markdigReadMe.htmlというHTMLファイルが出力されます。 それをブラウザで開きます。

f:id:shuhelohelo:20190428132248p:plain
左:markdigで変換、右:オリジナル

CSSが適用されていないので見え方が異なる点、パスの問題で画像が表示されない点を除けばしっかりと変換されていることがわかります。 表示されてはいないものの画像の位置もオリジナルと同じになっています。 すごいですね!

このmarkdigを使って自分好みのマークダウンエディタやブログサービスが作ったりしたら面白そうです。