Extensions Markdown pour BBCode

J’essaie d’apprendre à écrire des règles Markdown pour implémenter une nouvelle fonctionnalité BBCode en suivant ce guide, mais j’ai beaucoup de mal à comprendre ce qui se passe car il y a tellement de choses qui ne sont pas expliquées :

J’ai également consulté la documentation de markdown-it, mais elle est très succincte et semble surtout être une vue d’ensemble de haut niveau du fonctionnement du système. Voici quelques questions précises que je me pose :

  • Le guide contient cette ligne : // standard markdown it inline extension goes here.
    Quelle est l’extension en ligne standard ? Est-ce ici que l’on définit les règles qui sont envoyées au ruler ? Pourquoi cela retourne-t-il false ?

  • Que sont les types de jetons (token types) ? Je vois des exemples comme 'link_open' et 'html_inline' — d’où viennent-ils ? Existe-t-il une liste statique quelque part de ceux qui sont disponibles ? Puis-je en ajouter de nouveaux ? Comment le analyseur sait-il quoi faire avec ces jetons ?

Comment cela fonctionne-t-il ? Comment l’analyseur sait-il ce que fait 'code_inline' ? Que fait la fonction state.push() et comment est-elle censée être utilisée ?

J’ai l’impression d’être presque en train de « comprendre », mais je pense qu’il me manque certains concepts. J’ai écrit les règles les plus basiques et elles semblent fonctionner — j’ai juste besoin de mieux comprendre pour avancer. Toute aide serait appréciée !

Pourquoi ne regardez-vous pas le plugin BBCode officiel existant qui ajoute la prise en charge de [color], etc. ?

J’ai relu et relu le plugin BBCode officiel sur GitHub - discourse/discourse-bbcode: vBulletin BBCode plugin · GitHub, mais pour l’instant, je ne progresse pas beaucoup et je n’ai toujours pas une bonne compréhension de son fonctionnement interne.

Tout d’abord, j’essaie de créer un bbcode [table] pour commencer. Je me rends compte que Markdown prend déjà en charge les tableaux, mais (en supposant que je puisse ajouter la prise en charge de nos autres bbcodes), nous allons migrer environ 20 millions de publications vers Discourse. Je souhaite donc assurer une rétrocompatibilité correcte pour les bbcodes existants, et la manière dont le caractère pipe est utilisé dans Markdown rend l’extraction des publications pour convertir les tableaux pratiquement impossible.

Mon tag de tableau que j’ai construit jusqu’à présent est continuellement supprimé. Il est présent dans la publication, mais continue d’être (je suppose) retiré par le nettoyeur. Voici ce que j’ai pour le moment :

md.block.bbcode.ruler.push("table", {
    tag: "table",
    wrap: function(token, tagInfo) {
      token.attrs = [['class', "bbcode-table table-style-" + tagInfo.attrs['_default']]];
      return true;
    }
  });

helper.whiteList([
    "table.bbcode-table",
    "table.table-style-*"

J’ai essayé d’autres formats pour la liste blanche et la fonction wrap en me basant sur d’autres exemples que j’ai vus, mais jusqu’à présent, rien ne fonctionne. Je suppose donc qu’il y a quelque chose de fondamental dans le fonctionnement du système que je ne comprends pas. J’essaie de mieux comprendre afin de pouvoir faire fonctionner les choses de manière plus cohérente à l’avenir.

Le tableau est probablement la chose la plus complexe que vous puissiez construire ; je vous recommande vivement de commencer par des choses beaucoup plus simples.

En fait, je vous déconseillerais même d’ajouter la prise en charge du bbcode pour les tableaux, même si vous pouviez l’écrire.

Nous avons une liste simple de balises BBCode que nous essayons de prendre en charge, comme l’a expliqué @Ghan, car nous sommes un forum de plus de 20 millions de messages. Nous ne sommes en aucun cas une petite communauté, et ce n’était pas une décision facile à prendre, mais nous avons déterminé que Discourse est le meilleur logiciel pour nous à l’avenir. Nous avons résolu les problèmes d’importation ; la seule chose qui nous empêche de migrer est de comprendre cette dernière étape. Je peux maintenant être convaincu de supprimer les tableaux, car nous souhaitons abandonner tout BBCode entièrement pris en charge par Discourse ou Markdown. Cependant, les tableaux étaient l’un de ceux qui ne pouvaient pas simplement être facilement convertis en version Markdown, car remplacer les balises td, tr, etc. par la syntaxe Markdown appropriée n’est pas facile, voire presque impossible, à en juger par ce que je peux dire. Donc, les supprimer ne pose pas de problème, même si la conversion n’est pas simple, mais apprendre à le faire nous aidera probablement à résoudre tous les autres problèmes.

Nous avons pu supprimer [h1], par exemple, car c’est en effet simple à modifier, car toutes les balises H doivent simplement devenir le nombre correspondant de #.

Nous avons une liste complète à l’adresse suivante : Tutorial - RpNation - BBcode Guide | RpNation et quelques autres en plus de celles mentionnées dans ce fil ont déjà été supprimées car il était très simple de les trouver et de les remplacer par l’équivalent Markdown.

Je sais que ce post date de 2020, mais comme il n’a jamais reçu de réponse (à part dire « regardez d’autres codes » et « les tableaux sont trop difficiles »), j’ai pensé apporter ma contribution et expliquer comment je peux aider, car j’écris actuellement mon propre plugin bbcode et j’ai dû me débrouiller sans aucune documentation.

J’ai examiné votre syntaxe bbcode [table] et c’est un plugin tout à fait raisonnable à créer, ce n’est qu’un enrobage. Sérieusement, je ne pense pas que Sam ait même regardé le lien que vous avez envoyé, car votre format de tableau bbcode est à peu près le même que le format de tableau HTML, mais avec des balises bbcode.

Ce post a vraiment aidé à expliquer un peu comment faire cela.

Je n’ai pas le temps en ce moment d’expliquer comment faire ce que vous voulez faire (et de tester pour voir si cela fonctionne réellement), donc pour l’instant, je peux vous dire que les types de jetons html_raw et html_block sont très utiles. De plus, la meilleure façon de savoir si cela fonctionne réellement est de mettre console.log() dans la fonction wrap, puis de voir ce que vous recevez réellement dans la console (et de voir si ce que vous faites fonctionne, sans avoir à vous soucier du nettoyeur agressif de discourse).

Nous avons commencé à travailler sur un nouveau plugin bbcode après avoir fait des progrès avec les extensions markdown, mais avons finalement décidé que cela ne fonctionnerait pas aussi bien que nous l’espérions. Nous espérons avoir les 3 derniers environ d’ici cet été, puis migrer peu de temps après.

Cependant, les tableaux n’auront très probablement pas d’équivalent bbcode et les utilisateurs seront invités à utiliser la version markdown. Personne n’aime les tableaux.

Ça a l’air vraiment bien. Je sais que vous avez abandonné les tableaux bbcode, mais si vous voulez, je peux toujours vous aider à créer un script pour que cela fonctionne.

Vous êtes les bienvenus pour aller voir le dépôt, faire des PRs ou tout ce que vous voulez :slight_smile: !