GitHub製エディタAtomのMarkdownリアルタイムプレビューの仕様
GitHub製エディタAtomのソースコードがMIT Licenseで公開されたので久しぶりに使ってみたところ、以前はできなかったMarkdwonファイルのリアルタイムプレビューができるようになっていました。
ここでは、AtomのMarkdownリアルタイムプレビュー機能の現時点での仕様やその調べ方を簡単にまとめます。
仕様の調べ方
Atomの機能はコア部分を除くとパッケージと呼ばれる取り外し可能なモジュールの集合体となっています。Vimにおけるプラグインのようなものですが、基本的な機能もパッケージとして実装されているのが特徴です。
Markdownのリアルタイムプレビュー機能はmarkdown-previewというパッケージが担当しています。したがって、このパッケージのコードを見ると仕様がわかります。
atom/markdown-preview - GitHub
Markdownリアルタイムプレビューの使い方 [参考]
- AtomでMarkdownファイルを開きます。
対応している拡張子は後述します。
Ctrl-M
かCtrl-Shift-m
を実行してプレビューペインを開きます。Markdownファイルを編集します。(保存の必要なし)
プレビューペインの内容がリアルタイムに更新されます。
Markdownファイルとして扱われる拡張子の一覧
対応拡張子はatom/language-gfmのgfm.csonに記載されています。
'fileTypes': [ 'markdown' 'md' 'mdown' 'mkd' 'mkdown' 'ron' ]
シンタックスハイライトされる言語の一覧
atom/markdown-previewリポジトリのextension-helper.coffeeに記載されています。
extensionsByFenceName = 'bash': 'sh' 'coffee': 'coffee' 'coffeescript': 'coffee' 'coffee-script': 'coffee' 'css': 'css' 'go': 'go' 'html': 'html' 'java': 'java' 'javascript': 'js' 'js': 'js' 'json': 'json' 'less': 'less' 'mustache': 'mustache' 'objc': 'm' 'objective-c': 'm' 'php': 'php' 'python': 'py' 'rb': 'rb' 'ruby': 'rb' 'sh': 'sh' 'toml': 'toml' 'xml': 'xml' 'yaml': 'yaml' 'yml': 'yaml'
レンダリング処理の流れ
現在は以下のように流れなっています。
- 編集を行うとAtom本体から
contents-modified
やcontents-changed
イベントがemitされる - markdown-previewパッケージのmarkdown-preview-view.coffeeの
changeHandler
がイベント処理を開始 - markdown-previewパッケージのrendere.coffeeが以下のgjtorikian/roasterが生成したhtmlをサニタイズするなどして最終的な出力を生成
- gjtorikian/roasterは以下のライブラリを用いてmarkdownをレンダリング
- chjj/marked によるMarkdown(GFM)の基本的なレンダリング
- HenrikJoreteg/emoji-imagesによる絵文字の画像化 (まだ絵文字を扱うのが難しいとのことで画像化しています)
- gjtorikian/task-lists-jsによるTask Listのレンダリング
- gjtorikian/roasterは以下のライブラリを用いてmarkdownをレンダリング
Redcarpetなど他のレンダラと出力が違って気になる場合などは、上記の該当ライブラリを見ると原因がわかるでしょう。