diff options
-rw-r--r-- | systemunit.pas | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/systemunit.pas b/systemunit.pas index 408fc19..461a118 100644 --- a/systemunit.pas +++ b/systemunit.pas @@ -194,14 +194,24 @@ end; procedure shellExpand(var sa: tMyStringList); var - start,ende,s: string; + start,ende,s,original,praefix: string; i,j,ebene,iStart,iStopp,insOff: longint; begin i:=0; - while i<sa.count do - if pos('{',sa[i])>0 then begin - s:=sa[i]; - start:=erstesArgument(s,'{',false); + while i<sa.count do begin + original:=sa[i]; + s:=original; + praefix:=''; + while pos('{',s+'{') > pos('''',s+'''') do begin + j:=pos('''',s+''''); + praefix:=praefix + leftStr(s,j); + delete(s,1,j); + j:=pos('''',s+''''); + praefix:=praefix + leftStr(s,j); + delete(s,1,j); + end; + if pos('{',s)>0 then begin + start:=praefix+erstesArgument(s,'{',false); j:=1; ebene:=0; while (j<=length(s)) and ((s[j]<>'}') or (ebene>0)) do begin @@ -212,7 +222,7 @@ begin inc(j); end; if (ebene<>0) or (j>length(s)) then - fehler('Geschweifte Klammern sind in '''+sa[i]+''' nicht ausgewogen!'); + fehler('Geschweifte Klammern sind in '''+original+''' nicht ausgewogen!'); ende:=rightStr(s,length(s)-j); s:=leftStr(s,j-1)+','; @@ -230,7 +240,7 @@ begin '.': if (ebene=0) and (copy(s,j,2)='..') then begin if iStart<>low(longint) then - fehler('''..'' darf nicht mehrmals hintereinander auftauchen - in '''+sa[i]+''' ist das aber der Fall!'); + fehler('''..'' darf nicht mehrmals hintereinander auftauchen - in '''+original+''' ist das aber der Fall!'); iStart:=strToInt(trim(leftStr(s,j-1))); delete(s,1,j+1); j:=1; @@ -262,6 +272,7 @@ begin end else inc(i); + end; for i:=0 to sa.count-1 do begin if leftStr(sa[i],1)<>'~' then continue; |