みなさまに朗報です。2年前に作ってGitHubに公開した、世界に存在するMarkdownファイルの半数をHTMLに変換するAWKスクリプトのバグを少し除去して一部追加実装し、以前より使えるようになりました。
私のGitHub リポジトリから確認・ダウンロードいただけます。ライセンスはMIT Licenseです。
プログラムの動かし方
上記リポジトリから、markdown-subset-translator.awk をダウンロードして適当なディレクトリに置きます。同じディレクトリにMarkdownファイル(ここではtest.md)を作って、
awk -f markdown-subset-translator.awk test.md
とすると、Markdownファイルを変換したHTMLが出てきます。
オプションとして del_p_newline
用意しています。これを1にすると、段落ブロックを<p>タグで囲う際に、段落中にある改行をすべて除去します。オプション指定方法は次の通りです。awkのvオプションを使って変数の値をプログラム外から設定しています。
awk -f markdown-subset-translator.awk -v del_p_newline=1 test.md
このオプションを用いることにより、日本語など、単語区切りにスペースを用いない言語におけるHTMLのレンダリングの課題を回避できます。
HTMLのレンダリング規則上、ウェブブラウザは<p>タグ中の改行を半角スペース1つとして表示します。これは日本語を表示する場合には、文章が不自然に切れて見えたり、コピペする際に余計な半角スペースが入る要因になります。このオプションを利用して段落中の改行を消して詰めてしまうことで、余分な半角スペースが消えます。
文書ファイルの記法と制約
標準のMarkdownは文法定義が少なく、一部曖昧なところもあったため、それを補うような形で多くの派生処理系が生まれています。このプログラムはできるだけもとのMarkdown文法を尊重しつつ、派生処理系で広く採用されている記法を少し取り入れました。
文書の処理にあたり、次の制約があります。
- 見出しや箇条書きブロックの前後には空行が必要です。
- 多くのサービスでは空行が無くてもよきにはからってくれますが、当プログラムは柔軟さを持ち合わせていません。石頭です。多くの場合は意図した通りの変換結果になりません。
- 箇条書きの階層を変化させるには、タブ1文字か、半角スペース4個のインデントを利用してください。
- 半角スペース2個など、他の設定にしたい場合はプログラム中の値を書き換える必要があります。将来的に設定変数として切り出す予定です。
変換可能な記法
次の記法に対応します。
- 見出し
- 現在、Atx-styleの一部 ( # : NUMBER SIGN U+0023 を行頭にだけ置く形のもの) に対応
- 段落
- 箇条書き
- 複数階層にも対応
- 順序付きリスト
- 複数階層にも対応
- 単一のコード
- コードブロック
- 空白4つ or タブ文字によるインデントによるブロック表現に対応
- 区切り線
- リンク (title属性付与にも対応)
- 通常のリンク
- 定義参照リンク
- 引用
- 文章強調・意味付け
- 強調 (<em>)
- さらに強い強調 (<strong>)
- 打ち消し線 (<s>)
現時点で非対応の記法
- 見出し
- Atx-styleのうち、# を行末にも置く形のもの
- Underlined-styleのH1、H2見出し
- 画像挿入 (<img>タグに変換)
- Automatic Link
- テーブル
- バッククォート3つの行によって囲むコードブロック
このプログラムが役に立ちそうな場面
大がかりなMarkdown変換用プログラムをUNIX系のシステムにインストールできないが、とりあえずgawkの処理系があって、16KB程度のawkプログラムであれば送り込めるだけの余地があるという極限的状況であれば利用する価値が出てきます。豊かな環境であれば他のソフトを使った方が良いです。
世の中にはMarkdownをプレビュー、変換できるソフトウェアが数多くあります。他形式の文書ファイルに変換したい場合はpandocを用いると大変便利ですし、単に編集・プレビューするなら、Visual Studio Codeなど多数の優れた無料ソフトがあります。
ソフトの中にはWYSIWYG対応のものもあり、こちらはMarkdownエディタというより、文章に見出しや強調をつけたり、箇条書きをしたものをMarkdown形式で保存できる文書作成ソフトといった感じになります。Markdown対応のオンラインの文書作成管理サービスも多数あります。