Co to jest podświetlanie składni i jak działa?

Zauważyłem, że czasami mój kod jest podświetlany różnymi kolorami podczas renderowania.

  • Co to jest podświetlanie składni?
  • Jak to działa?
  • Dlaczego mój kod nie jest prawidłowo wyróżniony?
  • Jak zgłosić błąd lub poprosić o nowy język?
  • Jak używać podświetlania składni?
  • Jakie języki są obecnie dostępne na Stack Exchange?

Wróć do Indeks FAQ

Komentarze

  • Mam pytanie: dlaczego SE (jedna osoba) nie będzie zgłaszać dalszych tak fundamentalnych błędów? Ta osoba raz przeczyta całą listę wydań z highlight.js i może łatwo zdecydować, że to błąd, czy nie. Wygląda to naprawdę nieprofesjonalnie, gdy zobaczysz takie wyróżnione błędy … SE wybrało tę bibliotekę, więc myślę – to SE jest odpowiedzialna za zgłoszenie takie błędy dalej niż highligt.js – szczególnie w sytuacji, gdy ten proces jest skomplikowany (każdy musi znać całą listę spraw). źle?
  • Muszę sprawdzić istniejące raporty na github.com/highlightjs/highlight.js/issues i ewentualnie opublikować nowe raporty o błędach . Więc mam kilka pytań nie wymienionych tutaj. Która wersja highlight.js jest używana w witrynach SE? W jaki sposób ustalane są kolory? Po prostu wiem / przypuszczam, że jest to utrzymywane przez plik CSS. Pytam, czy witryny SE używają standardowych kolorów z projektu https://github.com/highlightjs/, czy witryny SE używają własnych zestawów kolorów? Czy moglibyśmy zmienić kolor i odcień kolorów?
  • Zaglądam do demo highlight.js , a następnie wybieram Language Categories = All i Themes = Stackoverflow Light czy ten motyw jest dokładnie taki sam, jak używany w witrynach SE? W jakim języku lang-default?

Odpowiedź

Co czy jest podświetlanie składni?

Podświetlanie składni umożliwia podświetlanie kodu w postach na podstawie języka, w którym jest napisany, aby ułatwić czytanie.

Jak to działa?

Wymiana stosów nie ma własnego mechanizmu podświetlania składni. Używa highlight.js i może nie koniecznie korzystać z najnowszej wersji tej biblioteki. Dlatego też żadne błędy i prośby o funkcje dotyczące podświetlania składni nie mogą być obsługiwane przez Stack Exchange.

Podświetlanie składni jest przypisywane na podstawie tagów do podglądu podczas tworzenia lub edytowania postów, gdy tylko przestaniesz pisać przez 5 sekund.

Dlaczego mój kod nie jest poprawnie podświetlony?

1. Sprawdź, czy witryna, której używasz, ma włączone podświetlanie składni

Pełna lista jest dostępna w Meta . Jeśli podświetlanie składni nie jest włączone w witryna postępuj zgodnie z instrukcjami w tym pytaniu.

2. Sprawdź, czy język jest obsługiwany przez highlight.js

Spójrz na lista obsługiwanych języków highlight.js . Jeśli Twojego języka nie ma na liście, musisz go utworzyć w projekcie highlight.js, zanim będzie można go wdrożyć przez Stack Exchange.

Jeśli język jest już na liście, ale nie jest używany na Stack Exchange, zgłoś prośbę o funkcję tutaj w Meta, aby wdrożyć go w sieci.

3. Sprawdź, czy język jest używany przez Stack Exchange

Spójrz na plik highlight-loader.js w dev CDN, otwórz w swoim ulubionym edytorze i wyszukaj wskazówkę dotyczącą języka. Na przykład: wyszukiwanie " rzutki " prowadzi do linia składająca się z hljs.registerLanguage("dart", .... Oznacza to, że lang-dart jest dostępną wskazówką dotyczącą języka. Wyszukiwanie " psh " lub " powershell " nie zwraca żadnych wyników, co oznacza, że psh nie jest obsługiwane przez wersjęlight.js stosowaną w Stack Exchange.

4. Sprawdź, czy tagi w pytaniu mają włączone podświetlanie składni

Za kulisami Stack Exchanges używa tagów w pytaniu do określenia używanego języka. Każdy tag ma język podświetlania określony we właściwościach, lub brak języka. Jeśli istnieje więcej niż jeden znacznik z określonym językiem podświetlania lub jeśli żaden z tagów nie ma określonego, używany jest domyślny i pozwala wyróżnić.js wywnioskować, który język jest najlepszy do użycia. To samo język wyróżnienia użyty w pytaniu jest również używany w odpowiedziach.

Odwiedź ten tag „s wiki . Kliknij tag (na przykład " "), a następnie kliknij " Dowiedz się więcej … ", a wskazówka dotycząca języka (jeśli istnieje), która jest aktualnie używana dla tego tagu, zostanie wyświetlona w na samym dole , pod przyciskami wiki:

Kod język (używany do podświetlania składni): lang-java

Jeśli tag nie ma określonego języka podświetlania, kiedy powinien, utwórz w meta witryny, aby o to poprosić (tylko moderatorzy mogą zmienić język podświetlania tagu).

Jak zgłosić błąd lub poprosić o nowy język?

Jeśli rzeczywiście jest to błąd w samym znaczniku składni, sprawdź istniejące raporty najpierw, aby sprawdzić, czy zostało to już zgłoszone; jeśli tak się nie stało, zgłoś to tam. W przypadku poprawek błędów i funkcji, które zostały już zaimplementowane przez highlight.js , ale tutaj nie działają, proszę czekać, ponieważ nowe wersje highlight.js są wdrażane w tych witrynach zgodnie z harmonogramem, a najnowsza wersja nie została jeszcze wdrożona. (Jeśli nie został wdrożony po dłuższym czasie, możesz zgłosić żądanie funkcji na Meta, aby zażądać wdrożenia nowej wersji highlight.js).

Pamiętaj, że Stack Exchange nie obsługuje tego wyróżniacza składni (poza instalowaniem jego nowszych wersji), a publikowanie raportów o błędach lub próśb o dodanie funkcji tutaj na Meta nie spowoduje ich naprawienia ani zaimplementowania.

Zanim zrób cokolwiek, upewnij się , że masz włączone poprawne podświetlanie.

Jak używać podświetlania składni?

O ile wszystkie warunki w sekcji Dlaczego mój kod nie jest poprawnie podświetlony? powyżej są spełnione, podświetlenie rozpocznie się automatycznie w blokach kodu na podstawie tagów w pytaniu. (Zobacz 4. Sprawdź, czy tagi w Twoim pytaniu mają włączone wyróżnianie składni powyżej, aby dowiedzieć się, jak to działa.) Kod wbudowany (np. this) nie jest podświetlony.

Możliwe jest jawnie zastąpić domyślny język podświetlania używany w poście wybranym językiem w określonym bloku kodu, podając wskazówkę językową nad blokiem kodu. Zwróć uwagę, że jest to obsługiwane tylko w przypadku korzystania z metody formatowania kodu za pomocą ogrodzenia kodu (```); od implementacji CommonMark , robienie tego na blokach kodu przy użyciu metody wcięcia z czterema spacjami nie jest już obsługiwane *:

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

Możesz użyć kodu języka lub tagu nazwa we wskazówce językowej, aby włączyć podświetlanie składni. Poniżej znajduje się pełna lista kodów języków obsługiwanych przez highlight.js.

Na przykład:

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

Jeśli nie chcesz aby mieć dowolne podświetlanie składni, możesz użyć lang-none języka:

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

Możesz również zastosować wskazówkę dotyczącą języka aby wszystkie bloki kodu w swoim poście, więc nie musisz dodawać podpowiedzi przed każdym z nich, dodając komentarz HTML u góry górnej postu. Podpowiedź zostanie następnie zastosowana do wszystkich bloków kodu w Twoim poście, w tym tych, które używają wcięcia z czterema spacjami lub kodu HTML <pre><code>:

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

Zauważ, że użyte w pytaniu, nie zastępuje języka podświetlenia w odpowiedziach; Będą one nadal domyślnie podświetlone zgodnie z tagami pytania.


Kody języków aktualnie dostępne w Stack Exchange

To jest pełna lista wszystkich identyfikatorów, można używać we wskazówkach językowych do podświetlania składni. Wszystkie te wskazówki językowe w każdej grupie wskazują na ten sam znacznik. Inne aliasy językowe ustawione przez highlight.js mogą działać, ale tylko następujące identyfikatory są oficjalnie obsługiwane przez Stack Exchange.

  • Domyślnie: interpretuj kod i odgaduj lang-default
  • Brak: jawnie nie używaj podświetlania składni lang-none, lang-plaintext, lang-text, lang-txt
  • Bash lang-bash, lang-sh, lang-zsh
  • C, C ++ i inne lubiane przez 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
  • Idź lang-go, lang-golang
  • Haskell lang-hs, lang-haskell
  • HTML, XML, XSL i in. lang-html, lang-xml, lang-xsl , lang-xhtml, lang-rss, lang-atom, lang-xjb, lang-xsd, lang-plist, lang-wsf, lang-svg
  • Nagłówki 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
  • Mniej 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
  • Szablon PHP lang-php-template
  • Bufory protokołów 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
  • Schemat lang-scheme
  • SCSS lang-scss
  • Powłoka 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

Wszelkie identyfikatory języka użyte w poście, które nie zostaną rozpoznane przez highlight.js, będą domyślnie funkcjonalnie zmieniać na lang-default.

Wskazówka: tagi

Możesz określić dowolny tag istniejący w witrynie i użyje on dowolnego kodu języka, który jest aktualnie powiązany z tym tagiem (może to być null (bez wskazówki), default lub określony kod języka).

Pamiętaj, że domyślnie wszystkie tagi zaczynają się od none jako kodu języka. Tagi z none określonym jako kod języka zostaną zignorowane i przywrócone do lang-default.

Możesz również użyć zwykłego słowa kluczowego none, aby ręcznie określić brak podświetlania składni, podobnie jak przy użyciu lang-none powyższy kod.


* Poprzednia metoda określania języka podświetlania może być nadal używana dla bloków kodu HTML: umieść komentarz HTML <!-- language: lang-or-tag-here --> przed tagami <pre><code> i będzie działać.

Poza tym ta pierwsza Metoda nie została całkowicie usunięta dla bloków kodu z wcięciami z czterema spacjami, ale jest po prostu przestarzała. Chociaż będzie nadal działać na blokach kodu z wcięciami z czterema spacjami, może / zostanie usunięta w przyszłości.


Uwaga dla redaktorów:

Nie dodawaj do powyższej listy, chyba że jesteś w 100% surowy e istnieje.

  • Tylko dlatego, że coś wpisujesz i wygląda na to, że jest podświetlone poprawnie nie oznacza, że identyfikator faktycznie istnieje w systemie. Pamiętaj, że nieprawidłowe identyfikatory powracają do wartości domyślnych .

  • Ponadto kilka języków wskazanych jako obsługiwane w highlight.js może w rzeczywistości nie być obsługiwana przez highlight.js w wersji Stack Exchange, ponieważ mogą znajdować się w oddzielne moduły, których nie można wdrożyć na Stack Exchange.

Z tego powodu proszę podać link do pytania Meta, które potwierdza istnienie wskazówki w podsumowaniu edycji podczas dodawania nowej wskazówki do listy.

Uwaga dla komentujących:

komentarze do tego FAQ służą do prośby o wyjaśnienie czegoś, czego możesz nie rozumieć w FAQ, aby można było to naprawić. Prosimy NIE pytać, czy określone języki będą obsługiwane w przyszłości. To jest nie pytanie, na które możemy odpowiedzieć, ponieważ Stack Exchange nie obsługuje tego wyróżnienia. Odwiedź stronę highlight.js , aby uzyskać pomoc językową.

Komentarze

  • Nie powinno ' t w tej odpowiedzi powinna znajdować się wskazana preference (nie reguła) za użycie kodu języka lub nazwy tagu (być może z pewnymi kwalifikatorami)? Na przykład. " Wolę używać X zamiast Y, chyba że Z. " (Dość powiązane pytanie w MSO (w komentarzach ): Jaka ' jest różnica między dwoma stylami formatowania kodu (ogrodzenia kodu a bloki wcięte) w zakresie podświetlania składni ? )
  • i użyje dowolnego kodu języka, który jest aktualnie powiązany z tym tagiem Czy jest gdzieś dostępna oficjalna lista tych mapowań?
  • Sekcja 4, " 4. Sprawdź, czy tagi w pytaniu mają włączone podświetlanie składni " , czy zawiera wszystkie informacje potrzebne do znalezienia @JoshGoebel
  • @Josh Do Twojego bezpośredniego pytania , Nie ' nie sądzę jednak, aby gdziekolwiek obecnie istnieje lista zawierająca wszystkie tagi z powiązanym językiem. Nie ' nie wygląda na to, żeby te informacje były dostępne za pomocą SEDE, ale ' nie ma w tabeli tagów.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Deep Theme Powered by WordPress