mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-05 05:28:17 +02:00
198 lines
6.3 KiB
ObjectPascal
198 lines
6.3 KiB
ObjectPascal
unit PoFamilyLists;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
Uses
|
|
Classes, SysUtils, ContNrs, LCLProc, LazFileUtils,
|
|
//{$IFDEF UNIX}{$IFNDEF DisableCWString}, cwstring{$ENDIF}{$ENDIF},
|
|
PoFamilies, PoCheckerConsts, Translations;
|
|
|
|
type
|
|
|
|
{ TPoFamilyList }
|
|
|
|
TPoFamilyList = class
|
|
private
|
|
FLangID: TLangID;
|
|
FList: TFPObjectList;
|
|
FOnTestEnd: TTestEndEvent;
|
|
FOnTestStart: TTestStartEvent;
|
|
FPoFamilyStats: TPoFamilyStats;
|
|
FPoFamilyListStats: TTranslationStatistics;
|
|
FTestTypes: TPoTestTypes;
|
|
function GetItem(Index: Integer): TPoFamily;
|
|
//procedure SetItem(Index: Integer; AValue: TPoFamily);
|
|
protected
|
|
procedure DoTestStart(const ATestName, APoFileName: String);
|
|
procedure DoTestEnd(const ATestName: String; const ErrorCount: Integer);
|
|
public
|
|
InfoLog: TStringList;
|
|
StatLog: TStringList;
|
|
DupLog: TStringList;
|
|
constructor Create(AMasterList: TStrings; ALangID: TLangID);
|
|
destructor Destroy; override;
|
|
procedure Add(PoFamily: TPofamily);
|
|
function Count: Integer;
|
|
function StatPerc(Value: Integer): Double;
|
|
procedure RunTests;
|
|
property LangID: TLangID read FLangID;
|
|
property Items[Index: Integer]: TPoFamily read GetItem; // write SetItem;
|
|
property PoFamilyStats: TPoFamilyStats read FPoFamilyStats;
|
|
property PoFamilyListStats: TTranslationStatistics read FPoFamilyListStats;
|
|
property TestTypes: TPoTestTypes read FTestTypes write FTestTypes;
|
|
property OnTestStart: TTestStartEvent read FOnTestStart write FOnTestStart;
|
|
property OnTestEnd: TTestEndEvent read FOnTestEnd write FOnTestEnd;
|
|
end;
|
|
|
|
var
|
|
PoFamilyList: TPoFamilyList;
|
|
|
|
implementation
|
|
|
|
{ TPoFamilyList }
|
|
|
|
function TPoFamilyList.GetItem(Index: Integer): TPoFamily;
|
|
begin
|
|
Result := TPoFamily(FList.Items[Index]);
|
|
end;
|
|
|
|
|
|
procedure TPoFamilyList.DoTestStart(const ATestName, APoFileName: String);
|
|
begin
|
|
if Assigned(FOnTestStart) then FOnTestStart(ATestName, APoFileName);
|
|
end;
|
|
|
|
procedure TPoFamilyList.DoTestEnd(const ATestName: String; const ErrorCount: Integer);
|
|
begin
|
|
if Assigned(FOnTestEnd) then FOnTestEnd(ATestName, ErrorCount);
|
|
end;
|
|
|
|
constructor TPoFamilyList.Create(AMasterList: TStrings; ALangID: TLangID);
|
|
var
|
|
i: Integer;
|
|
MasterName, ChildName, MasterMsg, ChildMsg: String;
|
|
APoFamily: TPoFamily;
|
|
begin
|
|
InfoLog := TStringList.Create;
|
|
StatLog := TStringList.Create;
|
|
DupLog := TStringList.Create;
|
|
FList := TFPObjectList.Create(True);
|
|
MasterMsg := '';
|
|
ChildMsg := '';
|
|
FPoFamilyStats := TPoFamilyStats.Create;
|
|
FLangID := ALangID;
|
|
for i := 0 to AMasterList.Count - 1 do
|
|
begin
|
|
MasterName := AMasterList[i];
|
|
ChildName := '';
|
|
if FileExistsUtf8(MasterName) then
|
|
begin
|
|
if (ALangID <> lang_all) then
|
|
ChildName := ChangeFileExt(MasterName, '.' + LanguageAbbr[ALangID] + '.po');
|
|
//debugln('TPoFamilyList.Create: i = ',DbgS(i),' Adding TPoFamily.Create(''',ExtractFileName(MasterName),
|
|
// ''',',ExtractFileName(ChildName),''')');
|
|
if (ALangID = lang_all) or FileExistsUtf8(ChildName) then
|
|
begin
|
|
APoFamily := TPoFamily.Create(MasterName, ChildName, ALangID);
|
|
Add(APoFamily);
|
|
end
|
|
else
|
|
ChildMsg := ChildMsg + Format('"%s"',[ChildName]) + LineEnding;
|
|
end
|
|
else
|
|
MasterMsg := MasterMsg + Format('"%s"',[MasterName]) + LineEnding;
|
|
end;
|
|
if MasterMsg <> '' then
|
|
MasterMsg := MasterMsg + LineEnding;
|
|
if ChildMsg <> '' then
|
|
ChildMsg := ChildMsg + LineEnding;
|
|
MasterMsg := MasterMsg + ChildMsg;
|
|
if MasterMsg <> '' then
|
|
InfoLog.AddText(Format(sFilesNotFoundAndRemoved,[MasterMsg]));
|
|
end;
|
|
|
|
destructor TPoFamilyList.Destroy;
|
|
begin
|
|
//debugln('TPoFamilyList.Destroy: FList.Count = ',DbgS(FList.Count));
|
|
PoFamilyStats.Free;
|
|
InfoLog.Free;
|
|
StatLog.Free;
|
|
DupLog.Free;
|
|
FList.Free;
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TPoFamilyList.Add(PoFamily: TPofamily);
|
|
begin
|
|
FList.Add(PoFamily);
|
|
end;
|
|
|
|
function TPoFamilyList.Count: Integer;
|
|
begin
|
|
Result := FList.Count;
|
|
end;
|
|
|
|
function TPoFamilyList.StatPerc(Value: Integer): Double;
|
|
begin
|
|
Result := 100 * Value / (PoFamilyListStats.Translated + PoFamilyListStats.Untranslated + PoFamilyListStats.Fuzzy);
|
|
end;
|
|
|
|
procedure TPoFamilyList.RunTests;
|
|
var
|
|
ErrorCount, NonFuzzyErrorCount, WarningCount: Integer;
|
|
Index, ThisErrorCount, ThisNonFuzzyErrorCount, ThisWarningCount: Integer;
|
|
ThisTranslatedCount, ThisUntranslatedCount, ThisFuzzyCount: Integer;
|
|
PoFamily: TPoFamily;
|
|
begin
|
|
ErrorCount := NoError;
|
|
NonFuzzyErrorCount := NoError;
|
|
WarningCount := NoError;
|
|
FPoFamilyListStats.Translated := 0;
|
|
FPoFamilyListStats.Untranslated := 0;
|
|
FPoFamilyListStats.Fuzzy := 0;
|
|
FPoFamilyStats.Clear;
|
|
for Index := 0 to FList.Count - 1 do
|
|
begin
|
|
PoFamily := GetItem(Index);
|
|
PoFamily.OnTestStart := FOnTestStart;
|
|
PoFamily.OnTestEnd := FOnTestEnd;
|
|
PoFamily.TestTypes := FTesttypes;
|
|
PoFamily.RunTests(ThisErrorCount, ThisNonFuzzyErrorCount, ThisWarningCount, ThisTranslatedCount, ThisUntranslatedCount, ThisFuzzyCount, InfoLog, StatLog, DupLog);
|
|
PoFamily.PoFamilyStats.AddItemsTo(FPoFamilyStats);
|
|
ErrorCount := ErrorCount + ThisErrorCount;
|
|
NonFuzzyErrorCount := NonFuzzyErrorCount + ThisNonFuzzyErrorCount;
|
|
WarningCount := WarningCount + ThisWarningCount;
|
|
FPoFamilyListStats.Translated := PoFamilyListStats.Translated + ThisTranslatedCount;
|
|
FPoFamilyListStats.Untranslated := PoFamilyListStats.Untranslated + ThisUntranslatedCount;
|
|
FPoFamilyListStats.Fuzzy := PoFamilyListStats.Fuzzy + ThisFuzzyCount;
|
|
end;
|
|
|
|
if NonFuzzyErrorCount > 0 then
|
|
InfoLog.Add(Format(sTotalErrorsNonFuzzy, [ErrorCount, NonFuzzyErrorCount]))
|
|
else
|
|
InfoLog.Add(Format(sTotalErrors, [ErrorCount]));
|
|
|
|
if FLangID <> lang_all then
|
|
begin
|
|
InfoLog.Add(Format(sTotalUntranslatedStrings, [IntToStr(PoFamilyListStats.Untranslated)]));
|
|
InfoLog.Add(Format(sTotalFuzzyStrings, [IntToStr(PoFamilyListStats.Fuzzy)]));
|
|
InfoLog.Add('');
|
|
InfoLog.Add(Format(sTotalTranslatedStrings, [IntToStr(PoFamilyListStats.Translated), StatPerc(PoFamilyListStats.Translated)]));
|
|
|
|
StatLog.Add(Format(sTotalUntranslatedStrings, [IntToStr(PoFamilyListStats.Untranslated)]));
|
|
StatLog.Add(Format(sTotalFuzzyStrings, [IntToStr(PoFamilyListStats.Fuzzy)]));
|
|
StatLog.Add('');
|
|
StatLog.Add(Format(sTotalTranslatedStrings, [IntToStr(PoFamilyListStats.Translated), StatPerc(PoFamilyListStats.Translated)]));
|
|
end;
|
|
|
|
DupLog.Add(Format(sTotalWarnings, [WarningCount]));
|
|
end;
|
|
|
|
initialization
|
|
PoFamilyList := nil;
|
|
|
|
end.
|
|
|