mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-26 23:23:48 +02:00
190 lines
5.0 KiB
ObjectPascal
190 lines
5.0 KiB
ObjectPascal
unit compiler_parsing_options;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
ExtCtrls, StdCtrls, SysUtils, IDEOptionsIntf, CompilerOptions,
|
|
LinkScanner, PackageDefs, LazarusIDEStrConsts;
|
|
|
|
type
|
|
|
|
{ TCompilerParsingOptionsFrame }
|
|
|
|
TCompilerParsingOptionsFrame = class(TAbstractIDEOptionsEditor)
|
|
cmbSyntaxMode: TComboBox;
|
|
grpAsmStyle: TRadioGroup;
|
|
grpSyntaxMode: TGroupBox;
|
|
grpSyntaxOptions: TCheckGroup;
|
|
private
|
|
FIsPackage: boolean;
|
|
public
|
|
function GetTitle: string; override;
|
|
procedure Setup({%H-}ADialog: TAbstractOptionsEditorDialog); override;
|
|
procedure ReadSettings(AOptions: TAbstractIDEOptions); override;
|
|
procedure WriteSettings(AOptions: TAbstractIDEOptions); override;
|
|
class function SupportedOptionsClass: TAbstractIDEOptionsClass; override;
|
|
end;
|
|
|
|
implementation
|
|
|
|
{$R *.lfm}
|
|
|
|
const
|
|
// CompilerMode names to be shown after -M...
|
|
CompilerModesPretty: array[TCompilerMode] of shortstring = (
|
|
'fpc', 'Delphi', 'DelphiUnicode', 'gpc', 'tp', 'ObjFPC', 'MacPas', 'iso',
|
|
'ExtPas'
|
|
);
|
|
// CompilerMode descriptions.
|
|
CompilerModesDescr: array[TCompilerMode] of shortstring = (
|
|
'Free Pascal', 'Delphi', 'Delphi Unicode', 'GNU Pascal', 'Turbo Pascal',
|
|
'Object Pascal', 'Mac Pascal', 'ISO/IEC 7185 Pascal',
|
|
'Extended Pascal, ISO 10206'
|
|
);
|
|
|
|
function SyntaxModeToCaption(const ModeStr: string): string;
|
|
var
|
|
cm: TCompilerMode;
|
|
begin
|
|
Result := '';
|
|
for cm := Low(TCompilerMode) to High(TCompilerMode) do
|
|
if CompareText(ModeStr, CompilerModeNames[cm]) = 0 then
|
|
begin
|
|
if cm = cmOBJFPC then
|
|
Result := lisObjectPascalDefault // Is this needed?
|
|
else
|
|
Result := CompilerModesDescr[cm];
|
|
Result := Result + ' (-M' + CompilerModesPretty[cm] + ')';
|
|
Break;
|
|
end;
|
|
end;
|
|
|
|
function CaptionToSyntaxMode(const Caption: string): string;
|
|
var
|
|
cm: TCompilerMode;
|
|
begin
|
|
Result := 'ObjFPC';
|
|
// Some modes would go wrong if iterated forward, thus iterate backwards.
|
|
for cm := High(TCompilerMode) downto Low(TCompilerMode) do
|
|
if Pos('-M' + CompilerModesPretty[cm], Caption) > 0 then
|
|
begin
|
|
Result := CompilerModesPretty[cm];
|
|
Break;
|
|
end;
|
|
end;
|
|
|
|
{ TCompilerParsingOptionsFrame }
|
|
|
|
function TCompilerParsingOptionsFrame.GetTitle: string;
|
|
begin
|
|
Result := dlgCOParsing;
|
|
end;
|
|
|
|
procedure TCompilerParsingOptionsFrame.Setup(ADialog: TAbstractOptionsEditorDialog);
|
|
var
|
|
m: TCompilerMode;
|
|
s: string;
|
|
begin
|
|
grpSyntaxMode.Caption := lisSyntaxMode + ' (-M, {$MODE})';
|
|
cmbSyntaxMode.Items.BeginUpdate;
|
|
cmbSyntaxMode.Items.Clear;
|
|
for m := Low(TCompilerMode) to High(TCompilerMode) do
|
|
begin
|
|
s := SyntaxModeToCaption(CompilerModeNames[m]);
|
|
if s <> '' then
|
|
cmbSyntaxMode.Items.Add(s);
|
|
end;
|
|
cmbSyntaxMode.Items.EndUpdate;
|
|
|
|
with grpAsmStyle do
|
|
begin
|
|
Caption := dlgCOAsmStyle + ' (-R)';
|
|
Items.BeginUpdate;
|
|
Items.Clear;
|
|
Items.Add(lisDefault);
|
|
Items.Add('Intel');
|
|
Items.Add('AT&&T');
|
|
Items.EndUpdate;
|
|
end;
|
|
|
|
with grpSyntaxOptions do
|
|
begin
|
|
AutoSize := True;
|
|
Caption := dlgSyntaxOptions;
|
|
Items.BeginUpdate;
|
|
Items.Add(dlgCOCOps + ' (-Sc, {$COPERATORS ON})');
|
|
Items.Add(dlgLabelGoto + ' (-Sg, {$GOTO ON})');
|
|
Items.Add(dlgCppInline + ' (-Si, {$INLINE ON})');
|
|
Items.Add(dlgCMacro + ' (-Sm, {$MACRO ON})');
|
|
Items.Add(dlgInitDoneOnly + ' (-Ss)');
|
|
Items.Add(dlgStaticKeyword + ' (-St)');
|
|
Items.Add(dlgCOAnsiStr + ' (-Sh, {$H+})');
|
|
Items.EndUpdate;
|
|
end;
|
|
end;
|
|
|
|
procedure TCompilerParsingOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
|
|
var
|
|
CurOptions: TBaseCompilerOptions;
|
|
begin
|
|
CurOptions := AOptions as TBaseCompilerOptions;
|
|
FIsPackage := CurOptions is TPkgCompilerOptions;
|
|
with CurOptions do
|
|
begin
|
|
cmbSyntaxMode.Text := SyntaxModeToCaption(SyntaxMode);
|
|
|
|
if (AssemblerStyle in [1,2,3]) then
|
|
grpAsmStyle.ItemIndex := AssemblerStyle
|
|
else
|
|
grpAsmStyle.ItemIndex := 0;
|
|
|
|
with grpSyntaxOptions do
|
|
begin
|
|
Checked[0] := CStyleOperators;
|
|
Checked[1] := AllowLabel;
|
|
Checked[2] := CPPInline;
|
|
Checked[3] := CStyleMacros;
|
|
Checked[4] := InitConstructor;
|
|
Checked[5] := StaticKeyword;
|
|
Checked[6] := UseAnsiStrings;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TCompilerParsingOptionsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
|
|
begin
|
|
with AOptions as TBaseCompilerOptions do
|
|
begin
|
|
SyntaxMode := CaptionToSyntaxMode(cmbSyntaxMode.Text);
|
|
|
|
AssemblerStyle := grpAsmStyle.ItemIndex;
|
|
|
|
with grpSyntaxOptions do
|
|
begin
|
|
CStyleOperators := Checked[0];
|
|
AllowLabel := Checked[1];
|
|
CPPInline := Checked[2];
|
|
CStyleMacros := Checked[3];
|
|
InitConstructor := Checked[4];
|
|
StaticKeyword := Checked[5];
|
|
UseAnsiStrings := Checked[6];
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
class function TCompilerParsingOptionsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
|
|
begin
|
|
Result := TBaseCompilerOptions;
|
|
end;
|
|
|
|
initialization
|
|
RegisterIDEOptionsEditor(GroupCompiler, TCompilerParsingOptionsFrame,
|
|
CompilerOptionsParsing);
|
|
RegisterIDEOptionsEditor(GroupPkgCompiler, TCompilerParsingOptionsFrame,
|
|
CompilerOptionsParsing);
|
|
|
|
end.
|
|
|