¿Qué es el resaltado de sintaxis y cómo funciona?

Me di cuenta de que a veces mi código se resalta en diferentes colores cuando se procesa.

  • ¿Qué es el resaltado de sintaxis?
  • ¿Cómo funciona?
  • ¿Por qué mi código no está resaltado correctamente?
  • ¿Cómo informo un error o solicito un nuevo idioma?
  • ¿Cómo uso el resaltado de sintaxis?
  • ¿Qué idiomas están disponibles actualmente en Stack Exchange?

Regresar a Índice de preguntas frecuentes

Comentarios

  • Tengo una pregunta: ¿por qué las cosas de SE (una persona) no reportan más errores tan fundamentales? Esta persona una vez leerá toda la lista de problemas de highlight.js y puede decidir fácilmente si es un error o no. Esto parece realmente no profesional cuando ve esos errores destacados … El SE eligió esa biblioteca, así que creo que es responsabilidad del SE informar tales errores más allá de highligt.js, especialmente en situaciones en las que este proceso es complicado (todos deben conocer la lista de problemas). ¿incorrecto?
  • Necesito verificar los informes existentes sobre github.com/highlightjs/highlight.js/issues y eventualmente publicar nuevos informes de errores . Así que tengo algunas preguntas que no se mencionan aquí. ¿Qué versión de highlight.js se usa en los sitios SE? ¿Cómo se predifinan los colores? Básicamente, sé / supongo que esto se mantiene mediante un archivo CSS, le pregunto si los sitios SE usan colores estándar del proyecto https://github.com/highlightjs/ o los sitios SE usan conjuntos de colores propios. ¿Podríamos cambiar el color y el tono de los colores?
  • Miro en demostración de highlight.js y luego selecciono Language Categories = All y Themes = Stackoverflow Light son este tema exactamente el mismo que se usa en los sitios SE? ¿Qué idioma se usa para lang-default?

Responder

¿Qué ¿Es el resaltado de sintaxis?

El resaltado de sintaxis permite resaltar el código de las publicaciones en función del idioma en el que está escrito, para que sea más fácil de leer.

¿Cómo funciona?

Stack Exchange no tiene su propio motor de resaltado de sintaxis. Utiliza highlight.js , y es posible que no esté usando necesariamente la última versión de esa biblioteca. Por lo tanto, Stack Exchange no puede manejar los errores y las solicitudes de funciones relacionadas con el resaltado de sintaxis.

El resaltado de sintaxis se asigna, en función de etiquetas , a la vista previa al crear o editar publicaciones tan pronto como dejas de escribir durante 5 segundos.

¿Por qué mi código no se resalta correctamente?

1. Compruebe que el sitio que está utilizando tenga habilitado el resaltado de sintaxis

La lista completa está disponible en Meta . Si el resaltado de sintaxis no está habilitado en un sitio siga las instrucciones de esta pregunta.

2. Compruebe que el idioma sea compatible con highlight.js

Mire el lista de idiomas admitidos de highlight.js . Si su idioma no está en la lista, debe crearse dentro del proyecto highlight.js antes de que Stack Exchange pueda implementarlo.

Si un el idioma ya está en la lista, pero no se usa en Stack Exchange, por favor envíe una solicitud de función aquí en Meta para implementarlo en la red.

3. Verifique que el idioma sea usado por Stack Exchange

Mire el archivo highlight-loader.js en la CDN dev, ábralo en su editor favorito y busque la sugerencia de idioma. Por ejemplo, buscar " dart " te lleva a un línea que consta de hljs.registerLanguage("dart", .... Esto significa que lang-dart es una sugerencia de idioma disponible. Buscando " psh " o " powershell " no devuelve ningún resultado, lo que significa que psh no es compatible con la versión Stack Exchange de highlight.js.

4. Verifique que las etiquetas de la pregunta tengan el resaltado de sintaxis habilitado

Detrás de escena, Stack Exchanges usa las etiquetas de la pregunta para determinar el idioma que estás usando. Cada etiqueta tiene un idioma de resaltado especificado en sus propiedades, o sin idioma. Si hay más de una etiqueta que tiene un idioma de resaltado especificado, o si ninguna de las etiquetas tiene uno especificado, se usa un valor predeterminado y permite que highlight.js infiera cuál es el mejor idioma para usar. Lo mismo resaltar el lenguaje que se usa en la pregunta también se usa en sus respuestas.

Visite esa etiqueta «s página wiki . Haga clic en una etiqueta (como " "), luego haga clic en " Más información … ", y la sugerencia de idioma (si la hubiera) que se está utilizando actualmente para esa etiqueta se mostrará en muy abajo , debajo de los botones de la wiki:

Código idioma (utilizado para resaltar la sintaxis): lang-java

Si la etiqueta no tiene un lenguaje de resaltado especificado cuando debería, cree una en la meta por sitio para que su sitio la solicite (solo los moderadores pueden cambiar el idioma de resaltado de una etiqueta).

¿Cómo informo de un error o solicito un nuevo idioma?

Si de hecho se trata de un error en el resaltador de sintaxis, busque informes existentes primero para ver si ya se informó; si no, continúe e infórmelo allí. Para correcciones de errores y funciones que ya han sido implementadas por highlight.js pero que no funcionan aquí, espere, ya que las nuevas versiones de highlight.js se implementan en los sitios de forma programada y la última versión aún no se ha implementado. (Si no se ha implementado después de mucho tiempo, puede enviar una solicitud de función en Meta para solicitar que se implemente una nueva versión de highlight.js).

Tenga en cuenta que Stack Exchange no mantiene este resaltador de sintaxis (aparte de instalar versiones más nuevas), y publicar informes de errores o solicitudes de funciones relacionadas con él aquí en Meta no los solucionará ni los implementará.

Antes haga cualquier cosa, asegúrese asegúrese de que tiene activado el resaltado correcto.

¿Cómo utilizo el resaltado de sintaxis?

Siempre que se cumplan todas las condiciones en la sección ¿Por qué no se resalta correctamente mi código? anterior, el resaltado se activará automáticamente en los bloques de código según las etiquetas de la pregunta. (Consulte 4. Compruebe que el Las etiquetas de tu pregunta tienen habilitado el resaltado de sintaxis anterior para saber cómo funciona.) El código Inline (por ejemplo, this) no está resaltado.

Es posible anula explícitamente el idioma de resaltado predeterminado que se usa en la publicación con el idioma que elijas en un bloque de código específico, especificando una sugerencia de idioma sobre el bloque de código. Tenga en cuenta que esto solo es compatible cuando se utiliza el método de formato de código de valla de código (```); a partir de la implementación de CommonMark , ya no se admite hacerlo en bloques de código utilizando el método de sangría de cuatro espacios *:

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

Puede utilizar un código de idioma o una etiqueta nombre en la sugerencia de idioma para activar el resaltado de sintaxis. Consulte a continuación la lista completa de códigos de idioma compatibles con highlight.js.

Por ejemplo:

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

Si no lo desea para resaltar cualquier sintaxis, puede usar el lang-none idioma:

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

También puede aplicar una sugerencia de idioma a todos bloques de código en su publicación, por lo que no tiene que agregar una pista antes de cada uno, agregando un comentario HTML en la parte superior de su publicación. La sugerencia se aplicará a todos bloques de código dentro de su publicación, incluidos aquellos que usan sangría de cuatro espacios o HTML <pre><code>:

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

Tenga en cuenta que cuando se usa en una pregunta, no anula el lenguaje de resaltado en sus respuestas; esos seguirán resaltados de forma predeterminada según las etiquetas de la pregunta.


Códigos de idioma actualmente disponibles en Stack Exchange

Esta es una lista completa de cada identificador que Se puede usar en la sugerencia de idioma para resaltar la sintaxis. Todas esas sugerencias de idioma en cada grupo apuntan al mismo resaltador. Otros alias de idioma establecidos por highlight.js podrían funcionar, pero Stack Exchange solo admite oficialmente los siguientes identificadores.

  • Predeterminado: interpretar el código y adivinar lang-default
  • Ninguno: explícitamente no utilice ningún resaltado de sintaxis lang-none, lang-plaintext, lang-text, lang-txt
  • Bash lang-bash, lang-sh, lang-zsh
  • C, C ++ y otros 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
  • Ir 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
  • Encabezados HTTP lang-http, lang-https
  • Ini y 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
  • Plantilla PHP lang-php-template
  • Búferes 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
  • Rust 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

Cualquier identificador de idioma usado en una publicación que no sea reconocido por highlight.js funcionará por defecto en lang-default.

Sugerencia: Etiquetas

Puede especificar cualquier etiqueta que exista en el sitio, y utilizará cualquier código de idioma que esté asociado actualmente con esa etiqueta (que puede ser nulo (sin pista), predeterminado o un código de idioma específico ).

Tenga en cuenta que, por defecto, todos Las etiquetas comienzan con none como código de idioma. Las etiquetas con none especificado como su código de idioma se ignorarán y volverán a lang-default.

También puede usar la palabra clave simple none para especificar manualmente que no hay resaltado de sintaxis, similar a usar el lang-none código anterior.


* El método anterior para especificar un lenguaje de resaltado aún se puede usar para bloques de código HTML: coloque un comentario HTML <!-- language: lang-or-tag-here --> antes de las etiquetas <pre><code> y funcionará.

Además, este El método no se ha eliminado por completo para los bloques de código con sangría de cuatro espacios, sino que simplemente está en desuso. Si bien todavía funcionará por el momento en bloques de código con sangría de cuatro espacios, es posible que se elimine en el futuro.


Nota para los editores:

No agregue a la lista anterior a menos que esté 100% seguro e existe.

  • Solo porque escribe algo y se ve como si estuviera resaltado correctamente no significa que el identificador existe realmente en el sistema. Tenga en cuenta que los identificadores no válidos vuelven a ser predeterminados .

  • Además, varios idiomas que se indican como admitidos en highlight.js no sea compatible con la versión de Stack Exchange de highlight.js , ya que pueden estar en módulos separados que pueden no ser implementados en Stack Exchange.

Debido a estos puntos, por favor vincule a la meta pregunta que confirma la existencia de una pista en su resumen de edición al agregar una nueva pista a la lista.

Nota para los comentaristas:

El Los comentarios en estas preguntas frecuentes son para solicitar una aclaración de algo que quizás no comprenda en las preguntas frecuentes para que se pueda solucionar. NO pregunte si se admitirán ciertos idiomas en el futuro. Esa es no una pregunta que podemos responder porque Stack Exchange no mantiene este resaltador. Visite highlight.js para obtener soporte de idiomas.

Comentarios

  • No debería ' que haya una preferencia indicada (no una regla) aquí en esta respuesta para usar un código de idioma o un nombre de etiqueta (posiblemente con algunos calificadores)? P.ej. " Prefiero usar X sobre Y, a menos que Z. " (Pregunta algo relacionada en MSO (en los comentarios ): ¿Cuál ' es la diferencia entre los dos estilos de formato de código (vallas de código frente a bloques con sangría) con respecto al resaltado de sintaxis ? )
  • y utilizará cualquier código de idioma que esté actualmente asociado con esa etiqueta ¿Existe una lista oficial de estas asignaciones disponible en algún lugar?
  • Sección 4, " 4. Compruebe que las etiquetas de la pregunta tengan habilitado el resaltado de sintaxis " , que tenga toda la información para averiguarlo @JoshGoebel
  • @Josh A su pregunta directa Sin embargo, ' no creo que haya una lista en cualquier lugar que contenga actualmente todas las etiquetas con el idioma asociado. Tampoco ' parece que esta información sea accesible mediante SEDE, ' no está en la tabla de etiquetas.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Deep Theme Powered by WordPress