AGB  ·  Datenschutz  ·  Impressum  







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

SynHighlighter erweitern

Ein Thema von Codehunter · begonnen am 7. Sep 2012 · letzter Beitrag vom 12. Sep 2012
Antwort Antwort
Seite 3 von 5     123 45      
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#21

AW: SynHighlighter erweitern

  Alt 8. Sep 2012, 22:47
Kannst du deinen Beispielquelltext mal als ASCII hier reinhängen? Dann schau ich Montag mal, ob der jetzige Highlighter da mitkommt. Ich denke schon dass der das kann. Nur hab ich keine Lust das Ding abzutippen
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
436 Beiträge
 
Delphi 10.3 Rio
 
#22

AW: SynHighlighter erweitern

  Alt 8. Sep 2012, 23:10
Kannst du deinen Beispielquelltext mal als ASCII hier reinhängen? Dann schau ich Montag mal, ob der jetzige Highlighter da mitkommt. Ich denke schon dass der das kann. Nur hab ich keine Lust das Ding abzutippen
Klar ich bau dir mal ne Datei die relativ viele CSS Atrribute beinhaltet wie einen Screenshot von ST2
ggf auch direkt die Farbwerte dazu wenn ich zeitlich hinbekomme. Denk mal bis Morgen habe ich fertig
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#23

AW: SynHighlighter erweitern

  Alt 10. Sep 2012, 09:09
Um jetzt wieder auf das Eingangsthema zurückzukommen:

Es hilft alles nix, man bräuchte einen besseren Hash-Algorithmus. Mit den in SynEdit (bei den verschiedenen Highlightern) verfügbaren kommt man bei PHP nicht weiter, da die Keywords zu oft gleiche Hashes produzieren.

Womöglich ist der ganze Ansatz über Hashes ein Fehler und man sollte lieber 1:1-Vergleiche mit der Keywordliste machen. Muss ich mal testen, in wie weit das negative Auswirkungen auf die Performance hat. Irgendwie kann ich mir nicht vorstellen, dass ein 1:1-String-Vergleich wesentlich langsamer sein sollte als der Umweg über einen Hash.

Außerdem ergibt sich ja bei so kleinen Hashes nicht nur das Problem der False-Negatives sondern auch der False-Positives. Sprich, es würden Codeteile als Keyword erkannt die gar keine sind.

Geändert von Codehunter (10. Sep 2012 um 09:16 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
436 Beiträge
 
Delphi 10.3 Rio
 
#24

AW: SynHighlighter erweitern

  Alt 10. Sep 2012, 10:18
Mal ne Frage:
Hast du auch SynWeb gesehen? Ich bin irgendwie drüber gestolpert liegt bei mir auf der Platte und basiert wohl auf SynEdit habs mir aber noch nicht angesehen, ich habs mal nur gezogen weil da irgendwas von CSS3 sowie Erweiterungen und so weiter stand.
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#25

AW: SynHighlighter erweitern

  Alt 10. Sep 2012, 11:18
Primär bin ich erstmal am PHP-Highlighter dran.

SynWeb kannte ich bisher nicht. Musste ich selbst erstmal nachschauen. Da hat jemand verdammt viel Arbeit rein gesteckt. Ist aber im Grunde die selbe Pest wie mit Mystix und Letterpress: Forks, die abgespalten für sich alleine dahin vegetieren. Stand ist 2007, wird also wahrscheinlich schon nicht mehr mit dem aktuellen SynEdit kompatibel sein.

Mir erschließt sich das Problem nicht, dass die Leute nicht einfach ProjectMember bei SynEdit werden und ihre Extensions ins Projekt einpflegen. Irgendwann vergammelt der Fork, wie z.B. Letterpress, das als Projekt geschlossen wurde. Und dann war alle Mühe für die Katz. Was gabs nicht alles schon: Codefolding war im Mystix drin, dummerweise nicht Unicode-fähig da zu früh vom Hauptprojekt abgespalten. Refactoring bei Letterpress, leider nun im Nirwana versunken (hab noch eine Kopie davon zum Glück).

Es ist schon traurig, dass sich die paar Hanseln, die am SynEdit arbeiten, einfach untereinander nicht einig werden. Leider sind mir, geb ich ehrlich zu, manche Teile von SynEdit einfach zu hoch. Wie dieses komplizierte Hashing. Ich versteh zwar die Gründe, warum das so gemacht wurde. Aber ich versteh die Algorithmen nicht.
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
436 Beiträge
 
Delphi 10.3 Rio
 
#26

AW: SynHighlighter erweitern

  Alt 10. Sep 2012, 12:24
Joa, iss mir auch zu Hoch aber nicht unbekannt. Versuch mal im kleinen Kreis ein "kleines" Projekt auf die Beine zu stellen, da klappts ja schon oft genug nicht weil man sich nicht oder schlecht einig wird.

Es braucht einen guten Haeuptling oftmal
Was Synedit angeht ich komm da auch nicht wirklich mit weiter leider, weil irgendwie mag ich das Ding. Wenn ich wüsste wie man den vernüpftig um die Sachen die ich Dir gegeben hatte erweitern könnte waere ich auch froh.

Ich guck mir mal die Trial von TMS an die haben glaub ich auch so ein Teil (vermutlich *uggy wie meist, aber Versuch ist es Wert, vielleicht laesst sich der ja besser pimpen )
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#27

AW: SynHighlighter erweitern

  Alt 10. Sep 2012, 12:54
Ich guck mir mal die Trial von TMS an die haben glaub ich auch so ein Teil (vermutlich *uggy wie meist, aber Versuch ist es Wert, vielleicht laesst sich der ja besser pimpen )
Guck lieber dran vorbei. Ich hab die erste Version von Syn4 mit den Toolbar-Komponenten von TMS gebaut. Grausam ohne Ende. Memleaks dass einem die Ohren schlackern, das Subclassing von Menüs funktioniert auch nur auf manchen Rechnern und manchen nicht. Hin und wieder gabs dann auch OutOfGDIResources usw. Bin grad dabei, Syn4 auf Toolbar2000 und SpTBX zu portieren.

Die TAdvMemo Komponente ist an sich nicht sooo schlecht. Sind aber nur relativ wenige Highlighter dabei. Und das Ganze ist natürlich nicht OpenSource, kannst also kein offenes Projekt damit starten.
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
436 Beiträge
 
Delphi 10.3 Rio
 
#28

AW: SynHighlighter erweitern

  Alt 10. Sep 2012, 12:58
Ich guck mir mal die Trial von TMS an die haben glaub ich auch so ein Teil (vermutlich *uggy wie meist, aber Versuch ist es Wert, vielleicht laesst sich der ja besser pimpen )
Guck lieber dran vorbei. Ich hab die erste Version von Syn4 mit den Toolbar-Komponenten von TMS gebaut. Grausam ohne Ende. Memleaks dass einem die Ohren schlackern, das Subclassing von Menüs funktioniert auch nur auf manchen Rechnern und manchen nicht. Hin und wieder gabs dann auch OutOfGDIResources usw. Bin grad dabei, Syn4 auf Toolbar2000 und SpTBX zu portieren.

Die TAdvMemo Komponente ist an sich nicht sooo schlecht. Sind aber nur relativ wenige Highlighter dabei. Und das Ganze ist natürlich nicht OpenSource, kannst also kein offenes Projekt damit starten.
Du kannst einem Mut machen Und nu?
Bist du bezüglich meinen Sachen da weiter gekommen irgendwie, weil du ja meintest sollte gehen?
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#29

AW: SynHighlighter erweitern

  Alt 10. Sep 2012, 13:25
Du kannst einem Mut machen Und nu?
Bist du bezüglich meinen Sachen da weiter gekommen irgendwie, weil du ja meintest sollte gehen?
Na nu mal ganz langsam mit die junge Pferde

Erstmal muss ich dahinter steigen, wie dieser blöde Hash-Algo funktioniert. Der steckt ja mehr oder weniger identisch in allen Syn-Highlightern drin. Nur mit anderen Konstanten. Ich vermute, dass die Konstanten in Abhängigkeit von der Keyword-Liste auch geändert werden müssen, damit keine Dupletten entstehen.

Darum wieder die Frage an die Algoritmus-Experten hier: Könnt ihr die Sache mal ein wenig für mich erhellen? Der Originalsource findet sich hier. Entscheidend sind die Zeilen 234 und 237:
Delphi-Quellcode:
function TSynPHPSyn.HashKey(Str: PWideChar): Cardinal;
begin
  Result := 0;
  while IsIdentChar(Str^) do
  begin
    Result := Result * 596 + Ord(Str^) * 413;
    inc(Str);
  end;
  Result := Result mod 137;
  fStringLen := Str - fToIdent;
end;
Ich verstehe halt die Bedeutung der drei Konstanten 596, 413 und 137 nicht. Wobei ich bei 137 vermute, es ist der höchstmögliche Hashwert plus 1. Doch daraus ergibt sich dann ein Henne-und-Ei-Problem: Den höchsten Hashwert bekommt man nur unter Anwendung der Hash-Routine, welche ja zu ändern wäre

Geändert von Codehunter (10. Sep 2012 um 13:52 Uhr)
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#30

AW: SynHighlighter erweitern

  Alt 10. Sep 2012, 17:51
Ich bleib' bei #2, schmeiß die KeyIndices raus.

Delphi-Quellcode:
type
  TIdentFuncTableFunc = type TtkTokenKind;

...


function TSynPHPSyn.HashKey(Str: PWideChar): integer;
var
  I: integer;
  S: AnsiString;
begin
  Result := -1;
  S:= LowerCase(AnsiString(WideCharToString(Str)));
  for I:= 0 to Length(KeyWords) - 1 do
    if AnsiString(KeyWords[I]) = S then
    begin
      Result := I;
      Break;
    end;
  // fStringLen ???
  // fToIdent ???
  // sind keine Variablen der unit ???
end;

function TSynPHPSyn.IdentKind(MayBe: PWideChar): TtkTokenKind;
var
  Key: integer;
begin
  Key := HashKey(MayBe);
  if HashKey(MayBe) > -1 then
    Result := fIdentFuncTable[Key]
  else
    Result := tkIdentifier;
end;

procedure TSynPHPSyn.InitIdent;
var
  I: Integer;
begin
  for I := Low(fIdentFuncTable) to High(fIdentFuncTable) do
    if I > High(KeyWords) then
      ...
    else
      ...
end;

...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 5     123 45      


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 00:54 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