C++での料理

(初投稿なので、お付き合いください…)

最近、自分用の Discourse フォーラムを立ち上げました:https://crucible.hubbe.net/ ほぼ満足しています。このコミュニティは、主にプロップメイカーが使用する Arduino 型のボードを対象としています。そのため、テンプレート化された C++ コードを頻繁に使用します。特に、「スタイル」と呼ばれる仕組みを使って、ライトの表示方法を設定しています。スタイルは複雑になることが多いため、オンラインのプレビューエディタを作成し、discourse-linkify テーマコンポーネントを使って、スタイルが自動的にエディタへのリンクになるようにしました。discourse-linkify テーマコンポーネントには、URL 文字などを引用符で囲むためのいくつかの軽微な変更が必要でしたが、それは比較的簡単でした。もし関心があれば、それらの変更に対する PR を作成することもできます。

結果はここで確認できます:StylePtr links - The Crucible - The Crucible

しかし、問題があります…
テンプレート化されたコードの一部は、< や > などの文字が多いため HTML のように見え、Discourse がその「タグ」の一部を削除してしまいます。基本的に、< と > で囲まれた未知の単語はすべて削除されるようです。この投稿の次の行には < foo > と書かれますが、スペースは含まれません:

< - ここに foo があります

最初は linkify コンポーネントに何か問題があるのかと思いましたが、調査を進めたところ、linkify が実行される頃にはすでに欠落部分が消えていたようです。つまり、余分なタグは「調理」プロセスのどこかで蒸発してしまったのでしょうか?

コードブロック(三重バッククォートなど)ではタグは生存することが確認できましたが、私の目的としては、それらが 常に 生存することが望ましいです。

しばらくは、discourse/lib/utilities.cs の CODE_BLOCKS_REGEXP を修正すれば十分だと考えていましたが、inCodeBlock は多くの場所で使われていないため、もしかすると間違っているかもしれません。また、プラグインやテーマコンポーネントから実際に CODE_BLOCKS_REGEXP を修正する方法もまだわかりません。

これらのタグを削除している実際のコードは何でしょうか?
それを無効化する最善(最もサポートされている)方法は何か?

また、ユーザーが大きなコードブロックを貼り付けることが多いため、途中の一部が欠落していることに気づきにくい点にも触れておきます。少なくとも、未知のタグが点滅する警告マークなどに変換され、予期せぬ事態が発生したことをユーザーに知らせる方が良いでしょう。

質問:なぜマークダウンのコードブロックを使ってみないのでしょうか?

コードを三重のバッククォートで囲むだけです:` 文字。

このように:

here 
<foo>
is <some> </fooer> </foo>

これが私の投稿の実際の生マークダウンです:https://meta.discourse.org/raw/187974/3


ユーザーに教育する必要がありますが、これはモデレーターとしてのあなたの仕事です。また、後でマークダウンを扱うすべてのユーザーの助けにもなります。

新しいグローバルピン留めトピックを追加することでこれを行うことができます。「このサイトでコードを埋め込む方法」や「このサイトで入力する方法」などのトピックです。

また、彼らをこのリンクに誘導することもできます:Markdown 参考 (commonmark.org)

同じ問題に直面している方のために、このリンクも共有しておきます。

「piratize」プラグインと同じパターンでバッククォートとリンクを追加することで、この課題が解決できるようです。

だって、猫を追い回すよりやるべきことがあるからですよ?
簡単で正しい方法があるなら、人々は 常に 簡単な方を選びます。StylePtr<> テンプレートを整形済みテキストの外に配置することを実際に防止できれば、人々は正しい方法をするよう強制されるでしょうが、どうすればいいのでしょうか?(また、これは非常に強引な解決策のように感じます。StylePtr<> テンプレートについて語る完全に正当な方法まで防いでしまう可能性があります。)

linkify を使って StylePtr<> テンプレートをリンクする現在の解決策も、DOM が非常に異なるため整形済みテキストでは機能しません。しかし、これは少しコーディングすれば多分修正できる些細な問題です。

たぶんそうでしょう。私がやるなら、バックティックがない場合にこのパターンを使って自動的に追加し、その後リンク用にポスト調理(post-cooking)のコールバックを使用すると思います。私の認識が間違っていなければ、それ以外の方法で整形済みテキストの途中にリンクを追加する方法はないはずです。

インラインコードにはバッククォート、コードブロックにはバッククォート 3 つを使用するようユーザーに促すのが最善の解決策です。フォーラムにその内容のピン留めトピックを作成するのはどうでしょうか?

加えて、Unformatted Code Detector を試してみるのもおすすめです。

フォーマットされていないコードを検出するテーマコンポーネントは有望に見えます。
その後、pre 形式のコード内のリンクを処理するテーマコンポーネントを作成する必要がありますが、これはもともと予定していたことです。ぜひ試してみます。

実は、linkify モジュールでマルチライン正規表現サポートを有効にするだけで、希望通りに動作するようになりました。これで問題ないと思います。ただし、フォーマットされていないコード検出器に実際にユーザーが注意を払ってくれることが前提ですが。