Che cosè levidenziazione della sintassi e come funziona?

Ho notato che a volte il mio codice viene evidenziato con colori diversi durante il rendering.

  • Che cosè levidenziazione della sintassi?
  • Come funziona?
  • Perché il mio codice non viene evidenziato correttamente?
  • Come posso segnalare un bug o richiedere una nuova lingua?
  • Come si usa levidenziazione della sintassi?
  • Quali lingue sono attualmente disponibili su Stack Exchange?

Torna a Indice delle FAQ

Commenti

  • Ho una domanda: perché le cose di SE (una persona) non segnaleranno ulteriormente questi bug fondamentali? leggerà una volta lelenco di tutti i problemi di highlight.js e potrà facilmente decidere che si tratta di un bug o meno. Sembra davvero poco professionale quando si vedono questi bug di evidenziazione … LSE ha scelto quella libreria quindi penso che sia responsabilità di SE segnalarlo tali bug oltre a highligt.js, specialmente in situazioni in cui questo processo è complicato (tutti devono conoscere lelenco di tutti i problemi). sbagliato?
  • Devo controllare i rapporti esistenti su github.com/highlightjs/highlight.js/issues ed eventualmente pubblicare nuovi rapporti di bug . Quindi ho poche domande non menzionate qui. Quale versione di highlight.js viene utilizzata sui siti SE? Come sono predeterminati i colori? Fondamentalmente so / suppongo che questo sia mantenuto dal file CSS, chiedo se SE Sites usa i colori standard dal progetto https://github.com/highlightjs/ o SE Sites usa i propri set di colori? Possiamo cambiare il colore e la tonalità dei colori?
  • Guardo nella highlight.js demo e seleziono Language Categories = All e Themes = Stackoverflow Light questo tema è esattamente lo stesso utilizzato sui siti SE? Quale lingua viene utilizzata per lang-default?

Risposta

Cosa è levidenziazione della sintassi?

Levidenziazione della sintassi consente di evidenziare il codice nei post in base alla lingua in cui è scritto, per renderlo più facile da leggere.

Come funziona?

Stack Exchange non dispone di un proprio motore di evidenziazione della sintassi. Utilizza highlight.js e potrebbe non utilizzare necessariamente lultima versione di quella libreria. Pertanto, eventuali bug e richieste di funzionalità relative allevidenziazione della sintassi non possono essere gestiti da Stack Exchange.

Levidenziazione della sintassi viene assegnata, in base ai tag , allanteprima durante la creazione o la modifica di post non appena si interrompe la digitazione per 5 secondi.

Perché il mio codice non viene evidenziato correttamente?

1. Verifica che il sito che stai utilizzando abbia levidenziazione della sintassi abilitata

Lelenco completo è disponibile su Meta . Se levidenziazione della sintassi non è abilitata su un sito segui le istruzioni in questa domanda.

2. Verifica che la lingua sia supportata da highlight.js

Guarda il elenco delle lingue supportate da highlight.js . Se la tua lingua non è nellelenco, è necessario crearla allinterno del progetto highlight.js prima di poter essere distribuita da Stack Exchange.

Se un la lingua è già nellelenco ma non è utilizzata su Stack Exchange, invia una richiesta di funzionalità qui su Meta per averla distribuita sulla rete.

3. Verifica che la lingua sia utilizzata da Stack Exchange

Guarda il file highlight-loader.js nella CDN dev, aprilo nel tuo editor preferito e cerca il suggerimento sulla lingua. Ad esempio, la ricerca di " dart " ti porta a riga composta da hljs.registerLanguage("dart", .... Ciò significa che lang-dart è un suggerimento per la lingua disponibile. Ricerca di " psh " o " powershell " non restituisce alcun risultato, il che significa che psh non è supportato dalla versione Stack Exchange di highlight.js.

4. Controlla che i tag sulla domanda abbiano levidenziazione della sintassi abilitata

Dietro le quinte, Stack Exchanges utilizza i tag sulla domanda per determinare la lingua che stai utilizzando. Ogni tag ha una lingua di evidenziazione specificata nelle sue proprietà, o nessuna lingua. Se è presente più di un tag con una lingua di evidenziazione specificata o se nessuno dei tag ne ha una specificata, utilizza un valore predefinito e consente a highlight.js di dedurre qual è la lingua migliore da utilizzare. Lo stesso levidenziazione della lingua utilizzata nella domanda viene utilizzata anche nelle sue risposte.

Visita il tag “s pagina wiki . Fai clic su un tag (ad esempio " "), quindi fai clic su " Ulteriori informazioni … " e il suggerimento sulla lingua (se presente) attualmente utilizzato per quel tag verrà visualizzato in molto in basso , sotto i pulsanti per il wiki:

Codice lingua (usata per levidenziazione della sintassi): lang-java

Se il tag non ha una lingua per levidenziazione specificata quando dovrebbe, crea una nel meta per sito affinché il tuo sito lo richieda. (Solo i moderatori possono modificare la lingua di evidenziazione per un tag).

Come faccio a segnalare un bug o a richiedere una nuova lingua?

Se si tratta effettivamente di un bug nellevidenziatore di sintassi stesso, controlla i rapporti esistenti prima per vedere se è già stato segnalato; se non lo è, vai avanti e segnalalo lì. Per le correzioni di bug e le funzionalità che sono già implementate da highlight.js ma non funzionano qui, attendere, poiché le nuove versioni di highlight.js vengono distribuite sui siti in base a una pianificazione e il lultima versione non è stata ancora distribuita. (Se non è stato distribuito dopo molto tempo, puoi inviare una richiesta di funzionalità su Meta per richiedere che venga distribuita una nuova versione di highlight.js.)

Tieni presente che Stack Exchange non mantiene questo evidenziatore di sintassi (a parte linstallazione di versioni più recenti di esso), e la pubblicazione di segnalazioni di bug o richieste di funzionalità che lo riguardano qui su Meta non li risolverà o implementerà.

Prima di te fare qualsiasi cosa, assicurati di aver attivato levidenziazione corretta.

Come uso levidenziazione della sintassi?

Purché tutte le condizioni nella sezione Perché il mio codice non viene evidenziato correttamente? sopra sono soddisfatte, levidenziazione si avvierà automaticamente sui blocchi di codice in base ai tag sulla domanda. (Vedi 4. Controlla che il i tag sulla tua domanda hanno levidenziazione della sintassi abilitata sopra per come funziona.) Il codice Inline (ad es. this) non è evidenziato.

È possibile sovrascrivi esplicitamente la lingua di evidenziazione predefinita in uso nel post con la tua lingua preferita in un blocco di codice specifico, specificando un suggerimento di lingua sopra il blocco di codice. Notare che questo è supportato solo quando si utilizza il metodo di formattazione del codice (```); a partire dallimplementazione di CommonMark , questa operazione su blocchi di codice che utilizzano il metodo di rientro a quattro spazi non è più supportata *:

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

Puoi utilizzare un codice lingua o un tag nome nel suggerimento della lingua per attivare levidenziazione della sintassi. Di seguito è riportato lelenco completo dei codici lingua supportati da highlight.js.

Ad esempio:

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

Se non “vuoi per avere levidenziazione della sintassi, puoi utilizzare la lang-none lingua:

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

Puoi anche applicare un suggerimento per la lingua a tutti i blocchi di codice nel tuo post, quindi non devi aggiungere un suggerimento prima di ciascuno, aggiungendo un commento HTML nella parte superiore del tuo post. Il suggerimento verrà quindi applicato a tutti i blocchi di codice allinterno del tuo post, compresi quelli che utilizzano un rientro di quattro spazi o HTML <pre><code>:

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

Nota che quando viene utilizzato su una domanda, non sovrascrive il linguaggio di evidenziazione nelle sue risposte; quelli saranno ancora evidenziati per impostazione predefinita secondo i tag della domanda.


Codici lingua attualmente disponibili su Stack Exchange

Questo è un elenco completo di tutti gli identificatori può essere utilizzato nel suggerimento di lingua per levidenziazione della sintassi. Tutti i suggerimenti di lingua in ogni gruppo puntano allo stesso evidenziatore. Altri alias di lingua impostati da highlight.js potrebbero funzionare, ma solo i seguenti identificatori sono ufficialmente supportati da Stack Exchange.

  • Predefinito: interpreta il codice e indovina lang-default
  • Nessuno: esplicitamente non utilizzare levidenziazione della sintassi lang-none, lang-plaintext, lang-text, lang-txt
  • Bash lang-bash, lang-sh, lang-zsh
  • C, C ++ e altri C-like 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
  • Vai lang-go, lang-golang
  • Haskell lang-hs, lang-haskell
  • HTML, XML, XSL e altri. lang-html, lang-xml, lang-xsl , lang-xhtml, lang-rss, lang-atom, lang-xjb, lang-xsd, lang-plist, lang-wsf, lang-svg
  • Intestazioni HTTP lang-http, lang-https
  • Ini e 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
  • Meno 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
  • Objective-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
  • Modello PHP lang-php-template
  • Protocol Buffer 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
  • Rust 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

Tutti gli identificatori di lingua utilizzati in un post che non vengono riconosciuti da highlight.js funzioneranno per impostazione predefinita su lang-default.

Suggerimento: tag

Puoi specificare qualsiasi tag esistente sul sito e utilizzerà qualsiasi codice lingua attualmente associato a tale tag (che può essere null (nessun suggerimento), predefinito o un codice lingua specifico ).

Tieni presente che per impostazione predefinita tutti i tag iniziano con none come codice lingua. I tag con none specificato come codice lingua verranno ignorati e torneranno a lang-default.

Puoi anche utilizzare la semplice parola chiave none per non specificare manualmente levidenziazione della sintassi, simile allutilizzo del lang-none codice sopra.


* Il precedente metodo per specificare una lingua di evidenziazione può ancora essere utilizzato per i blocchi di codice HTML: inserisci un commento HTML <!-- language: lang-or-tag-here --> prima dei tag <pre><code> e funzionerà.

Inoltre, questo precedente Il metodo non è stato completamente rimosso per i blocchi di codice rientrati di quattro spazi, ma semplicemente deprecato. Anche se per il momento funzionerà ancora su blocchi di codice rientrati di quattro spazi, potrebbe / verrà rimosso in futuro.


Nota per gli editori:

Si prega di non aggiungere allelenco sopra a meno che tu non sia al 100% sur e esiste.

  • Solo perché digiti qualcosa e sembra che sia evidenziato correttamente non significa che lidentificatore esiste effettivamente nel sistema. Tieni presente che gli identificatori non validi tornano a essere predefiniti .

  • Inoltre, diverse lingue indicate come supportate in la documentazione di highlight.js potrebbe non essere effettivamente supportata dalla versione Stack Exchange di highlight.js , in quanto potrebbero essere in moduli separati che potrebbero non essere distribuiti su Stack Exchange.

A causa di questi punti, si prega di collegarsi alla domanda Meta che conferma lesistenza di un suggerimento nel riepilogo delle modifiche quando si aggiunge un nuovo suggerimento allelenco.

Nota per i commentatori:

Il i commenti su questa FAQ servono per richiedere chiarimenti su qualcosa che potresti non capire nelle FAQ in modo che possa essere risolto. NON chiedere se alcune lingue saranno supportate in futuro. Questa è non una domanda a cui possiamo rispondere perché Stack Exchange non mantiene questo evidenziatore. Visita highlight.js per il supporto linguistico.

Commenti

  • ' t non dovrebbe essere indicata una preferenza (non regola) qui in questa risposta per utilizzare un codice lingua o un nome tag (possibilmente con alcuni qualificatori)? Per esempio. " Preferisco usare X su Y, a meno che Z. " (domanda piuttosto correlata su MSO (nei commenti ): Qual è ' la differenza tra i due stili di formattazione del codice (code-fence vs blocchi indentati) per quanto riguarda levidenziazione della sintassi ? )
  • e utilizzerà il codice della lingua attualmente associato a quel tag Cè un elenco ufficiale di queste mappature disponibile ovunque?
  • Sezione 4, " 4. Controlla che i tag sulla domanda abbiano levidenziazione della sintassi abilitata " , abbia tutte le informazioni per scoprire @JoshGoebel
  • @Josh Alla tua domanda diretta , Tuttavia, ' non credo che ci sia un elenco ovunque attualmente contenente tutti i tag con la lingua associata. Inoltre, ' non sembra che queste informazioni siano accessibili tramite SEDE, ' non sono nella tabella dei tag.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Deep Theme Powered by WordPress