Ich schreibe seit einer Weile einen Text-Editor mit Syntax-Highlighting + Validierung von Doxygen Dokumentationscode.
Was ist Doxygen?
Doxygen ist ein Dokumentationsgenerator für C/C++ Code, ähnlich wie JavaDoc oder die XML-Docs in C#.
Man kann damit C/C++ Code vollständig dokumentieren und darüber hinaus noch spezielle Seiten mit Sektionen anlegen, darin verlinken, Code-Beispiele einbauen, etc.
Als Beispiel hier die Dokumentation einer Library von mir:
https://www.libfpl.org/docs/index.html
Und so sieht der Doxygen-Source dazu aus:
https://raw.githubusercontent.com/f1nalspace/final_game_tech/master/final_platform_layer.docs
Warum das Rad neu erfinden?
Tja es gibt hier praktisch kein Rad, was es allerdings gibt ist halbgares Syntax-Highlighting für Doxygen - aber das wars dann auch. Validierung macht aber kein Editor, z.b. ob ein "ref" auf eine tatsächlich existierende Referenz zeigt oder eine "subpage" auf eine nicht existierende Seite zeigt usw.
Daher schreibe ich das ganze selbst, mit folgendem Feature-Set - auch mich und meine C/C++ Projekte abgestimmt:
- Standard-Editor mit mehreren Tabs (Laden/Speichern, Kopieren/Einfügen, Suchen & Ersetzen, etc.)
- Syntax-Highlighting für C/C++
- Syntax-Highlighting für alle Doxygen Commands & HTML Tags
- Validierung von Doxygen Commands (ref, subpage, code, etc.)
- Unterstützung für Gruppen/Sektionen/Seiten inkl. Verschachtelung
- C/C++ SyntaxAnalyse von "code"-Blöcken
- C/C++ Dokumentationsblockanalyse (Doxygen oder Javadoc style)
- Symbolsuche für C/C++ sowie für Doxygen
- Spezielle Analyse für C/C++ Doxygen für meine Projekte
- Integration des Doxygen-Compilers (doxygen.exe)
Womit wirds gemacht?
Visual Studio und C# und als Editorgrundelement nutze ich Scintilla.net, allerdings kann ich leider die integrierten Lexer nicht nutzen - weil diese kein Mixing unterstützen :-(
Daher muss ich das C/C++/Doxygen/HTML Lexing vollkommen selber machen. Dazu kommt dann noch nen Syntax-Parser für C/C++, damit ich Definitionen rausziehen und später dann auch Code validieren kann.
Wie funktioniert das Ganze:
Zu aller erst mal, wird der gesamte C/C++ Code in Tokens umgewandelt (Lexikalische Analyse). Danach werden alle Kommentarblöcke für Doxygen /** /*! oder //! In Doxygen Tokens umgewandelt. Normaler Text wird mit nem HTML Lexer verarbeitet, damit es auch für Tags Syntax-Highlighting gibt. Als letzten Schritt, werden alle "code"-Blöcke von Doxygen mit dem C/C++ Lexer verarbeitet, damit auch diese Highlighting bekommen.
Damit kann man dann alle diese Tokens farblich hervorheben. Danach beginnt dann das eigentliche (Parsing) von Doxygen und C/C++.
Was es nicht ist:
Es soll kein C/C++ Editor werden, daher liegt der Fokus komplett auf Doxygen.
Wo finde ich das ganze:
https://github.com/f1nalspace/doxygeneditor/tree/develop