Hva er syntaksmarkering og hvordan fungerer det?

Jeg la merke til at noen ganger blir koden min uthevet i forskjellige farger når den blir gjengitt.

  • Hva er syntaksutheving?
  • Hvordan fungerer det?
  • Hvorfor utheves ikke koden min riktig?
  • Hvordan rapporterer jeg en feil eller ber om et nytt språk?
  • Hvordan bruker jeg syntaksmarkering?
  • Hvilke språk er for øyeblikket tilgjengelige på Stack Exchange?

Gå tilbake til FAQ-indeks

Kommentarer

  • Jeg har spørsmål: hvorfor SE-ting (en person) ikke vil rapportere om ytterligere slike grunnleggende feil? vil en gang lese hele utgavelisten over highlight.js og kan enkelt bestemme at det er feil eller ikke. Dette ser veldig ikke-profesjonelt ut når du ser slike høydepunktfeil … SE valgte det biblioteket så jeg tror – det er SE ansvar å rapportere slike feil videre til highligt.js – spesielt i en situasjon når denne prosessen er komplisert (alle trenger å bli kjent med hele listen over problemer). Er jeg feil?
  • Jeg må se etter eksisterende rapporter på github.com/highlightjs/highlight.js/issues og eventuelt legge ut nye feilrapporter. . Så jeg har få spørsmål som ikke er nevnt her. Hvilken versjon av highlight.js brukes på SE-nettsteder? Hvordan farger er forhåndsdefinert? I utgangspunktet vet jeg / antar at dette er vedlikeholdt av CSS-filen. Jeg spør om SE Sites bruker standardfarger fra https://github.com/highlightjs/ prosjekt eller SE Sites bruker egne sett med farger? Kunne vi endre farge og tone i farger?
  • Jeg ser på highlight.js demo så velger jeg Language Categories = All og Themes = Stackoverflow Light er dette temaet nøyaktig det samme som brukes på SE-nettsteder? Hvilket språk brukes til lang-default?

Svar

Hva er syntaks utheving?

Syntaks utheving gjør at kode i innlegg kan utheves basert på språket det er skrevet på, for å gjøre det lettere å lese.

Hvordan fungerer det?

Stack Exchange har ikke sin egen syntaksmarkeringsmotor. Den bruker highlight.js , og bruker kanskje ikke nødvendigvis den siste utgivelsen av biblioteket. Derfor kan ikke eventuelle feil og funksjonsforespørsler angående syntaksfremheving håndteres av Stack Exchange.

Syntaksfremheving tildeles, basert på -koder , til forhåndsvisningen når du oppretter eller redigerer innlegg så snart du slutter å skrive i 5 sekunder.

Hvorfor er ikke koden min uthevet riktig?

1. Kontroller at siden du bruker har syntaksfremheving aktivert

Den komplette listen er tilgjengelig på Meta . Hvis syntaksfremheving ikke er aktivert på et nettsted følger instruksjonene i dette spørsmålet.

2. Kontroller at språket støttes av highlight.js

Se på liste over språk som støttes av highlight.js . Hvis språket ditt ikke er på listen, må det opprettes i highlight.js-prosjektet før det kan distribueres av Stack Exchange.

Hvis en språk er allerede på listen, men ikke brukt på Stack Exchange, vennligst ta opp en funksjonsforespørsel her på Meta for å få den distribuert i nettverket.

3. Kontroller at språket brukes av Stack Exchange

Se på highlight-loader.js -filen på dev CDN, åpne i favorittredigereren din, og søk etter språkhint. For eksempel søker etter " pil " bringer deg til en linje bestående av hljs.registerLanguage("dart", .... Dette betyr at lang-dart er et tilgjengelig språkhint. Søker etter " psh " eller " powershell " returnerer ikke noen resultater, noe som betyr at psh ikke støttes av Stack Exchange-versjonen av highlight.js.

4. Kontroller at kodene på spørsmålet har syntaksmarkering aktivert

Bak kulissene bruker Stack Exchanges kodene på spørsmålet for å bestemme språket du bruker. Hver tag har et uthevingsspråk som er spesifisert i egenskapene, eller ikke noe språk. Hvis det er mer enn en kode som har et uthevingsspråk spesifisert, eller hvis ingen av kodene har en spesifisert, bruker den en standard og lar highlight.js utlede hva som er det beste språket å bruke. Det samme fremhever språk som brukes på spørsmålet brukes også på svarene.

Besøk den taggen «s wiki side. Klikk på en kode (for eksempel " "), og klikk deretter " Lær mer … ", og eventuelt språkhint som for øyeblikket brukes for den taggen, vises på helt nederst , under knappene for wiki:

Kode språk (brukes til syntaksmarkering): lang-java

Hvis taggen ikke har et fremhevingsspråk spesifisert når det skal, må du opprette en på metaen per side for nettstedet ditt for å be om det. (Bare moderatorer kan endre uthevingsspråket for en tag.)

Hvordan rapporterer jeg en feil eller ber om et nytt språk?

Hvis det virkelig er en feil i selve syntaksen, kan du se etter eksisterende rapporter først for å se om det allerede er rapportert, hvis det ikke har vært, fortsett og rapporter det der. For feilrettinger og funksjoner som allerede er implementert av highlight.js men ikke fungerer her, vennligst vent, ettersom nye versjoner av highlight.js distribueres på nettstedene på en planlagt basis, og siste versjon har ikke blitt distribuert ennå. (Hvis den ikke har blitt distribuert etter lang tid, kan du heve en funksjonsforespørsel på Meta for å be om at en ny versjon av highlight.js blir distribuert.)

Husk at Stack Exchange opprettholder ikke denne syntaksmarkeringen (bortsett fra å installere nyere versjoner av den), og å legge ut feilrapporter eller funksjonsforespørsler angående den her på Meta, vil ikke få dem løst eller implementert.

Før du gjør hva som helst, sørg for at at du har fått riktig utheving slått på.

Hvordan bruker jeg syntaksmarkering?

Så lenge alle forholdene i Hvorfor blir ikke koden min uthevet riktig? delen ovenfor er fornøyde, vil utheving automatisk sparke inn på kodeblokker basert på kodene på spørsmålet. (Se 4. Kontroller at tagger på spørsmålet ditt har syntaksutheving aktivert ovenfor for hvordan dette fungerer.) Inline kode (f.eks. this) er ikke uthevet.

Det er mulig å overstyre eksplisitt standard markeringsspråk som brukes i innlegget med ditt valgte språk i en bestemt kodeblokk, ved å spesifisere et språkhint over kodeblokken. Merk at dette bare støttes når du bruker kodegjerde (```) metoden for kodeformatering; fra og med implementeringen av CommonMark , støttes ikke lenger det å gjøre det på kodeblokker ved hjelp av metoden med fire mellomrom innrykk *:

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

Du kan bruke enten en språkkode eller et tag navn i språkhintet for å aktivere syntaksmarkering. Se nedenfor for den komplette listen over highlight.js-støttede språkkoder.

For eksempel:

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

Hvis du ikke vil ha Hvis du vil ha syntaksmarkering, kan du bruke lang-none -språket:

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

Du kan også bruke et språkhint til alle kodeblokker i innlegget ditt, slik at du ikke trenger å legge til et hint før hver enkelt, ved å legge til en HTML-kommentar øverst i innlegget ditt. Hintet blir da brukt på alle kodeblokker i innlegget ditt, inkludert de som bruker fire mellomrom eller HTML <pre><code>:

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

Merk at når det brukes på et spørsmål ikke tilsidesetter uthevingsspråket på svarene; disse vil fremdeles være uthevet som standard i henhold til spørsmålets koder.


Språkkoder som for øyeblikket er tilgjengelige på Stack Exchange

Dette er en komplett liste over alle identifikatorene du kan bruke i språkhintet for syntaksfremheving. Alle de språktippene i hver gruppe peker til samme markering. Andre språkaliaser satt av highlight.js kan fungere, men bare følgende identifikatorer støttes offisielt av Stack Exchange.

  • Standard: tolker koden og gjetter lang-default
  • Ingen: eksplisitt ikke bruk syntaksen som fremhever lang-none, lang-plaintext, lang-text, lang-txt
  • Bash lang-bash, lang-sh, lang-zsh
  • C, C ++ , og andre 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
  • 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-overskrifter lang-http, lang-https
  • Ini og 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-mal lang-php-template
  • Protokollbuffere 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
  • Ordning 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 språkidentifikatorer som brukes i et innlegg som ikke gjenkjennes av highlight.js, vil som standard være lang-default.

Hint: Tagger

Du kan spesifisere en hvilken som helst -kode som finnes på nettstedet, og den vil bruke den språkkoden som for øyeblikket er tilknyttet den koden (som kan være enten null (ingen hint), standard eller en spesifikk språkkode).

Husk at som standard alle koder starter med none som språkkode. Merkelapper med none spesifisert som språkkoden ignoreres og går tilbake til lang-default.

Du kan også bruke det vanlige none nøkkelordet til manuelt å spesifisere ingen syntaksfremheving, i likhet med å bruke lang-none kode ovenfor.


* Den tidligere metoden for å spesifisere et uthevingsspråk kan fortsatt brukes for HTML-kodeblokker: plasser en HTML-kommentar <!-- language: lang-or-tag-here --> før <pre><code> -taggene, og det fungerer.

Også denne tidligere metoden har ikke blitt fjernet fullstendig for kodeblokker med fire mellomrom, men bare utfaset. Selv om den fremdeles vil fungere på kodeblokker med fire mellomrom, kan den / vil bli fjernet i fremtiden.


Merk til redaktørene:

Ikke legg til til listen over, med mindre du er 100% sur e den eksisterer.

  • Bare fordi du skriver inn noe og det ser ut slik det er uthevet riktig betyr ikke at identifikatoren faktisk eksisterer i systemet. Husk at ugyldige identifikatorer går tilbake til standard .

  • I tillegg er det flere språk som er angitt som støttet i highlight.js «dokumentasjon støttes kanskje ikke av Stack Exchange-versjonen av highlight.js , slik de kan være i separate moduler som kanskje ikke distribueres på Stack Exchange.

På grunn av disse punktene, , vennligst lenke til Meta-spørsmålet som bekrefter at det finnes et hint i redigeringssammendraget ditt når du legger til et nytt hint til listen.

Merknad til kommentatorer:

Kommentarer til denne FAQ er for å be om avklaring av noe du kanskje ikke forstår i FAQ, slik at det kan løses. Vennligst IKKE spør om visse språk vil bli støttet i fremtiden. Det er ikke et spørsmål vi kan svare på fordi Stack Exchange ikke opprettholder denne markøren. Gå til highlight.js for språkstøtte.

Kommentarer

  • Skulle ' t være en angitt preferanse (ikke regel) her i dette svaret for å bruke enten en språkkode eller et kodenavn (muligens med noen kvalifikasjoner)? F.eks. " Foretrekker å bruke X over Y, med mindre Z. " (Noe beslektet spørsmål om MSO (i kommentarer ): Hva ' er forskjellen mellom de to kodeformateringsstiler (kodegjerder vs innrykkede blokker) angående syntaksfremheving ? )
  • og den vil bruke hvilken språkkode som for øyeblikket er tilknyttet den koden Er det en offisiell liste over disse tilordningene tilgjengelig hvor som helst?
  • Seksjon 4, " 4. Sjekk at kodene på spørsmålet har syntaksutheving aktivert " , har all informasjonen for å finne ut av @JoshGoebel
  • @Josh Til ditt direkte spørsmål Jeg tror ikke ' det er en liste hvor som helst for øyeblikket inneholder alle koder med tilhørende språk. Det ser heller ikke ut ' at denne informasjonen er tilgjengelig med SEDE, den ' er ikke i taggetabellen.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

Deep Theme Powered by WordPress