mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-07 22:58:14 +02:00
IDE: fix invalid localized package names
git-svn-id: trunk@57961 -
This commit is contained in:
parent
7ea1e8cd31
commit
967bf6dfd1
@ -113,6 +113,7 @@ function FindNextIdentifierSkipStrings(const Source: string;
|
||||
StartPos, MaxPos: integer): integer;
|
||||
function IsValidIdentPair(const NamePair: string): boolean;
|
||||
function IsValidIdentPair(const NamePair: string; out First, Second: string): boolean;
|
||||
function ExtractPasIdentifier(const Ident: string; AllowDots: Boolean): string;
|
||||
|
||||
// line/code ends
|
||||
function SrcPosToLineCol(const s: string; Position: integer;
|
||||
@ -4818,6 +4819,38 @@ begin
|
||||
until false;
|
||||
end;
|
||||
|
||||
function ExtractPasIdentifier(const Ident: string; AllowDots: Boolean): string;
|
||||
var
|
||||
p: Integer;
|
||||
begin
|
||||
p:=1;
|
||||
Result:=Ident;
|
||||
while p<=length(Result) do begin
|
||||
if Result[p] in ['a'..'z','A'..'Z','_'] then begin
|
||||
inc(p);
|
||||
while p<=length(Result) do begin
|
||||
case Result[p] of
|
||||
'a'..'z','A'..'Z','_','0'..'9': inc(p);
|
||||
'.':
|
||||
if AllowDots then
|
||||
break
|
||||
else
|
||||
Delete(Result,p,1);
|
||||
else
|
||||
Delete(Result,p,1);
|
||||
end;
|
||||
end;
|
||||
if p>length(Result) then exit;
|
||||
// p is now on the '.'
|
||||
inc(p);
|
||||
end else
|
||||
Delete(Result,p,1);
|
||||
end;
|
||||
p:=length(Result);
|
||||
if (p>0) and (Result[p]='.') then
|
||||
Delete(Result,p,1);
|
||||
end;
|
||||
|
||||
function GetLineIndentWithTabs(const Source: string; Position: integer;
|
||||
TabWidth: integer): integer;
|
||||
var p: integer;
|
||||
|
@ -101,9 +101,9 @@ type
|
||||
property Removed: boolean read FRemoved write FRemoved;
|
||||
end;
|
||||
|
||||
function IsValidUnitName(AUnitName: String): Boolean; inline;
|
||||
function IsValidPkgName(APkgName: String): Boolean; inline;
|
||||
function PackageFileNameIsValid(const AFilename: string): boolean;
|
||||
function IsValidUnitName(AUnitName: String): Boolean; inline;
|
||||
function IsValidPkgName(APkgName: String): Boolean; inline;
|
||||
function PackageFileNameIsValid(const AFilename: string): boolean;
|
||||
|
||||
|
||||
implementation
|
||||
|
@ -377,6 +377,7 @@ type
|
||||
function DoOpenPkgFile(PkgFile: TPkgFile): TModalResult;
|
||||
function ShowAddDialog(var DlgPage: TAddToPkgType): TModalResult;
|
||||
function ShowAddDepDialog: TModalResult;
|
||||
function PkgNameToFormName(const PkgName: string): string;
|
||||
public
|
||||
// IFilesEditorInterface
|
||||
function FilesEditTreeView: TTreeView;
|
||||
@ -1879,8 +1880,7 @@ procedure TPackageEditorForm.SetLazPackage(const AValue: TLazPackage);
|
||||
begin
|
||||
//force editor name change when package name changed!
|
||||
if (FLazPackage=Nil)
|
||||
and ( (AValue=Nil) or (Name=PackageEditorWindowPrefix
|
||||
+StringReplace(AValue.Name,'.','_',[rfReplaceAll])) )
|
||||
and ( (AValue=Nil) or (Name=PkgNameToFormName(AValue.Name)) )
|
||||
then
|
||||
exit;
|
||||
if FLazPackage<>nil then
|
||||
@ -2077,7 +2077,7 @@ procedure TPackageEditorForm.UpdateAll(Immediately: boolean);
|
||||
begin
|
||||
if csDestroying in ComponentState then exit;
|
||||
if LazPackage=nil then exit;
|
||||
Name:=PackageEditorWindowPrefix + StringReplace(LazPackage.Name,'.','_',[rfReplaceAll]);
|
||||
Name:=PkgNameToFormName(LazPackage.Name);
|
||||
if fForcedFlags<>[] then
|
||||
fFlags:=fFlags+fForcedFlags // Flags forcing a partial update
|
||||
else
|
||||
@ -2292,6 +2292,11 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function TPackageEditorForm.PkgNameToFormName(const PkgName: string): string;
|
||||
begin
|
||||
Result:=PackageEditorWindowPrefix+StringReplace(PkgName,'.','_',[rfReplaceAll]);
|
||||
end;
|
||||
|
||||
procedure TPackageEditorForm.BeginUpdate;
|
||||
begin
|
||||
inc(fUpdateLock);
|
||||
|
@ -265,7 +265,7 @@ type
|
||||
public
|
||||
// searching
|
||||
function CheckIfPackageCanBeClosed(APackage: TLazPackage): boolean;
|
||||
function CreateUniquePkgName(const Prefix: string;
|
||||
function CreateUniquePkgName(Prefix: string;
|
||||
IgnorePackage: TLazPackage): string;
|
||||
function CreateUniqueUnitName(const Prefix: string): string;
|
||||
function DependencyExists(Dependency: TPkgDependency;
|
||||
@ -1778,11 +1778,13 @@ begin
|
||||
Result:=false;
|
||||
end;
|
||||
|
||||
function TLazPackageGraph.CreateUniquePkgName(const Prefix: string;
|
||||
function TLazPackageGraph.CreateUniquePkgName(Prefix: string;
|
||||
IgnorePackage: TLazPackage): string;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
if not IsValidPkgName(Prefix) then
|
||||
RaiseException('invalid pkg name "'+Prefix+'"');
|
||||
// try Prefix alone
|
||||
if not PackageNameExists(Prefix,IgnorePackage) then begin
|
||||
Result:=Prefix;
|
||||
|
@ -61,15 +61,15 @@ uses
|
||||
IDEMsgIntf, SrcEditorIntf, ComponentReg, PropEdits, IDEDialogs, UnitResources,
|
||||
// IDE
|
||||
PkgRegisterBase, IDECmdLine, LazarusIDEStrConsts, IDEProcs, ObjectLists,
|
||||
DialogProcs, IDECommands, IDEOptionDefs, EnvironmentOpts, MiscOptions,
|
||||
InputHistory, Project, PackageEditor, AddToPackageDlg,
|
||||
DialogProcs, IDECommands, IDEOptionDefs, EnvironmentOpts,
|
||||
MiscOptions, InputHistory, Project, PackageEditor, AddToPackageDlg,
|
||||
PackageDefs, PackageLinks, PackageSystem, OpenInstalledPkgDlg,
|
||||
PkgGraphExplorer, BrokenDependenciesDlg, CompilerOptions,
|
||||
IDETranslations, TransferMacros, BuildLazDialog, NewDialog, FindInFilesDlg,
|
||||
ProjectInspector, SourceEditor, ProjPackChecks, AddFileToAPackageDlg,
|
||||
LazarusPackageIntf, PublishProjectDlg, PkgLinksDlg,
|
||||
InterPkgConflictFiles, InstallPkgSetDlg, ConfirmPkgListDlg, NewPkgComponentDlg,
|
||||
BaseBuildManager, BasePkgManager, MainBar, MainIntf, MainBase, ModeMatrixOpts;
|
||||
PkgGraphExplorer, BrokenDependenciesDlg, CompilerOptions, IDETranslations,
|
||||
TransferMacros, BuildLazDialog, NewDialog, FindInFilesDlg, ProjectInspector,
|
||||
SourceEditor, ProjPackChecks, AddFileToAPackageDlg, LazarusPackageIntf,
|
||||
PublishProjectDlg, PkgLinksDlg, InterPkgConflictFiles, InstallPkgSetDlg,
|
||||
ConfirmPkgListDlg, NewPkgComponentDlg, BaseBuildManager, BasePkgManager,
|
||||
MainBar, MainIntf, MainBase, ModeMatrixOpts;
|
||||
|
||||
type
|
||||
{ TPkgManager }
|
||||
@ -3509,7 +3509,7 @@ var
|
||||
begin
|
||||
Result:=mrCancel;
|
||||
// create a new package with standard dependencies
|
||||
NewPackage:=PackageGraph.CreateNewPackage(lisPkgMangNewPackage);
|
||||
NewPackage:=PackageGraph.CreateNewPackage(ExtractPasIdentifier(lisPkgMangNewPackage,true));
|
||||
PackageGraph.AddDependencyToPackage(NewPackage,
|
||||
PackageGraph.FCLPackage.CreateDependencyWithOwner(NewPackage));
|
||||
NewPackage.Modified:=false;
|
||||
@ -5229,7 +5229,7 @@ begin
|
||||
if APackage=nil then begin
|
||||
// create new package
|
||||
// create a new package with standard dependencies
|
||||
APackage:=PackageGraph.CreateNewPackage(lisPkgMangNewPackage);
|
||||
APackage:=PackageGraph.CreateNewPackage(ExtractPasIdentifier(lisPkgMangNewPackage,true));
|
||||
PackageGraph.AddDependencyToPackage(APackage,
|
||||
PackageGraph.IDEIntfPackage.CreateDependencyWithOwner(APackage));
|
||||
APackage.Modified:=false;
|
||||
|
Loading…
Reference in New Issue
Block a user