一旦XAML、MVVMは諦めた。C#オンリー、イベント駆動で行く。すると超順調に書けてコードも短くわかりやすい。
成果物
対象環境
- 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パッケージ
前回
http://ytyaru.hatenablog.com/entry/2020/01/31/000000
手順
プロジェクト作成
- NuGetでMarkdownパーサを追加
- デフォルトのMarkdownファイル作成
- ソースコード作成
- 実行
1. プロジェクト作成
- MonoDevelopを起動する
- メニュー→
ファイル→新しいソリューション

マルチプラットフォーム→アプリ→Eto Application
- 名前などを適当に入力し、
Codeを選択する

場所を入力する

- プロジェクトが作成される

2. NuGetでMarkdownパーサを追加
- メニュー→
プロジェクト→NuGet パッケージの追加

パッケージを追加ダイアログから欲しいパッケージを探す

- 検索窓に
markdownと入力して絞り込む

パッケージを追加ボタンをクリックする
2018-12-05時点ではMarkdownというパッケージが一番目に出てくる。Stack Flowのサイトにて作られたものらしい。ググると大抵こいつがC#のMarkdownパーサとして出てくる有名所。
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 HeyRed.MarkdownSharp;
namespace HelloMarkdown
{
public partial class MainForm : Form
{
RichTextArea richTextAreaMd;
RichTextArea richTextAreaHtml;
WebView previewer;
HeyRed.MarkdownSharp.Markdown mdParser = new Markdown();
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 = mdParser.Transform((sender as RichTextArea).Text);
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),
}
};
}
}
}
- Markdownパーサの名前空間
HeyRed.MarkdownSharpがわからなかったので、1文字ずつキーを打ってインテリセンスを出し、SystemやEto以外の見慣れないものを探し出した。一発で名前空間を調べる方法はないものか
3. 実行
- Ctrl+F5で実行
- 怒られた

- ファイルパスを辿ってexeファイルを直接叩くと実行できた


テーブルやソースコードが全然パースできていない……。これらは大抵、Markdownの拡張機能となっている。が、それっぽいのは見つけられなかった。自力で実装するしかないのか? 大変すぎるぞ……。別のパーサを探すか。