Keywörter für Syntaxhighlithing

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Andyh
User
Beiträge: 319
Registriert: Dienstag 8. Januar 2008, 19:52
Kontaktdaten:

Freitag 21. November 2008, 20:20

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.
Meinen Dickschädel schon bemerkt?
Ich bin jetzt FACHARBEITER (Zerspanungsmechaniker)!!!
[code]import sys

if sys.platform == "win32":
print "this program only runs on operating systems!!!"
sys.TotalError()[/code]
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Freitag 21. November 2008, 20:30

Falls du einen Syntax-Highlighter erstellen möchtest, solltest du dir lieber mal Pygments anschauen. Und was meinst du mit "manche"?
BlackJack

Freitag 21. November 2008, 20:32

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.
Andyh
User
Beiträge: 319
Registriert: Dienstag 8. Januar 2008, 19:52
Kontaktdaten:

Freitag 21. November 2008, 21:18

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
Meinen Dickschädel schon bemerkt?
Ich bin jetzt FACHARBEITER (Zerspanungsmechaniker)!!!
[code]import sys

if sys.platform == "win32":
print "this program only runs on operating systems!!!"
sys.TotalError()[/code]
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Freitag 21. November 2008, 21:24

  • Funktionen / Methoden
  • Klassen
  • Strings
  • Zahlen
  • Kommentare / Docstrings
  • Konstanten
  • Wrapper
  • ...
DasIch
User
Beiträge: 2452
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Freitag 21. November 2008, 21:25

Andyh hat geschrieben:gibt es noch sinnvolle Hervorhebungen?
  • Basisdatentypen
  • Funktionen
  • Klassen
  • Kommentare
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 22. November 2008, 02:09

  • reST-Syntax in Docstrings
  • Dekoratoren
  • Metaklassen (hihi)
  • ABCs (hihi, zum zweiten)
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Andyh
User
Beiträge: 319
Registriert: Dienstag 8. Januar 2008, 19:52
Kontaktdaten:

Samstag 22. November 2008, 10:56

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
Meinen Dickschädel schon bemerkt?
Ich bin jetzt FACHARBEITER (Zerspanungsmechaniker)!!!
[code]import sys

if sys.platform == "win32":
print "this program only runs on operating systems!!!"
sys.TotalError()[/code]
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Samstag 22. November 2008, 11:18

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
BlackJack

Samstag 22. November 2008, 12:16

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.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Samstag 22. November 2008, 12:27

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
Antworten