summaryrefslogtreecommitdiff
path: root/dateibeziehungen.pas
diff options
context:
space:
mode:
Diffstat (limited to 'dateibeziehungen.pas')
-rw-r--r--dateibeziehungen.pas49
1 files changed, 34 insertions, 15 deletions
diff --git a/dateibeziehungen.pas b/dateibeziehungen.pas
index 67e11e6..e2a96b3 100644
--- a/dateibeziehungen.pas
+++ b/dateibeziehungen.pas
@@ -61,7 +61,7 @@ type
_dats: tDateienMitDaten;
function rQuellen(idx: longint): tDateienMitDaten;
function rZiele(idx: longint): tDateienMitDaten;
- function quellErsetzung(var worin: string; quellen: tDateienMitDaten; momentanePosition: longint): boolean;
+ function quellErsetzung(var worin: string; worinIstRegex: boolean; quellen: tDateienMitDaten; momentanePosition: longint): boolean;
function zieleHinzufuegen(ziele, quellen: tDateienMitDaten; zielFkt: string): boolean;
function findeMehrZiele(ziele, quellen: tDateienMitDaten): boolean;
function matchCount: longint;
@@ -111,7 +111,7 @@ type
function anzDats: longint; inline;
end;
-procedure allgemeineErsetzungen(var worin: string; machDatei: string);
+procedure allgemeineErsetzungen(var worin: string; worinIstRegex: boolean; machDatei: string);
implementation
@@ -317,7 +317,7 @@ begin
result:=_zieles[idx];
end;
-function tGenerischeAbhaengigkeit.quellErsetzung(var worin: string; quellen: tDateienMitDaten; momentanePosition: longint): boolean;
+function tGenerischeAbhaengigkeit.quellErsetzung(var worin: string; worinIstRegex: boolean; quellen: tDateienMitDaten; momentanePosition: longint): boolean;
var
s,anfang,mitte,numStr: string;
i,li,re,qNum: longint;
@@ -330,18 +330,30 @@ begin
else
numStr:=intToStr(qNum);
s:=quellen[qNum+byte(qNum<0)].name;
- ersetzeAlleVorkommen(worin,'%in'+numStr+'%',s); // %in%
+ if worinIstRegex then // %in%
+ ersetzeAlleVorkommen(worin,'%in'+numStr+'%',escape(s,'\.','\'))
+ else
+ ersetzeAlleVorkommen(worin,'%in'+numStr+'%',s);
s:=extractfilename(s);
- ersetzeAlleVorkommen(worin,'%ifile'+numStr+'%',s); // %ifile%
+ if worinIstRegex then // %ifile%
+ ersetzeAlleVorkommen(worin,'%ifile'+numStr+'%',escape(s,'\.','\'))
+ else
+ ersetzeAlleVorkommen(worin,'%ifile'+numStr+'%',s);
i:=0;
while pos('.',s)>0 do begin
while rightStr(s,1)<>'.' do
delete(s,length(s),1);
delete(s,length(s),1);
inc(i);
- ersetzeAlleVorkommen(worin,'%basename'+numStr+','+intToStr(i)+'%',s); // %basename%
+ if worinIstRegex then // %basename%
+ ersetzeAlleVorkommen(worin,'%basename'+numStr+','+intToStr(i)+'%',escape(s,'\.','\'))
+ else
+ ersetzeAlleVorkommen(worin,'%basename'+numStr+','+intToStr(i)+'%',s);
end;
- ersetzeAlleVorkommen(worin,'%basename'+numStr+'%',s); // %basename%
+ if worinIstRegex then // %basename%
+ ersetzeAlleVorkommen(worin,'%basename'+numStr+'%',escape(s,'\.','\'))
+ else
+ ersetzeAlleVorkommen(worin,'%basename'+numStr+'%',s);
end;
while pos('%dirname',worin)>0 do begin // %dirname%
@@ -379,10 +391,12 @@ begin
mitte:=mitte+'/'+erstesArgument(s,'/',false);
end;
delete(mitte,1,1);
+ if worinIstRegex then
+ mitte:=escape(mitte,'\.','\');
worin:=anfang+mitte+worin;
end;
- allgemeineErsetzungen(worin,_machDatei); // %DIRNAME% %num'...'%
+ allgemeineErsetzungen(worin,worinIstRegex,_machDatei); // %DIRNAME% %num'...'%
result:=false;
tmpRE:=tRegExpr.create;
@@ -424,7 +438,7 @@ var
begin
result:=false;
if pos('{',zielFkt)=0 then begin
- if not quellErsetzung(zielFkt,quellen,quellen.count) then exit;
+ if not quellErsetzung(zielFkt,false,quellen,quellen.count) then exit;
if pos('*',zielFkt)=0 then begin
zielFkt:=unescape(zielFkt);
wasda:=false;
@@ -530,8 +544,8 @@ begin
while (i>=0) and (i<length(idx)) do begin // alle Stellen von idx müssen gefüllt werden!
if i<>lastI then begin // wir betrachten eine neue Stelle,
s:=quellenREs[i]; // daher ist der RegEx nicht mehr aktuell
- if not quellErsetzung(s,tmpQs,i) then begin // regex-substitution nicht erfolgreich -
- idx[i]:=-1; // wird behandelt wie nie passender regex
+ if not quellErsetzung(s,true,tmpQs,i) then begin // regex-substitution nicht erfolgreich -
+ idx[i]:=-1; // wird behandelt wie nie passender regex
tmpQs[i]:=nil;
dec(i);
continue;
@@ -591,7 +605,7 @@ begin
es.last.ziele.add(ziele[i][j]);
for j:=0 to befehleFkt.count-1 do begin
s:=befehleFkt[j];
- if quellErsetzung(s,quellen[i],quellen[i].count) then
+ if quellErsetzung(s,false,quellen[i],quellen[i].count) then
es.last.befehle.add(s);
end;
if es.last.befehle.count=0 then
@@ -811,7 +825,7 @@ begin
case wasIst of
ztSuche: begin
- allgemeineErsetzungen(s,_machDatei);
+ allgemeineErsetzungen(s,false,_machDatei);
if startetMit('!',s) then begin
setLength(_ign,length(_ign)+1);
_ign[length(_ign)-1]:=tRegExpr.create;
@@ -1073,7 +1087,7 @@ end;
// allgemeine Funktionen
-procedure allgemeineErsetzungen(var worin: string; machDatei: string);
+procedure allgemeineErsetzungen(var worin: string; worinIstRegex: boolean; machDatei: string);
var
i: longint;
s,anfang,mitte: string;
@@ -1081,7 +1095,10 @@ begin
s:=extractFilePath(machDatei);
if rightStr(s,1)='/' then
delete(s,length(s),1);
- ersetzeAlleVorkommen(worin,'%DIRNAME%',s);
+ if worinIstRegex then
+ ersetzeAlleVorkommen(worin,'%DIRNAME%',escape(s,'\.','\'))
+ else
+ ersetzeAlleVorkommen(worin,'%DIRNAME%',s);
while pos('%num''',worin)>0 do begin
anfang:=erstesArgument(worin,'%num''');
mitte:=erstesArgument(worin,'''%');
@@ -1095,6 +1112,8 @@ begin
delete(mitte,1,i);
break;
end;
+ if worinIstRegex then
+ mitte:=escape(s,'\.','\');
worin:=anfang+mitte+worin;
end;
end;