テーブルもコードも変換できた!
成果物
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch(9.0) 2018-06-27
- Mono 5.16.0
- MonoDevelop 7.6 build 711
- Eto.Forms 2.4.1 拡張機能, NuGetパッケージ
前回
前回はテーブルやコードを変換できなかった。
手順
1. プロジェクト作成
- MonoDevelopを起動する
- メニュー→ファイル→新しいソリューション
  
- マルチプラットフォーム→- アプリ→- Eto Application 
- 名前などを適当に入力し、Codeを選択する
  
- 場所を入力する
  
- プロジェクトが作成される
  
2. NuGetでMarkdownパーサを追加
- メニュー→プロジェクト→NuGet パッケージの追加
  
- パッケージを追加ダイアログから欲しいパッケージを探す
  
- 検索窓にmarkdigと入力して絞り込む
  
- Markdigを選択する
- パッケージを追加ボタンをクリックする
以下のように拡張もあるらしい。今回はまだ使わない。
- Markdig
- Markdig.SyntaxHighLighting
- Markdig.Signed
Markdig.SyntaxHighLightingなどはインストールできず
Package Markdig.SyntaxHighlighting 1.1.7 is not compatible with netstandard1.6 (.NETStandard,Version=v1.6). Package Markdig.SyntaxHighlighting 1.1.7 supports: portable45-net45+win8+wp8+wpa81 (.NETPortable,Version=v4.5,Profile=Profile259)
 MonoDevelopでは.NETStandard,Version=v1.6.を使っているが、Markdig.SyntaxHighlightingは.NETPortable,Version=v4.5を必要としているってことかな? Windowsネイティブのライブラリなのか? だったら使えない……。残念。
3. デフォルトのMarkdownファイル作成
- .Desktopでないプロジェクトを右クリック
- XMLファイルを追加する
- ファイル名はDefault.mdなどにする
- ファイル内容は以下など任意にする
<feff># タイトル ## 箇条書き * 箇条書き * 箇条書き2 ## 箇条書き(順序付き) 1. [Google](https://www.google.co.jp) 1. https://www.yahoo.co.jp 1. [https://www.yahoo.co.jp] ## テーブル ABC|DEF ---|--- aaa|bbb ccc|ddd ## ソースコード \`\`\`python import pathlib print("ABC") \`\`\` ## 引用 > なんか引用。
 Markdown内でソースコード``(バッククォート3つ)を表現できなかったので適当にエスケープ文字としてバックスラッシュ`を埋めといた。\を削除することで正しいコードとなる。
4. ソースコード作成
MainForm.cs
using System;
using System.IO;
using Eto.Forms;
using Eto.Drawing;
using Markdig;
namespace HelloMarkdown
{
    public partial class MainForm : Form
    {
        RichTextArea richTextAreaMd;
        RichTextArea richTextAreaHtml;
        WebView previewer;
        Markdig.MarkdownPipeline pipeline = new MarkdownPipelineBuilder().UseAdvancedExtensions().Build();
        public MainForm()
        {
            Title = "Markdown Previewer";
            ClientSize = new Size(1024, 768);
            Create();
        }
        private void Create()
        {
            richTextAreaMd = new RichTextArea() { Width=320, Height=600 };
            richTextAreaHtml = new RichTextArea() { Width=320, Height=600 };
            previewer = new WebView() { Width=320, Height=600 };
            richTextAreaMd.Focus();
            richTextAreaMd.TextChanged += (object sender, EventArgs e) =>
            {
                richTextAreaHtml.Text = Markdig.Markdown.ToHtml((sender as RichTextArea).Text, pipeline);
                previewer.LoadHtml(richTextAreaHtml.Text);
            };
            richTextAreaMd.Text = new StreamReader(new FileStream("/tmp/work/Projects/HelloMarkdown/HelloMarkdown/HelloMarkdown/DefaultMarkdown.md", FileMode.Open)).ReadToEnd();
            
            Content = new TableLayout
            {
                Padding = 0, // padding around cells
                Spacing = new Size(0, 0), // spacing between each cell
                Rows =
                {
                    new TableRow(richTextAreaMd, richTextAreaHtml, previewer),
                }
            };
        }
    }
}
3. 実行
- Ctrl+F5で実行
- 怒られた
  
- ファイルパスを辿ってexeファイルを直接叩くと実行できた
  
  
テーブルやソースコードもパースできてる! やったね!