Skip to content

spec: #45 後でも約物・記号すぐ外側の***を(日本語が隣である限り)認識することを保証する #193

@tats-u

Description

@tats-u

Goals

**このアスタリスクは強調記号として認識されず、そのまま表示されます。**この文のせいで。

CommonMarkには、**の内側が約物または記号、かつ外側が両者以外だと正しく認識されないという仕様バグがあります。そのため、Markdownで太字を使いたい場合に、その箇所の内側の文字が約物かどうかにどうかに余計なリソースを割かなければなりません。VFMもCommonMarkベースなので影響を受けます。

両隣の文字の最低片方が日本語(日中韓)ならばこの約物判定をスキップできるようにしても、CommonMarkの既存のテストは全て突破しつつ(日中韓以外の言語への影響を最低限に抑えつつ)、ほとんどの日本語での問題ケースを解消できます。

https://github.com/tats-u/markdown-cjk-friendly
https://qiita.com/tats-u/items/f571313793b367d7c326
https://qiita.com/Yarakashi_Kikohshi/items/f5ebd1273cb6c0681da1
https://qiita.com/yusuke_s_yusuke/items/303436e1a164b118936d

VFMのユーザは日本人が多いのでこの仕様拡張は有益だと思います。

仕様:https://github.com/tats-u/markdown-cjk-friendly/blob/main/specification.md (英語)

#45 によればremarkのバージョンがまだこの影響を受けるもの(micromark入り)でないので、今すぐには影響を受けませんが、更新するにあたってはこの問題が障害になります。

Docusaurus v2 → v3での前例:https://docusaurus.io/docs/migration/v3#other-markdown-incompatibilities

Prior Art

  • djot→内側の文字が約物かどうかでは判定していない、ただし*が太字、_が斜体で互換性なし
  • AsciiDoc→**にこのようなルールはない(*はCommonMarkの__相当)、ただしそもそもMarkdownではない

Discussion

不都合な点があれば教えて下さい(異体字セレクタ・絵文字判定絡みで2つ前の文字を把握する必要がありますがそこは何とか)

Metadata

Metadata

Assignees

No one assigned

    Labels

    specSpec related thing

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions