diff options
author | Erich Eckner <git@eckner.net> | 2016-05-30 11:58:50 +0200 |
---|---|---|
committer | Erich Eckner <git@eckner.net> | 2016-05-30 11:58:50 +0200 |
commit | 6680df87dc92eb6f1b80a068296c42295460dd25 (patch) | |
tree | f66fa3b08e8d2bae13a99806cbaf69ff5f50a37e /dateibeziehungen.pas | |
parent | ed29bd3cd6f2be81bee62027c27f9ffd6f8cbe0a (diff) | |
download | Make-6680df87dc92eb6f1b80a068296c42295460dd25.tar.xz |
Macros auch mit "%" beenden, kleinere Korrekturen
Diffstat (limited to 'dateibeziehungen.pas')
-rw-r--r-- | dateibeziehungen.pas | 114 |
1 files changed, 65 insertions, 49 deletions
diff --git a/dateibeziehungen.pas b/dateibeziehungen.pas index c244a79..dbfa552 100644 --- a/dateibeziehungen.pas +++ b/dateibeziehungen.pas @@ -326,70 +326,86 @@ end; function tGenerischeAbhaengigkeit.quellersetzung(var worin: string; quellen: tDateienMitDaten; momentanePosition: longint): boolean; var - s,anfang,mitte: string; - i,li,re,qNum: longint; - tmpRE: tRegExpr; + s,anfang,mitte,numStr: string; + i,li,re,qNum: longint; + tmpRE: tRegExpr; begin result:=true; - for qNum:=0 to momentanePosition-1 do begin - ersetzeAlleVorkommen(worin,'%in('+inttostr(qNum)+')',quellen[qnum].name); - s:=extractfilename(quellen[qnum].name); - ersetzeAlleVorkommen(worin,'%ifile('+inttostr(qNum)+')',s); + for qNum:=-byte(momentanePosition>0) to momentanePosition-1 do begin + if qNum<0 then + numStr:='' + else + numStr:=inttostr(qnum); + s:=quellen[qnum+byte(qnum<0)].name; + ersetzeAlleVorkommen(worin,'%in'+numStr+'%',s); // %in% + s:=extractfilename(s); + ersetzeAlleVorkommen(worin,'%ifile'+numStr+'%',s); // %ifile% if pos('.',s)>0 then delete(s,pos('.',s),length(s)); - ersetzeAlleVorkommen(worin,'%basename('+inttostr(qNum)+')',s); - - while pos('%dirname('+inttostr(qNum)+',',worin)>0 do begin - anfang:=erstesArgument(worin,'%dirname('+inttostr(qNum)+',',false); - mitte:=erstesArgument(worin,')',false); - s:=extractfilepath(quellen[qnum].name); - if rightStr(s,1)='/' then - delete(s,length(s),1); - i:=anzCs('/',s)+1; - li:=strtoint(trim(erstesArgument(mitte,',',false))); - if li<0 then li:=li+i; - if mitte='' then - re:=0 - else - re:=strtoint(mitte); - if re<=0 then re:=re+i; - while li>0 do begin - dec(li); - dec(re); - erstesArgument(s,'/',false); - end; - mitte:=''; - while re>0 do begin - dec(re); - mitte:=mitte+'/'+erstesArgument(s,'/',false); - end; - delete(mitte,1,1); - worin:=anfang+mitte+worin; - end; + ersetzeAlleVorkommen(worin,'%basename'+numStr+'%',s); // %basename% + end; + + while pos('%dirname',worin)>0 do begin // %dirname% + anfang:=erstesArgument(worin,'%dirname',false); + mitte:=erstesArgument(worin,'%',false); + if mitte='' then + li:=0 + else + li:=strtoint(erstesArgument(mitte,',',true)); + if mitte='' then + re:=-1 + else + re:=strtoint(erstesArgument(mitte,',',true)); + if mitte='' then + qNum:=0 + else + qNum:=strtoint(erstesArgument(mitte,',',true)); + + if qNum>=momentanePosition then + fehler('Quellersetzung sieht ''%dirname%'' für Quelle Nummer '+inttostr(qNum)+' an Position '+inttostr(momentanePosition)+'.'); s:=extractfilepath(quellen[qnum].name); if rightStr(s,1)='/' then delete(s,length(s),1); - ersetzeAlleVorkommen(worin,'%dirname('+inttostr(qnum)+')',s); + i:=anzCs('/',s)+1; + if li<0 then li:=li+i; + if re<0 then re:=re+i; + while li>0 do begin + dec(li); + dec(re); + erstesArgument(s,'/',false); + end; + mitte:=''; + while re>=0 do begin + dec(re); + mitte:=mitte+'/'+erstesArgument(s,'/',false); + end; + delete(mitte,1,1); + worin:=anfang+mitte+worin; end; - allgemeineErsetzungen(worin,machDatei); + allgemeineErsetzungen(worin,machDatei); // %DIRNAME% %num'...'% result:=false; tmpRE:=tRegExpr.create; - for qNum:=0 to momentanePosition-1 do begin - while pos('%nurmit('+inttostr(qnum)+')''',worin)>0 do begin - anfang:=erstesArgument(worin,'%nurmit('+inttostr(qnum)+')''',false); - tmpRE.expression:=erstesArgument(worin,'''',false); - if not tmpRE.exec(quellen[qnum].name) then begin + for qNum:=-byte(momentanePosition>0) to momentanePosition-1 do begin + if qNum<0 then + numStr:='' + else + numStr:=inttostr(qnum); + s:=quellen[qnum+byte(qnum<0)].name; + while pos('%nurmit'+numStr+'''',worin)>0 do begin // %nurmit'...'% + anfang:=erstesArgument(worin,'%nurmit'+numStr+'''',false); + tmpRE.expression:=erstesArgument(worin,'''%',false); + if not tmpRE.exec(s) then begin tmpRE.free; exit; end; worin:=anfang+worin; end; - while pos('%nurohne('+inttostr(qnum)+')''',worin)>0 do begin - anfang:=erstesArgument(worin,'%nurohne('+inttostr(qnum)+')''',false); - tmpRE.expression:=erstesArgument(worin,'''',false); - if tmpRE.exec(quellen[qnum].name) then begin + while pos('%nurohne'+numStr+'''',worin)>0 do begin // %nurohne'...'% + anfang:=erstesArgument(worin,'%nurohne'+numStr+'''',false); + tmpRE.expression:=erstesArgument(worin,'''%',false); + if tmpRE.exec(s) then begin tmpRE.free; exit; end; @@ -1064,10 +1080,10 @@ begin s:=extractfilepath(machDatei); if rightStr(s,1)='/' then delete(s,length(s),1); - ersetzeAlleVorkommen(worin,'%DIRNAME',s); + ersetzeAlleVorkommen(worin,'%DIRNAME%',s); while pos('%num''',worin)>0 do begin anfang:=erstesArgument(worin,'%num'''); - mitte:=erstesArgument(worin,''''); + mitte:=erstesArgument(worin,'''%'); for i:=length(mitte) downto 1 do if mitte[i] in ['0'..'9'] then break |