diff options
Diffstat (limited to 'tools.pas')
-rw-r--r-- | tools.pas | 51 |
1 files changed, 37 insertions, 14 deletions
@@ -191,7 +191,7 @@ procedure testeObBefehlLokal(bef, ordner: string; lokTest: tRegExpr); var exe,args,regex,oBef,s: string; dateien,sl,relZeil: tMyStringlist; - i,j: longint; + i,matchNum: longint; re: tRegExpr; begin oBef:=bef; @@ -201,6 +201,11 @@ begin delete(bef,1,notQuotedPos(';',bef)); bef:=trim(bef); end; + while notQuotedPos('&&',bef)>0 do begin + testeObBefehlLokal(trim(leftStr(bef,notQuotedPos('&&',bef)-1)),ordner,lokTest); + delete(bef,1,notQuotedPos('&&',bef)+1); + bef:=trim(bef); + end; args:=''; repeat @@ -220,25 +225,38 @@ begin // set output "~/Dokumente/Erich_Masterarbeit/Bilder/gnuplot/Energiescan.tex" regex:='^ *set +output +'; re:=tRegExpr.create; - re.expression:='"[^"]*/[^"]*"'; + re.expression:='"([^"]*/[^"]*)"'; + matchNum:=1; end else if exe='epost' then begin // Datei: - regex:='^ *(Datei|Legende): *'; + regex:='^ *(Datei|Legende):'; re:=tRegExpr.create; re.expression:='[^ :]*/[^ ]*'; + matchNum:=0; end else if exe='math' then begin // das wird vmtl. schwer zu überprüfen, außer man nimmt Muster, // die generisch auf Pfade passen, aber dann erwischt man auch den Input mit ... regex:='^([^"]*"[^"]*")*[^"]*"([^"]*/)+[^"]*"'; re:=tRegExpr.create; - re.expression:='"[^"]*/[^"]*"'; + re.expression:='"([^"]*/[^"]*)"'; + matchNum:=1; end - else exit; + else if (exe='cd') then begin + if not lokTest.exec(bef) then + fehler('Befehl '''+oBef+''' hat Lokalitätstest nicht bestanden! ('+lokTest.expression+')'); + exit; + end + else if (exe='convert') or + (exe='epstopdf') or + (exe='latexmk') or + (exe='mpost') or + (exe='pdflatex') then + exit; - // folgende executables sind unkritisch, da der name des outputs i.d.R. direkt - // vom namen des Inputs abhängt bzw. per Kommandozeilenparameter übergeben + // folgende Executables sind unkritisch, da der Name des Outputs i.d.R. direkt + // vom Namen des Inputs abhängt bzw. per Kommandozeilenparameter übergeben // wird (und nicht in einer Datei steht): // // 'convert' @@ -249,12 +267,16 @@ begin dateien:=extrahiereAlleDateien(args+' '+bef); if dateien.count = 0 then - gibAus('Warnung: Hier ist ein Befehl ohne offensichtliche input-Dateien! ('''+oBef+''')!',3); + gibAus('Warnung: Hier ist ein Befehl ohne offensichtliche Input-Dateien! ('''+oBef+''')!',3); sl:=tMyStringlist.create; relZeil:=tMyStringlist.create; for i:=0 to dateien.count-1 do begin sl.loadFromFile(dateien[i]); + if exe='epost' then begin + sl.grep(regex+'|^[!?]'); + sl.unfoldMacros; + end; sl.grep(regex); relZeil.addStrings(sl); end; @@ -262,18 +284,19 @@ begin dateien.free; for i:=0 to relZeil.count-1 do begin - re.inputString:=relZeil[i]; - if re.subExprMatchCount=0 then - gibAus('Warnung: Hier ist eine Zeile in der optionsdatei, die keine passende Inputdatei benennt, es aber sollte! ('''+relZeil[i]+''')!',3); - for j:=0 to re.subExprMatchCount-1 do begin - s:=trim(re.match[j]); + if not re.exec(relZeil[i]) then begin + gibAus('Warnung: Hier ist eine Zeile in der Optionsdatei, die keine passende Inputdatei benennt, es aber sollte! ('''+relZeil[i]+''')!',3); + continue; + end; + repeat + s:=trim(re.match[matchNum]); if (leftStr(s,1)='"') and (rightStr(s,1)='"') then begin delete(s,1,1); delete(s,length(s),1); end; if not lokTest.exec(s) then fehler(''''+relZeil[i]+''' in Befehl '''+oBef+''' hat Lokalitätstest nicht bestanden! ('+lokTest.expression+')'); - end; + until not re.execNext; end; re.free; relZeil.free; |