AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Syntaxhighliter

Ein Thema von faux · begonnen am 22. Aug 2005 · letzter Beitrag vom 23. Aug 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#1

Syntaxhighliter

  Alt 22. Aug 2005, 23:44
Hallo!

Kann mir mal jemand das Prinzip eines Syntaxhighliters erklären?
Überprüft der, nach jedem Tastenschlag den ganzen Text?
Wie zum Beispiel findet der alle Wörter namens "self" oder "Self" bzw "SELF", also woher weiß der, dass er "self." highlighten muss, "mySelf" jedoch nicht?
Wie highlitet man zum beispiel alle Strings in dem Beispiel:
Code:
myVar = [color=grey]"Der"[/color]+[color=grey]" "[/color]+[color=grey]"Text"[/color];
Danke schon mal.
Grüße
Faux
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Syntaxhighliter

  Alt 22. Aug 2005, 23:46
Auch wenn du dir wohl nicht eine solche Antwort erhoffst, doch du könntest dir die Source-Codes der SynEdit-Komponenten näher ansehen, evtl. lässt sich das Prinzip ohne größere Einarbeitung herauslesen.
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Syntaxhighliter

  Alt 22. Aug 2005, 23:52
Aha, ok. Ich habe garnicht gewusst, dass es sowas bereits gibt...

Danke, werd mal schauen...

Nachtrag:
Zitat von Matze:
Auch wenn du dir wohl nicht eine solche Antwort erhoffst[...]
Ich habe mir auch nicht erhofft, dass mir jetzt irgendwer ein Beispiel postet, sondern einen Google-Link oder so...
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#4

Re: Syntaxhighliter

  Alt 23. Aug 2005, 00:04
Zitat von Matze:
Auch wenn du dir wohl nicht eine solche Antwort erhoffst, doch du könntest dir die Source-Codes der SynEdit-Komponenten näher ansehen, evtl. lässt sich das Prinzip ohne größere Einarbeitung herauslesen.
*lol*, nee, wirklich incht. Aber mich würde das auch mal interessieren. Ich habe selber mal einen Highlighter mit RichEdit geschrieben, bevor ich von der existenz von SynEdit wusste:
http://www.delphipraxis.net/internal...er=asc&start=0
Ich muss leider gerade feststellen, dass das Programm ninchtmehr auf dem webspace liegt und ich momenatn da auch incht dran komme. Sonst hätte ich dir den gerne mal zu demo gegeben.
Aber mal vom Prinzip her ing der so vor, dass der jedesmal, wenn ein Bustabe gedrückt wurde eben einfach der umliegende Text geprüft wurde. Allerdings konnte der auch nicht mehr, als bei HTML das Zeug in den die tags (<ab>) fett zu drucken und wenn noch was dehinter steht (<ab dahinter="bla">) dieses grün zu drucken. Da ist es natürlich einfacher, weil ich einfach nur geprüft habe, ob der vorhergehende Buchstabe fett oder grün oder normal war und auch nicht gerade ein >.
Also eigentlich konnte der garnicht wirklich viel, obwohl einige da ziemlich begeistert waren und meinten zum Beispiel: "also ich danek erstmal SUPER CODE" oder "ansonsten super Porgramm!!! danke für den Code... ein Teil davon ist höchstinterressant!". Ok, hat beides der selbe Typ geschriben, aber trotzdem würde imch jetzt im Nachhinein doch mla interessieren, was der eigentlich so toll daran fand. Leider ist der inchtmehr in der DP...
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#5

Re: Syntaxhighliter

  Alt 23. Aug 2005, 00:11
Zitat:
Überprüft der, nach jedem Tastenschlag den ganzen Text?
Nein, nur den Text, den du auch auf dem Bildschirm sieht's.

Zitat:
Wie zum Beispiel findet der alle Wörter namens "self" oder "Self" bzw "SELF", also woher weiß der, dass er "self." highlighten muss, "mySelf" jedoch nicht?
Zunächst einmal werden alle Suchbegriffe nach UpperCase oder LowerCase in einer Liste gespeichert, konvertiert und sortiert. Dein String /deine StringList wird dann durchlaufen und in einer Case-Schleife durch Regeln auf dem Schirm gezeichnet.

Das lässt sich leider nicht so kurz beschreiben, ist aber leichter als es aussieht.
SynEdit oder UniSynEdit sind da sehr gute Beispiele.
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#6

Re: Syntaxhighliter

  Alt 23. Aug 2005, 00:16
Hallo,

da verweise ich doch ganz dreist auf mein Memo .
Das macht so eine Art Highlighting bei der Rechtschreibprüfung. Weil ich faul bin prüft meine Komponente immer den gesamten Text. Aber wichtig ist für Dich wahrscheinlich das Filtern der einzelnen Bestandteile (Wörter). Dabei musst Du einfach von der Cursorposition zurück gehen, bis Du einen Wortanfang findest (Leerzeichen, Punkt, Zeilenanfang...) und dann das gleiche für das Wortende nach hinten machen. Das Wort prüfst Du dann mit Deiner Liste und entscheidest dann, ob Du es highlightest oder nicht.
Wie gesagt, meine Komponente macht das (momentan) immer für den ganzen Text, aber wichtig ist natürlich nur das aktuelle Wort.

Gruß
xaromz
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Syntaxhighliter

  Alt 23. Aug 2005, 08:29
Danke für die Antworten.
Ich werd mir das alles mal durchsehen.

Ich hab vor ein paar Monaten mal einen SQL-Syntaxhighliter in PHP gemacht. Der machte alles zwischen " und " und ' und ' grün und alles zwischen ` und ` orange. Dann konnte er noch alle Schlüsselwörter hervorgen, jedoch nur wenn vor und nach ihnen weder ein Zeichen noch der Zeilenanfang stand, was zB Probleme macht, wenn man VALUES( schreibt, also kein Leerzeichen ließ. Gescheitert bin ich außerdem noch beim Highliten aller Zahlen (rot) und aller Kommentare (grün). Besonders Mehrzeilige Kommentare. Also das Highliten der Kommentare selbst ist ja nicht weiter schwer, aber er darf ja dann nix anderes mehr Highliten. Also weder Zahl, noch String, noch ein Schlüsselwort.
Nur hab ich den leider weggeschmissen, weil... weiß ich nichtmehr...

Nya, und jetzt will ich sowas halt in C# oder Delphi.NET machen...

Grüße
Faux
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: Syntaxhighliter

  Alt 23. Aug 2005, 09:38
Wichtig ist, dass du von vorne nach hinten durchgehst und dabei jeweils auf alle Möglichkeiten prüfst. Also suchst du z.B. für Pascal immer nach dem ersten
- Kommentaranfang '{' oder '(*' oder '//' oder
- Stringanfang '"' oder '''' oder
- Anfang eines Schlüsselwortes 'a' bis 'z'.
Das darfst du nicht separat machen, denn sonst können Dinge wie
begin // hier gehts los bis end deinen "Parser" hereinlegen wenn du erst alle Schlüsselwörter, dann alle Zeichenketten und danach erst alle Kommentare behandelst. Und wenn du die Reihenfolge änderst, dann kann man ihn mit
a := 'begin // hier gehts los bis end'; hereinlegen.

Ich habe kürzlich einen in PHP geschrieben (hier), der dort natürlich die ohnehin schon gegebenen Möglichkeiten regulärer Ausdrücke nutzt. Da kannst du mal in den Quelltext schauen. Für Pascal nehmen ich (vereinfacht) den regulären Ausdruck:
Code:
[[:<:]][a-zA-Z_]|'|//|{|\(\*
Allerdings bin ich zu wenig drin in .NET um zu wissen, ob's da auch reguläre Ausdrücke gibt
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Syntaxhighliter

  Alt 23. Aug 2005, 09:46
Zitat von Flocke:
Allerdings bin ich zu wenig drin in .NET um zu wissen, ob's da auch reguläre Ausdrücke gibt
Klar gibts die

Obwohl ich mich mit Compilerbau nicht auskenne, würd ich doch einen etwas akademischeren Ansatz wählen und erstmal einen Tokenizer drüberlaufen lassen, der alle Tokens erfasst, unabhängig von den Whitespaces. Diese Tokens kann man dann kategorisieren und entsprechend einfärben.
Ist vielleicht anfangs etwas mehr Code, aber man kann leichter Änderungen dranmachen.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#10

Re: Syntaxhighliter

  Alt 23. Aug 2005, 10:46
Zitat von faux:
Nya, und jetzt will ich sowas halt in C# oder Delphi.NET machen...
Also wenn du es einfach haben willst, dann nimmst du einfach Synedit, denn da ist schon alles dabei, was du für SQL-Higjhlighting brauchst und das ganze in 3 Klicks.
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz