Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

markdown リストの入れ子が反映されないことがある #1362

Open
k-satoda opened this issue Nov 17, 2024 · 14 comments
Open

markdown リストの入れ子が反映されないことがある #1362

k-satoda opened this issue Nov 17, 2024 · 14 comments
Assignees
Labels

Comments

@k-satoda
Copy link
Contributor

erroneous_behavior_for_uninitialized_reads.md の「仕様」でリストの入れ子による
記述があり GitHub 上の表示でも構造が反映されますが、 cpprefjp.github.io 側では
入れ子にならず同じレベルに並ぶ形になっています。

ソース:

- 自動記憶域期間をもつオブジェクトの記憶域は確保時点で「エラー性の値 (erroneous value)」をもつとされ、処理系がプログラムの状態に依存せず決定する何らかの値で埋められる
  - 動的記憶域期間であれば不定値、静的・スレッド記憶域期間であればゼロで埋められる。C++23までは自動記憶域期間も不定値で埋められていた

GitHub 表示

<li>自動記憶域期間をもつオブジェクトの記憶域は確保時点で「エラー性の値 (erroneous value)」をもつとされ、処理系がプログラムの状態に依存せず決定する何らかの値で埋められる
<ul dir="auto">
<li>動的記憶域期間であれば不定値、静的・スレッド記憶域期間であればゼロで埋められる。C++23までは自動記憶域期間も不定値で埋められていた</li>
</ul>
</li>

cpprefjp.github.io:

<li>自動記憶域期間をもつオブジェクトの記憶域は確保時点で「エラー性の値 (erroneous value)」をもつとされ、処理系がプログラムの状態に依存せず決定する何らかの値で埋められる</li>
<li>動的記憶域期間であれば不定値、静的・スレッド記憶域期間であればゼロで埋められる。C++23までは自動記憶域期間も不定値で埋められていた</li>

他の箇所を見て回るとどうもインデントが半角スペース2個だと入れ子にならず
4個だと入れ子になるようです。 site_generator の仕様として変える余地がないところなら
個別修正として該当箇所を半角スペース4個に直しておけばよさそうですが、
変更の余地があるところなら GitHub 上と同じく半角スペース2個で入れ子になるように
しておいたほうがよさそうな気もします。
ここらへん事情など知ってる人がいるかも?ということで一旦 issue にしてみます。

参照:

@faithandbrave
Copy link
Member

4スペースで直しました

@k-satoda
Copy link
Contributor Author

@faithandbrave 修正ありがとうございます。修正をもって close とされたようですが、
表題の「markdown リストの入れ子が反映されないことがある」という件については
特に対応が見られず変わりないようだったので reopen させてもらいます。

今後も発生しそうな話なので、修正あるいは事情を文書化できたらいいなと考えています。

@k-satoda k-satoda reopened this Nov 17, 2024
@faithandbrave
Copy link
Member

Python標準のmarkdownライブラリでHTMLに変換しているので、そのライブラリの仕様でそうなってますね。

https://python-markdown.github.io/

Indentation/Tab Length

The syntax rules clearly state that when a list item consists of multiple paragraphs, “each subsequent paragraph in a list item must be indented by either 4 spaces or one tab” (emphasis added). However, many implementations do not enforce this rule and allow less than 4 spaces of indentation. The implementers of Python-Markdown consider it a bug to not enforce this rule.
構文規則では、リスト項目が複数の段落で構成されている場合、「リスト項目内の後続の各段落は、スペース4つまたはタブ1つ分インデントされなければならない」と明記しています(強調)。しかし、多くの実装ではこのルールが適用されず、4スペース未満のインデントが許されています。Python-Markdownの実装者は、このルールを強制しないことはバグであると考えています。

どこかに書いておきます

@faithandbrave
Copy link
Member

1714d22

  • 箇条書きのインデントとして4スペースのみを許可している (2スペースでは正しくインデントされない)

start_editing.mdにこのように記載しました。

@k-satoda
Copy link
Contributor Author

ありがとうございます。
使用ライブラリの意図的な動作となると簡単に変えられなさそうですね。
事情の文書化、いくらかの再発予防もできたと思うので close とします。

@yohhoy
Copy link
Member

yohhoy commented Nov 17, 2024

FYI: https://github.com/cpprefjp/site/blob/master/NOTICE.md Markdownレンダリングエンジンの仕様(特性)なんですかねぇ(今でもコレを使っている?)

インデントが 4 スペースである

@faithandbrave
Copy link
Member

あ、どこかに書いてあった気はしましたが、そこにありましたか…。
そのドキュメントも一本化したいところです。

specialized.mdの名前を変えて、「cpprefjpのMarkdown記法」みたいにして、制限と拡張をまとめたいですね。やっておきます。

たしかsite_generatorのどこかで、GitHub Flavored Markdownと描画を合わせるために、.mdのインデントを一部変換してたりはしますね。箇条書きのなかでのコードブロックだったと思います。
ただこの件については、多様な書き方を許可すると、それはそれで管理がたいへんなので (一括変換とか検索とか)、制限がついてるのは悪いことではない気がしています。

@faithandbrave
Copy link
Member

specialized.mdからリネームした以下のページに、拡張と制限をまとめました。

https://cpprefjp.github.io/start_editing/markdown_cpprefjp.html

@akinomyoga
Copy link
Member

https://cpprefjp.github.io/start_editing/markdown_cpprefjp.html

元の議論内容と関係ないですが…上のページのセクション "HTMLエンティティを使用できない制限" の中の変換が壊れている気がします。コードブロックの中の実体参照が変換されて、更に地の文が消えている? ように見えます。

ソース

### HTMLエンティティを使用できない制限
```
&reg;
```
のような書き方をすると、cpprefjpではエラーになります。HTML エンティティを使わず、以下のように書いてください。

```
®
```

HTML表示

HTMLエンティティを使用できない制限

®
®

@faithandbrave
Copy link
Member

のような書き方をすると、cpprefjpではエラーになります。HTML エンティティを使わず、以下のように書いてください。

これが表示されない問題は直しました。コードブロック内のHTMLエンティティはなぜこうなるのだろう…。

close状態でコメントし合うのもよくないと思うので、一旦reopenします。

@faithandbrave faithandbrave reopened this Nov 18, 2024
@akinomyoga
Copy link
Member

これが表示されない問題は直しました。

ありがとうございます! これも現 Markdown の制限でしょうか。見落としでなければ、この制限も上記ページに記されていない制限ということになるでしょうか。### コードブロックの後に空行を入れなければならない制限 みたいなセクションもあって良いのでは。

@faithandbrave
Copy link
Member

「コードブロックのあとに空行が必要な制限」を追加しました

@akinomyoga
Copy link
Member

akinomyoga commented Nov 18, 2024

unordered_*/*/insert_range に同様の問題があったので修正しました。他にもあるかもしれません。

edit: プログラムの修飾に関係しているのだとすれば、その時点で認識されない文字列が含まれていた場合に検出してエラーメッセージを出力できないでしょうか (或いは、既にエラーメッセージは出力しているが誰もエラーログをチェックしていないだけ?)。或いは、もし検出できるのだとすればエラーメッセージを出力する代わりに、通常の処理に切り替えれば良いのかもしれませんが。

@faithandbrave
Copy link
Member

エラーにできそうですね。
閉じコードブロック (偶数回目の``` ) のあとの 行頭が* でも- でもなければエラーですね。

site_generatorに手を入れてそのようなMarkdownを修正して実行するのもできそうではあります。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants