Estoy intentando aprender a escribir reglas de Markdown para implementar nueva funcionalidad BBCode usando esta guía, pero me resulta muy difícil seguir lo que está sucediendo ya que hay mucho sin explicar:
También revisé la documentación de markdown-it, pero es muy escasa y parece ser principalmente una visión general de alto nivel del funcionamiento del sistema. Tengo algunas preguntas específicas:
La guía tiene esta línea: // standard markdown it inline extension goes here.
¿Qué es la extensión en línea estándar de Markdown It? ¿Es aquí donde se definen las reglas que se envían al regulador (ruler)? ¿Por qué devuelve false?
¿Qué son los tipos de token? Veo ejemplos como 'link_open' y 'html_inline'… ¿de dónde provienen? ¿Existe alguna lista estática de lo que está disponible? ¿Puedo agregar nuevos? ¿Cómo sabe el解析ador qué hacer con estos?
¿Cómo funciona esto? ¿Cómo sabe el解析ador qué hace 'code_inline'? ¿Qué hace la función state.push() y cómo se pretende utilizar?
Siento que estoy cerca de “entenderlo”, pero creo que me faltan algunos conceptos. He escrito las reglas más básicas y parece que están funcionando; solo necesito una mejor comprensión para avanzar. ¡Agradezco cualquier ayuda!
En primer lugar, estoy intentando crear un bbcode de [tabla] para empezar. Sé que Markdown ya tiene soporte para tablas, pero (asumiendo que puedo implementar soporte para nuestros otros bbcodes) migraremos alrededor de 20 millones de publicaciones a Discourse, por lo que quiero que la compatibilidad con versiones anteriores funcione correctamente para los bbcodes existentes. Además, la forma en que se utiliza el carácter de barra vertical en Markdown hace que el raspado de publicaciones para convertir tablas sea básicamente imposible.
Mi etiqueta de tabla, construida hasta ahora, sigue siendo eliminada. Está presente en la publicación, pero continúa (asumo) siendo eliminada por el limpiador. Esto es lo que tengo en este momento:
He probado otros formatos de la lista blanca y de la función wrap basándome en otros ejemplos que he visto, pero hasta ahora nada funciona. Asumo que hay algo fundamental sobre cómo funciona el sistema que no entiendo. Estoy tratando de comprenderlo mejor para poder hacer que las cosas funcionen de manera más consistente en el futuro.
Tenemos una lista sencilla de códigos BB que intentamos compatibilizar, como explicó @Ghan, porque somos un foro de más de 20 millones de mensajes. De ninguna manera somos una comunidad pequeña y esta no fue una decisión fácil de tomar, pero hemos determinado que Discourse es el mejor software para nosotros de cara al futuro. Hemos solucionado la importación; lo único que nos impide migrar es resolver este último paso. Ahora, podría convencérseme de eliminar las tablas, ya que queremos prescindir de cualquier código BB que Discourse o Markdown soporten plenamente. Sin embargo, las tablas fueron un caso que no se podía simplemente “reconstruir” fácilmente en la versión de Markdown, porque sustituir td, tr, etc., por la sintaxis correcta de Markdown no es fácil o, más bien, es casi imposible, por lo que puedo decir. Así que eliminarlas está bien, incluso si no se pueden reconstruir fácilmente, pero aprender a hacerlo probablemente nos ayude a resolver todo lo demás.
Fuimos capaces de eliminar [h1], por ejemplo, porque ese caso es realmente sencillo de modificar, ya que todas las etiquetas H solo necesitan convertirse en el número equivalente de #.
Tenemos una lista completa en: Tutorial - RpNation - BBcode Guide | RpNation y algunos códigos más además de los mencionados en este hilo ya han sido eliminados porque eran muy sencillos de encontrar y reemplazar por su equivalente en Markdown.
Sé que esta publicación es de 2020, pero dado que nunca se respondió (aparte de decir “mira otro código” y “las tablas son demasiado difíciles”), pensé en aportar y explicar cómo puedo ayudar, ya que actualmente estoy escribiendo mi propio plugin de bbcode y tuve que luchar sin documentación alguna.
Eché un vistazo a tu sintaxis de bbcode [table] y es un plugin perfectamente razonable de hacer, solo son algunos envoltorios. En serio, no creo que Sam siquiera mirara el enlace que enviaste, porque tu formato de bbcode de tabla es prácticamente el formato de tabla HTML, pero con etiquetas de bbcode.
Esta publicación realmente ayudó a explicar un poco sobre cómo hacer esto.
No tengo tiempo ahora para explicar cómo hacer lo que quieres hacer (y probarlo para ver si realmente funciona), así que por ahora puedo decirte que los tipos de token html_raw y html_block son bastante útiles. Además, la mejor manera de averiguar si realmente está funcionando es poner console.log() en la función wrap y luego ver qué estás recibiendo realmente en la consola (y ver si lo que estás haciendo funciona, sin tener que preocuparte por el agresivo sanitizador de Discourse).
Comenzamos a trabajar en un nuevo plugin de bbcode después de que hicimos algunos avances con las extensiones de markdown, pero finalmente decidimos que no iba a funcionar tan bien como esperábamos. Esperamos tener los últimos 3 más o menos para este verano y luego migrar poco después.
Sin embargo, es muy probable que las tablas no tengan un equivalente en bbcode y se instruirá a los usuarios a usar la versión de markdown. A nadie le gustan las tablas.