162 lines
4.1 KiB
ObjectPascal
162 lines
4.1 KiB
ObjectPascal
unit SetPoHeaderUtils;
|
|
|
|
interface
|
|
|
|
procedure Run;
|
|
|
|
implementation
|
|
|
|
uses SysUtils, Classes, JclStrings;
|
|
|
|
const
|
|
TitleConst : string = '# SOME DESCRIPTIVE TITLE.';
|
|
CopyrightConst : string = '# Copyright (C)';
|
|
AuthorConst : string = 'FIRST AUTHOR';
|
|
EmailConst : string = 'EMAIL@ADDRESS';
|
|
DefaultLastTranslatorConst : string = '"Last-Translator: Somebody <your.email@address.com>\n"';
|
|
NoneLastTranslatorConst : string = '"Last-Translator: none <none@none.com>\n"';
|
|
|
|
procedure ApplyHeader(title, copyright, package, version, author, email, poFile : string);
|
|
var
|
|
Lines : TStringList;
|
|
I : Integer;
|
|
year : string;
|
|
curLine : string;
|
|
begin
|
|
year := IntToStr(CurrentYear);
|
|
Lines := TStringList.Create;
|
|
try
|
|
Lines.LoadFromFile(poFile);
|
|
I := 0;
|
|
while (I < Lines.Count) and (Copy(Lines[i], 1, 2) <> '#.') do
|
|
begin
|
|
if Copy(Lines[I], 1, Length(TitleConst)) = TitleConst then
|
|
Lines[I] := '# ' + title
|
|
else if Copy(Lines[I], 1, Length(CopyrightConst)) = CopyrightConst then
|
|
Lines[I] := CopyrightConst + ' ' + year + ' ' + copyright
|
|
else if Copy(Lines[I], 1, Length(DefaultLastTranslatorConst)) = DefaultLastTranslatorConst then
|
|
Lines[I] := NoneLastTranslatorConst
|
|
else
|
|
begin
|
|
curLine := Lines[I];
|
|
StrReplace(curLine, AuthorConst, author);
|
|
StrReplace(curLine, EmailConst, email);
|
|
StrReplace(curLine, 'PACKAGE', package);
|
|
StrReplace(curLine, 'VERSION', version);
|
|
StrReplace(curLine, 'YEAR', year);
|
|
Lines[I] := curLine;
|
|
end;
|
|
|
|
// go to next line
|
|
Inc(I);
|
|
end;
|
|
Lines.SaveToFile(poFile);
|
|
finally
|
|
Lines.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure Help;
|
|
begin
|
|
WriteLn('SetPoHeader - Sets the headers in a PO File');
|
|
WriteLn;
|
|
WriteLn(' SetPoHeader -t TITLE -c COPYRIGHT -p PACKAGE');
|
|
WriteLn(' -v VERSION -a AUTHOR -e EMAIL');
|
|
WriteLn(' poFile.po');
|
|
WriteLn;
|
|
WriteLn(#9'poFile.po'#9'The po file to modify');
|
|
WriteLn(#9'-h'#9#9'prints this help message');
|
|
WriteLn(#9'-t TITLE'#9'The title of the file');
|
|
WriteLn(#9'-c COPYRIGHT'#9'The copyright notice');
|
|
WriteLn(#9'-p PACKAGE'#9'The package name');
|
|
WriteLn(#9'-v VERSION'#9'The version of the package');
|
|
WriteLn(#9'-a AUTHOR'#9'The author''s name');
|
|
WriteLn(#9'-e EMAIL'#9'The author''s email');
|
|
end;
|
|
|
|
procedure Run;
|
|
var
|
|
I : Integer;
|
|
curParam : string;
|
|
title : string;
|
|
copyright : string;
|
|
package : string;
|
|
version : string;
|
|
author : string;
|
|
email : string;
|
|
poFile : string;
|
|
begin
|
|
// Analyse command line parameters to get informations
|
|
// to use when modifying the headers
|
|
I := 1;
|
|
while I <= ParamCount do
|
|
begin
|
|
curParam := ParamStr(I);
|
|
if AnsiSameText(curParam, '-h') then
|
|
begin
|
|
Help;
|
|
Exit;
|
|
end
|
|
else if AnsiSameText(curParam, '-t') then
|
|
begin
|
|
title := ParamStr(I+1);
|
|
Inc(I);
|
|
end
|
|
else if AnsiSameText(curParam, '-c') then
|
|
begin
|
|
copyright := ParamStr(I+1);
|
|
Inc(I);
|
|
end
|
|
else if AnsiSameText(curParam, '-p') then
|
|
begin
|
|
package := ParamStr(I+1);
|
|
Inc(I);
|
|
end
|
|
else if AnsiSameText(curParam, '-v') then
|
|
begin
|
|
version := ParamStr(I+1);
|
|
Inc(I);
|
|
end
|
|
else if AnsiSameText(curParam, '-a') then
|
|
begin
|
|
author := ParamStr(I+1);
|
|
Inc(I);
|
|
end
|
|
else if AnsiSameText(curParam, '-e') then
|
|
begin
|
|
email := ParamStr(I+1);
|
|
Inc(I);
|
|
end
|
|
else
|
|
poFile := ParamStr(I);
|
|
|
|
Inc(I);
|
|
end;
|
|
|
|
// check that we have everything
|
|
if (title = '') or
|
|
(copyright = '') or
|
|
(package = '') or
|
|
(version = '') or
|
|
(author = '') or
|
|
(email = '') or
|
|
(poFile = '') then
|
|
begin
|
|
WriteLn('Error: You MUST specify all options');
|
|
WriteLn;
|
|
Help;
|
|
Exit;
|
|
end;
|
|
|
|
// Now, work on the file
|
|
if not FileExists(poFile) then
|
|
begin
|
|
WriteLn('Error: '+poFile+' does not exists');
|
|
Exit;
|
|
end
|
|
else
|
|
ApplyHeader(title, copyright, package, version, author, email, poFile);
|
|
end;
|
|
|
|
end.
|