Markdown記法

概要

adiaryでは本家Markdown記法を忠実に再現しています。

また拡張として「さつき記法タグ[tag:xxxx]」や目次記法([*toc]関連のみ)*1が使えます。

*1 : [*toc2]は使えますが、今のところ[*toc1]と同等です。

Markdown記法に対する拡張

URL自動リンクが必要な場合は、ブログ設定画面の自動リンクをonにしてください。

オリジナルの拡張

その他の調整

  • 見出し記法の最高位を<H3>に設定しました。
  • <section>タグによるセクショニングを行い、最高位の見出し記法を使った地点でセクションを分割するようにしました。
  • 通常の文章ブロック中で改行する際、行末も次の行頭もASCII文字以外ならば、改行コードを除去するように仕様変更しました。*5
  • HTMLブロックとして認識するタグは「p div h[1-6] blockquote pre table dl ol ul script noscript form fieldset iframe math ins del」のみでしたが、「style article section nav aside header footer details audio video figure canvas map address aside base hr option source」を追加しました。

*2 : 生成されるHTMLはadiary準拠のものになります。

*3 : インラインは非対応

*4 : Markdownのリンク記法と重複した場合は、リンク記法が優先されます。

*5 : 日本語を改行しつつ記述する際に、HTMLの仕様上、改行位置にスペースが1つ入ってしまうため、それを防止するための措置。

仕様書にはないMarkdownの仕様と準拠状況

  • HTMLコメントは退避してその中はいじらない。
  • 行末スペース2個以上を改行に置き換える際、例えスペースがいくつあっても、スペース1つと<br />に置き換える。
  • リンク記法は、リンクテキストが空文字でもリンクを生成する。
  • 下線「==」「--」による見出し記法は、2個以上の連続した記号であって、文末にスペース以外の文字を含まないときのみ有効。
  • 参照リンク記法の定義は、参照名が空文字の場合、無効となる(そのまま出力)。
  • 参照リンク記法は、参照名が定義されてない場合、無効となる(そのまま出力)。
  • 引用ブロック中で更にHTMLブロックや見出しなどあらゆる記法が使える(無限に入れ子できる)。
  • 引用ブロック(>)の手前には3つまでスペースを置くことができる。
  • TABはタブ幅4としてスペースに置換される。
  • コードブロックの手前は空行でなくてはならない。
  • コードブロックの途中に空行を挟んでも良い。
  • リストブロック中に空白行があると、リスト要素に対して段落処理をする。
  • リストブロックのネストインデントは、1段目が0~3つ、それ以降が「段数×4 + 3個」まで有効。
  • 【Ver3.20】空行後の先頭スペースの行は、リストの項目が続いているとみなす。
  • 【Ver3.20】リスト中も、行末スペース2つ以上は<br />に置換する。
  • 【Ver3.30/GFM】テーブル記法の"-"(ダッシュ)は最低3つ必要。*6

非準拠の挙動

  • 段落ブロック中の改行(行連結)時に、文末と次の行頭がマルチバイト文字ならば改行を除去するよう変更。*7
  • コメント内に空白行を含むとき、コメント中の文字列をパースする。
    • コメント内はいかなる場合でもパースしないよう変更しました。
  • 自動リンク記法でメールアドレスを書いた場合、@より左側は「[\w\.\-]+」のみ使用可能。
    • @より左側に「+」記号も記述できるよう変更しました。
  • タグ中の **強調** 等でも、タグが2行にわたる場合は処理してしまう。*8
  • 【Ver3.20】途中空行を挟むリストがあった場合、リスト記号が異なれば違うリストと扱う。

*6 : Atomでは1個以上ですが、GFMの仕様によれば3つ必要と書かれているのでそれに準拠します。

*7 : こうしないと日本語の文章中に空白が入り違和感のある表示になります。

*8 : 対応は可能ですが、実用性に対して中の処理が汚くなってしまうので今のところ対応見送りです。

要望受け付けます

拡張部分は個別にオフにできます。skel/_parser/markdown.html を skel.local/_parser/markdown.html にコピーして編集してください。

Markdown記法はあまり使用していないので、使ってみて要望がある方は気軽にご連絡ください。

  • 要望例
    • 実装(仕様)を変更してほしい。
    • 実装してほしい拡張がある場合。
    • Markdownの仕様に準拠してない挙動を見つけた。
    • 拡張した部分が邪魔である。