Puntuación inteligente sin símbolos IP

¿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?

Soy abogado. Asesoro constantemente sobre marcas registradas y derechos de autor, incluso en foros de Discourse. Aún no he aconsejado a nadie que revise una publicación para añadir un símbolo de copyright o marca registrada, y los no abogados tienden a sobreestimar masivamente la frecuencia con la que son útiles o necesarios. Por otro lado, he editado más publicaciones de las que puedo contar para intentar engañar al renderizador de Markdown y que no renderice el símbolo ©.

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.

9 Me gusta

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.

6 Me gusta

También apoyaría simplemente eliminar (c). No es como si fuera difícil buscar “símbolo de copyright”, copiar y pegar. Los nerds pueden escribir ©. Desde el punto de vista de la usabilidad, tendría una lista con todas las expansiones. Sospecho fuertemente que son más sorprendentes que útiles.

5 Me gusta

Bien, para este caso, el beneficio (un poquito) parece superar el riesgo (bastante).

5 Me gusta

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.

5 Me gusta

Vaya, qué raro que no sea configurable en absoluto. Qué lástima. Así que

(c) (tm) (r) (p) → (c) ™ (r) (p)

3 Me gusta

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.

3 Me gusta

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.

7 Me gusta

A mí también me vuelve loco. Me lo encuentro al menos una vez por semana.

9 Me gusta

Primero, PR auxiliar, corrigiendo la interpretación de (p) y (P): Fix typographer interpretation of `(p)` by kemitchell · Pull Request #761 · markdown-it/markdown-it · GitHub

7 Me gusta

PR para desactivar grupos de reemplazos: Configurable typographer by kemitchell · Pull Request #762 · markdown-it/markdown-it · GitHub

3 Me gusta

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.

3 Me gusta

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.

6 Me gusta

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.

9 Me gusta

¡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.

¡Gracias!

2 Me gusta

Es una configuración del sitio, simplemente desactiva el tipógrafo.

2 Me gusta

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).

2 Me gusta

Necesitas desactivar y luego reconstruir el HTML en las publicaciones que desees.

5 Me gusta

¡Esto ya está muy completo :confetti_ball:

2 Me gusta