エスケープされた引用符でのコードハイライト

エスケープされた引用符(シングルクォートとダブルクォートの両方)をコードハイライトが無視しているようです。つまり、コードセクション内の文字列にエスケープされた引用符が含まれている場合、文字列の一部が通常のコードのようにハイライトされます。このフォーラムではコードハイライトが無効になっているように見えるため、最初に気付いた特定のフォーラム投稿へのリンクを以下に示します。


スクリーンショットを撮ったフォーラム投稿へのリンク:https://unofficialnextion.com/t/set-vale-on-page2/1679/3

詳細:

  • 前記のフォーラムはDiscourse v2.9.0.beta9で実行されています。
  • bash、cs、cpp、xml、ini、json、makefile、markdown、python、c、c-likeに対してコードハイライトが有効になっています。デフォルトはcppに設定されています。これらの言語ハイライト設定をデフォルトにリセットしても問題は解決しません。
  • 問題はセーフモードでも発生します。
  • シングルクォート文字列でシングルクォートをエスケープする場合も問題が発生します(ダブルクォート文字列でシングルクォートをエスケープする場合や、その逆は正常に機能します)。

よろしくお願いいたします。
Max

それはhighlightjsライブラリなので、バグがあればそれは上流の問題です。

また、これはcppモードで動作するようですね。

const char* NXT_CMD_END = "\xff\xff\xff";
Serial.print("page2.t0.txt=\"Any text\"");
Serial.print(NXT_CMD_END);

コードブロックの「info string」機能を使用して明示的な言語を設定できます。

```cpp
your code here   
```

これにより、cpp風味のコードブロックが作成されます。

「いいね!」 3

迅速な返信と情報提供ありがとうございます!

確かに、cpp を明示的に設定するとハイライトは機能します。しかし、さらに詳しく調べてみたところ、もう一つ予期せぬ動作を発見しました。

ハイライトされた言語リストから cpp 以外をすべて削除し、デフォルト言語auto に戻しました。結果はやはり間違ったハイライトでした。Firefox のインスペクターを開くと、コードは vbnet として認識されているようでした。これは、ハイライトされた言語のリスト(デフォルトでも、この問題のために試したカスタム言語でも)に一度も入れたことのない言語です。これは想定された動作なのでしょうか?

よろしくお願いいたします。
Max

設定を変更した後、コードブロックを含む投稿を再ベイクしましたか?

「いいね!」 1

ページをリロードしました。フォーラムの投稿自体は、Firefoxを再起動したり、CTRL+F5でページをリロードしたりしても変更されませんでしたが、投稿を編集する際のプレビューは、ページをリロードしたときに変更された設定を使用することに気づきました。

したがって、リストにcppのみ(単純にするため)を設定し、デフォルト言語cppに設定すると、投稿編集プレビューでのコードハイライトは正しくなります。デフォルト言語autoに設定してページを再度リロードすると、前の投稿で説明したように正しくなくなります。

よろしくお願いいたします。
Max

ブラウザを再起動しても解決しません。Discourse では、投稿はサーバー上で一度だけベイク(マークダウンから HTML に変換)され、生成された HTML はデータベースにキャッシュされます。この調理済み投稿を更新するには、「再ベイク」する必要があります。これは、スタッフ ユーザーが投稿のレンチメニューを使用するか、投稿の作成者が投稿の内容を編集することによって行うことができます。

「いいね!」 1

ありがとうございます。プレビュー編集時と同様に、再ベイクしても同じ動作になります。auto は、ハイライトする言語のリストにない言語 (vbnet) を選択します。フォーラム設定またはここで示したように、デフォルトの言語を明示的に cpp に設定すると、以前に報告されたように機能します。
したがって、疑問は残ります。auto はリスト以外の言語を使用するはずですか?

よろしくお願いいたします。
マックス