山pの楽しいお勉強生活

勉強の成果を垂れ流していきます

Atomのmarkdown-tocでタイトルが日本語の場合に動かない場合の対処

はじめに

Markdown書いていると見出し(toc)が欲しくなる
↓
Atomのプラグイン探す
↓
あった
↓
日本語で正しく動かない

っといった感じでAtomプラグインmarkdown-toc」を使ってみたものの、日本語で書いた際に動かなくて困る人がまあまあいるらしい。

ので対応方法を書いてみる。

結論

markdown-tocをforkして対応してくれてる人がいるので↓のコマンドでインストールしてAtom再起動。

apm install https://github.com/Sorix/markdown-toc/

以下は蛇足です。

リンクが正しくされない詳細

  • # hoge」 は 「[hoge](#hoge)」 と変換される(正常)
  • 日本語の場合 「# ほげ」 は [ほげ](#)」 と変換される(異常)

原因

リポジトリ見てみると。

  • この問題に対するissueはいっぱい!pull requestもいくつか
    • 各国の人が各言語対応してくれと言っていて割とカオス
  • そんな中Sorixという人が、各言語まとめて指定してしたpull request作成してくれている
  • けど、、マージしてくれないっぽい。
    • 多分、作者がテストできないし、困ってないからから。
  • なので、SorixさんがForkして、修正している奴をインストールすればOK。

どんな修正?

  • 一発ドカンではなく不正な文字?(記号か?)だけを除去している
  • この文字リストがどこからきたのかさっぱりわからないが、日本語、中国語、韓国語、ドイツ語?などは除去されなくなるっぽい。
  • よって、 「# ほげ」 は 「[ほげ](#ほげ)」 と変換されて正しく動作するようになる。

疑問

アンカー名が日本語

実を言うと、 - [インストール][#インストール] のようにアンカー名を日本語で指定するのは、仕様上は正しくありません。正しく動くのはブラウザが賢く振る舞っているからです。

- [インストール][#%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB] のように URL Encode した文字列を指定するのが正しい書き方 です。

連続する空白の扱い

  • このプラグインだとタイトルに連続する空白が含まれている場合には1つにまとめて「-」と置換する処理が入っているが、GitHubwikiだと連続した「--」として扱うらしいので、正しくリンクされない。
  • これはビューワの仕様による気がする。(Markdown → HTML の正式な仕様ってあるのかしら?)
  • レアケースなので特に問題はないか?
  • 具体例 : 「# hoge hoge」 は 「hoge-hoge」 と変換されるが、GitHubwikiだと 「hoge--hoge」 となる。

参考