Pedro Duarte hat eine Wunschliste für gestylte Code-Blöcke in Blogbeiträgen und Dokumentationen erstellt und dann eine perfekte Lösung für diese Wunschliste von Hand erstellt. Zum Beispiel eine Funktion, um bestimmte Zeilen oder Wörter innerhalb des Code-Blocks hervorzuheben. Der Zeilen-Hervorheber ist einzigartig darin, dass er nur die hervorgehobenen Zeilen syntaktisch hervorhebt und den Rest grau lässt, was eine nette Art ist, den Fokus zu lenken. Und der Wort-Hervorheber funktioniert über eine RegEx. Pedro merkt an, dass dies kein Tutorial ist, sondern nur eine Präsentation all der Funktionen, die mit einer bestehenden Kombination aus benutzerdefiniertem Code und vorhandenen Bibliotheken zusammengesetzt wurden. Es ist ziemlich spezifisch für React + Next.js + MDX, aber der Kern basiert anscheinend auf rehype, was für mich neu ist.

Die Ergebnisse sind ziemlich verdammt gut aussehende, moderne Code-Blöcke, wenn Sie mich fragen! Gleichzeitig halte ich es für genauso bemerkenswert, was nicht da ist, im Gegensatz zu dem, was da ist. Ich habe in der Vergangenheit (und ausprobiert) sehr funktionsreiche Code-Blöcke gesehen, mit Funktionen wie einer Schaltfläche zum Kopieren in die Zwischenablage, einer Schaltfläche zum Anzeigen des reinen Codes und zum Exportieren in beliebige Dienste. Pedros Code-Blöcke haben nicht einmal die Option, die verwendete Sprache anzuzeigen.
Die Wunschliste jedes Einzelnen ist anders. Eine Sache, die nicht auf Pedros Wunschliste steht, ist serverseitiges Rendering, aber man kann auf dem Blogbeitrag selbst sehen, dass es damit einwandfrei funktioniert (vermutlich ist es nur Next.js am Werk). Darauf bin ich ziemlich neidisch. Auch wenn wir letztendlich beide Prism.js als Syntax-Hervorheber verwenden, verwende ich es nur clientseitig. Mir fällt jetzt ein, dass ich das alles vielleicht in einem Cloudflare Worker durch die Verwendung von HTMLRewriter erledigen könnte – was bedeuten würde, dass es im Wesentlichen so aussieht, als wäre es serverseitig erledigt, und ich könnte die clientseitige Kopie von Prism entfernen. Aber vielleicht noch besser wäre es, wenn ich es als WordPress-Plugin machen würde. Im Grunde ein PHP-Port von Prism, was eine gewaltige Aufgabe zu sein scheint.
Meine Wunschliste für ein Code-Block-Plugin…
- Syntaxhervorhebung (sowohl auf der gerenderten Website als auch während der Erstellung)
- Serverseitig gerendertes
<span class="token-foo">für Syntaxhervorhebung - Funktioniert gut mit den nativen WordPress-Block-Editor-Code-Blöcken (
```). Zum Beispiel erkennt das Einfügen eines Code-Blocks automatisch den richtigen Block und verwendet ihn. Einfach zu konvertierender Code von und zu dieser Art von Block. - Optionale Zeilenhervorhebung
- Optionale Zeilennummern
- Optionale Worthervorhebung
- Optionale Anzeige der Sprache (und die Möglichkeit, diese Bezeichnung zu überschreiben)
- Sehr sauber kopieren und einfügen
- Keine Notwendigkeit, Code während der Erstellung zu escapen
- Freiheit, nach Belieben auf dem Frontend zu stylen (für Modi, Themen, benutzerdefinierte Scrollbars usw.). Das Stylen von Code-Blöcken hat eine Million Dinge zu beachten, daher sollten kluge Standardeinstellungen wahrscheinlich mit dem Plugin geliefert werden, aber einfach zu überschreiben sein.
- Erweiterungsziel: Kann es auch irgendwie bei
Inline-Code helfen?
Ich habe highlight.php (ein Port von highlight.js) in Kombination mit PHPs DomDocument-Funktionen verwendet, um die
post_contentvon WordPress-Posts zu parsen. Das hätte Sie zur Hälfte dorthin gebracht.Ich arbeite gerade tatsächlich an einem Projekt, das "Code Syntax Block" verwendet, nicht schlecht. Im Backend muss ich jedoch einige meiner Code-Blöcke manuell bearbeiten, um einen guten Kontrast zu erzielen. Insgesamt hat es die meisten Dinge auf Ihrer Liste (ich habe ziemlich die gleichen), und es erfüllt seinen Zweck ziemlich gut. Könnte verbessert werden, aber das ist normalerweise bei fast allem der Fall, daher ist es wahrscheinlich genau dort, wo es jetzt sein sollte.
Ich weiß, dass ich hier etwas spät dran bin, aber ich habe kürzlich einen WordPress-Block geschrieben, der meiner Meinung nach viele dieser Funktionen abdeckt.
https://wordpress.org/plugins/code-block-pro/
Und eine kleine Demo in einem Tweet: https://twitter.com/kevinbatdorf/status/1567501941432778755
Er ist nur für den Block-Editor gedacht und wird von der vs-Code-Engine angetrieben. Sie könnten ihn auch im Headless-Modus ausführen, da die Transformationen während der Bearbeitung (in Echtzeit) angewendet werden.
Ich werde die obige Liste für zukünftige Funktionsverbesserungen berücksichtigen. Feedback ist ebenfalls willkommen!