普段引っかかっているポイントをメモ
結論
注釈の:
後のスペースは仕様として必須です。
リンク[]
の場合
Qiita - Markdown記法 チートシート - Qiita - Links - リンク
[hoge]:http://huga // OK
[hoge]: http://huga // OK
[hoge]: http://huga // OK
リンクの記法は、:
後にいくらスペースが入ってもいい。
が、普通に打っているとスペースは入れない。
余談
Qiita - Markdown記法 チートシート - Qiita - Links - リンク
では
Markdown: [ここ][link-1] と [この][link-1] リンクは同じになります。 [link-1][] も可能です。 [link-1]:http://qiita.com/drafts/c686397e4a0f4f11683d
となっていますが、[link-1]
だけでも参照できます。[]
は不要です。
注釈[^]
の場合
Qiita - Markdown記法 チートシート - Qiita - 注釈
[^hoge]:huga // NG
[^hoge]: huga // OK
[^hoge]: huga // OKだが、スペース8個でコードとみなされる
と、:
の後にスペースが必須になります。
これが毎回リンクと同じ気分で打つと忘れてイラリときます。
(そして```
で囲むとOKパターンが表示されない。謎)
これらはQiita - Markdown記法 チートシート - Qiitaのコメント欄でも指摘されています。
Qiita - Markdown記法 チートシート - Qiita - 注釈のコードブロックに関するコメント
Qiita - Markdown記法 チートシート - Qiita - 注釈のスペースに関するコメント
特に反応は無いようなので、今後しばらくはこのままかと思います。
コードを見る
さて、QiitaのMarkdownは公開されているそうです。
Qiitaでは、Markdownの実装をqiita-markdownレポジトリで公開しています。
rubyには疎いのですが…こちらはHTMLの装飾に見えます。
で、記法に関するものは
vmg/redcarpetのフォークで、これでMarkdown記法→HTMLに変換している模様。
リンク
リンク[]
の箇所を探してみると…(Cも疎いですが)
is_ref greenmat/markdown.c at master · increments/greenmat
オプションで行頭のスペースは3つまでOKと。
[hoge]:http://huga // OK
[hoge]:http://huga // OK
[hoge]:http://huga // OK
[hoge]:http://huga // OK
[hoge]:http://huga // NG
[.*]:
を1文字ずつ見て判定して、
:
後のタブとスペースの連続をすべて読み飛ばす。
なので、:
後にタブとスペースはあってもなくても良い。
あとはわちゃわちゃしてますが、ひとまず注釈との比較にはいいでしょう。
注釈
注釈(footnote)のチェックも見ます。
is_footnote greenmat/markdown.c at master · increments/greenmat
前半で[^.*]:
を1文字ずつ見て判定して、
contentsの判定に移りますが、
インデントのチェックがあります。
コメントとソースを読むと、
スペースは4つまで無視(タブインデント相当)1
スペースがなくて、ポインタが最初の位置のままだと、タブがあるかチェックする。
スペースもタブもない→break
あるならcontentsをバッファに格納。
と、:
のあとのインデントが必須に見えました。
つまり、[^hoge]:huga
が注釈にならないのは仕様といっていいのかもしれません。
なぜインデントが必要かというと、コメントにあるように、改行を有効化させるためのようです。
↓がこうなる^1
[^1]: 一行目
二行目
なるほどリンクには改行なんて要らないですが、長い注釈には改行が欲しいときがありました。
実はできたのですね。
Qiita - Markdown記法 チートシート - Qiitaにも乗ってないので、追加すればみんながほんの少し便利になるかも。
…でもだからって最初の行にインデントは必須ではないのでは…??
ループにしているから、break判定に行頭にインデントが無い行を指定→先頭行もその条件に引っ張られている、ということだと思います。(自信薄)
先頭行([^.*]:
)だけインデントのチェックを外すってそんなに難しくは無いと思うのですが、深遠な考えは自分では読みきれません…
参考記事
Qiita - Markdown記法 チートシート - Qiita
-
最初にスペース8つでコードとみなすと書きましたが、
もともと注釈はMarkdownが有効だが、オプションではじめの4つが無視されていただけでした。 ↩