¿Sería posible ajustar la configuración actual del tipógrafo de Markdown (también conocido como «puntuación inteligente») para habilitar los signos de puntuación Unicode, como las comillas y los guiones, pero deshabilitar (c), ™ y, potencialmente, otros glifos especializados de ese tipo?
Esto surge con especial frecuencia en listas enumeradas. Por ejemplo:
(a) manzana
(b) plátano
(c) ¿copyright?
(d) fecha
Este estilo de enumeración es muy común en leyes, contratos, políticas y otros escritos formales influenciados por el estilo legal. También es un estilo de esquema muy habitual. Fue parte del estilo de esquema «estándar» que se me enseñó como estudiante de primaria en los Estados Unidos.
Veo que la configuración actual ofrece cierta flexibilidad en cuanto a la puntuación, pero, hasta donde puedo ver, no ofrece ninguna forma de habilitar la puntuación inteligente sin activar también los símbolos inteligentes.
No tengo una opinión muy definida al respecto. Creo que «necesitar» escribir el símbolo de copyright es tan raro que se puede eliminar este atajo… El equilibrio entre la utilidad extremadamente rara y el formato de lista (a) (b) (c) bastante común (pero poco estético)… Estoy de acuerdo en eliminar este atajo en particular, @sam.
Esto no parece muy configurable; necesitaríamos parchear markdown.it para admitir esta flexibilidad o simplemente escribir nuestro propio prettify basado en markdown.it.
La única solución trivial es simplemente desactivar toda la funcionalidad.
La ventaja es que el motor es bastante configurable; podríamos desactivar las reglas en markdown.it, copiar el código e implementar nuestras propias sustituciones, tal como lo hizo @Roman.
Unos días de ingeniería para limpiarlo también serían una pena, además de enviar el mismo código dos veces, pero es algo inevitable si vamos a hacer un fork.
A partir del commit 7b8969ce5cb2edc54f2c1aa39a85a3a08076337d en master de markdown-it, el archivo de código fuente relevante es lib/rules_core/replacements.js y el fixture de prueba correspondiente es test/fixtures/markdown-it/typographer.txt.
Todas las sustituciones están codificadas de forma rígida. Incluyen (c) → (c), (tm) → ™, (r) → (r) y (p) → (p), las cuales se agrupan como “abreviaturas con ámbito”.
Por lo que vale, no obtengo (p) para §. Eso casi con seguridad debería ser ℗, el símbolo de fonoregistro, en su lugar.
Voy a investigar esto un poco más a fondo para ver si puedo proponer un parche que haga que la función “typographer” sea más configurable.
El mantenedor es muy receptivo. Cierra mis PRs en cuestión de minutos ;-P.
Lo que estoy leyendo es que le cuesta muchísimo introducir cambios disruptivos, incluso en nuevas versiones mayores, incluso para cosas como que (P) se renderice como §. También es alérgico a permitir opciones al estilo typographer: {A: true, B: false}, incluso cuando typographer: true sigue funcionando, debido a la complejidad percibida.
Estoy leyendo entre líneas, y es un ruso que escribe en inglés. Pero tengo la sensación de que considera que markdown-it está terminado.
Con toda gratitud, podría valer la pena hacer un fork de la implementación, reescribirla como Módulos ES y eliminar toda la funcionalidad tipo plugin que actualmente está incluida, tanto la de creación de enlaces como la de reemplazos, incluidas las sustituciones de puntuación del tipógrafo.
El mantenedor no está interesado en puntos sobre código duplicado en bundles sin números. Tampoco le interesan cambios que no rompan la API y que no sean “requeridos por el 100% de los usuarios” ni que bloqueen la implementación de plugins. Esto genera un cierto dilema, ya que están distribuyendo dos submódulos muy orientados a plugins, para la creación de enlaces y la puntuación inteligente, que, bajo esa filosofía, deberían estar en sus propios paquetes npm pequeños. Sucede.
Para contextualizar, ha habido lanzamientos significativos en markdown-it en un pasado bastante reciente. Cabe destacar una mejora de rendimiento de Alex Kocharin en noviembre del año pasado.
Para corregir (c), manejar (p) y hacer lo que queramos con flechas y cosas por el estilo, lo mejor será probablemente proponer un parche que elimine los submódulos de creación de enlaces y puntuación inteligente del núcleo y los cargue en su lugar como plugins en Discourse. Utilizar una GitHub Action o un trabajo programado (cron job) para vigilar la rama master de markdown-it e intentar un rebasing automático. Si el mantenedor sigue siendo tan conservador con los cambios, el parche debería aplicarse sin problemas durante mucho tiempo. A menos que den un gran salto, como reescribirlo como Módulos ES en lugar de CommonJS.
Lo hemos discutido internamente y hemos decidido que vamos a hacer un hard fork de typographer.
Básicamente, desactivaremos typographer en markdown.it e implementaremos una copia en Discourse. markdown.it es increíblemente extensible, esto es principalmente “copiar y pegar”.
Una vez que se complete el copiar y pegar, podremos agregar pruebas y personalizar y modificar algunas de las reglas.
¡Hola! Disculpa por retomar esta conversación. Como estoy buscando una forma de desactivar ... -> …, quería saber si esta funcionalidad ha avanzado de alguna manera y si en el futuro podré habilitar o deshabilitar reglas individuales.
Bueno, ya lo intenté, pero al parecer no funciona. No importa si activo o desactivo el tipógrafo, las sustituciones siempre se realizan (y, por cierto, (c) no parece funcionar).