はてなブログでのMarkdownの不具合・仕様
不具合報告も兼ねて。
報告済み・仕様との回答を頂いたものは見出しに記載。
Markdownはパーサが色々有り、またサービスによって独自の機能を提供しているものもあるので、なかなか厄介だと思った。
の3つで試した。
普通の環境は以下とした。
もっとも、Markdownはどれが普通とは言い難いけれども。
(厳密には、dillingerは記事を書いている途中で仕様変更があったらしく、面倒になってメモをやめた。)
リストのネスト (仕様)
olが親要素の時にスペースが3つ要る
1. aa 1. bb ← ここのスペースが3つ要る 2. aa
ulが親要素の場合は2スペースで足りる
- aa - bb - aa
リストの次の行にブロックレベル要素
タグを直接書いた場合
- li <p>para</p>
md | liの子要素となるか |
---|---|
普通 | なる |
GitHub | なる |
はてな | ならない |
同じ行に書けば子要素になる
- li<p>hello</p> - li<pre>1 2</pre>
リストとMarkdonw記法
一貫性が無い。
リストとblockquote
liの子要素となる。
- li
>blq
リストとpre (仕様)
liの子要素に、シンタックスハイライト付のpreが不可
- li \```html <html>A \``` ------------------------ - li ```html <html>B ``` ------------------------ - li ```html <html>C ```
md | A | B | C |
---|---|---|---|
普通 | ul>li+pre | ul>li+pre | ul>li>p+pre |
GitHub | ul+pre | ul>li>code | ul>li>p+pre |
はてな | ul+pre | ul>li>code | ul>li>p+p>code |
「リストとシンタックスハイライトのないpre」ならば、はてなでも可能。
* A list item with a code block:
code
code
pre
preの属性が付与されない (報告済み)
言語を指定しないpreを最初に使うと、後のpreに属性が設定されなくなる
CSS/JSのセレクタ指定に影響。
\``` はるはあけぼの \``` \```javascript var foo = 1 // `class="code lang-XX" data-lang="XX"`の指定がなくなる \```
自動リンクとpre
<pre>
タグで書いた時だけ自動リンクになる。
はてな これはMarkdown(`*3)で書きました
はてな これはMarkdown(インデント4つ)で書きました
はてな これはpreで書きました
タグの中の```
がpre要素になる。
- HTMLタグの中ではMarkdown記号は要素にならず、そのまま扱われるはず。
- 実際、
>
,-
などの記号はそのまま。 - ところが、
```
はpre要素になる。
<div> \``` なつはあつい \``` </div>
次のようなHTMLが出力される。
<div> <pre class="code" data-unlink="">なつはあつい</pre> </div>
上記の「なつはあつい」中のdivの閉じタグ</div>
がハイライトされていないのはそのため。
並べてみると分かりやすい。
<div> \``` なつはあつい \``` </div>
<div> ` なつはあつい ` </div>
(この投稿は`の前にバッククオートを入れてスクリプトで消している。そうしないとこの表示が得られないので。)
タブがスペースに変換される
3~4スペースになる。ソースコード貼ったら困る人もいそう。
<dfn>
タグの次のテキストがp要素になる
パーサでdfn
がブロックレベル要素に分類されている?
入力
<i>a</i>b <dfn>a</dfn>b
出力
<p><i>a</i>b</p> <dfn>a</dfn> <p>b</p>
tex記法
数式を表示する(tex記法) - はてなダイアリーのヘルプにある記述をそのまま貼り付けるとこうなる
[tex:x2 + y2 = z2]