Python-Bindings für libclang?
Verfasst: Sonntag 20. Februar 2011, 12:22
Pygments tut sich schwer, Objective-C-Code zu highlighten. Ich hatte irgendwann einmal aufgeschnappt, dass libclang* zum Syntaxhighlighting benutzt werden kann, ja Xcode4 das auch genau so macht. Da mir eine Lösung unter OS/X völlig ausreicht, hatte ich gerade die verrückte Idee, ich könnte das ja mal versuchen. Doch mein Verlangen, das in C zu programmieren, ist eher gering. Daher dachte ich an Python... vielleicht bin ich auch gerade einfach nur frustriert, weil das alles nicht so reibungslos funktioniert, wie ich gehofft hatte.
* die clang** zugrunde liegende Bibliothek für das Parsen und Analysieren von C(++) und Objective-C(++) Code
** der C(++) und Objective-C(++)-Compiler von LLVM***
*** die low level virtual machine
Stefan
PS: Bevor jemand sagt, man könnte ja Pygments verbessern: Das halte ich für ähnlich kompliziert. Einen Fehler hatte ich schon gefunden und fixt. Fehlende Unicode-Escapes und das __block-Schlüsselwort hatte ich auch schon ergänzt. Doch prinzipbedingt kann ein auf regulären Ausdrücken basierender Lexer nicht zählen und wenn man Casts bzw. Typdeklarationen mit Blöcken (z.B. (int (^)(int a)) ) oder einfach nur message sends korrekt parsen will, muss man für jede Klammer Pygments Stacking-Mechanismus nutzen, was den Lexer sehr aufwendig macht -- oder es wie der DelphiLexer macht, komplett "from scratch" machen. Ach, und mir fällt gerade auf, wo ich noch mal auf die regulären Ausdrücke schaue, dass der RE für Character-Konstanten auch nicht korrekt ist und auch ihm das \u fehlt. Den Datentyp unichr kennt Pygments auch noch nicht.
PPS: Ich vermute, github nutzt ebenfalls Pygments. In .h-Dateien. Könnte Pygments nicht mal sagen, dass .h immer für Objective-C steht, damit @interface und usw. nicht immer als Fehler dargestellt werden?
* die clang** zugrunde liegende Bibliothek für das Parsen und Analysieren von C(++) und Objective-C(++) Code
** der C(++) und Objective-C(++)-Compiler von LLVM***
*** die low level virtual machine
Stefan
PS: Bevor jemand sagt, man könnte ja Pygments verbessern: Das halte ich für ähnlich kompliziert. Einen Fehler hatte ich schon gefunden und fixt. Fehlende Unicode-Escapes und das __block-Schlüsselwort hatte ich auch schon ergänzt. Doch prinzipbedingt kann ein auf regulären Ausdrücken basierender Lexer nicht zählen und wenn man Casts bzw. Typdeklarationen mit Blöcken (z.B. (int (^)(int a)) ) oder einfach nur message sends korrekt parsen will, muss man für jede Klammer Pygments Stacking-Mechanismus nutzen, was den Lexer sehr aufwendig macht -- oder es wie der DelphiLexer macht, komplett "from scratch" machen. Ach, und mir fällt gerade auf, wo ich noch mal auf die regulären Ausdrücke schaue, dass der RE für Character-Konstanten auch nicht korrekt ist und auch ihm das \u fehlt. Den Datentyp unichr kennt Pygments auch noch nicht.
PPS: Ich vermute, github nutzt ebenfalls Pygments. In .h-Dateien. Könnte Pygments nicht mal sagen, dass .h immer für Objective-C steht, damit @interface und usw. nicht immer als Fehler dargestellt werden?