7cc@はてなブログ

JavaScriptとかとか

はてなブログでの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

表示参考のgist

「リストとシンタックスハイライトのない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要素になる。

  1. HTMLタグの中ではMarkdown記号は要素にならず、そのまま扱われるはず。
  2. 実際、>, -などの記号はそのまま。
  3. ところが、```は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] e^{i\pi} = -1

(そもそも、はてなブログtex記法をサポートしているのか不明。)