summaryrefslogtreecommitdiff
path: root/dateibeziehungen.pas
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2016-05-30 11:58:50 +0200
committerErich Eckner <git@eckner.net>2016-05-30 11:58:50 +0200
commit6680df87dc92eb6f1b80a068296c42295460dd25 (patch)
treef66fa3b08e8d2bae13a99806cbaf69ff5f50a37e /dateibeziehungen.pas
parented29bd3cd6f2be81bee62027c27f9ffd6f8cbe0a (diff)
downloadMake-6680df87dc92eb6f1b80a068296c42295460dd25.tar.xz
Macros auch mit "%" beenden, kleinere Korrekturen
Diffstat (limited to 'dateibeziehungen.pas')
-rw-r--r--dateibeziehungen.pas114
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