Markdown-Erweiterungen für BBCode

Ich versuche zu lernen, wie man Markdown-Regeln schreibt, um neue BBCode-Funktionalitäten mithilfe dieses Leitfadens umzusetzen. Allerdings habe ich große Schwierigkeiten, dem Inhalt zu folgen, da vieles unerklärt bleibt:

Ich habe mir auch die Dokumentation zu markdown-it angesehen, doch diese ist sehr knapp und scheint hauptsächlich einen groben Überblick über die Funktionalität des Systems zu geben. Hier sind einige konkrete Fragen, die ich habe:

  • Der Leitfaden enthält diese Zeile: // standard markdown it inline extension goes here.
    Was ist die Standard-Inline-Erweiterung? Ist dies der Ort, an dem man die Regeln definiert, die an den Ruler übergeben werden? Warum wird false zurückgegeben?

  • Was sind Token-Typen? Ich sehe Beispiele wie 'link_open' und 'html_inline' – woher kommen diese? Gibt es irgendwo eine statische Liste der verfügbaren Typen? Kann ich neue hinzufügen? Wie weiß der Parser, was er mit diesen tun soll?

Wie funktioniert das? Wie weiß der Parser, was 'code_inline' bewirkt? Was macht die Funktion state.push() und wie soll sie verwendet werden?

Ich habe das Gefühl, dass ich kurz davor bin, es zu verstehen, aber mir scheinen noch einige Konzepte zu fehlen. Ich habe die einfachste Regel geschrieben, und sie scheint zu funktionieren – ich brauche nur ein besseres Verständnis, um weiterzukommen. Jegliche Hilfe wäre sehr willkommen!

Warum schaust du dir nicht das vorhandene offizielle BBCode-Plugin an, das z. B. die Unterstützung für [color] hinzufügt?

Ich habe mich wiederholt mit dem offiziellen BBCode-Plugin unter GitHub - discourse/discourse-bbcode: vBulletin BBCode plugin · GitHub beschäftigt, aber bisher habe ich kaum Fortschritte gemacht und verstehe die internen Abläufe immer noch nicht richtig.

Zunächst versuche ich, ein [table]-BBCode-Tag zu erstellen. Mir ist bewusst, dass Markdown bereits Tabellen unterstützt, aber (angenommen, ich kann Unterstützung für unsere anderen BBCodes implementieren) werden wir rund 20 Millionen Beiträge nach Discourse migrieren. Daher möchte ich eine ordnungsgemäße Abwärtskompatibilität für bestehende BBCodes gewährleisten. Die Art und Weise, wie das Pipe-Zeichen in Markdown verwendet wird, macht das Durchsuchen der Beiträge zur Konvertierung von Tabellen im Grunde unmöglich.

Mein bisher erstelltes table-Tag wird ständig gelöscht. Es ist im Beitrag vorhanden, scheint aber (vermute ich) weiterhin vom Scrubber entfernt zu werden. Hier ist mein aktueller Stand:

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-*"

Ich habe andere Formatierungen der Whitelist und der wrap-Funktion basierend auf anderen Beispielen ausprobiert, die ich gesehen habe, aber bisher funktioniert nichts. Daher gehe ich davon aus, dass es etwas Grundlegendes an der Funktionsweise des Systems gibt, das ich nicht verstehe. Ich versuche, ein besseres Verständnis zu entwickeln, damit ich in Zukunft konsistenter funktionierende Lösungen erstellen kann.

Eine Tabelle ist wahrscheinlich das Komplexeste, das du erstellen könntest. Ich empfehle dir dringend, mit viel einfacheren Dingen zu beginnen.

Tatsächlich würde ich davon abraten, BBCode-Tabelle-Unterstützung zu haben, selbst wenn du sie schreiben könntest.

Wir haben eine einfache Liste von BB-Codes, die wir unterstützen möchten, wie @Ghan erklärt hat, da wir eine Community mit über 20 Millionen Nutzern sind. Wir sind keineswegs eine kleine Community, und dies war keine leichte Entscheidung. Dennoch sind wir zu dem Schluss gekommen, dass Discourse die beste Software für unsere zukünftige Entwicklung ist. Der Import ist bereits geklärt; das einzige Hindernis für die Migration besteht nun darin, diesen letzten Schritt zu meistern. Ich könnte mich gerne davon überzeugen lassen, Tabellen fallen zu lassen, da wir jeden BB-Code entfernen möchten, der von Discourse oder Markdown vollständig unterstützt wird. Allerdings war Tabellen einer der Fälle, die sich nicht einfach in die Markdown-Version umwandeln ließen, da es nicht einfach – oder vielmehr nahezu unmöglich ist, so viel ich sehe – die Tabellen-Elemente wie td, tr usw. in die korrekte Markdown-Syntax zu übersetzen. Es ist also in Ordnung, sie fallen zu lassen, selbst wenn sie nicht einfach umgewandelt werden können. Allein das Erlernen des Prozesses wird uns höchstwahrscheinlich helfen, alles Weitere zu verstehen.

Wir konnten beispielsweise [h1] entfernen, da dies tatsächlich einfach anzupassen ist, da alle H-Tags einfach durch die entsprechende Anzahl von # ersetzt werden müssen.

Eine vollständige Liste finden Sie unter: Tutorial - RpNation - BBcode Guide | RpNation. Einige weitere BB-Codes, die nicht in diesem Thread erwähnt werden, wurden bereits entfernt, da sie sich sehr einfach durch Suchen und Ersetzen in das entsprechende Markdown-Format umwandeln ließen.

Ich weiß, dass dieser Beitrag aus dem Jahr 2020 stammt, aber da er nie beantwortet wurde (außer mit den Worten „schau dir anderen Code an“ und „Tabellen sind zu schwierig“), dachte ich, ich steuere etwas bei und erkläre, wie ich helfen kann, da ich gerade mein eigenes bbcode-Plugin schreibe und mich mit absolut keiner Dokumentation herumschlagen musste.

Ich habe mir deine [table] bbcode-Syntax angesehen, und es ist ein absolut vernünftiges Plugin, das man erstellen kann, es ist nur etwas umhüllend. Ernsthaft, ich glaube nicht, dass Sam sich den Link angesehen hat, den du geschickt hast, denn dein Tabellen-bbcode-Format ist so ziemlich das HTML-Tabellenformat, aber mit bbcode-Tags.

Dieser Beitrag hat wirklich geholfen, ein wenig zu erklären, wie man das macht.

Ich habe im Moment keine Zeit, zu erklären, wie man das macht, was du tun willst (und es zu testen, um zu sehen, ob es tatsächlich funktioniert), also kann ich dir im Moment sagen, dass die Token-Typen html_raw und html_block ziemlich praktisch sind. Außerdem ist der beste Weg, um herauszufinden, ob es tatsächlich funktioniert, console.log() in die wrap-Funktion einzufügen und dann zu sehen, was man tatsächlich in der Konsole zurückbekommt (und zu sehen, ob das, was man tut, funktioniert, ohne sich um Diskurse aggressiven Sanitizer kümmern zu müssen).

Wir haben mit der Arbeit an einem neuen bbcode-Plugin begonnen, nachdem wir mit den Markdown-Erweiterungen einige Fortschritte gemacht hatten, uns aber letztendlich entschieden haben, dass es nicht so gut funktionieren würde, wie wir gehofft hatten. Wir hoffen, die letzten 3 ungefähr bis diesen Sommer fertig zu haben und dann kurz darauf zu migrieren.

Tabellen werden jedoch höchstwahrscheinlich keine bbcode-Entsprechung erhalten und die Benutzer werden angewiesen, die Markdown-Version zu verwenden. Niemand mag Tabellen.

Das sieht wirklich gut aus. Ich weiß, dass du die BBCode-Tabellen aufgegeben hast, aber wenn du möchtest, kann ich dir immer noch helfen, ein Skript zu erstellen, damit es funktioniert.

Sie können sich gerne das Repository ansehen, PRs erstellen oder was auch immer Sie sonst noch möchten :)!