Coder gesucht

Mithilfe an diesem Forum - Syntax Highlighting

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Coder gesucht
Ja genau, “we want you” is back again…

Das mag jetzt für viele etwas ungünstig kommen, aber manche haben vielleicht doch noch etwas Zeit zwischen den Klausuraufgaben oder Lust, mal was anderes als Java zu machen? Naja, however.

Mir gefällt das praktisch überhaupt nicht, dass die ganzen Code-Blöcke (derer es in diesem Forum demnächst wohl noch mehr geben wird) alle rot auf grau sind. PHP-Codes können zwar, dank einer PHP-eigenen Funktion, eingefärbt werden, aber das war’s auch schon. Jedenfalls trägt sowas nicht gerade zur Übersichtlichkeit eines 5 Seiten langen Programmausschnitts bei, gerade mit längeren Kommentaren und so.

Ich habe jetzt also vor, das Forum hier (genauer gesagt die ‘Rendering Engine/Library’, ABBC) um Code-Syntax-Highlighting zu erweitern. Eigentlich sollte man ja meinen, als Algo2-Student einen Parser schreiben zu können, aber irgendwie hab ich den Eindruck, braucht’s für sowas praxis-nahes dann schon ‘richtige’ Ansätze.

Jedenfalls wäre es schön, wenn wir das irgendwie hinkriegen würden, verschiedene Sprachen zu highlighten, also Kommentare, Keywords, Punktuation, Strings und sowas unterschiedlich zu färben. Die Angabe einer Sprache ist im BlackBoard bereits vorgesehen (wie [#][code=php][/#] zur Zeit). Und die neue Funktion müsste ja einfach nur eine Zeichenkette mit HTML/CSS-Tags versehen.

Wär halt gut, wenn damit mal die ‘alltäglichen’ Sprachen wie C/C++, Java, PHP, Perl und noch ein paar weitere abgedeckt werden könnten. PHP selbst auch, weil mir die jetzige Lösung gewaltig einem wichtigen Bugfix im Weg steht :wink: Da stimmt irgendwas mit PHP noch nicht…

Interesse? Dann sollten wir uns demnächst irgendwann mal zusammensetzen und da ein paar Gedanken zu machen. Ich hab nix dagegen, wenn das erst Ende des Jahres was wird, vorher isses bei mir ja auch schlecht. Wollt’ halt nur schonmal die Idee in den ‘Raum’ stellen.

Ja, und wo ich gleich beim Thema bin, wäre denn vielleicht die Idee eines Code Pretty Printers hier irgendwie von Nutzen? Also eine Einrichtung, die eingegebene Programmschnipsel entweder on-the-fly beim Anzeigen oder vorher manuell ordentlich formatiert? (Einrücken, Zeilenumbrüche, Leerzeichen etc.) Oder gibt es für sowas schon ganz tolle Programme, die man nur mal etwas anpreisen muss?

darn
rekursiver abstieg bei syntax highlighting?
dude!
also ich benutze emacs - der kann das in echtzeit :wink: (also kein rekursiver abstieg)

das is doch pattern matching und “einfaerben”. heochstens noch regexp wenn man etwas uebersicht will.

mach ich gern.

aber erst nach den pruefungen… :wink:

q


btw. die checkbox “smiles deaktivieren” geht nicht


Das mit den Checkboxen konnte ich nachvollziehen, steht auf der Aufgabenliste.

Beim Syntax Highlighting seh ich halt auch noch die Unterscheidung von Zeichenketten, Kommentaren und dem Rest als wichtiges Problem an. Wie will ich entscheiden, ob ich in einem String bin, wenn ich nicht Zeichen für Zeichen durch den Text gehe und den aktuellen Status speichere? (Weiterer Punkt: " in Strings…)

In sämtlichen Programmen, bei denen ich bis jetzt mit ähnlichen Problemen zu tun hatte, musste ich am Ende alles linear durchlesen. Allerdings kommt bei PHP das Problem der interpreter-bedingten Laufzeit erschwerend hinzu. Ich habe zwar schon ein Verfahren gebastelt, das mit mehreren Zeigern für bestimmte Zeichen und schnelleren String-Suchfunktionen das Ganze erheblich beschleunigen kann, sowas trägt aber nicht gerade zu kompaktem und verständlichem Code bei :frowning:


du hast die loesung gerade selber gesagt :wink: mit status arbeiten.

ich denke dass die laufzeit im wesentlich egal ist.
denn das sind alles offline geschichten.

wenn wir einen text parsen markerien wir meinetwegen mit xml deren lexikalischen bedeutung. zb
„das ist ein string“

oder
a = 5+3;
wuerde dan werden zu

a =5
ok… you can do the maths :wink:

in einem lookup wird fuer jedes xml tag definiert in welcher farbe es dann schliesslich und letztendlich im browser des users dargestellt werden soll. diese einstellung kann selbstverstaendlich der user selber waehlen, wenn er das denn will.

der code wird sozusagen einmal und nur einmal bei der eingabe analyisiert, in dem lutigen xml format gespeichert und dann beim abruf einer seite in html umgeformt und der kas is gegessen.


Naja, ich weiß net so recht. Bisher wurden alle Inhalte wie eingegeben gespeichert und bei der Anzeige aufbereitet. Dadurch waren Dinge wie Vorschau, Beitrag ändern oder Zitieren ohne weiteren Aufwand möglich. Ein XML-Tagging vor dem Speichern würde dafür ein ganzes Stück mehr Arbeit bedeuten, der Text muss manchmal auch wieder vollständig zurückgewandelt werden. Außerdem macht das den Beitrag nicht gerade kleiner… Naja, mal sehen, wie lange so eine Analyse dauern würde.


also ich speichere den originaltext und den aufbereiteten text in der datenbank…


Korrektes Syntax-Highlighting ist schon was ziemlich kompliziertes. Ich hab einige Editoren erlebt, die das nur rudimentär beherrschten, und dann ist das schnell in Farb-Wirrwarr ausgeartet.

Beispielsweise reicht es nicht, für Strings einfach nach Quotes zu suchen, denn

  1. Könnten die Quotes auch in einem Kommentar sein
  2. Könnte das Quote auch speziell escaped sein, so dass es eben den String nicht schließt (soll heißen, “blabla"sdf” in C).

Ein weiteres Beispiel sind die berüchtigten built-in Variablen in Perl.
# bedeutet in Perl einen Zeilen-Kommentar, aber der Ausdruck $#foo berechnet die Länge des Arrays @foo.

Man sieht also, dass teilweise schon eine echte Syntaxanalyse nötig ist, um das ganze richtig hinzukriegen.


Allerdings wäre es schon mal ein guter Ansatz (und nicht allzu schwer zu verwirklichen), wenn man einfach alle keywords der entsprechenden Sprache (z.B. class, int, static, … in Java) fett- oder wie-auch-immer-gedruckt darstellt.
Kommentare sollten sich auch recht einfach erkennen lassen und z.B. etwas blasser erscheinen oder ganz ausgeblendet werden können.


ich würde mir eine syntaxbeschreibung eines editors mit syntaxhighlighting zu gemüte führen und versuchen, einen parser zu schreiben, der diese auf den text anwendet.