Seite 1 von 1

Keywörter für Syntaxhighlithing

Verfasst: Freitag 21. November 2008, 20:20
von Andyh
Hallo

Dachte da das nichts mit Tkinter zu tuhen hat Schreibe ich es hier hin.

Welche Wörte soll man alle einfärben?
Mache färben sogar "self" ein und noch mehr.

Eine liste was bis jetzt drinsteht:

Code: Alles auswählen

key = ['and', 'as', 'assert', 'break', 'continue', 'del', 'elif', 'else', 'except', 'exec', 
'finally', 'for', 'from', 'global', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'try', 
'while', 'with', 'yield', 'def', 'class', 'if', '"', "'''", "'", '#', ':', 'return', 'True', 'False', 'open', 'quit', 
'range', 'int', 'str', 'float', 'list', 'dict', 'tuple', 'file']
for item in key:
    print key
Ich machs mal so sonst ist der Beitrag so lange 8) .

Es fehlen noch ein paar z.B. "len"

Gruß
Andyh

Edit (Leonidas: Umgebrochen, damit die Threadansicht nicht so breit wird.

Verfasst: Freitag 21. November 2008, 20:30
von derdon
Falls du einen Syntax-Highlighter erstellen möchtest, solltest du dir lieber mal Pygments anschauen. Und was meinst du mit "manche"?

Verfasst: Freitag 21. November 2008, 20:32
von BlackJack
Warum selber eintippen, wenn's das schon als Modul in der Standardbibliothek gibt:

Code: Alles auswählen

In [10]: import keyword

In [11]: keyword.kwlist
Out[11]:
['and',
 'as',
 'assert',
 'break',
 'class',
 'continue',
 'def',
 'del',
 'elif',
 'else',
 'except',
 'exec',
 'finally',
 'for',
 'from',
 'global',
 'if',
 'import',
 'in',
 'is',
 'lambda',
 'not',
 'or',
 'pass',
 'print',
 'raise',
 'return',
 'try',
 'while',
 'with',
 'yield']
`len()` ist kein Schlüsselwort, sondern eine Funktion im `__builtin__`-Modul. Und da kann man sich auch die anderen Namen her holen, wenn man die gesondert einfärben möchte.

Verfasst: Freitag 21. November 2008, 21:18
von Andyh
Hallo

@BalckJack

Da habe ich die auch her :)
Auf "dir(__builtin__)" hätte ich kommen müssen.

@derdon

Pygments will nicht nicht nehmen weil ich noch was lernen möchte, das Syntaxhighlithing funktioniert schon ganz gut.

Mit manche meine ich Editoren.

gibt es noch sinnvolle Hervorhebungen?

Gruß
Andyh

Verfasst: Freitag 21. November 2008, 21:24
von derdon
  • Funktionen / Methoden
  • Klassen
  • Strings
  • Zahlen
  • Kommentare / Docstrings
  • Konstanten
  • Wrapper
  • ...

Verfasst: Freitag 21. November 2008, 21:25
von DasIch
Andyh hat geschrieben:gibt es noch sinnvolle Hervorhebungen?
  • Basisdatentypen
  • Funktionen
  • Klassen
  • Kommentare

Verfasst: Samstag 22. November 2008, 02:09
von Leonidas
  • reST-Syntax in Docstrings
  • Dekoratoren
  • Metaklassen (hihi)
  • ABCs (hihi, zum zweiten)

Verfasst: Samstag 22. November 2008, 10:56
von Andyh
Hallo

Danke für die zahlreichen Antworten!

Das meiste habe ich schon umgesetzt, aber es gibt mit manchen sachen nocht Probleme z.B.

"#"
" ' "
' " '

bekomme ich aber sicher auch noch in den griff.

Gruß
Andyh

Verfasst: Samstag 22. November 2008, 11:18
von sma
Andyh hat geschrieben:gibt es noch sinnvolle Hervorhebungen?
Prinzipiell kann man syntaktisches und semantisches Highlighting unterscheiden. Im ersten Fall guckt man sich einfach Wörter an und entscheidet sich dann für eine Farbe. Im zweiten Fall versteht man die Sprache (meist durch den Aufbau eines konkreten Syntaxbaums) und lässt die Bedeutung der Wörter mit in die Entscheidung für die Farbe einfließen.

Letzteres ist, was ich von einer guten an die Sprache angepassten IDE erwarten würde. Hier muss man nicht das Wort "self" hervorheben, sondern kann Methoden in Klassen erkennen und auch den ersten Parameter, der ja die Sonderrolle des Dispatchers spielt. Diesen kann man dann hervorheben. Ebenso interessant ist es, undefinierte Variablen, die beim Ausführen des Programms einen NameError erzeugen würden, farblich anders hervorzuheben als gebundene Namen. Das selbe könnte man für private Funktionen oder Methoden namen, die nirgendwo benutzt werden und unbenutzte Imports. Ebenfalls hervorhebenswert sind lokale Variablen, die gelesen werden, bevor man etwas hineingeschrieben hat.

Wenn's bei einem syntaktischen Highlighting bleiben soll, würde ich noch vorschlagen diese __*__-Dinger anders einzufärben als normale Methoden.

Eingebaute Funktionen oder Basistypen hervorzuheben finde ich grenzwertig, weil das gerne mal falsch läuft, und je nach Python-Version anders sein könnte. Wie sollte etwa print (bei Python 3 eine Funktion) dargestellt werden?

Stefan

Verfasst: Samstag 22. November 2008, 12:16
von BlackJack
Wie erkennt man, ob das erste Argument in einer "Methode" hervorgehoben werden muss. Beispiel:

Code: Alles auswählen

    @spam
    def ham(a, b):
        # ...
Ist das `a` nun beim Aufruf an ein Exemplar der Klasse gebunden, an die Klasse selbst, oder vielleicht sogar ganz etwas anderes? Da ist es einfacher das konventionelle `self` besonders hervorzuheben.

Verfasst: Samstag 22. November 2008, 12:27
von sma
Na, du musst schon wissen, ob `ham` in einer Klasse steht und was `spam` macht. Daher ja "semantisches" Highlighting. Du kannst in Python, das ja nicht deklarativ ist sondern auch Klassen konstruiert, den Algorithmus immer austricksen, wenn er nicht selbst den Programmcode ausführt (was er besser nicht machen sollte, oder er leidet dann an dem Problem, dass das Programm vielleicht nie stoppt) aber in der Regel benutzen Python-Entwickler ja gewisse Konventionen, die man erkennen kann.

Gleichzeitig kann man so Neulingen diese Konventionen beibringen, weil man deren Einsatz ja durch Highlighting "belohnt" ;)

Stefan