EvernoteだけでMarkdownリッチテキストの相互変換できるスクリプト書いた

前回Pandocを入れたのはEvernoteだけでmarkdownとhtml(リッチテキスト)を相互変換できないものかという考えからだった。

そういうわけでやってみたできた。こうやってEvernotemarkdownの文書を書いて、


スクリプト実行すると、


markdownにするかhtml(リッチテキスト)にするかダイアログが出るのでリッチテキスト(html)にして変換。


リッチテキストからmarkdownにするにはさっきのダイアログをmarkdownにする。

すると、

こうして元に戻せる。

markdownで文書を編集、きれいにしたければリッチテキストに変換、また問題があればmarkdownに変換して文書を編集、といった使い方ができる。

若干最初と違いがあるのはPandocの仕様。複雑な構造部分も基本的には問題ない。


まあ以前の使い回しなので変換するコードに特に手を入れなきゃいけない部分がなかったのもあってか問題はなかった。が、なんかいろいろめんどくさいことがあったけどそれはいいや。

とりあえずEvernoteのクライアントだけでMarkdownを使えるようになった!これでEvernoteでいろいろ書きやすくなると思う!

さらに、

を使えばショートカットでいけるようになると思うけど、試してない。また今度。

相互変換のために準備するもの

2つ必要。Pandocと相互変換するmadever.applescriptというスクリプト


AppleScriptはAlfredでも呼び出せる。設定画面のFeaturesのAppleScriptsにチェック入れると表示されるけど、/Users/ユーザ名/Library/Scriptsだとうまく表示されなかった。ホームディレクトリに適当にフォルダ作って置けばみつかると思う。あとscptにすること。エディタで開いて別名で保存して、フォーマットをスクリプトにすればできる。

HomebrewからPandocをインストール

Pandocはいろんなテキストフォーマットのコンバータ。これを利用して変換作業を行なってますのでお手持ちのMacにインストール。Homebrewからインストールするには、まずhaskell-platformというのをインストール。

% brew install haskell-platform

結構時間かかるので待機。

完了したらcabalというHaskellのパッケージ管理システムを使ってPandocをインストール。RubyのgemのHaskell版みたいなもの。

% cabal update
% cabal install pandoc

インストールできたら.zshrcから$HOME/.cabal/binにパス通す。bashの人も適当にどうぞ。

PATH=$HOME/.cabal/bin:$PATH

記述して保存したらターミナルを再起動して、

pandoc -v

とすると、

% pandoc 1.9.4
Compiled with citeproc-hs 0.3.4, texmath 0.6.0.6, highlighting-kate 0.5.1.
Syntax highlighting is supported for the following languages:
    Actionscript, Ada, Alert, Alert_indent, Apache, Asn1, Asp, Awk, Bash,
    Bibtex, Boo, C, Changelog, Clojure, Cmake, Coffeescript, Coldfusion,
    Commonlisp, Cpp, Cs, Css, D, Diff, Djangotemplate, Doxygen, Dtd, Eiffel,
    Email, Erlang, Fortran, Fsharp, Gnuassembler, Go, Haskell, Haxe, Html, Ini,
    Java, Javadoc, Javascript, Json, Jsp, Latex, Lex, LiterateHaskell, Lua,
    Makefile, Mandoc, Matlab, Maxima, Metafont, Mips, Modula2, Modula3,
    Monobasic, Nasm, Noweb, Objectivec, Objectivecpp, Ocaml, Octave, Pascal,
    Perl, Php, Pike, Postscript, Prolog, Python, R, Relaxngcompact, Rhtml, Ruby,
    Scala, Scheme, Sci, Sed, Sgml, Sql, SqlMysql, SqlPostgresql, Tcl, Texinfo,
    Verilog, Vhdl, Xml, Xorg, Xslt, Xul, Yacc, Yaml
Copyright (C) 2006-2012 John MacFarlane
Web:  http://johnmacfarlane.net/pandoc
This is free software; see the source for copying conditions.  There is no
warranty, not even for merchantability or fitness for a particular purpose.

みたいに出てきたらうまくいってる。

なんのこっちゃお前なにいってんのかよくわからんぞボケという人は普通にダウンロード。

インストーラが助けてくれますんで誰でも導入できます。

もし.cabalやインストーラ以外のパスにPandocの実行ファイルがある場合madeverスクリプトの上部にそこまでのパスを書いてほしい。たぶんすぐわかると思う。

Markdown記法について

いくつか特殊というか、他のMarkdown記法と互換性のない記法が存在する。全てを把握できているかどうかはっきりテストしていないが、現在分かるものは次の通り。

  • 改行は半角スペース2つだけじゃなくて、バックスラッシュ(\)を使う
  • html→markdownにしたときにリストの間に不自然な行が入る
    • 特に問題はないのでそのままだがこちらで対応しようかどうか検討中
  • 引用のネスト時に1行余計に書く必要がある
    • これは言葉では表しにくい
  • プログラミングコードのシンタックスハイライトがある
    • 便利ではあるがhtml→markdown時に対応できない。どうしようか検討中
  • tableのalignがmarkdown→html→markdownに変換したとき無効になる
    • pandoc側のバグといっていいのか。ちょっとこれは調節するのが難しそう


とりあえず改行と引用だけ書き方を気をつければ良い。あと画像はEvernoteの関係でmarkdownやらhtmlやら変換していると無くなっちゃうので、画像なしで。

それ以外はだいたい安心できると思う。

まあちょこちょこ直していく。

引用の書き方

問題ない書き方はこれ。

> 引用のテスト 段落と同じような扱いを受けている。改行するときは末尾に□□
> と半角スペースを2つ入れることで改行になる
>
> Markdownで`1行`あけることで行が開く
>
> > ネストした引用のテスト

> > > さらにネスト引用。ネストには一行あける必要がある
> > > これはPandocだけの仕様。普通にやるなら–strictを使う必要がある
>
> 引用された文章です 
>
> 引用された文章です
>
> ### hタグのテスト
>
> - リストのテスト1
> - リストのテスト2

問題が出る書き方

> 引用のテスト
> 段落と同じような扱いを受けている。改行するときは末尾に□□
> と半角スペースを2つ入れることで改行になる
>
> Markdownで`1行`あけることで行が開く
> > ネストした引用のテスト
> > > さらにネスト引用
> ネストした引用ではPandoc-1.9.4で正しく動作しない
>
> 引用された文章です 
>
> 引用された文章です
>
> ### hタグのテスト
>
> * リストのテスト1
> * リストのテスト2

ネストするとき気をつけて。あんまりやらないと思うけど。