Vad är syntaxmarkering och hur fungerar det?

Jag märkte att ibland blir min kod markerad i olika färger när den renderas.

  • Vad är syntaxmarkering?
  • Hur fungerar det?
  • Varför markeras inte min kod korrekt?
  • Hur rapporterar jag ett fel eller begär ett nytt språk?
  • Hur använder jag syntaxmarkering?
  • Vilka språk finns för närvarande på Stack Exchange?

Tillbaka till FAQ-index

Kommentarer

  • Jag har fråga: varför SE-saker (en person) kommer inte att rapportera ytterligare sådana grundläggande buggar? kommer en gång att läsa alla problemlistor över highlight.js och kan enkelt bestämma att det är fel eller inte. Det här ser riktigt oprofessionellt ut när du ser sådana markeringsfel … SE valde det biblioteket så jag tror – det är SE ansvar att rapportera sådana buggar vidare till highligt.js – särskilt i situationer när denna process är komplicerad (alla behöver lära känna alla problemlistor). Är jag fel?
  • Jag måste söka efter befintliga rapporter på github.com/highlightjs/highlight.js/issues och eventuellt lägga upp nya felrapporter . Så jag har få frågor som inte nämns här. Vilken version av highlight.js används på SE-webbplatser? Hur fördefinieras färger? Grundläggande vet jag / antar jag att detta underhålls av CSS-filen, jag frågar använder SE-webbplatser standardfärger från https://github.com/highlightjs/ -projekt eller använder SE Sites egna färger? Kan vi ändra färg och färgton?
  • Jag tittar på highlight.js demo och sedan väljer jag Language Categories = All och Themes = Stackoverflow Light är detta tema exakt samma som används på SE-webbplatser? Vilket språk används för lang-default?

Svar

Vad är syntaxmarkering?

Syntaxmarkering gör det möjligt att markera kod i inlägg baserat på språket det är skrivet på, för att göra det lättare att läsa.

Hur fungerar det?

Stack Exchange har ingen egen syntaxmarkeringsmotor. Den använder highlight.js , och kanske inte nödvändigtvis använder den senaste versionen av det biblioteket. Därför kan inga buggar och funktionsförfrågningar angående syntaxmarkering hanteras av Stack Exchange.

Syntaxmarkering tilldelas, baserat på -taggar , till förhandsgranskningen när du skapar eller redigerar inlägg så snart du slutar skriva i 5 sekunder.

Varför är inte min kod markerad korrekt?

1. Kontrollera att webbplatsen du använder har syntaxmarkering aktiverad

Hela listan är tillgänglig på Meta . Om syntaxmarkering inte är aktiverad på en webbplats följer instruktionerna i den här frågan.

2. Kontrollera att språket stöds av highlight.js

Titta på lista över språk som stöds av highlight.js . Om ditt språk inte finns på listan måste det skapas inom projektet highlight.js innan det kan distribueras av Stack Exchange.

Om en språket finns redan på listan men används inte på Stack Exchange, vänligen ta upp en funktionsförfrågan här på Meta för att distribuera det i nätverket.

3. Kontrollera att språket används av Stack Exchange

Titta på highlight-loader.js -filen på dev CDN, öppna i din favoritredigerare och sök efter språktips. Till exempel att söka efter " dart " tar dig till en rad som består av hljs.registerLanguage("dart", .... Detta betyder att lang-dart är en tillgänglig språkanvisning. Söker efter " psh " eller " powershell " returnerar inte några resultat, vilket innebär att psh inte stöds av Stack Exchange-versionen av highlight.js.

4. Kontrollera att taggarna i frågan har syntaxmarkering aktiverad

Bakom kulisserna använder Stack Exchanges taggarna i frågan för att bestämma språket du använder. Varje tagg har ett markeringsspråk som anges i dess egenskaper, eller inget språk. Om det finns mer än en tagg som har ett markeringsspråk specificerat, eller om ingen av taggarna har angett en, använder den en standard och låter highlight.js dra slutsatsen vad som är det bästa språket att använda. Samma markeringsspråk som används i frågan används också i dess svar.

Besök den taggen ”s wiki sida. Klicka på en tagg (t.ex. " "), klicka sedan på " Läs mer … " och språktips (om någon) som för närvarande används för den taggen visas på längst ner , under knapparna för wiki:

Kod språk (används för syntaxmarkering): lang-java

Om taggen inte har ett markeringsspråk specificerat när det borde, skapa en på meta per webbplats för att din webbplats ska begära den. (Endast moderatorer kan ändra markeringsspråket för en tagg.)

Hur rapporterar jag ett fel eller begär ett nytt språk?

Om det verkligen är ett fel i syntaxmarkören själv, leta efter befintliga rapporter först för att se om det redan har rapporterats, om det inte har gått vidare och rapportera det där. För felkorrigeringar och funktioner som redan har implementerats av highlight.js men inte fungerar här, vänta, eftersom nya versioner av highlight.js distribueras på webbplatserna enligt schemalagd basis, och senaste versionen har ännu inte distribuerats. (Om den inte har distribuerats efter lång tid kan du höja en funktionsbegäran på Meta för att begära att en ny version av highlight.js distribueras.)

Tänk på att Stack Exchange upprätthåller inte den här syntaxmarkeringen (förutom att installera nyare versioner av den), och att publicera felrapporter eller funktionsförfrågningar angående den här på Meta kommer inte att få dem fixade eller implementerade. gör vad som helst, se till att se till att du har rätt markering aktiverad.

Hur använder jag syntaxmarkering?

Så länge alla villkor är i avsnittet Varför är inte min kod korrekt markerad? avsnittet ovan är nöjda, markeringen kommer att starta automatiskt på kodblock baserat på taggarna i frågan. (Se 4. Kontrollera taggar på din fråga har syntaxmarkering aktiverat ovan för hur detta fungerar.) Inline -kod (t.ex. this) är inte markerad.

Det är möjligt att åsidosätta uttryckligen det standardmarkeringsspråk som används i inlägget med ditt språk i ett specifikt kodblock, genom att ange en språkanvisning ovanför kodblocket. Observera att detta endast stöds när du använder kodstaket (```) för kodformatering; från och med -implementeringen av CommonMark stöds inte längre att göra det på kodblock med metoden med fyra mellanslag indrag *:

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

Du kan använda antingen en språkkod eller ett tagg namn i språktipset för att aktivera syntaxmarkering. Se nedan för den kompletta listan över highlight.js-stödda språkkoder.

Till exempel:

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

Om du inte vill om du vill ha syntaxmarkering kan du använda lang-none -språket:

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

Du kan också använda en språktips till alla kodblock i ditt inlägg, så du behöver inte lägga till en ledtråd före varje genom att lägga till en HTML-kommentar högst upp i ditt inlägg. Tipsen kommer sedan att tillämpas på alla kodblock i ditt inlägg, inklusive de som använder fyra mellanslag eller HTML <pre><code>:

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

Observera att när det används på en fråga inte åsidosätter det markeringsspråket på dess svar; de kommer fortfarande att markeras som standard enligt frågaens taggar.


Språkkoder som för närvarande finns tillgängliga på Stack Exchange

Detta är en fullständig lista över alla identifierare som du kan använda i språktipsen för syntaxmarkering. Alla dessa språkintips i varje grupp pekar på samma överstrykningspenna. Andra språkalias som anges av highlight.js kan fungera, men endast följande identifierare stöds officiellt av Stack Exchange.

  • Standard: tolka koden och gissa lang-default
  • Ingen: använd uttryckligen ingen syntaxmarkering lang-none, lang-plaintext, lang-text, lang-txt
  • Bash lang-bash, lang-sh, lang-zsh
  • C, C ++ och andra C-gillar 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
  • 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-rubriker lang-http, lang-https
  • Ini och 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
  • Mindre 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
  • PHP-mall lang-php-template
  • Protokollbuffertar 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
  • Skal 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

Alla språkidentifierare som används i ett inlägg som inte känns igen av highlight.js kommer funktionellt att vara lang-default.

Tips: Taggar

Du kan ange vilken -tagg som finns på webbplatsen, och den använder vilken språkkod som för närvarande är associerad med den taggen (som kan vara antingen null (ingen ledtråd), standard eller en specifik språkkod).

Tänk på att som standard alla taggar börjar med none som språkkod. Taggar med none som anges som språkkod ignoreras och återgår till lang-default.

Du kan också använda det vanliga none nyckelordet för att manuellt ange ingen syntaxmarkering, liknande att använda lang-none kod ovan.


* Den tidigare metoden för att ange ett markeringsspråk kan fortfarande användas för HTML-kodblock: placera en HTML-kommentar <!-- language: lang-or-tag-here --> före <pre><code> -taggarna och det fungerar.

Den här tidigare metoden har inte tagits bort helt för kodblock med fyra mellanslag, men bara föråldrad. Även om den fortfarande kommer att fungera på kodblock med fyra mellanslag kan / kommer den att tas bort i framtiden.


Anmärkning till redaktörerna:

Lägg inte till till listan ovan om du inte är 100% säker e det finns.

  • Bara för att du skriver in något och det ser ut som om det är markerat korrekt betyder inte att identifieraren faktiskt finns i systemet. Tänk på att ogiltiga identifierare återgår till standard .

  • Dessutom finns det flera språk som anges som stöds i highlight.js dokumentation kanske inte stöds av Stack Exchange-versionen av highlight.js , eftersom de kan vara i separata moduler som inte kan distribueras på Stack Exchange.

På grund av dessa punkter vänligen länka till Meta-frågan som bekräftar att det finns en ledtråd i din redigeringsöversikt när du lägger till en ny ledtråd till listan.

Anmärkning till kommentatorer:

kommentarer på denna FAQ är för att begära klargörande av något du kanske inte förstår i FAQ så att det kan fixas. Vänligen INTE fråga om vissa språk kommer att stödjas i framtiden. Det är inte en fråga vi kan svara på eftersom Stack Exchange inte behåller denna överstrykningspenna. Besök highlight.js för språkstöd.

Kommentarer

  • Bör ' det finns en angiven preferens (inte regel) här i det här svaret för att använda antingen en språkkod eller ett taggnamn (eventuellt med vissa kvalificeringar)? T.ex. " Föredrar att använda X över Y, såvida inte Z. " (Något relaterad fråga om MSO (i kommentarer ): Vad ' är skillnaden mellan de två kodformateringsstilarna (kodstängsel mot indragna block) angående syntaxmarkering ? )
  • och den kommer att använda vilken språkkod som för närvarande är associerad med den taggen Finns det en officiell lista över dessa mappningar tillgänglig någonstans?
  • Avsnitt 4, " 4. Kontrollera att taggarna i frågan har syntaxmarkering aktiverad " , har all information för att ta reda på @JoshGoebel
  • @Josh Till din direkta fråga Jag tror inte ' att det finns en lista var som helst för närvarande innehåller alla taggar med tillhörande språk. Det ser inte heller ut ' att den här informationen är tillgänglig med SEDE, den ' finns inte i taggtabellen.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *

Temat Deep drivs med WordPress