C#, C++, C, Java, JavaScript, Markdownはハイライトできたが、Python, Bashはできないことを確認した。
成果物
C#, C++, C, Java, JavaScript, Markdownはできてるが、Python, Bashはできないことを確認した。
対象環境
- 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.SyntaxHighlighting
を選択する
パッケージを追加
ボタンをクリックする
以下のエラーで失敗する。
/tmp/work/HelloMarkdown/HelloMarkdown/HelloMarkdown/MainForm.cs(75,75): Error CS0012: The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'. (CS0012) (HelloMarkdown)
こちらによるとMicrosoft.NETCore.Portable.Compatibility
パッケージを導入すれば解決するっぽい。
再びMarkdig.SyntaxHighlighting
の導入を試みるも、同様のエラー。もしかして入手したのは異なるコンパイラでビルドしたバイナリだからか?
成功編
GitHubからソースコードを持ってきてコンパイルする作戦。
ダウンロード
- ターミナルを起動する
git clone https://github.com/RichardSlater/Markdig.SyntaxHighlighting
を実行する
ビルド
./Markdig.SyntaxHighlighting/src/Markdig.SyntaxHighlighting.sln
をダブルクリックする(MonoDevelopで開く)Release
ですべてビルド
する
DLLが作成される。
- ./Markdig.SyntaxHighlighting/src/Markdig.SyntaxHighlighting/bin/Release/
参照に追加
Markdig.SyntaxHighlighting
を使いたいプロジェクトを作成する- プロジェクトの
依存関係
を右クリックする 参照の編集
をクリックする
.NETアセンブリ
タブをクリックする参照
ボタンをクリックする- 参照に先程のビルドで作成されたDLLを追加する
実行すると以下のように怒られる。
/tmp/work/HelloMarkdown/HelloMarkdown/HelloMarkdown/MainForm.cs(75,75): Error CS0012: The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'. (CS0012) (HelloMarkdown)
先述の失敗編にある通り、Microsoft.NETCore.Portable.Compatibility
パッケージを導入すれば解決する。
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; using ColorCode; using Markdig.SyntaxHighlighting; namespace HelloMarkdown { public partial class MainForm : Form { RichTextArea richTextAreaMd; RichTextArea richTextAreaHtml; WebView previewer; Markdig.MarkdownPipeline pipeline; public MainForm() { Title = "Markdown Previewer"; ClientSize = new Size(1024, 768); Create(); } private void Create() { this.pipeline = new MarkdownPipelineBuilder() .UseAdvancedExtensions() .UseSyntaxHighlighting() .Build(); 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(); //richTextAreaMd.Text = new StreamReader(new FileStream("./DefaultMarkdown.md", FileMode.Open)).ReadToEnd(); richTextAreaMd.Text = new StreamReader(new FileStream(System.IO.Path.Combine(System.AppContext.BaseDirectory, "DefaultMarkdown.md"), FileMode.Open)).ReadToEnd(); Content = new TableLayout { Padding = 0, Spacing = new Size(0, 0), Rows = { new TableRow(richTextAreaMd, richTextAreaHtml, previewer), } }; } } }
3. 実行
- Ctrl+F5で実行
- 怒られた
- ファイルパスを辿ってexeファイルを直接叩くと実行できた
ソースコード部分のHTMLを抜き出してみると以下。
<div class="lang-python editor-colors">import pathlib print("ABC") </div>
あれ、<code>
消えた……。<pre><code>
にして欲しいんだけど……。<div>
は無いわー。マークされている部分がひとつもない。CSSもない。これ本当に使えるのか?
HTMLを見る限り、言語名は認識したようなので使えると思うが……。
追記
C#, C++, C, Java, JavaScript, Markdownはできてるが、Python, Bashはできないことを確認した。