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