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
あとは、上記と同様に処理します。

0 件のコメント: