LoginSignup
16
12

More than 5 years have passed since last update.

Qiitaのリンクと注釈のMarkdown記法の差異 ソースコードを見ながら

Last updated at Posted at 2016-01-12

普段引っかかっているポイントをメモ

結論

注釈の:後のスペースは仕様として必須です。

リンク[]の場合

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 - 注釈のコードブロックに関するコメント

注釈.JPG

Qiita - Markdown記法 チートシート - Qiita - 注釈のスペースに関するコメント

注釈2.JPG

特に反応は無いようなので、今後しばらくはこのままかと思います。

コードを見る

さて、QiitaのMarkdownは公開されているそうです。

脚注記法に対応しました - Qiita Blog

Qiitaでは、Markdownの実装をqiita-markdownレポジトリで公開しています。

increments/qiita-markdown

rubyには疎いのですが…こちらはHTMLの装飾に見えます。
で、記法に関するものは

increments/greenmat

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が注釈にならないのは仕様といっていいのかもしれません。
なぜインデントが必要かというと、コメントにあるように、改行を有効化させるためのようです。
↓がこうなる2(わかりにくいですがタブを入れてます)

‌[^1]: 一行目
 二行目

なるほどリンクには改行なんて要らないですが、長い注釈には改行が欲しいときがありました。
実はできたのですね。
Qiita - Markdown記法 チートシート - Qiitaにも乗ってないので、追加すればみんながほんの少し便利になるかも。

…でもだからって最初の行にインデントは必須ではないのでは…??
ループにしているから、break判定に行頭にインデントが無い行を指定→先頭行もその条件に引っ張られている、ということだと思います。(自信薄)
先頭行([^.*]:)だけインデントのチェックを外すってそんなに難しくは無いと思うのですが、深遠な考えは自分では読みきれません…

参考記事

Qiita - Markdown記法 チートシート - Qiita


  1. 最初にスペース8つでコードとみなすと書きましたが、
    もともと注釈はMarkdownが有効だが、オプションではじめの4つが無視されていただけでした。 

  2. 一行目
    二行目 

16
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
12