summaryrefslogtreecommitdiff
path: root/tools.pas
diff options
context:
space:
mode:
Diffstat (limited to 'tools.pas')
-rw-r--r--tools.pas51
1 files changed, 37 insertions, 14 deletions
diff --git a/tools.pas b/tools.pas
index a7cdfad..11f14ae 100644
--- a/tools.pas
+++ b/tools.pas
@@ -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;