Was ist Syntaxhervorhebung und wie funktioniert sie?

Ich habe festgestellt, dass mein Code beim Rendern manchmal in verschiedenen Farben hervorgehoben wird.

  • Was ist Syntaxhervorhebung?
  • Wie funktioniert es?
  • Warum wird mein Code nicht richtig hervorgehoben?
  • Wie melde ich einen Fehler oder fordere eine neue Sprache an?
  • Wie verwende ich die Syntaxhervorhebung?
  • Welche Sprachen sind derzeit in Stack Exchange verfügbar?

Zurück zu FAQ-Index

Kommentare

  • Ich habe die Frage: Warum werden SE-Inhalte (eine Person) solche grundlegenden Fehler nicht weiter melden? Diese Person Ich werde einmal die gesamte Problemliste von Highlight.js lesen und kann leicht entscheiden, ob es sich um einen Fehler handelt oder nicht. Dies sieht wirklich nicht professionell aus, wenn Sie solche Highlight-Fehler sehen … Die SE hat diese Bibliothek ausgewählt, also denke ich – es liegt in der Verantwortung der SE, darüber zu berichten solche Fehler weiter zu highligt.js – besonders in Situationen, in denen dieser Prozess kompliziert ist (jeder muss alle Problemlisten kennen). Bin ich falsch?
  • Ich muss nach vorhandenen Berichten auf github.com/highlightjs/highlight.js/issues suchen und eventuell neue Fehlerberichte veröffentlichen . Daher habe ich einige Fragen, die hier nicht erwähnt werden. Welche Version von Highlight.js wird auf SE-Sites verwendet? Wie sind Farben vordefiniert? Grundsätzlich weiß ich / nehme an, dass dies von der CSS-Datei verwaltet wird. Ich frage, ob SE-Sites Standardfarben aus dem https://github.com/highlightjs/ -Projekt verwenden oder SE-Sites eigene Farbsätze verwenden. Könnten wir Farbe und Farbton ändern?
  • Ich schaue in die Highlight.js-Demo und wähle dann Language Categories = All und Themes = Stackoverflow Light verwenden genau dieses Thema auf SE-Sites? Welche Sprache wird für lang-default verwendet?

Antwort

Was Ist die Syntaxhervorhebung?

Mit der Syntaxhervorhebung kann Code in Posts basierend auf der Sprache, in der er geschrieben wurde, hervorgehoben werden, um das Lesen zu erleichtern.

Wie funktioniert das?

Stack Exchange verfügt nicht über eine eigene Syntaxhervorhebungs-Engine. Es wird Highlight.js und verwendet möglicherweise nicht unbedingt die neueste Version dieser Bibliothek. Daher können Fehler und Funktionsanforderungen bezüglich der Syntaxhervorhebung nicht von Stack Exchange behandelt werden.

Die Syntaxhervorhebung wird basierend auf -Tags der Vorschau beim Erstellen oder Bearbeiten von Posts zugewiesen, sobald Sie die Eingabe für 5 Sekunden beenden.

Warum wird mein Code nicht richtig hervorgehoben?

1. Überprüfen Sie, ob auf der von Ihnen verwendeten Site die Syntaxhervorhebung aktiviert ist.

Die vollständige Liste ist auf Meta verfügbar. Wenn die Syntaxhervorhebung nicht aktiviert ist Befolgen Sie auf einer Site die Anweisungen in dieser Frage.

2. Überprüfen Sie, ob die Sprache von Highlight unterstützt wird. js

Sehen Sie sich die an Liste der unterstützten Highlights.js-Sprachen . Wenn Ihre Sprache nicht in der Liste enthalten ist, muss sie im Projekt „light.js „erstellt werden, bevor sie von Stack Exchange bereitgestellt werden kann.

Wenn a Die Sprache ist bereits in der Liste enthalten, wird jedoch in Stack Exchange nicht verwendet. Bitte stellen Sie hier in Meta eine Funktionsanforderung, um sie im Netzwerk bereitzustellen.

3. Überprüfen Sie, ob die Sprache von Stack Exchange

Sehen Sie sich die Datei Highlight-loader.js auf dem Entwicklungs-CDN an, öffnen Sie sie in Ihrem bevorzugten Editor und suchen Sie nach dem Sprachhinweis. Wenn Sie nach " dart " suchen, gelangen Sie zu a Zeile bestehend aus hljs.registerLanguage("dart", .... Dies bedeutet, dass lang-dart ein verfügbarer Sprachhinweis ist. Suchen nach " psh " oder " Powershell " gibt keine Ergebnisse zurück, was bedeutet, dass psh von der Stack Exchange-Version von Highlight.js nicht unterstützt wird.

4. Überprüfen Sie, ob für die Tags in der Frage die Syntaxhervorhebung aktiviert ist

Hinter den Kulissen verwendet Stack Exchanges die Tags in der Frage , um die von Ihnen verwendete Sprache zu bestimmen. Jedes Tag verfügt über eine Hervorhebungssprache, die in seinen Eigenschaften angegeben ist. oder keine Sprache. Wenn es mehr als ein Tag gibt, für das eine Hervorhebungssprache angegeben ist, oder wenn für keines der Tags eine angegeben ist, wird eine Standardeinstellung verwendet und Highlight.js wird abgeleitet, welche Sprache am besten zu verwenden ist Das Hervorheben der Sprache, die für die Frage verwendet wird, wird auch für die Antworten verwendet.

Besuchen Sie das Tag „s Wiki Seite. Klicken Sie auf ein Tag (z. B. ") und klicken Sie dann auf " Weitere Informationen … " und der Sprachhinweis (falls vorhanden), der derzeit für dieses Tag verwendet wird, werden unter angezeigt Ganz unten unterhalb der Schaltflächen für das Wiki:

Code Sprache (wird für die Syntaxhervorhebung verwendet): lang-java

Wenn für das Tag keine Hervorhebungssprache angegeben ist, erstellen Sie diese eine im Meta pro Site, damit Ihre Site sie anfordert. (Nur Moderatoren können die Hervorhebungssprache für ein Tag ändern.)

Wie melde ich einen Fehler oder fordere eine neue Sprache an?

Wenn es sich tatsächlich um einen Fehler im Syntax-Textmarker selbst handelt, suchen Sie nach vorhandenen Berichten Überprüfen Sie zuerst, ob es bereits gemeldet wurde. Wenn dies nicht der Fall ist, melden Sie es dort. Für Fehlerkorrekturen und Funktionen, die bereits von Highlight.js implementiert wurden, aber hier nicht funktionieren, warten Sie bitte, da neue Versionen von Highlight.js auf den Websites planmäßig bereitgestellt werden Die neueste Version wurde noch nicht bereitgestellt. (Wenn es nach langer Zeit nicht mehr bereitgestellt wurde, können Sie eine Funktionsanforderung für Meta auslösen, um die Bereitstellung einer neuen Version von Highlight.js anzufordern.)

Beachten Sie, dass Stack Exchange behält diesen Syntax-Textmarker nicht bei (abgesehen von der Installation neuerer Versionen), und durch das Posten von Fehlerberichten oder Funktionsanforderungen hier auf Meta werden diese nicht behoben oder implementiert.

Vor Ihnen Stellen Sie sicher, dass die richtige Hervorhebung aktiviert ist.

Wie verwende ich die Syntaxhervorhebung?

Solange alle Bedingungen erfüllt sind Wenn im Abschnitt Warum wird mein Code nicht korrekt hervorgehoben? erfüllt ist, wird die Hervorhebung automatisch in Codeblöcken aktiviert, die auf den Tags in der Frage basieren. (Siehe 4. Überprüfen Sie, ob die Bei Tags in Ihrer Frage ist die Syntaxhervorhebung oben aktiviert, damit dies funktioniert.) Inline -Code (z. B. this) wird nicht hervorgehoben.

Es ist möglich, Überschreiben Sie explizit die Standard-Hervorhebungssprache, die im Beitrag verwendet wird, mit der Sprache Ihrer Wahl in einem bestimmten Codeblock, indem Sie einen Sprachhinweis über dem Codeblock angeben. Beachten Sie, dass dies nur bei Verwendung der Code-Zaun-Formatierungsmethode (```) unterstützt wird. Ab der -Implementierung von CommonMark wird dies für Codeblöcke mit der Einrückungsmethode mit vier Leerzeichen nicht mehr unterstützt *:

```lang-or-tag-here code goes here ``` 

Sie können entweder einen Sprachcode oder einen tag -Namen im Sprachhinweis zum Aktivieren der Syntaxhervorhebung. Unten finden Sie eine vollständige Liste der von align.js unterstützten Sprachcodes.

Zum Beispiel:

Here is a code block with language code (with "lang-" prefix) as a hint: ```lang-js function greet(person) { return "Hello " + person; } var user = "John Doe"; alert(greet(user)); ``` Here is a code block with tag name (no "lang-" prefix) as a hint: ```typescript var arr = [0, 1, 2]; // will highlight if typescript tag exists ``` 

Wenn Sie dies nicht möchten Um eine Syntaxhervorhebung zu erzielen, können Sie die Sprache lang-none verwenden:

```lang-none [code here] ``` 

Sie können auch einen Sprachhinweis anwenden Um alle Codeblöcke in Ihrem Beitrag zu verwenden, müssen Sie nicht vor jedem einen Hinweis hinzufügen, indem Sie oben in Ihrem Beitrag einen HTML-Kommentar hinzufügen. Der Hinweis wird dann auf alle Codeblöcke in Ihrem Beitrag angewendet, einschließlich derer, die einen Einzug mit vier Leerzeichen oder HTML <pre><code>:

<!-- language-all: lang-or-tag-here --> 

Beachten Sie, dass bei Verwendung einer Frage die Hervorhebungssprache in ihren Antworten nicht überschreibt. Diese werden weiterhin standardmäßig gemäß den Tags der Frage hervorgehoben.


Derzeit in Stack Exchange verfügbare Sprachcodes

Dies ist eine vollständige Liste aller von Ihnen verwendeten Bezeichner kann in dem Sprachhinweis zur Hervorhebung der Syntax verwendet werden. Alle diese Sprachhinweise in jeder Gruppe verweisen auf denselben Textmarker. Andere von Highlight.js festgelegte Sprachaliasnamen funktionieren möglicherweise, aber nur die folgenden Bezeichner werden von Stack Exchange offiziell unterstützt.

  • Standard: Interpretieren Sie den Code und raten Sie lang-default
  • Keine: Verwenden Sie explizit keine Syntaxhervorhebung lang-none, lang-plaintext, lang-text, lang-txt
  • Bash lang-bash, lang-sh, lang-zsh
  • C, C ++ und andere C-Likes lang-c, lang-h, lang-cpp, lang-hpp, lang-c++, lang-h++, lang-cc, lang-hh, lang-cxx, lang-hxx, lang-c-like
  • C # lang-cs, lang-csharp, lang-c#
  • Clojure lang-clojure, lang-clj
  • CoffeeScript lang-coffee, lang-coffeescript, lang-cson, lang-iced
  • CSS lang-css
  • Dart lang-dart
  • Erlang lang-erl, lang-erlang
  • Go lang-go, lang-golang
  • Haskell lang-hs, lang-haskell
  • HTML, XML, XSL et al. lang-html, lang-xml, lang-xsl , lang-xhtml, lang-rss, lang-atom, lang-xjb, lang-xsd, lang-plist, lang-wsf, lang-svg
  • HTTP-Header lang-http, lang-https
  • Ini und TOML lang-ini, lang-toml
  • Java lang-java, lang-jsp
  • JavaScript lang-js, lang-javascript, lang-jsx, lang-mjs, lang-cjs
  • JSON lang-json
  • Kotlin lang-kotlin, lang-kt
  • LaTeX, TeX lang-latex, lang-tex
  • Weniger lang-less
  • Lisp lang-lisp
  • Lua lang-lua
  • Makefile lang-makefile, lang-mk, lang-mak
  • Markdown lang-markdown, lang-md, lang-mkdown, lang-mkd
  • MATLAB lang-matlab
  • Ziel-C lang-objectivec, lang-mm, lang-objc, lang-obj-c
  • OCaml lang-ocaml, lang-ml
  • Pascal, Delphi lang-pascal, lang-delphi, lang-dpr, lang-dfm, lang-pas, lang-freepascal, lang-lazarus, lang-lpr, lang-lfm
  • Perl lang-pl, lang-perl, lang-pm
  • PHP lang-php, lang-php3, lang-php4, lang-php5, lang-php6, lang-php7
  • PHP-Vorlage lang-php-template
  • Protokollpuffer lang-protobuf
  • Python lang-py, lang-python, lang-gyp, lang-ipython
  • R lang-r
  • Ruby lang-rb, lang-ruby, lang-gemspec, lang-podspec, lang-thor, lang-irb
  • Rost lang-rs, lang-rust
  • Scala lang-scala
  • Schema lang-scheme
  • SCSS lang-scss
  • Shell lang-shell, lang-console
  • SQL lang-sql
  • Swift lang-swift
  • TypeScript lang-typescript, lang-ts
  • VHDL lang-vhdl
  • VB.NET lang-vbnet, lang-vb
  • YAML lang-yaml, lang-yml

Alle in einem Beitrag verwendeten Sprachkennungen, die von Highlight.js nicht erkannt werden, werden standardmäßig auf lang-default gesetzt.

Hinweis: Tags

Sie können jedes -Tag angeben, das auf der Site vorhanden ist, und es wird der derzeit mit diesem Tag verknüpfte Sprachcode verwendet (der entweder null (kein Hinweis), default oder ein spezifischer Sprachcode).

Beachten Sie, dass standardmäßig alle Tags beginnen mit none als Sprachcode. Tags mit none als Sprachcode werden ignoriert und auf lang-default.

Sie können auch das einfache Schlüsselwort none verwenden, um manuell keine Syntaxhervorhebung anzugeben, ähnlich wie bei Verwendung von lang-none Code oben.


* Die frühere Methode zum Festlegen einer Hervorhebungssprache kann weiterhin für HTML-Codeblöcke verwendet werden: Platzieren Sie einen HTML-Kommentar <!-- language: lang-or-tag-here --> vor den <pre><code> -Tags und es wird funktionieren.

Auch dieses erstere Die Methode wurde für eingerückte Codeblöcke mit vier Leerzeichen nicht vollständig entfernt, sondern lediglich veraltet. Während sie vorerst für eingerückte Codeblöcke mit vier Leerzeichen noch funktioniert, wird / wird sie möglicherweise in Zukunft entfernt.


Hinweis für Redakteure:

Bitte nicht hinzufügen auf die obige Liste, es sei denn, Sie sind 100% sur e es existiert.

  • Nur weil Sie etwas eingeben und es so aussieht, als wäre es hervorgehoben Richtig bedeutet nicht , dass die Kennung tatsächlich im System vorhanden ist. Beachten Sie, dass ungültige Bezeichner auf default zurückgesetzt werden.

  • Zusätzlich werden mehrere Sprachen als Highlight.js wird möglicherweise von der Stack Exchange-Version von Highlight.js möglicherweise nicht unterstützt separate Module, die möglicherweise nicht in Stack Exchange bereitgestellt werden.

Aufgrund dieser Punkte verlinken Sie bitte auf die Meta-Frage, die Bestätigt das Vorhandensein eines Hinweises in Ihrer Bearbeitungszusammenfassung , wenn Sie der Liste einen neuen Hinweis hinzufügen.

Hinweis für Kommentatoren:

Die Kommentare zu dieser FAQ dienen dazu, eine Klarstellung von etwas anzufordern, das Sie in den FAQ möglicherweise nicht verstehen, damit es behoben werden kann. Bitte fragen Sie NICHT, ob bestimmte Sprachen in Zukunft unterstützt werden. Das ist nicht eine Frage, die wir beantworten können, da Stack Exchange diesen Textmarker nicht verwaltet. Besuchen Sie Highlight.js für Sprachunterstützung.

Kommentare

  • Sollte ' nicht sein, gibt es hier in dieser Antwort eine angegebene Präferenz (keine Regel) für die Verwendung eines Sprachcodes oder eines Tag-Namens (möglicherweise mit einigen Qualifikationsmerkmalen)? Z.B. " Verwenden Sie lieber X als Y, es sei denn, Z. " (Etwas verwandte Frage zu MSO (in Kommentaren) ): Was ' ist der Unterschied zwischen den beiden Code-Formatierungsstilen (Code-Zäune gegenüber eingerückten Blöcken) hinsichtlich der Syntaxhervorhebung ? )
  • und es wird der derzeit mit diesem Tag verknüpfte Sprachcode verwendet. Gibt es irgendwo eine offizielle Liste dieser Zuordnungen?
  • Abschnitt 4, " 4. Überprüfen Sie, ob für die Tags in der Frage die Syntaxhervorhebung aktiviert ist. " enthält alle Informationen, um @JoshGoebel
  • @Josh zu Ihrer direkten Frage herauszufinden , ' glaube nicht, dass es derzeit irgendwo eine Liste gibt, die alle Tags mit der zugehörigen Sprache enthält. ' sieht auch nicht so aus, als ob auf diese Informationen mit SEDE zugegriffen werden kann. ' befindet sich nicht in der Tags-Tabelle.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Deep Theme Powered by WordPress