BBCode 向けの Markdown 拡張機能

markdown の拡張機能を実装するための bbcode 機能を実装するルールを書く方法を学ぼうとしていますが、説明されていない部分が多すぎて、何が起こっているのか理解するのが非常に難しいです。

また、markdown-it のドキュメントも確認しましたが、非常に簡略化されており、システムの機能の概要を非常に高レベルで説明しているだけのように見えます。具体的な質問は以下の通りです。

  • ガイドにはこの行があります:// standard markdown it inline extension goes here.
    標準的なインライン拡張機能とは何ですか?これは、ruler にプッシュされるルールを定義する場所でしょうか?なぜ false を返すのでしょうか?

  • トークンタイプとは何ですか?'link_open''html_inline' などの例がありますが、これらはどこから来るのでしょうか?利用可能なものの静的なリストはどこかにありますか?新しいものを追加できますか?パーサーはこれらのトークンに対して何をすべきかをどうやって知っているのでしょうか?

これはどのように機能するのでしょうか?パーサーは 'code_inline' が何をすべきかをどうやって知っているのでしょうか?state.push() 関数は何をするもので、どのように使用することを意図しているのでしょうか?

「理解できた!」という感覚に少し近づいていると感じていますが、いくつかの概念を見落としているようです。最も基本的なルールを書いたところ、機能しているようですが、前に進むためにはより良い理解が必要です。ご支援いただければ幸いです!

なぜ、[color] サポートなどを追加する既存の公式 BBCode プラグインを見ていないのですか?

「いいね!」 2

公式の BBCode プラグイン(https://github.com/discourse/discourse-bbcode)を何度も確認してきましたが、まだあまり進展がなく、内部の仕組みを十分に理解できていません。

まず、[table] BBCode の構築から始めようとしています。Markdown にはすでにテーブルのサポートがあることは承知していますが(他の BBCode のサポートが構築できると仮定して)、約 2,000 万件の投稿を Discourse へ移行するため、既存の BBCode に対する後方互換性を適切に機能させる必要があります。また、Markdown でパイプ文字が使用されるため、テーブルを変換するために投稿をスクレイピングすることは事実上不可能です。

現在構築中の table タグは、投稿には存在するものの、スクラバーによって削除され続けているようです(私の推測ですが)。現時点でのコードは以下の通りです。

md.block.bbcode.ruler.push("table", {
    tag: "table",
    wrap: function(token, tagInfo) {
      token.attrs = [['class', "bbcode-table table-style-" + tagInfo.attrs['_default']]];
      return true;
    }
  });

helper.whiteList([
    "table.bbcode-table",
    "table.table-style-*"

他の例に基づいてホワイトリストや wrap 関数の形式を試してみましたが、まだ何も機能していません。そのため、システムの仕組みに関する根本的な理解が不足していると考えています。今後、より一貫して機能させることができるよう、システムの仕組みをより深く理解したいと考えています。

テーブルは、おそらく構築できる中で最も複雑なものの一つです。まずは、はるかに単純なものから始めることを強くお勧めします。

実際、bbcode のテーブルサポートを実装できるとしても、導入しないことをお勧めします。

「いいね!」 2

@Ghan が説明した通り、2000 万スレッド以上の大規模掲示板であるため、サポートしたいシンプルな BB コードのリストがあります。私たちは決して小さなコミュニティではなく、この決定に至るまで簡単なことではありませんでしたが、今後 Discourse が私たちにとって最適なソフトウェアであると判断しました。インポートの問題は解決済みで、移行を阻んでいるのはこの最後のステップをどうするかという点だけです。Discourse や Markdown が完全にサポートしている BB コードは削除する方針なので、テーブルを削除することに納得できます。ただし、テーブルの td や tr などを正しい Markdown 構文に置き換えるのは簡単ではなく、むしろほぼ不可能だと考えています。そのため、リバーク(再構築)が容易でなくても削除することに問題はありません。むしろ、その方法を学ぶことで、他の部分の解決策も見えてくるでしょう。

例えば [h1] は、すべての H タグを対応する数の # に変えるだけで済むため、削除することができました。

Tutorial - RpNation - BBcode Guide | RpNation に完全なリストがあります。また、このスレッドにあるもの以外にも、Markdown 相当の形式への置換が非常に簡単だったため、すでにいくつかの BB コードは削除済みです。

「いいね!」 4

この投稿は2020年のものだと承知していますが、回答がなく(「他のコードを見てください」や「テーブルは難しすぎます」という返答のみだったため)、自分でbbcodeプラグインを作成しており、ドキュメントが全くない状況で苦労したため、お手伝いできることを説明しようと思いました。

あなたの[table] bbcode構文を見ましたが、それは完全に合理的なプラグインであり、単なるラッパーです。真剣に、サムさんはあなたが送ったリンクを見ていないと思います。なぜなら、あなたのテーブルbbcodeフォーマットは、htmlテーブルフォーマットにbbcodeタグを付けたものに過ぎないからです。

この投稿は、これをどのように行うかについて少し説明するのに役立ちました。

現時点では、あなたがやりたいことを説明する時間(そしてそれが実際に機能するかどうかをテストする時間)はありません。そのため、現時点ではhtml_rawhtml_blockトークンタイプが非常に便利であると伝えることができます。また、実際に機能しているかどうかを確認する最善の方法は、wrap関数にconsole.log()を挿入し、コンソールで実際に何が返されているかを確認することです(そして、ディスコースの積極的なサニタイザーを心配することなく、何が機能しているかを確認できます)。

「いいね!」 1

markdown拡張機能で進捗があった後、新しいbbcodeプラグインの開発に着手しましたが、最終的には期待したほど機能しないと判断しました。今年の夏までに最後の3つを完了し、その後すぐに移行したいと考えています。

ただし、テーブルはbbcode版が提供される可能性は低く、ユーザーにはmarkdown版の使用を指示します。誰もテーブルは好きではありません。

それはとても良いですね。bbcodeテーブルは諦めたと聞きましたが、もしよろしければ、動作するようにスクリプトを作成するお手伝いができます。

「いいね!」 1

リポジトリを見に行ったり、PRを作成したり、その他好きなことをしたりしてくれて構いません :)!

「いいね!」 2