Code-Hervorhebung tritt auf, wenn Auto-Hervorhebung nicht aktiviert ist

In unserem Forum haben wir vor kurzem bemerkt, dass Code automatisch hervorgehoben wird, obwohl autohighlight all code deaktiviert ist und highlighted languages leer ist. Das haben wir getan, weil wir viel Code in Sprachen haben, die nicht unterstützt werden. Jetzt wird er jedoch als C# erkannt.

Beispielbeitrag:

2 „Gefällt mir“

Können wir das nächste Woche reproduzieren, @tshenry?

2 „Gefällt mir“

Ich kann das auf Try reproduzieren. Es sieht so aus, als würde die Site-Einstellung autohighlight_all_code nicht beachtet. Die Funktionalität scheint aktiviert zu sein, unabhängig davon, ob die Einstellung angehakt ist oder nicht. Die Einstellung „Hervorgehobene Sprachen

1 „Gefällt mir“

werde mir das morgen ansehen

3 „Gefällt mir“

Ich glaube nicht, dass hier etwas zurückgegangen ist. Höchstens hat es vor meinen verschiedenen Korrekturen vor einigen Wochen nicht richtig funktioniert.

Was hier passiert, ist, dass wir standardmäßig immer auto und nohighlight zur Liste der zulässigen Code-Klassen hinzufügen. Wenn du beim Definieren deines Codeblocks keine Sprache angibst, wird der Wert von default_code_lang verwendet, der standardmäßig auto ist. Wenn du ihn auf nohighlight setzt, solltest du das erwartete Ergebnis erhalten. Beachte jedoch, dass du das HTML der Beiträge neu erstellen musst. Außerdem musst du highlighted_languages wahrscheinlich nicht leeren, da dies keine Auswirkung hat, wenn du nohighlight wählst.

4 „Gefällt mir“

Das passiert bei brandneuen Beiträgen, also hat sich definitiv etwas geändert.

(Und ja, mir ist klar geworden, dass ich keine leere Sprachenliste brauche. Wir bekommen gelegentlich JS- und Python-Code, also lassen wir ihn besser hervorheben, falls jemand Code hinzufügt.)

liefert mir:

Was funktioniert nicht wie erwartet?

Das Problem ist, dass nicht markierte Code-Blöcke weiterhin automatisch hervorgehoben werden, wenn „Alle Code-Blöcke automatisch hervorheben

Nein, das ist nicht der Fall. Und es ist auch nicht der Fehler, den du im OP gemeldet hast.

1 „Gefällt mir“

Gesperrte Codeblöcke (```) erhalten immer eine automatische Hervorhebung, eingerückte Codeblöcke (    ) sind das, was diese Einstellung betrifft.

2 „Gefällt mir“

Ohh. Nun… warum gibt es einen Unterschied? Und kann das geändert werden?

Bei Discourse wurde etwas geändert, da Codeblöcke mit Abgrenzung früher nicht automatisch hervorgehoben wurden. Wir nutzen unser Discourse-Forum nun seit fast zwei Jahren. Bis zum neuesten Update wurden Codeblöcke mit Abgrenzung nicht automatisch hervorgehoben.

Kann das geändert werden? Ja, die Einstellung „Auto-Hervorhebung für alle Codeblöcke

Ja, vielleicht, aber wie gesagt, ich sehe nichts, das nicht wie erwartet funktioniert. Meine Vermutung ist also, dass zuvor etwas versehentlich nicht funktionierte und du dich auf dieses Verhalten verlassen hast.

Ich vermute, es wurde als Sprache erkannt, die nicht korrekt geladen wurde, und landete im Block, ohne hervorgehoben zu werden.

2 „Gefällt mir“

Hmm, okay. Können wir das dann in eine Anfrage umwandeln, dass die Beschreibung (und sogar der Name) der Einstellung „autohighlight all code

1 „Gefällt mir“

Klar, du kannst gerne einen PR erstellen.

Außerdem helfe ich dir gerne, ein Problem zu beheben, falls du eines findest.

2 „Gefällt mir“

Als ich mir meine Konsole angesehen habe, habe ich ebenfalls etwas Verdächtiges gesehen:

Das ist zwar nichts Neues, aber ich denke, unser injizierter Wert nohighlight ist falsch und sollte no-highlight lauten. Das stützt auch meine Vermutung, dass das, was du gesehen hast, als Code erkannt wurde, der nicht gefunden werden konnte, und daher auf no-highlight zurückgegriffen wurde. Ich werde die Änderung vornehmen.

3 „Gefällt mir“

Ich werde einen PR erstellen, um die Beschreibungen zu ändern.

Eine Frage bleibt jedoch offen: Wie konnte C# eine Option sein, wenn die hervorgehobenen Sprachen leer waren? Verhält sich eine leere Einstellung so, als hätte sie die Standardliste?

1 „Gefällt mir“

Ja, ich habe mich das Gleiche gefragt.

Mein Verständnis ist, dass an dieser Zeile: https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/app/lib/highlight-syntax.js#L42

wenn wir diese Klasse entfernen und dann highlightjs bitten, den Codeblock hervorzuheben, wir uns nicht mehr auf Markdown verlassen und dies eine Änderung auf Client-Seite ist, sodass die Einschränkungen für Klassen nicht mehr gelten.

Im Wesentlichen:

  • nicht auto → fügt eine Klasse aus der Liste im generierten Markup hinzu, die von highlightjs verwendet wird
  • auto → fügt lang-auto im generierten Markup hinzu, das dann zur Laufzeit entfernt wird und highlightjs die Entscheidung über die Hervorhebung überlässt

Hm. Das schränkt die Nützlichkeit etwas ein. Ich schaue mal, ob ich eine hilfreiche Präzisierung für die Beschreibung finden kann.

Als weiteren Hinweis: Wir verwenden standardmäßig text, was ein Alias für nohighlight ist, und haben damit gute Erfahrungen gemacht.

Gelegentlich sind zwar einige Fehler aufgetreten, aber insgesamt war dies für uns der beste Ansatz und sieht auch besser aus als raw, zum Beispiel:

```text
jtl_name=$(/usr/local/bin/kubectl exec -it --namespace=$namespace $master_pod -- bash -c "ls -tr /*.jtl" | awk '{sub(/\r$/, ""); print}')
```

Ergebnis:

jtl_name=$(/usr/local/bin/kubectl exec -it --namespace=$namespace $master_pod -- bash -c "ls -tr /*.jtl" | awk '{sub(/\r$/, ""); print}')

Außerdem haben wir im Editor eine benutzerdefinierte Symbolik für den standardmäßigen text-Codeblock mit Tilde-Abgrenzung.

4 „Gefällt mir“