Also ich denke die Hash-Funktion ist schon ok.
Wenn du die Hash-Tabelle (KeyIndices) neu aufbauen möchtest, musst du so vorgehen:
Schreibe ein eigenes Programm für die Ermittlung der Hashwerte.
1.) Array KeyWords um deine Einträge erweitern
2.) Alle Einträge in KeyIndices auf -1 setzen
var // var nicht const !
KeyIndices: array[0..136] of Integer;
3.) Für jeden String in KeyWords berechnest du den Hashwert
Der Hashwert liegt zwischen 0 und 136
Zusätzlich zum Hashwert braucht man noch den Index
Der Index für 'and' ist z.B. 2.
4.) Prüfe ob KeyIndices[Hashwert] = -1 ist
5a.) Falls ja KeyIndices[Hashwert] := Index
5b.) Falls nein erhöhe den Hashwert wie folgt und prüfe nochmal
Hashwert := (Hashwert + 1) mod 137;
Die Punkte 5a und 5b lassen sich mit einer While-Schleife codieren
Delphi-Quellcode:
While KeyIndices[Hashwert] <> -1 do
Hashwert := (Hashwert + 1) mod 137;
KeyIndices[Hashwert] := Index;
6.) nachdem alle Keywords gehashed wurden lässt du dir den Inhalt
von KeyIndices[] anzeigen (in ein TMemo schreiben, damit du die Liste mit 137 Zahlen per Copy & Paste holen kannst)
7.) die neuen KeyWords und KeyIndices in SynHighlighterPHP.pas kopieren.
PS: du solltest zuerst versuchen mit den alten Keywords[] die gleichen KeyIndices[] wie im ursprünglichen Sourcecode zu erzeugen.
Falls das funktioniert hat, nimmst du die neuen PHP Keywords auf.