2019年1月5日土曜日

markdown とサービス メニュー

HTML の文章を修正するときに表やリストなどを HTML で書くのは面倒なものです。このようなときに、修正箇所を軽量マークアップ言語の Markdown で簡単に書いて、後から HTML に変換できる簡単なプログラムがあります。

Markdownの拡張版 MultiMarkdown では、 [Service] (サービス) から以下の二つの命令が利用できます。

md - Convert - MultiMarkdown to HTML.workflow
md - Convert - HTML to Markdown.workflow

brettterpstra.comからも配布されています。

macOSが持つ機能の一つである [Service] (サービス)は、自分で書いた簡単な処理プログラムを AppleのPages.app や BBEdit.app などさまざまなアプリケーションから利用できます。さらにショート カット キーを割り当てることもできるので、このような目的には便利です。実際、この文章を書くときにも使っています(笑)

ただ、C やPythonなどのコンピュータ言語を文法に応じて色づけする Syntax Highlightng の方法が MultiMarkdown では見つかりませんでした。そこで、もう一つの Markdown の拡張版 Kramdownを [Service] メニューから利用できるようにしました。

Kramdown は Rouge や Coderay の Syntax Highlightng ができます。ここでは Coderay を利用しました。Kramdown と Coderay のインストールの方法はそれぞれのサイトを参照してください。ちなみに、 Kramdown のネイティブは Ruby ですが、macOS に標準付属の Ruby で動作しますので気楽です。
[Service] メニューから呼び出せる命令は macOS に標準付属の Automator.app を使えば簡単にできます。Automator.app はアイコン プログラミング風の極簡単なものだけでなく、Shell Script や Python などを呼び出してもう少し細かな制御もできます。ここでは Kramdown をそのネイティブである Ruby 経由で Automator.app から呼び出します。

Automatorで [ファイル > 新規] を選択し、表示されたウィンド内の [書類の種類を選択してください] の枠から {クリックアクション] を選択する。

[ワークフローが受け取る現在の項目: ] ポップアップメニューから [テキスト] 、[検索対象] ポップアップメニューは初期値の [すべてのアプリケーション]、[入力] はそのまま、[選択されたテキストを出力で置き換える] チェック ボックスをクリックしてチェック マークを入れる。[イメージ] と [カラー] は初期値のままとします。

左欄の [アクション] タブから [ユーティリティ] を選択し、その右側のリストから [シェルスクリプトを実行] を右欄にドラッグ ドロップします。表示されたコラムの [シェル:] ポップアップメニューから [/usr/bin/ruby] を選択し、[入力の引き渡し方法; ] ポップアップメニューから [引数として] を選択します。
[シェルスクリプトを実行]のテキスト エリアに以下のコードを入力します。
#!/usr/bin/ruby
require 'kramdown';
markdown = ARGV[0];
markdown = +markdown
markdown.force_encoding("UTF-8")
print Kramdown::Document.new(markdown, {coderay_line_numbers: nil}).to_html;
以上で、[保存…]を選択すれば、ファイル名をkramdownなどと指定して、/Users/USER_NAME/Library/Servicesに保存されます。使い方は通常のサービス メニューと同じで、テキストを選択してから呼び出します。Microsoft Word でも使えますが、2008年版の Word では呼び出せませんでした(笑)

・・・と、ここまで書いて、上記のMultiMarkdownを[Service]から呼び出すツールは機能縮小版のMultiMarkdownがそのまま入っていることが分かりました。せっかく、MultiMarkdownをインストールしていますので、これを使わない手はありません。

上記と同様にAutomatorから [シェルスクリプトを実行] を使えるようにして、表示されたコラムの [シェル:] ポップアップメニューから [/bin/bash] を選択し、[入力の引き渡し方法; ] ポップアップメニューから [引数として] を選択します。[シェルスクリプトを実行]のテキスト エリアに以下のコードを入力します。
echo "$1" | /usr/local/bin/multimarkdown
あとは、上記と同様に処理します。

2019年1月2日水曜日

BBEditのPreviewフィルタ

以前にも書きましたが BBEdit の Preview 機能で拡張版の Markdown を表示できます。以前は、 Markdown の拡張版 MultiMarkdown でも利用でき、表も描画できることをご紹介しました。

少し工夫することで kramdown でも Preview に表示できます。kramdownは C や Python などのプログラム コードを色づけしたHTMLを出力できます。kramdownのインストールに関してはこのページを参照してください。macOSはRuby 2.x がインストールされていますので、上記ページの Mac OS X 項目にある命令を一つ実行するだけです。

kramdownのインストールが終わったとして・・・まず、~/Library/Application Support/BBEdit/ の中に Preview Filters という名前でディレクトリを作ります。既に Preview Filters がある場合はそのディレクトリを使ってください。

次に、Ruby を使ったShell Scriptを書きます。Shell Script の書き方や設定は他のサイトを参照してください。BBEditで以下のコードを書いて(コピー ペーストして)保存します。ここではファイル名を kramdown にします。保存先は先ほどの~/Library/Application Support/BBEdit//Preview Filters/ の中です。
#!/usr/bin/ruby
require 'kramdown'
markdown = $stdin.read
markdown = +markdown
markdown.force_encoding("UTF-8")
print Kramdown::Document.new(markdown).to_html
インストールの作業は以上です。

Preview で見るには、Markdown ファイルをBBEditで開き、[Markup > Preview in BBEdit] を選択します。次に、Preview ウィンドウ内にある[Filter]タブのプルダウンメニューから kramdown を選択します。

なお Kramdown の Option を設定する場合には最後の行のKramdown::Document.new(markdown).to_htmlのなかのnew(markdown の後に ', {}' を入れて、{}の中にOption を設定してください。Kramdown の Option は Google などで検索すると、この書式と共に色々と出てきます。