diff options
Diffstat (limited to 'dateibeziehungen.pas')
-rw-r--r-- | dateibeziehungen.pas | 60 |
1 files changed, 21 insertions, 39 deletions
diff --git a/dateibeziehungen.pas b/dateibeziehungen.pas index e2a96b3..403ca03 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; worinIstRegex: boolean; quellen: tDateienMitDaten; momentanePosition: longint): boolean; + function quellErsetzung(var worin: string; worinIstRegex: tRegexTyp; 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; worinIstRegex: boolean; machDatei: string); +procedure allgemeineErsetzungen(var worin: string; worinIstRegex: tRegexTyp; machDatei: string); implementation @@ -317,7 +317,7 @@ begin result:=_zieles[idx]; end; -function tGenerischeAbhaengigkeit.quellErsetzung(var worin: string; worinIstRegex: boolean; quellen: tDateienMitDaten; momentanePosition: longint): boolean; +function tGenerischeAbhaengigkeit.quellErsetzung(var worin: string; worinIstRegex: tRegexTyp; quellen: tDateienMitDaten; momentanePosition: longint): boolean; var s,anfang,mitte,numStr: string; i,li,re,qNum: longint; @@ -330,30 +330,18 @@ begin else numStr:=intToStr(qNum); s:=quellen[qNum+byte(qNum<0)].name; - if worinIstRegex then // %in% - ersetzeAlleVorkommen(worin,'%in'+numStr+'%',escape(s,'\.','\')) - else - ersetzeAlleVorkommen(worin,'%in'+numStr+'%',s); + ersetzeAlleVorkommen(worin,'%in'+numStr+'%',escapeStringToRegex(s,worinIstRegex)); // %in% s:=extractfilename(s); - if worinIstRegex then // %ifile% - ersetzeAlleVorkommen(worin,'%ifile'+numStr+'%',escape(s,'\.','\')) - else - ersetzeAlleVorkommen(worin,'%ifile'+numStr+'%',s); + ersetzeAlleVorkommen(worin,'%ifile'+numStr+'%',escapeStringToRegex(s,worinIstRegex)); // %ifile% 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); - if worinIstRegex then // %basename% - ersetzeAlleVorkommen(worin,'%basename'+numStr+','+intToStr(i)+'%',escape(s,'\.','\')) - else - ersetzeAlleVorkommen(worin,'%basename'+numStr+','+intToStr(i)+'%',s); + ersetzeAlleVorkommen(worin,'%basename'+numStr+','+intToStr(i)+'%',escapeStringToRegex(s,worinIstRegex)); // %basename% end; - if worinIstRegex then // %basename% - ersetzeAlleVorkommen(worin,'%basename'+numStr+'%',escape(s,'\.','\')) - else - ersetzeAlleVorkommen(worin,'%basename'+numStr+'%',s); + ersetzeAlleVorkommen(worin,'%basename'+numStr+'%',escapeStringToRegex(s,worinIstRegex)); // %basename% end; while pos('%dirname',worin)>0 do begin // %dirname% @@ -391,9 +379,7 @@ begin mitte:=mitte+'/'+erstesArgument(s,'/',false); end; delete(mitte,1,1); - if worinIstRegex then - mitte:=escape(mitte,'\.','\'); - worin:=anfang+mitte+worin; + worin:=anfang+escapeStringToRegex(mitte,worinIstRegex)+worin; end; allgemeineErsetzungen(worin,worinIstRegex,_machDatei); // %DIRNAME% %num'...'% @@ -438,7 +424,7 @@ var begin result:=false; if pos('{',zielFkt)=0 then begin - if not quellErsetzung(zielFkt,false,quellen,quellen.count) then exit; + if not quellErsetzung(zielFkt,rtKein,quellen,quellen.count) then exit; if pos('*',zielFkt)=0 then begin zielFkt:=unescape(zielFkt); wasda:=false; @@ -544,8 +530,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,true,tmpQs,i) then begin // regex-substitution nicht erfolgreich - - idx[i]:=-1; // wird behandelt wie nie passender regex + if not quellErsetzung(s,rtFpc,tmpQs,i) then begin // regex-substitution nicht erfolgreich - + idx[i]:=-1; // wird behandelt wie nie passender regex tmpQs[i]:=nil; dec(i); continue; @@ -605,7 +591,7 @@ begin es.last.ziele.add(ziele[i][j]); for j:=0 to befehleFkt.count-1 do begin s:=befehleFkt[j]; - if quellErsetzung(s,false,quellen[i],quellen[i].count) then + if quellErsetzung(s,rtKein,quellen[i],quellen[i].count) then es.last.befehle.add(s); end; if es.last.befehle.count=0 then @@ -620,12 +606,13 @@ begin // sha512summen erneuern s:='sed "'; for j:=0 to quellen[i].count-1 do - s:=s+'/\s'+escape(quellen[i][j].name,'./','\')+'\$/d; '; + s:=s+'/\s'+escapeStringToRegex(escape(quellen[i][j].name,'$','\'),rtShell,'"/')+'\$/d; '; for j:=0 to ziele[i].count-1 do - s:=s+'/\s'+escape(ziele[i][j].name,'./','\')+'\$/d; '; - s:=s+'" -i "'+_pruefSummenDatei+'"'; + s:=s+'/\s'+escapeStringToRegex(escape(ziele[i][j].name,'$','\'),rtShell,'"/')+'\$/d; '; + s:=s+'" -i "'+escape(_pruefSummenDatei,'"\','\')+'"'; es.last.befehle.add(s); s:='sha512sum'; + neuSums.clear; for j:=0 to quellen[i].count-1 do neuSums.add(quellen[i][j].name); for j:=0 to ziele[i].count-1 do @@ -634,7 +621,7 @@ begin neuSums.uniq('-'); for j:=0 to neuSums.count-1 do s:=s+' "'+escape(neuSums[j],'"\','\')+'"'; - s:=s+' >> '+_pruefSummenDatei; + s:=s+' >> "'+escape(_pruefSummenDatei,'"\','\')+'"'; es.last.befehle.add(s); end; end; @@ -825,7 +812,7 @@ begin case wasIst of ztSuche: begin - allgemeineErsetzungen(s,false,_machDatei); + allgemeineErsetzungen(s,rtKein,_machDatei); if startetMit('!',s) then begin setLength(_ign,length(_ign)+1); _ign[length(_ign)-1]:=tRegExpr.create; @@ -1087,7 +1074,7 @@ end; // allgemeine Funktionen -procedure allgemeineErsetzungen(var worin: string; worinIstRegex: boolean; machDatei: string); +procedure allgemeineErsetzungen(var worin: string; worinIstRegex: tRegexTyp; machDatei: string); var i: longint; s,anfang,mitte: string; @@ -1095,10 +1082,7 @@ begin s:=extractFilePath(machDatei); if rightStr(s,1)='/' then delete(s,length(s),1); - if worinIstRegex then - ersetzeAlleVorkommen(worin,'%DIRNAME%',escape(s,'\.','\')) - else - ersetzeAlleVorkommen(worin,'%DIRNAME%',s); + ersetzeAlleVorkommen(worin,'%DIRNAME%',escapeStringToRegex(s,worinIstRegex)); while pos('%num''',worin)>0 do begin anfang:=erstesArgument(worin,'%num'''); mitte:=erstesArgument(worin,'''%'); @@ -1112,9 +1096,7 @@ begin delete(mitte,1,i); break; end; - if worinIstRegex then - mitte:=escape(s,'\.','\'); - worin:=anfang+mitte+worin; + worin:=anfang+escapeStringToRegex(mitte,worinIstRegex)+worin; end; end; |