O que é destaque de sintaxe e como funciona?

Percebi que às vezes meu código fica destacado em cores diferentes quando renderizado.

  • O que é destaque de sintaxe?
  • Como funciona?
  • Por que meu código não está sendo destacado corretamente?
  • Como faço para relatar um bug ou solicitar um novo idioma?
  • Como uso o realce de sintaxe?
  • Quais idiomas estão disponíveis atualmente no Stack Exchange?

Retornar para Índice de FAQ

Comentários

  • Eu tenho uma pergunta: por que as coisas de SE (uma pessoa) não relatam mais bugs fundamentais? Essa pessoa lerá uma vez toda a lista de problemas do highlight.js e pode facilmente decidir se é um bug ou não. Isso parece realmente não profissional quando você vê esses bugs de destaque … O SE escolheu essa biblioteca, então eu acho – é responsabilidade do SE relatar esses bugs ainda mais para highligt.js – especialmente em situações em que este processo é complicado (todos precisam saber todas as listas de problemas). errado?
  • Eu preciso verificar os relatórios existentes em github.com/highlightjs/highlight.js/issues e eventualmente postar novos relatórios de bug . Portanto, tenho algumas perguntas não mencionadas aqui. Qual versão do highlight.js é usado em sites SE? Como as cores são predefinidas? Basicamente, eu sei / suponho que isso seja mantido por um arquivo CSS, pergunto se os Sites SE usam cores padrão do https://github.com/highlightjs/ projeto ou os Sites SE usam seus próprios conjuntos de cores? Podemos mudar a cor e o tom das cores?
  • Eu examino a demonstração realce.js e seleciono Language Categories = All e Themes = Stackoverflow Light são este tema exatamente o mesmo usado nos sites SE? Qual idioma é usado para lang-default?

Resposta

O que O realce de sintaxe é o realce de sintaxe?

O realce de sintaxe permite que o código em postagens seja realçado com base na linguagem em que está escrito, para facilitar a leitura.

Como funciona?

O Stack Exchange não tem seu próprio mecanismo de realce de sintaxe. Ele usa highlight.js , e pode não estar necessariamente usando a versão mais recente dessa biblioteca. Portanto, quaisquer bugs e solicitações de recursos relacionados ao realce de sintaxe não podem ser tratados pelo Stack Exchange.

O realce da sintaxe é atribuído, com base em tags , para a visualização ao criar ou editar postagens assim que você parar de digitar por 5 segundos.

Por que meu código não está sendo destacado corretamente?

1. Verifique se o site que você está usando tem o realce de sintaxe habilitado

A lista completa está disponível no Meta . Se o realce de sintaxe não estiver habilitado em um site siga as instruções nesta pergunta.

2. Verifique se o idioma é compatível com o highlight.js

Veja o lista de idiomas com suporte para o highlight.js . Se o seu idioma não estiver na lista, ele precisa ser criado no projeto destaque.js antes de ser implantado pelo Stack Exchange.

Se um O idioma já está na lista, mas não é usado no Stack Exchange, faça uma solicitação de recurso aqui no Meta para implantá-lo na rede.

3. Verifique se o idioma é usado pelo Stack Exchange

Olhe para o arquivo highlight-loader.js no CDN dev, abra em seu editor favorito e pesquise a dica de idioma. Por exemplo, pesquisar " dardo " leva você a um linha que consiste em hljs.registerLanguage("dart", .... Isso significa que lang-dart é uma dica de idioma disponível. Pesquisando por " psh " ou " powershell " não retorna nenhum resultado, o que significa que o psh não é compatível com a versão do Stack Exchange de highlight.js.

4. Verifique se as tags na pergunta têm o realce de sintaxe habilitado

Nos bastidores, o Stack Exchanges usa as tags da pergunta para determinar o idioma que você está usando. Cada tag tem um idioma de destaque especificado em suas propriedades, ou nenhum idioma. Se houver mais de uma tag que tenha um idioma de destaque especificado, ou se nenhuma das tags tiver um especificado, ele usa um padrão e permite que o highlight.js deduza qual é o melhor idioma a ser usado. a linguagem de destaque que é usada na pergunta também é usada em suas respostas.

Visite aquela tag “s página wiki . Clique em uma tag (como " ") e clique em " Saiba mais … ", e a dica de idioma (se houver) que está sendo usada para essa tag será exibida em na parte inferior , abaixo dos botões do wiki:

Código idioma (usado para realce de sintaxe): lang-java

Se a tag não tiver um idioma de realce especificado quando deveria, crie uma na meta por site do seu site para solicitá-la. (Apenas moderadores podem alterar o idioma de destaque de uma tag.)

Como faço para relatar um bug ou solicitar um novo idioma?

Se for realmente um bug no próprio realce de sintaxe, verifique se há relatórios existentes primeiro para ver se já foi relatado; se não foi, vá em frente e relate lá. Para correções de bugs e recursos que já foram implementados por highlight.js , mas não estão funcionando aqui, aguarde, pois novas versões de destaque.js são implantadas nos sites de forma programada, e a versão mais recente ainda não foi implantada. (Se não tiver sido implantado depois de um longo tempo, você pode levantar uma solicitação de recurso no Meta para solicitar que uma nova versão de highlight.js seja implantada.)

Lembre-se de que Stack Exchange não mantém este realce de sintaxe (além de instalar versões mais recentes dele), e postar relatórios de erros ou solicitações de recursos relacionados aqui no Meta não os corrigirá ou implementará.

Antes de você faça qualquer coisa, certifique-se de que você ativou o realce correto.

Como faço para usar o realce de sintaxe?

Contanto que todas as condições na seção Por que meu código não está sendo destacado corretamente? acima estiver satisfeito, o destaque irá iniciar automaticamente nos blocos de código com base nas tags da pergunta. (Consulte 4. Verifique se tags em sua pergunta têm destaque de sintaxe habilitado acima para saber como isso funciona.) O código Inline (por exemplo, this) não é destacado.

É possível sobrescrever explicitamente o idioma de destaque padrão em uso na postagem com o idioma de sua escolha em um bloco de código específico, especificando uma dica de idioma acima do bloco de código. Observe que isso só é suportado ao usar o método de cerca de código (```) de formatação de código; a partir da implementação do CommonMark , fazer isso em blocos de código usando o método de recuo de quatro espaços não é mais suportado *:

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

Você pode usar um código de idioma ou uma tag nome na dica de idioma para ativar o realce de sintaxe. Veja abaixo a lista completa de códigos de idioma suportados por realce.js.

Por exemplo:

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 você não quiser para ter qualquer destaque de sintaxe, você pode usar o lang-none idioma:

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

Você também pode aplicar uma dica de idioma a todos os blocos de código em sua postagem, para que você não precise adicionar uma dica antes de cada um, adicionando um comentário HTML no topo de sua postagem. A dica será então aplicada a todos os blocos de código em sua postagem, incluindo aqueles que usam recuo de quatro espaços ou HTML <pre><code>:

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

Observe que, quando usado em uma pergunta, não substitui o idioma de destaque em suas respostas; eles ainda serão destacados por padrão de acordo com as tags da pergunta.


Códigos de idioma atualmente disponíveis no Stack Exchange

Esta é uma lista completa de todos os identificadores que você pode usar na dica de idioma para realce de sintaxe. Todas essas dicas de idioma em cada grupo apontam para o mesmo iluminador. Outros aliases de idioma definidos por highlight.js podem funcionar, mas apenas os seguintes identificadores são oficialmente suportados pelo Stack Exchange.

  • Padrão: interprete o código e adivinhe lang-default
  • Nenhum: explicitamente não use nenhum realce de sintaxe lang-none, lang-plaintext, lang-text, lang-txt
  • Bash lang-bash, lang-sh, lang-zsh
  • C, C ++ e outros 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
  • Cabeçalhos 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
  • Menos 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
  • Modelo PHP lang-php-template
  • Buffers de protocolo 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
  • Ferrugem lang-rs, lang-rust
  • Scala lang-scala
  • Esquema 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

Quaisquer identificadores de idioma usados em uma postagem que não sejam reconhecidos pelo destaque.js serão funcionalmente padronizados como lang-default.

Dicas: Tags

Você pode especificar qualquer tag que existe no site e usará qualquer código de idioma atualmente associado a essa tag (que pode ser null (sem dica), padrão ou um código de idioma específico ).

Lembre-se de que, por padrão, todos as tags começam com none como seu código de idioma. As tags com none especificadas como seu código de idioma serão ignoradas e revertidas para lang-default.

Você também pode usar a palavra-chave none simples para especificar manualmente nenhum destaque de sintaxe, semelhante a usar o lang-none código acima.


* O método anterior de especificar uma linguagem de destaque ainda pode ser usado para blocos de código HTML: coloque um comentário HTML <!-- language: lang-or-tag-here --> antes das tags <pre><code> e funcionará.

Além disso, este anterior método não foi completamente removido para blocos de código recuados de quatro espaços, mas meramente obsoleto. Embora ainda funcione por enquanto em blocos de código recuados de quatro espaços, pode / será removido no futuro.


Nota para os editores:

Não adicione à lista acima, a menos que você seja 100% sur e ela existe.

  • Só porque você digita algo e parece que está destacado corretamente não significa que o identificador realmente existe no sistema. Lembre-se de que os identificadores inválidos voltam ao padrão .

  • Além disso, vários idiomas indicados como compatíveis com a documentação do destaque.js pode não ser compatível com a versão do Stack Exchange de highlight.js , pois pode ser módulos separados que não podem ser implantados no Stack Exchange.

Por causa desses pontos, vincule à questão Meta que confirma a existência de uma dica em seu resumo de edição ao adicionar uma nova dica à lista.

Nota para comentaristas:

O os comentários neste FAQ são para solicitar esclarecimentos sobre algo que você pode não entender no FAQ para que possa ser corrigido. NÃO pergunte se determinados idiomas serão suportados no futuro. Essa é não uma pergunta que podemos responder porque o Stack Exchange não mantém este marcador. Visite highlight.js para suporte de idioma.

Comentários

  • Deveria ' haver uma preferência indicada (não uma regra) aqui nesta resposta para usar um código de idioma ou um nome de tag (possivelmente com alguns qualificadores)? Por exemplo. " Prefira usar X em vez de Y, a menos que Z. " (Pergunta um tanto relacionada no MSO (nos comentários ): Qual ' s a diferença entre os dois estilos de formatação de código (code-fences vs blocos recuados) em relação ao destaque de sintaxe ? )
  • e usará qualquer código de idioma atualmente associado a essa tag Há uma lista oficial desses mapeamentos disponível em algum lugar?
  • Seção 4, " 4. Verifique se as tags na pergunta têm o realce de sintaxe habilitado " , tem todas as informações para descobrir @JoshGoebel
  • @Josh Para sua pergunta direta , Entretanto, não ' acredito que haja uma lista em qualquer lugar contendo todas as tags com o idioma associado. Também não ' parece que essas informações também podem ser acessadas usando SEDE, ' não estão na tabela de tags.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

Deep Theme Powered by WordPress