Estou tentando aprender a escrever regras de Markdown para implementar nova funcionalidade BBCode usando este guia, mas estou tendo muita dificuldade em acompanhar o que está acontecendo, pois há muito que não é explicado:
Também verifiquei a documentação do markdown-it, mas ela é muito escassa e parece ser principalmente uma visão geral de alto nível do funcionamento do sistema. Algumas perguntas específicas que tenho:
O guia tem esta linha: // standard markdown it inline extension goes here.
O que é a extensão inline padrão do markdown-it? É aqui que você define as regras que são enviadas para o ruler? Por que isso retorna false?
O que são os tipos de token? Vejo exemplos como 'link_open' e 'html_inline' - de onde vêm esses? Existe uma lista estática em algum lugar do que está disponível? Posso adicionar novos? Como o parser sabe o que fazer com esses?
Como isso funciona? Como o parser sabe o que 'code_inline' faz? O que a função state.push() faz e como ela deve ser usada?
Sinto que estou quase “entendendo”, mas acho que estou perdendo alguns conceitos. Escrevi as regras mais básicas e parece que estão funcionando - só preciso de uma melhor compreensão para avançar. Qualquer ajuda será apreciada!
Primeiro, estou a tentar criar um bbcode [table] para começar. Percebo que o Markdown já tem suporte para tabelas, mas (assumindo que consigo implementar suporte para os nossos outros bbcodes), estaremos a migrar cerca de 20 milhões de posts para o Discourse. Por isso, quero garantir que a compatibilidade retroativa funcione corretamente para os bbcodes existentes, e a forma como o caractere pipe é usado no Markdown torna praticamente impossível processar os posts para converter tabelas.
A minha tag table construída até agora continua a ser apagada. Ela está presente no post, mas continua a ser removida (presumo eu) pelo scrubber. Isto é o que tenho no momento:
Tentei outras formatações da whitelist e da função wrap com base em outros exemplos que vi, mas até agora nada está a funcionar. Acredito que há algo fundamental sobre o funcionamento do sistema que não compreendo. Estou a tentar obter uma melhor compreensão para que consiga fazer as coisas funcionarem de forma mais consistente daqui para a frente.
Temos uma lista simples de bbcodes que estamos tentando suportar, como @Ghan explicou, porque somos um fórum com mais de 20 milhões de posts. De forma alguma somos uma comunidade pequena, e essa não foi uma decisão fácil que tomamos, mas determinamos que o Discourse é o melhor software para nós daqui para frente. Já resolvemos a importação; a única coisa que está nos impedindo de migrar é apenas resolver esse último passo. Agora, posso ser convencido a abandonar as tabelas, já que queremos eliminar qualquer BBCode que o Discourse ou o Markdown suportem totalmente. No entanto, as tabelas foram um caso que não poderia ser simplesmente reformatado para a versão em Markdown, pois substituir td, tr e outros elementos de tabela pela sintaxe correta do Markdown não é fácil ou, até onde posso dizer, quase impossível. Então, abandoná-las é aceitável, mesmo que não possam ser reformatadas facilmente; mas aprender a fazê-lo provavelmente nos ajudará a resolver tudo o mais.
Fomos capazes de abandonar [h1], por exemplo, porque esse caso é realmente simples de alterar, já que todas as tags H precisam se tornar o número equivalente de #.
Temos uma lista completa em: Tutorial - RpNation - BBcode Guide | RpNation e alguns outros além dos mencionados neste tópico já foram abandonados porque eram muito simples de encontrar e substituir pelo equivalente em Markdown.
Sei que esta postagem é de 2020, mas como ela nunca foi respondida (além de apenas dizer “olhe outro código” e “tabelas são muito difíceis”), pensei em contribuir e explicar como posso ajudar, já que estou escrevendo meu próprio plugin bbcode e tive que lutar sem nenhuma documentação.
Dei uma olhada na sua sintaxe de bbcode [table], e é um plugin perfeitamente razoável de se fazer, é apenas um encapsulamento. Sério, acho que o Sam nem olhou o link que você enviou, porque o formato do seu bbcode de tabela é praticamente o formato de tabela HTML, mas com tags bbcode.
Esta postagem realmente ajudou a explicar um pouco sobre como fazer isso.
Não tenho tempo agora para explicar como fazer o que você quer fazer (e testar para ver se realmente funciona), então, por enquanto, posso dizer que os tipos de token html_raw e html_block são bem úteis. Além disso, a melhor maneira de descobrir se está realmente funcionando é colocar console.log() na função wrap e, em seguida, ver o que você está realmente recebendo de volta no console (e ver se o que você está fazendo está funcionando, sem ter que se preocupar com o sanitizador agressivo do Discourse).
Começamos a trabalhar em um novo plugin bbcode depois de fazermos algum progresso com as extensões markdown, mas, no final, decidimos que não funcionaria tão bem quanto esperávamos. Esperamos ter os últimos 3 mais ou menos até este verão e, em seguida, migrar logo depois disso.
No entanto, as tabelas provavelmente não terão um equivalente em bbcode e os usuários serão instruídos a usar a versão markdown. Ninguém gosta de tabelas.