En nuestro foro hemos notado recientemente que el código se está resaltando automáticamente, aunque la opción autohighlight all code está desactivada y highlighted languages está vacío. Hicimos esto porque tenemos mucho código en idiomas que no son compatibles. Pero ahora se están detectando como C#.
Puedo reproducirlo en Try. Parece que la configuración del sitio autohighlight_all_code no se está respetando. La funcionalidad parece estar habilitada independientemente de si la configuración está marcada o no. La configuración de idiomas resaltados afecta la detección de idiomas, pero si se elimina todo, parece que por defecto se usa csharp cuando detecta algo parecido a código.
El cambio más reciente en el núcleo que involucra el resaltado de sintaxis parece ser la refactorización de @j.jaffeux:
No creo que haya habido ningún retroceso aquí; en el mejor de los casos, antes de mis varias correcciones de hace unas semanas, funcionaba incorrectamente.
Lo que ocurre es que, por defecto, siempre añadimos auto y nohighlight a la lista de clases de código aceptables. Si no defines ningún idioma al crear tu bloque de código, se utilizará el valor de default_code_lang, que por defecto es auto; si lo configuras como nohighlight, deberías obtener el resultado esperado. Ten en cuenta que tendrás que reconstruir el HTML de las publicaciones. Además, probablemente no necesites vaciar highlighted_languages, ya que no tiene efecto si eliges nohighlight.
Esto está ocurriendo en publicaciones completamente nuevas, así que definitivamente algo ha cambiado.
(Y sí, me he dado cuenta de que no necesito una lista de idiomas vacía; ocasionalmente recibimos algo de JavaScript y Python, así que mejor permitir que se resalten si alguien agrega el código.)
Lo que no funciona es que cuando no se selecciona “resaltar automáticamente todo el código”, los bloques de código sin etiquetas siguen siendo resaltados automáticamente.
Los bloques de código con comillas invertidas (```) siempre reciben resaltado automático; los bloques de código con sangría () son los que se ven afectados por esa configuración.
¡Vaya! Bueno… ¿por qué hay una diferencia? ¿Y se puede cambiar?
Además, algo ha cambiado en Discourse, porque los bloques de código con comillas no solían resaltar automáticamente. Llevamos casi dos años con nuestro foro en Discourse. Hasta la actualización más reciente, los bloques de código con comillas no se resaltaban automáticamente.
¿Se puede cambiar eso? Sí, la configuración “resaltar automáticamente todo el código” hace que el comportamiento sea consistente en ambos tipos de bloques de código.
Si nunca deseas el resaltado automático excepto cuando se especifica explícitamente un lenguaje,
Sí, quizás, pero como dije, no veo nada que no funcione como se espera ahora, así que mi suposición hasta ahora es que algo no funcionaba por error antes y que ustedes estaban confiando en ese comportamiento.
Mi suposición es que se detectó como un idioma que no se cargaba correctamente y que terminaba en el bloque sin resaltado.
Hmm, vale. ¿Podemos convertir esto en una solicitud para que la descripción (e incluso el nombre) de la configuración “autohighlight all code” sea más precisa? ¿Podría cambiarse a “autohighlight indented code” con la descripción “Aplicar resaltado de sintaxis a bloques de código con sangría incluso cuando no especificaron explícitamente el idioma.”?
Esto no es nuevo, pero creo que nuestro valor inyectado de nohighlight es incorrecto y debería ser no-highlight. Esto también respalda mi hipótesis de que lo que viste se detectó como un código que no se pudo encontrar y que retrocedió a no-highlight. Haré el cambio.
Queda una pregunta: ¿cómo era C# una opción cuando los idiomas resaltados estaban vacíos? ¿Actúa una configuración vacía como si tuviera la lista predeterminada?
Cuando eliminamos esta clase y luego pedimos a highlightjs que resalte el bloque de código, ya no dependemos del markdown y, al ser un cambio del lado del cliente, las limitaciones de las clases ya no se aplican.
Básicamente:
not auto → añadirá una clase de la lista en el marcado generado que es utilizada por highlightjs
auto → añadirá lang-auto en el marcado generado, que luego se elimina en tiempo de ejecución y permite que highlightjs decida el resaltado
Como otro punto de referencia, nosotros utilizamos text como predeterminado, que es un alias para nohighlight, y hemos obtenido buenos resultados con ello.