Co je zvýrazňování syntaxe a jak to funguje?

Všiml jsem si, že můj kód je při vykreslování někdy zvýrazněn v různých barvách.

  • Co je zvýraznění syntaxe?
  • Jak to funguje?
  • Proč není můj kód zvýrazněn správně?
  • Jak mohu nahlásit chybu nebo požádat o nový jazyk?
  • Jak mohu použít zvýraznění syntaxe?
  • Jaké jazyky jsou aktuálně k dispozici na Stack Exchange?

Zpět na Rejstřík FAQ

Komentáře

  • Mám otázku: proč SE věci (jedna osoba) nebudou hlásit další takové zásadní chyby? Tato osoba jednou přečte seznam všech čísel highlight.js a může se snadno rozhodnout, zda jde o chybu, nebo ne. Vypadá to opravdu neprofesionálně, když vidíte takové chyby zvýraznění … SE si vybrala tuto knihovnu, takže si myslím – je odpovědností SE takové chyby dále k highligt.js – zejména v situaci, kdy je tento proces komplikovaný (každý musí znát seznam všech problémů). Jsem špatně?
  • Musím zkontrolovat existující hlášení na github.com/highlightjs/highlight.js/issues a případně odeslat nové hlášení o chybě . Takže mám několik otázek, které zde nejsou zmíněny. Která verze highlight.js se používá na webech SE? Jak jsou barvy předurčené? V zásadě vím / předpokládám, že je to udržováno souborem CSS, ptám se, zda stránky SE používají standardní barvy z projektu https://github.com/highlightjs/ nebo stránky SE používají vlastní sady barev? Mohli bychom změnit barvu a tón barev?
  • Podívám se na highlight.js demo a pak vyberu Language Categories = All a Themes = Stackoverflow Light je toto téma úplně stejné na stránkách SE? Který jazyk se používá pro lang-default?

odpověď

co je zvýraznění syntaxe?

Zvýraznění syntaxe umožňuje zvýraznění kódu v příspěvcích podle jazyka, ve kterém je napsán, aby bylo snazší číst.

Jak to funguje?

Stack Exchange nemá vlastní modul zvýraznění syntaxe. Používá highlight.js a nemusí nutně používat nejnovější verzi této knihovny. Stack Exchange proto nemůže zpracovávat žádné chyby a požadavky na funkce týkající se zvýrazňování syntaxe.

Zvýraznění syntaxe je na základě značek přiřazeno náhledu při vytváření nebo úpravách příspěvků, jakmile přestanete psát po dobu 5 sekund.

Proč není můj kód zvýrazněn správně?

1. Zkontrolujte, zda má web, který používáte, zvýraznění syntaxe povoleno

Celý seznam je k dispozici v Meta . Pokud není zvýraznění syntaxe v web postupujte podle pokynů v této otázce.

2. Zkontrolujte, zda jazyk podporuje zvýraznění.js

Podívejte se na seznam podporovaných jazyků highlight.js . Pokud váš jazyk není na seznamu, je třeba ho vytvořit v rámci projektu highlight.js, než jej bude možné nasadit pomocí Stack Exchange.

Pokud jazyk je již na seznamu, ale nepoužívá se na Stack Exchange, požádejte prosím zde o Meta požadavek na jeho implementaci v síti.

3. Zkontrolujte, zda jazyk používá Stack Exchange

Podívejte se na soubor highlight-loader.js na dev CDN, otevřete jej ve svém oblíbeném editoru a vyhledejte jazykovou nápovědu. Například vyhledávání " šipky " vás přivede na řádek skládající se z hljs.registerLanguage("dart", .... To znamená, že lang-dart je nápověda v dostupném jazyce. Hledání " psh " nebo " Powershellu " nevrací žádné výsledky, což znamená, že verze zvýraznění.js na Stack Exchange nepodporuje psh.

4. Zkontrolujte, zda značky v otázce mají povolené zvýraznění syntaxe

V zákulisí používá Stack Exchanges značky k otázce k určení jazyka, který používáte. Každá značka má ve vlastnostech zvýrazněný jazyk, nebo žádný jazyk. Pokud existuje více než jedna značka, která má specifikovaný zvýrazňovací jazyk, nebo pokud žádná ze značek specifikovaný není, použije výchozí a nechá zvýraznit.js odvodit, jaký je nejlepší jazyk. Stejný zvýraznění jazyka použitého na otázku se použije také na její odpovědi.

Navštivte tuto značku „s stránka wiki . Klikněte na značku (například " ") a poté klikněte na " Další informace … " a nápověda jazyka (pokud existuje), který se aktuálně používá pro tuto značku, se zobrazí na úplně dole pod tlačítky pro wiki:

kód jazyk (používá se pro zvýraznění syntaxe): lang-java

Pokud značka nemá specifikovaný jazyk zvýraznění, kdy má, vytvořte a na metadat webu pro váš web, aby o něj mohl požádat. (Pouze moderátoři mohou změnit zvýrazňovací jazyk značky.)

Jak nahlásím chybu nebo požádám o nový jazyk?

Pokud se skutečně jedná o chybu v samotném zvýrazňovači syntaxe, zkontrolujte existující hlášení nejprve zkontrolujte, zda již byla nahlášena; pokud není, pokračujte a nahlaste to tam. Opravy chyb a funkce, které již byly implementovány pomocí highlight.js , ale zde nefungují, prosím počkejte, protože nové verze highlight.js jsou na stránkách nasazeny podle plánu a nejnovější verze ještě nebyla nasazena. (Pokud nebyl po dlouhé době nasazen, můžete v Meta vznést požadavek na funkci a požádat o nasazení nové verze highlight.js.)

Pamatujte, že Stack Exchange nezachovává tento zvýrazňovač syntaxe (kromě instalace jeho novějších verzí) a zveřejňování hlášení o chybách nebo požadavků na funkce, které se ho týkají, zde v Meta nebude opraveno ani implementováno.

Než začnete dělat cokoli, ujistěte se , že máte zapnuté správné zvýraznění.

Jak mohu použít zvýraznění syntaxe?

Pokud jsou splněny všechny podmínky v sekci Proč není můj kód správně zvýrazněn? výše, je zvýraznění automaticky spuštěno v blocích kódu na základě značek na otázce. (Viz 4. Zkontrolujte, zda značky u vaší otázky mají zvýraznění syntaxe výše, jak to funguje.) Vložený kód (např. this) není zvýrazněn.

Je možné výslovně přepsat výchozí zvýrazňovací jazyk používaný na příspěvku s jazykem, který si vyberete, v konkrétním bloku kódu zadáním jazykové nápovědy nad blokem kódu. Toto je podporováno pouze při použití metody formátování kódu pomocí kódu (```); od implementace CommonMark již není podporováno blokování kódu pomocí metody čtyřprostorového odsazení *:

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

Můžete použít buď kód jazyka , nebo značku název v nápovědě jazyka k aktivaci zvýraznění syntaxe. Níže naleznete kompletní seznam kódů jazyků podporovaných highlight.js.

Například:

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

Pokud nechcete pro zvýraznění syntaxe můžete použít jazyk lang-none:

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

Můžete také použít jazykovou nápovědu do všech bloků kódu ve vašem příspěvku, takže nemusíte přidávat nápovědu před každou z nich přidáním komentáře HTML v horní části vašeho příspěvku. Nápověda se poté použije na všechny bloky kódu ve vašem příspěvku, včetně těch, které používají čtyřprostorové odsazení nebo HTML <pre><code>:

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

Upozorňujeme, že při použití u otázky nepřepíše přepis zvýrazňovacího jazyka u jeho odpovědí; ty budou i nadále ve výchozím nastavení zvýrazněny podle značek otázky.


Jazykové kódy aktuálně dostupné na Stack Exchange

Toto je kompletní seznam všech identifikátorů, které jste lze použít v jazykové nápovědě pro zvýraznění syntaxe. Všechny tyto jazykové nápovědy v každé skupině ukazují na stejný zvýrazňovač. Jiné jazykové aliasy nastavené zvýrazněním.js mohou fungovat, ale Stack Exchange oficiálně podporuje pouze následující identifikátory.

  • Výchozí: interpretujte kód a hádejte lang-default
  • Žádné: výslovně nepoužívejte zvýrazňování syntaxe lang-none, lang-plaintext, lang-text, lang-txt
  • Bash lang-bash, lang-sh, lang-zsh
  • C, C ++ a další C-lajky 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
  • Přejít lang-go, lang-golang
  • Haskell lang-hs, lang-haskell
  • HTML, XML, XSL atd. lang-html, lang-xml, lang-xsl , lang-xhtml, lang-rss, lang-atom, lang-xjb, lang-xsd, lang-plist, lang-wsf, lang-svg
  • Záhlaví HTTP lang-http, lang-https
  • Ini a 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
  • Méně 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
  • Šablona PHP lang-php-template
  • Vyrovnávací paměti protokolu 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
  • schéma 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

Veškeré jazykové identifikátory použité v příspěvku, které nebudou zvýrazněny souborem.jpe, budou funkčně výchozí lang-default.

Nápověda: Značky

Můžete zadat libovolnou značku , která na webu existuje, a použije jakýkoli jazykový kód, který je aktuálně přidružen k této značce (což může být buď null (bez nápovědy), výchozí nebo konkrétní jazykový kód).

Mějte na paměti, že ve výchozím nastavení jsou všechny značky začínají kódem jazyka none. Značky s none zadaným jako jejich jazykový kód budou ignorovány a vrátit se k lang-default.

Můžete také použít prosté klíčové slovo none k ručnímu určení žádného zvýraznění syntaxe, podobně jako při použití lang-none výše uvedený kód.


* Pro bloky kódu HTML lze stále použít dřívější metodu určení zvýrazňovacího jazyka: vložte komentář HTML <!-- language: lang-or-tag-here --> před značkami <pre><code> a bude to fungovat.

Také tento bývalý metoda nebyla úplně odstraněna pro čtyřprostorové odsazené bloky kódu, ale pouze zastaralá. I když bude v současné době stále fungovat na čtyřprostorových odsazených blocích kódu, může / bude odstraněna v budoucnu.


Poznámka pro redaktory:

Nepřidávejte na výše uvedený seznam, pokud si nejste 100% sur e existuje.

  • Jen proto, že něco napíšete a vypadá se to zvýrazní správně neznamená , že identifikátor v systému skutečně existuje. Pamatujte, že neplatné identifikátory se vrátí zpět na výchozí .

  • Kromě toho je v dokumentace zvýraznění.js nemusí být ve verzi Stack Exchange souboru highlight.js podporována, protože může být v samostatné moduly, které nemusí být nasazeny na Stack Exchange.

Z těchto důvodů prosím odkazujte na otázku Meta, která potvrdí existenci nápovědy ve vašem souhrnu úprav při přidávání nové nápovědy do seznamu.

Poznámka pro komentátory:

The komentáře k těmto častým dotazům slouží k vyžádání objasnění něčeho, čemu byste v častých dotazech nemuseli rozumět, aby to bylo možné opravit. NEDĚLEJTE , zda budou v budoucnu některé jazyky podporovány. To není otázka, na kterou můžeme odpovědět, protože Stack Exchange tento zvýrazňovač neudržuje. Jazykovou podporu naleznete na stránce highlight.js .

Komentáře

  • Neměl by v této odpovědi ' být uveden preference (nikoli pravidlo) pro použití buď kódu jazyka nebo názvu značky (případně u některých kvalifikátorů)? Např. " Upřednostňujte použití X nad Y, pokud Z. " (Poněkud související otázka ohledně MSO (v komentářích) ): Jaký je ' rozdíl mezi dvěma styly formátování kódu (code-fences vs. indented blocks), pokud jde o zvýraznění syntaxe ? )
  • a použije jakýkoli jazykový kód, který je aktuálně přidružen k této značce Existuje kdekoli oficiální seznam těchto mapování?
  • Část 4, " 4. Zkontrolujte, zda mají značky v otázce zvýraznění syntaxe povoleno " , má všechny informace k vyhledání @JoshGoebel
  • @Josh na vaši přímou otázku ' si však nemyslím, že by kdekoli seznam obsahoval všechny značky s přidruženým jazykem. Také to ' nevypadá, že by tyto informace byly přístupné buď pomocí SEDE, ale ' nejsou v tabulce značek.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Deep Theme Powered by WordPress