Ich habe eine Trichterweb -Datei, deren @{... @} Codeblöcke in ein JavaScript -Programm verwickelt sind. Ich möchte hübscher verwenden, um diese Codeblöcke zu formatieren, während ich die Non-Code-Trichterquelle unverändert bleibt. BR /> Ich verwende ein Node.js -Programm, das die Dateizeile für Zeile verarbeitet. Wenn es sich nicht im Status "Codeblock" befindet, kopiert es einfach jede Zeile in die Ausgabe. Aber: < /p>
- Wenn eine Zeile mit einer Code -Block -Definition@$@@{< /code> beginnt, gibt sie diese Zeile aus. Erstellt einen neuen "Codepuffer" und wechselt in den Status "Code Block". /> Wenn eine Zeile mit beginnt @} verlässt den Status "Code Block", verarbeitet den Codepuffer mit schöneren und gibt die resultierenden Zeilen aus, gefolgt von der aktuellen Zeile.
Das
Problem ist, dass der Inhalt des Codeblocks @{... @} im Codepuffer normalerweise kein JavaScript-Programm enthält, das von schöner als fehlerfrei angesehen wird. Dies liegt daran, dass FunnelWeb ohne Rücksicht auf die Programmiersprache, die sie enthalten, in andere Codeblöcke einfügen und in andere Codeblöcke einfügen. Insbesondere < /p>
Ein Codeblock kann @ < /code> auf andere Codeblöcke enthalten < /li>
< LI> Ein Codeblock enthält oft eine Methode einer Klasse und sieht aus wie
Code: Select all
method(args) {...}
< /code>
und schöner lehnt dies in Abwesenheit der Umgebung abclass ClassName {...}
< /code>
< /li>
< /ul>
Um diese beiden Probleme zu umgehen, mein Knoten.js Programm < /p>
< Br/> Wraps@
In der Kommentarsyntax wie /*@*/ bevor schöner Formatierung /> Konvertiten Eine uneinheitliche Methode (args) { in die Funktion/*m*/methode (args) { bevor schöner Formatierung Methode (args) { in die Funktion/*s*/methode (args) { vor hübscher Formatierung und konvertiert sie zurück danach.
Code: Select all
code = code
.replaceAll("function /*s*/", "static")
.replaceAll("function /*m*/ ", "")
.replace(/\/\*|\*\//g, "");
< /code>
Und wenn ein Codeblock immer noch nicht von schöneren formatiert werden kann, wird der nicht formatierte Code ausgegeben. formatiert sind Einzeiler wie < /p>
@$@+=@{
ClassName,
@}
Wieder meine Frage: Hat jemand dies versucht und einen besseren Ansatz gefunden?