diff options
Diffstat (limited to 'mystringlistunit.pas')
-rw-r--r-- | mystringlistunit.pas | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/mystringlistunit.pas b/mystringlistunit.pas index cdc0933..af2ce33 100644 --- a/mystringlistunit.pas +++ b/mystringlistunit.pas @@ -5,7 +5,7 @@ unit mystringlistunit; interface uses - Classes, SysUtils, RegExpr, Process, protokollunit; + Classes, SysUtils, RegExpr, Process, protokollunit, matheunit; type tMyStringList = class (tStringList) @@ -31,7 +31,8 @@ type function stillNeed(bez: string): boolean; function needInLine(bez: string; lin: longint): boolean; procedure insert(index: longint; const s: ansistring); override; - function unfoldMacros: boolean; + function unfoldMacros: boolean; overload; inline; + function unfoldMacros(kvs: tKnownValues; cbgv: tCallBackGetValue): boolean; overload; procedure subst(regex,ersatz: string); procedure dump(pro: tProtokollant; prefix: string); procedure nichtInSubRoutine(s: string); @@ -245,6 +246,11 @@ begin end; function tMyStringlist.unfoldMacros: boolean; +begin + result:=unfoldMacros(nil,nil); +end; + +function tMyStringlist.unfoldMacros(kvs: tKnownValues; cbgv: tCallBackGetValue): boolean; var i,j,k,l,Ebene: longint; s,t,u,v: string; @@ -268,9 +274,27 @@ begin inc(i); end; + i:=0; + while i<count-1 do // "\Zeilenumbruch" löschen + if rightStr(self[i],1)='\' then begin + s:=self[i]; + self[i]:=trim(leftStr(s,length(s)-1))+' '+self[i+1]; + delete(i+1); + end + else inc(i); + repeat wasGefunden:=false; + for i:=0 to count-1 do begin // Gleichungen auswerten + s:=formelnAuswerten(self[i],kvs,cbgv); + if s<>self[i] then begin + wasGefunden:=true; + self[i]:=s; + end; + end; + if wasGefunden then continue; + i:=0; while i<count do begin // Übersprünge überspringen, alles nach 'Dateiende' löschen s:=self[i]; |