summaryrefslogtreecommitdiff
path: root/mystringlistunit.pas
diff options
context:
space:
mode:
Diffstat (limited to 'mystringlistunit.pas')
-rw-r--r--mystringlistunit.pas28
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];