Ce este evidențierea sintaxei și cum funcționează?

Am observat că uneori codul meu este evidențiat în culori diferite atunci când este redat.

  • Ce este evidențierea sintaxei?
  • Cum funcționează?
  • De ce nu este evidențiat corect codul meu?
  • Cum raportez o eroare sau solicit o nouă limbă?
  • Cum folosesc evidențierea sintaxică?
  • Ce limbi sunt disponibile în prezent pe Stack Exchange?

Reveniți la Indice de întrebări frecvente

Comentarii

  • Am întrebarea: de ce lucrurile din SE (o persoană) nu vor mai raporta astfel de erori fundamentale? Această persoană va citi odată lista tuturor problemelor de highlight.js și poate decide cu ușurință că este o eroare sau nu. Acest lucru pare foarte neprofesional când vedeți astfel de erori de evidențiere … SE a ales biblioteca respectivă, așa că cred – este responsabilitatea SE de a raporta astfel de erori mai departe de highligt.js – mai ales în situația în care acest proces este complicat (toată lumea trebuie să afle lista tuturor problemelor). greșit?
  • Trebuie să verific rapoartele existente pe github.com/highlightjs/highlight.js/issues și eventual să postez rapoarte de erori noi . Așadar, am câteva întrebări care nu sunt menționate aici. Ce versiune de highlight.js este utilizată pe site-urile SE? Cum sunt predefinite culorile? Practic știu / presupun că acest lucru este menținut de fișierul CSS, întreb dacă Site-urile SE folosesc culori standard din proiectul https://github.com/highlightjs/ sau Site-urile SE folosesc seturi proprii de culori? Am putea schimba culoarea și tonul culorilor?
  • Mă uit la demonstrație highlight.js apoi selectez Language Categories = All și Themes = Stackoverflow Light sunt exact această temă utilizată pe site-urile SE? Ce limbă este utilizată pentru lang-default?

Răspuns

Ce evidențierea sintaxei este?

Evidențierea sintaxei permite evidențierea codului din postări pe baza limbii în care este scris, pentru a ușura citirea.

Cum funcționează?

Stack Exchange nu are propriul motor de evidențiere a sintaxei. Folosește highlight.js și este posibil să nu utilizeze neapărat cea mai recentă versiune a acelei biblioteci. Prin urmare, orice erori și cereri de caracteristici referitoare la evidențierea sintaxei nu pot fi gestionate de Stack Exchange.

Evidențierea sintaxei este atribuită, pe baza etichete , previzualizării atunci când creați sau editați postări imediat ce opriți tastarea timp de 5 secunde.

De ce nu este evidențiat corect codul meu?

1. Verificați dacă site-ul pe care îl utilizați are activată evidențierea sintaxică

Lista completă este disponibilă pe Meta . Dacă evidențierea sintaxei nu este activată pe un site urmează instrucțiunile din această întrebare.

2. Verificați dacă limba este acceptată de highlight.js

Uitați-vă la lista limbilor acceptate de highlight.js . Dacă limba dvs. nu este pe listă, trebuie să fie creată în cadrul proiectului highlight.js înainte de a putea fi implementată de Stack Exchange.

Dacă un limba este deja pe listă, dar nu este utilizată în Stack Exchange, vă rugăm să ridicați o cerere de caracteristică aici pe Meta pentru a o implementa în rețea.

3. Verificați dacă limba este utilizată de Stack Exchange

Uită-te la fișierul highlight-loader.js de pe CDN-ul dev, deschide în editorul tău preferat și caută indiciu de limbă. De exemplu, căutarea " dart " vă aduce la un linie formată din hljs.registerLanguage("dart", .... Aceasta înseamnă că lang-dart este un indiciu de limbă disponibil. Se caută " psh " sau " powershell " nu returnează niciun rezultat, ceea ce înseamnă că psh nu este acceptat de versiunea Stack Exchange a highlight.js.

4. Verificați dacă etichetele de la întrebare au activată evidențierea sintaxică

În culise, Stack Exchanges folosește etichetele de la întrebarea pentru a determina limba pe care o utilizați. Fiecare etichetă are un limbaj de evidențiere specificat în proprietățile sale, sau nu există limbă. Dacă există mai multe etichete care au specificată o limbă de evidențiere sau dacă niciuna dintre etichete nu a specificat una, aceasta folosește o setare implicită și permite să highlight.js să deducă care este cea mai bună limbă de utilizat. Același lucru evidențierea limbajului utilizat la întrebare este, de asemenea, utilizată la răspunsurile sale.

Accesați eticheta respectivă „s . Faceți clic pe o etichetă (cum ar fi " "), apoi faceți clic pe " Aflați mai multe … ", iar sugestia de limbă (dacă există) care este utilizată în prezent pentru acea etichetă va fi afișată la foarte jos , sub butoanele pentru wiki:

Cod limba (utilizată pentru evidențierea sintaxei): lang-java

Dacă eticheta nu are o limbă de evidențiere specificată când ar trebui, creați o pe meta pe site pentru ca site-ul dvs. să o solicite. (Numai moderatorii pot schimba limba de evidențiere pentru o etichetă.)

Cum raportez o eroare sau solicit o nouă limbă?

Dacă este într-adevăr o eroare în evidențiatorul de sintaxă, verificați dacă există rapoarte existente mai întâi pentru a vedea dacă a fost deja raportat; dacă nu, continuați și raportați-l acolo. Pentru remedierile de erori și caracteristicile care au fost deja implementate de highlight.js , dar care nu funcționează aici, vă rugăm să așteptați, deoarece noile versiuni ale highlight.js sunt implementate pe site-uri în mod programat, iar ultima versiune nu a fost încă implementată. (Dacă nu a fost implementat după mult timp, puteți ridica o cerere de caracteristică pe Meta pentru a solicita implementarea unei noi versiuni a highlight.js.)

Rețineți că Stack Exchange nu menține acest marcator de sintaxă (în afară de instalarea versiunilor mai noi ale acestuia) și postarea rapoartelor de erori sau a cererilor de caracteristici care o privesc aici pe Meta nu le va rezolva sau implementa.

Înainte de dvs. faceți orice, asigurați-vă sigur că ați activat evidențierea corectă.

Cum folosesc evidențierea sintaxei?

Atâta timp cât toate condițiile în secțiunea De ce nu este evidențiat corect codul meu? secțiunea de mai sus sunt satisfăcute, evidențierea va intra automat în blocurile de cod pe baza etichetelor de la întrebare. (Vedeți 4. Verificați dacă etichetele din întrebarea dvs. au activat evidențierea sintaxei de mai sus pentru modul în care funcționează.) Codul Inline (de exemplu, this) nu este evidențiat.

Este posibil să înlocuiți în mod explicit limba implicită de evidențiere utilizată în postare cu limba dvs. la alegere într-un anumit bloc de cod, specificând un indiciu de limbă deasupra blocului de cod. Rețineți că acest lucru este acceptat numai atunci când se utilizează metoda de formatare a codului gard de cod (```); începând cu implementarea a CommonMark , nu mai este acceptată utilizarea blocurilor de cod folosind metoda indentare în patru spații *:

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

Puteți utiliza fie un cod de limbă , fie un etichetă nume în indiciu de limbă pentru a activa evidențierea sintaxei. Vedeți mai jos lista completă a codurilor de limbă acceptate de highlight.js.

De exemplu:

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 ``` 

Dacă nu doriți pentru a avea orice evidențiere a sintaxei, puteți utiliza limba lang-none:

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

Puteți aplica, de asemenea, un indiciu de limbă la toate blocurile de cod din postarea dvs., deci nu trebuie să adăugați un indiciu înainte de fiecare, adăugând un comentariu HTML în partea de sus a postării dvs. Sugestia va fi aplicată apoi blocurilor de cod toate din postarea dvs., inclusiv celor care utilizează liniuță în patru spații sau HTML <pre><code>:

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

Rețineți că, atunci când este utilizat la o întrebare, nu suprascrie limba de evidențiere a răspunsurilor sale; acestea vor fi evidențiate în mod implicit în conformitate cu etichetele întrebării.


Codurile de limbă disponibile în prezent pe Stack Exchange

Aceasta este o listă completă a fiecărui identificator pe care îl aveți poate fi folosit în indiciu lingvistic pentru evidențierea sintaxei. Toate aceste indicii lingvistice din fiecare grup indică același evidențiere. Alte aliasuri de limbă setate de highlight.js ar putea funcționa, dar numai următorii identificatori sunt acceptați oficial de Stack Exchange.

  • Implicit: interpretați codul și ghiciți lang-default
  • Niciuna: în mod explicit nu utilizați evidențierea sintaxei lang-none, lang-plaintext, lang-text, lang-txt
  • Bash lang-bash, lang-sh, lang-zsh
  • C, C ++ și alte aprecieri C 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
  • Accesați lang-go, lang-golang
  • Haskell lang-hs, lang-haskell
  • HTML, XML, XSL și colab. lang-html, lang-xml, lang-xsl , lang-xhtml, lang-rss, lang-atom, lang-xjb, lang-xsd, lang-plist, lang-wsf, lang-svg
  • Anteturi HTTP lang-http, lang-https
  • Ini și 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
  • Mai puțin 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
  • Obiectiv-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
  • Șablon PHP lang-php-template
  • Protocol Buffers 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
  • Rugină 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

Orice identificator de limbă utilizat într-o postare care nu este recunoscut de highlight.js va fi funcțional implicit la lang-default.

Sugestie: Etichete

Puteți specifica orice etichetă care există pe site și va utiliza orice cod de limbă este asociat în prezent cu acea etichetă (care poate fi null (fără sugestie), implicit sau un cod de limbă specific ).

Rețineți că în mod implicit toate etichetele încep cu none ca cod de limbă. Etichetele cu none specificate ca cod de limbă vor fi ignorate și vor reveni la lang-default.

De asemenea, puteți utiliza cuvântul cheie simplu none pentru a specifica manual fără evidențierea sintaxei, similar cu utilizarea lang-none cod de mai sus.


* Fosta metodă de specificare a unui limbaj de evidențiere poate fi utilizată în continuare pentru blocurile de cod HTML: plasați un comentariu HTML <!-- language: lang-or-tag-here --> înainte de etichetele <pre><code> și va funcționa.

De asemenea, acest fost metoda nu a fost complet eliminată pentru blocurile de cod indentate cu patru spații, ci doar depreciată. Deși va funcționa pentru moment pe blocurile de cod indentate cu patru spații, poate / va fi eliminată în viitor.


Notă pentru editori:

Vă rugăm să nu adăugați la lista de mai sus, cu excepția cazului în care sunteți 100% sur există.

  • Doar pentru că tastați ceva și arată așa cum este evidențiat corect nu înseamnă că identificatorul există de fapt în sistem. Rețineți că identificatorii invalizi revin la implicit .

  • În plus, mai multe limbi care sunt indicate ca acceptate în Documentația „highlight.js” poate să nu fie de fapt acceptată de versiunea Stack Exchange a highlight.js , așa cum ar putea fi în module separate care nu pot fi implementate pe Stack Exchange.

Datorită acestor puncte, vă rugăm să faceți link către întrebarea Meta care confirmă existența unui indiciu în rezumatul dvs. de editare atunci când adăugați un nou indiciu în listă.

Notă pentru comentatori:

comentariile la acest FAQ sunt pentru a solicita clarificarea a ceva ce s-ar putea să nu înțelegeți în FAQ pentru a putea fi remediat. Vă rugăm să NU întrebați dacă anumite limbi vor fi acceptate în viitor. Aceasta este nu o întrebare la care putem răspunde, deoarece Stack Exchange nu menține acest marcator. Accesați highlight.js pentru asistență lingvistică.

Comentarii

  • Nu ar trebui ca ' să existe o preferință (nu regulă) indicată aici în acest răspuns pentru utilizarea fie a unui cod de limbă , fie a unui nume de etichetă (posibil cu unele calificative)? De exemplu. " Prefer să utilizați X peste Y, cu excepția cazului în care Z. " (Întrebare oarecum legată de MSO (în comentarii ): Care este ' diferența dintre cele două stiluri de formatare a codului (garduri de coduri vs blocuri indentate) în ceea ce privește evidențierea sintaxei ? )
  • și va folosi orice cod de limbă este asociat în prezent cu acea etichetă Există o listă oficială a acestor mapări disponibile oriunde?
  • Secțiunea 4, " 4. Verificați dacă etichetele de la întrebare au activată evidențierea sintaxică " , are toate informațiile pentru a afla @JoshGoebel
  • @Josh La întrebarea dvs. directă , ' nu cred că există o listă oriunde conținând în prezent toate etichetele cu limba asociată. De asemenea, nu ' nu arată că aceste informații sunt accesibile cu ajutorul SEDE, ' nu se află în tabelul cu etichete.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

Deep Theme Powered by WordPress