テーマコンポーネントから未加工のコンテンツにアクセスする方法は?

テーマコンポーネントの開発中で、以下のような処理を行いたいと考えています。

[code]
main() {
  printf("Hello World!\n");
}
[/code]

これにより、以下のように出力されます。

main() {
  printf("Hello World!\n");
}

これを実現するために api.decorateCooked() を使用していますが、コンテンツがすでに調理済み(cooked)であるため、上記の例で printf の前のスペースのように「冗長」な空白がすべて削除されてしまいます。

ユーザーが入力した「未調理(uncooked)」のテキストにアクセスする方法はありますか?

明確に申し上げますと、テーマコンポーネントでサポートしたいのは、ユーザーが以下のような記述をした場合です。

[mytag]
main() {
  printf("Hello World!\n");
}
[/mytag]

この [mytag] ... [/mytag] で囲まれたテキストを、テーマコンポーネントが認識し、変換処理を施して置き換えることを可能にしたいのです。

raw(生データ)にアクセスするには、プラグインを使用する必要があります。

ただし、wrap ヘルパーを使用することで、操作可能な div を取得できます。

[wrap=test]
hello world
[/wrap]

これは以下のようにレンダリングされます。

<div class="d-wrap" data-wrap="test">
<p>hello world</p>
</div>
「いいね!」 2

ありがとうございます。

Discourse がホストする無料プランの Discourse インスタンスにカスタムプラグインをインストールすることは可能でしょうか?いずれにせよ、その方法が見つかりませんでした。

テーマコンポーネントに対して raw のサポートを実装することは可能でしょうか?可能であれば、そのための PR を受け付けていただけますか?

wrap ヘルパーは私が求めた動作をしてくれません。これもインデントを削除してしまいます。

残念ながら、無料プラン、スタンダードプラン、ビジネスプランではカスタムプラグインの使用はできません。私たちは複数の顧客をホストするクラスターを使用しており、特定の顧客のみに対してプラグインを実行する仕組みを持っていません。

テーマコンポーネントを介して Markdown 拡張機能を注入する機能については、過去に検討したことがありますが、現時点で具体的な追加計画はありません。実装は非常に困難です。

二重ラッピングはいかがでしょうか?これですべてのインデントが維持されます。

[wrap=test]
```
1
  1
    3
```
[/wrap]

あるいは、以下のようにするだけでも機能するかもしれません。これにより、操作できる明確な要素が得られます。

```custom
test
```
「いいね!」 3

非常に難しいのは、あなたにとってもですか、それとも実装の知識がない私のような人にとってだけですか?どこに難しさがあるのでしょうか?完全なマークダウン拡張機能ではなく、生データへの読み取り専用アクセスなど、より単純なことを行う方が簡単でしょうか?

はい、それは選択肢かもしれません。ありがとうございます。

フロントエンドは raw の投稿コンテンツを取得しません。取得するのは加工済みバージョンのみです。これにより、クライアントへのペイロードが小さくなります。さらに、サーバーが最終的に Markdown から HTML への変換を担当しています。これをすべてブラウザのランタイムで行うと、多くの追加コストがかかり、複雑なセキュリティ上の懸念点が生じます。

「いいね!」 2

@sam ありがとうございます。ご提案のおかげで、ユーザーにとっても非常に使いやすく、見栄えの良い構文が実現できました:

:sunglasses:

「いいね!」 2

念のため言っておきますが、本当にコーヒーブロックが欲しいなら、コードブロックを三つのバッククォートで囲むことができますよね?あなたの例がどの程度メタファーなのか、私には判断できません。

@pfaffman コーヒーブロックとは何のことか分かりませんが、はい、3 つのバッククォートでコードブロックが生成されることは知っています。

なぜ私の例が比喩でなければならないのか分かりません。何に対してですか?私が投稿した画像は、指定されたコードに対して私のテーマコンポーネントが生成するものを実証するためのスクリーンショットです。

「いいね!」 1

申し訳ありません。私のモバイルキーボードでは、コーヒーとコードがほぼ同じ位置にあり、その文章を書くたびに間違えて入力してしまいました!

何度も確認しましたが、あなたの例から、あなたの画像と標準的なコードブロックの違いがわかりません。

テーマコンポーネントが追加したグラフ。

「いいね!」 1

ああ、つまり TeX ではなく、あなたのグラフ描画言語向けの、数学プラグインのようなものが欲しいんですね?

はい、そう思います。Math プラグインは見たことがありませんが、概念は似ているようです。これは Discourse Graphviz と基本的な機能は同じですが、こちらの方がはるかに高度なことができます。例えば、グラフ間のアニメーション遷移や、制御やスタイル設定のための多くのオプションがあります。

「いいね!」 1

また、Discourse Graphviz がありますが、プラグインをインストールできないため、おそらくあなたの問題は解決しないと思います。

ご興味があれば、GitHub リポジトリ です。まず、使い方を詳しく説明するドキュメントを作成する必要があるため、まだどこにも正式にデプロイされていません。

そうすれば動作するようですが、もしかすると何か見落としているのかもしれません。解決策としては、変更を PR として提出していただければ、その後ビジネスプランで利用可能になります。

申し訳ありませんが、意味がわかりません。これはテーマコンポーネントであり、管理者はどのプランを利用しているかに関わらず、Web インターフェースを通じて Discourse インスタンスにインストールできます。

おそらく私は理解できていないのでしょう。しかし、あなたがやりたいことは、Graphvizプラグインを拡張してより多くのGraphviz機能に対応させ、それらをそのプラグインに統合する方が理にかなっているということのようです。

ただ、あなたが何を求めているのかよくわからないので、私の認識が大幅に外れている可能性もあります。

なるほど、ご意図がわかりました。いいえ、無料プランを利用しているため、そのプラグインは使用できず、代わりにテーマコンポーネントを開発しました。追加機能は、既存のプラグインとは異なるライブラリに基づいているため、簡単に追加できる一種のボーナスでした。プラグインとテーマコンポーネントは非常に異なるため、コードの再利用は難しいと思いますが、興味があれば、既存のプラグインに同じ機能を実装することは可能だと思います。

「いいね!」 2