1 unit compiler_parsing_options;
2
3 {$mode objfpc}{$H+}
4
5 interface
6
7 uses
8 SysUtils,
9 // LCL
10 ExtCtrls, StdCtrls,
11 // CodeTools
12 LinkScanner,
13 // IdeIntf
14 IDEOptionsIntf, IDEOptEditorIntf,
15 // IDE
16 CompilerOptions, PackageDefs, LazarusIDEStrConsts;
17
18 type
19
20 { TCompilerParsingOptionsFrame }
21
22 TCompilerParsingOptionsFrame = class(TAbstractIDEOptionsEditor)
23 cmbSyntaxMode: TComboBox;
24 grpAsmStyle: TRadioGroup;
25 grpSyntaxMode: TGroupBox;
26 grpSyntaxOptions: TCheckGroup;
27 private
28 FIsPackage: boolean;
29 public
GetTitlenull30 function GetTitle: string; override;
31 procedure Setup({%H-}ADialog: TAbstractOptionsEditorDialog); override;
32 procedure ReadSettings(AOptions: TAbstractIDEOptions); override;
33 procedure WriteSettings(AOptions: TAbstractIDEOptions); override;
SupportedOptionsClassnull34 class function SupportedOptionsClass: TAbstractIDEOptionsClass; override;
35 end;
36
37 implementation
38
39 {$R *.lfm}
40
41 const
42 // CompilerMode names to be shown after -M...
43 CompilerModesPretty: array[TCompilerMode] of shortstring = (
44 'fpc', 'Delphi', 'DelphiUnicode', 'gpc', 'tp', 'ObjFPC', 'MacPas', 'iso',
45 'ExtPas'
46 );
47 // CompilerMode descriptions.
48 CompilerModesDescr: array[TCompilerMode] of shortstring = (
49 'Free Pascal', 'Delphi', 'Delphi Unicode', 'GNU Pascal', 'Turbo Pascal',
50 'Object Pascal', 'Mac Pascal', 'ISO/IEC 7185 Pascal',
51 'Extended Pascal, ISO 10206'
52 );
53
SyntaxModeToCaptionnull54 function SyntaxModeToCaption(const ModeStr: string): string;
55 var
56 cm: TCompilerMode;
57 begin
58 Result := '';
59 for cm := Low(TCompilerMode) to High(TCompilerMode) do
60 if CompareText(ModeStr, CompilerModeNames[cm]) = 0 then
61 begin
62 if cm = cmOBJFPC then
63 Result := lisObjectPascalDefault // Is this needed?
64 else
65 Result := CompilerModesDescr[cm];
66 Result := Result + ' (-M' + CompilerModesPretty[cm] + ')';
67 Break;
68 end;
69 end;
70
CaptionToSyntaxModenull71 function CaptionToSyntaxMode(const Caption: string): string;
72 var
73 cm: TCompilerMode;
74 begin
75 Result := 'ObjFPC';
76 // Some modes would go wrong if iterated forward, thus iterate backwards.
77 for cm := High(TCompilerMode) downto Low(TCompilerMode) do
78 if Pos('-M' + CompilerModesPretty[cm], Caption) > 0 then
79 begin
80 Result := CompilerModesPretty[cm];
81 Break;
82 end;
83 end;
84
85 { TCompilerParsingOptionsFrame }
86
TCompilerParsingOptionsFrame.GetTitlenull87 function TCompilerParsingOptionsFrame.GetTitle: string;
88 begin
89 Result := dlgCOParsing;
90 end;
91
92 procedure TCompilerParsingOptionsFrame.Setup(ADialog: TAbstractOptionsEditorDialog);
93 var
94 m: TCompilerMode;
95 s: string;
96 begin
97 grpSyntaxMode.Caption := lisSyntaxMode + ' (-M, {$MODE})';
98 cmbSyntaxMode.Items.BeginUpdate;
99 cmbSyntaxMode.Items.Clear;
100 for m := Low(TCompilerMode) to High(TCompilerMode) do
101 begin
102 s := SyntaxModeToCaption(CompilerModeNames[m]);
103 if s <> '' then
104 cmbSyntaxMode.Items.Add(s);
105 end;
106 cmbSyntaxMode.Items.EndUpdate;
107
108 with grpAsmStyle do
109 begin
110 Caption := dlgCOAsmStyle + ' (-R)';
111 Items.BeginUpdate;
112 Items.Clear;
113 Items.Add(lisDefault);
114 Items.Add('Intel');
115 Items.Add('AT&&T');
116 Items.EndUpdate;
117 end;
118
119 with grpSyntaxOptions do
120 begin
121 AutoSize := True;
122 Caption := dlgSyntaxOptions;
123 Items.BeginUpdate;
124 Items.Add(dlgCOCOps + ' (-Sc, {$COPERATORS ON})');
125 Items.Add(dlgLabelGoto + ' (-Sg, {$GOTO ON})');
126 Items.Add(dlgCppInline + ' (-Si, {$INLINE ON})');
127 Items.Add(dlgCMacro + ' (-Sm, {$MACRO ON})');
128 Items.Add(dlgInitDoneOnly + ' (-Ss)');
129 Items.Add(dlgStaticKeyword + ' (-St)');
130 Items.Add(dlgCOAnsiStr + ' (-Sh, {$H+})');
131 Items.EndUpdate;
132 end;
133 end;
134
135 procedure TCompilerParsingOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
136 var
137 CurOptions: TBaseCompilerOptions;
138 begin
139 CurOptions := AOptions as TBaseCompilerOptions;
140 FIsPackage := CurOptions is TPkgCompilerOptions;
141 with CurOptions do
142 begin
143 cmbSyntaxMode.Text := SyntaxModeToCaption(SyntaxMode);
144
145 if (AssemblerStyle in [1,2,3]) then
146 grpAsmStyle.ItemIndex := AssemblerStyle
147 else
148 grpAsmStyle.ItemIndex := 0;
149
150 with grpSyntaxOptions do
151 begin
152 Checked[0] := CStyleOperators;
153 Checked[1] := AllowLabel;
154 Checked[2] := CPPInline;
155 Checked[3] := CStyleMacros;
156 Checked[4] := InitConstructor;
157 Checked[5] := StaticKeyword;
158 Checked[6] := UseAnsiStrings;
159 end;
160 end;
161 end;
162
163 procedure TCompilerParsingOptionsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
164 begin
165 with AOptions as TBaseCompilerOptions do
166 begin
167 SyntaxMode := CaptionToSyntaxMode(cmbSyntaxMode.Text);
168
169 AssemblerStyle := grpAsmStyle.ItemIndex;
170
171 with grpSyntaxOptions do
172 begin
173 CStyleOperators := Checked[0];
174 AllowLabel := Checked[1];
175 CPPInline := Checked[2];
176 CStyleMacros := Checked[3];
177 InitConstructor := Checked[4];
178 StaticKeyword := Checked[5];
179 UseAnsiStrings := Checked[6];
180 end;
181 end;
182 end;
183
TCompilerParsingOptionsFrame.SupportedOptionsClassnull184 class function TCompilerParsingOptionsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
185 begin
186 Result := TBaseCompilerOptions;
187 end;
188
189 initialization
190 RegisterIDEOptionsEditor(GroupCompiler, TCompilerParsingOptionsFrame,
191 CompilerOptionsParsing);
192 RegisterIDEOptionsEditor(GroupPkgCompiler, TCompilerParsingOptionsFrame,
193 CompilerOptionsParsing);
194
195 end.
196
197