Skip to content

Commit 543170e

Browse files
committed
Standardise and improve file encoding names
File encoding names are now determined by the encoding type and are no longer specified by the code that displays TSaveSourceDlg dialogue boxes. This not only standardises the encoding names but removes quite a bit of duplication and simplifies code that saves snippets, snippet information and units. The system default ANSI encoding was previously displayed as "ANSI (Default)". This has been changed to "ANSI Code Page 999", where 999 is the default system code page for the user's locale.
1 parent 679ce0a commit 543170e

File tree

4 files changed

+60
-68
lines changed

4 files changed

+60
-68
lines changed

Src/USaveInfoMgr.pas

Lines changed: 6 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -270,18 +270,13 @@ constructor TSaveInfoMgr.InternalCreate(AView: IView);
270270
resourcestring
271271
sDefFileName = 'SnippetInfo';
272272
sDlgCaption = 'Save Snippet Information';
273-
// descriptions of supported encodings
274-
sASCIIEncoding = 'ASCII';
275-
sANSIDefaultEncoding = 'ANSI (Default)';
276-
sUTF8Encoding = 'UTF-8';
277-
sUTF16LEEncoding = 'Unicode (Little Endian)';
278-
sUTF16BEEncoding = 'Unicode (Big Endian)';
279273
// descriptions of supported file filter strings
280274
sRTFDesc = 'Rich text file';
281275
sTextDesc = 'Plain text file';
282276
sHTML5Desc = 'HTML 5 file';
283277
sXHTMLDesc = 'XHTML file';
284278
sMarkdownDesc = 'Markdown file';
279+
285280
begin
286281
inherited InternalCreate;
287282
fView := AView;
@@ -290,45 +285,29 @@ constructor TSaveInfoMgr.InternalCreate(AView: IView);
290285
fSourceFileInfo.FileTypeInfo[sfRTF] := TSourceFileTypeInfo.Create(
291286
'.rtf',
292287
sRTFDesc,
293-
[
294-
TSourceFileEncoding.Create(etASCII, sASCIIEncoding)
295-
]
288+
[etASCII]
296289
);
297290
fSourceFileInfo.FileTypeInfo[sfText] := TSourceFileTypeInfo.Create(
298291
'.txt',
299292
sTextDesc,
300-
[
301-
TSourceFileEncoding.Create(etUTF8, sUTF8Encoding),
302-
TSourceFileEncoding.Create(etUTF16LE, sUTF16LEEncoding),
303-
TSourceFileEncoding.Create(etUTF16BE, sUTF16BEEncoding),
304-
TSourceFileEncoding.Create(etSysDefault, sANSIDefaultEncoding)
305-
]
293+
[etUTF8, etUTF16LE, etUTF16BE, etSysDefault]
306294
);
307295
fSourceFileInfo.FileTypeInfo[sfHTML5] := TSourceFileTypeInfo.Create(
308296
'.html',
309297
sHTML5Desc,
310-
[
311-
TSourceFileEncoding.Create(etUTF8, sUTF8Encoding)
312-
]
298+
[etUTF8]
313299
);
314300
fSourceFileInfo.DefaultFileName := sDefFileName;
315301
fSourceFileInfo.FileTypeInfo[sfXHTML] := TSourceFileTypeInfo.Create(
316302
'.html',
317303
sXHTMLDesc,
318-
[
319-
TSourceFileEncoding.Create(etUTF8, sUTF8Encoding)
320-
]
304+
[etUTF8]
321305
);
322306
fSourceFileInfo.DefaultFileName := sDefFileName;
323307
fSourceFileInfo.FileTypeInfo[sfMarkdown] := TSourceFileTypeInfo.Create(
324308
'.md',
325309
sMarkdownDesc,
326-
[
327-
TSourceFileEncoding.Create(etUTF8, sUTF8Encoding),
328-
TSourceFileEncoding.Create(etUTF16LE, sUTF16LEEncoding),
329-
TSourceFileEncoding.Create(etUTF16BE, sUTF16BEEncoding),
330-
TSourceFileEncoding.Create(etSysDefault, sANSIDefaultEncoding)
331-
]
310+
[etUTF8, etUTF16LE, etUTF16BE, etSysDefault]
332311
);
333312
fSourceFileInfo.DefaultFileName := sDefFileName;
334313

Src/USaveSourceDlg.pas

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -228,8 +228,6 @@ implementation
228228
sChkTruncateComment = 'Truncate comments to 1st paragraph';
229229
sBtnPreview = '&Preview...';
230230
sBtnHelp = '&Help';
231-
// Default encoding name
232-
sANSIEncoding = 'ANSI (Default)';
233231

234232

235233
const
@@ -483,7 +481,7 @@ procedure TSaveSourceDlg.DoTypeChange;
483481
fOnEncodingQuery(Self, Encodings);
484482
if Length(Encodings) = 0 then
485483
Encodings := TSourceFileEncodings.Create(
486-
TSourceFileEncoding.Create(etSysDefault, sANSIEncoding)
484+
TSourceFileEncoding.Create(etSysDefault)
487485
);
488486
fCmbEncoding.Clear;
489487
for Encoding in Encodings do

Src/USaveSourceMgr.pas

Lines changed: 7 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,8 @@ implementation
134134
// Delphi
135135
SysUtils,
136136
// Project
137-
FmPreviewDlg, Hiliter.UFileHiliter, UIOUtils, UMessageBox, UOpenDialogHelper,
138-
UPreferences;
137+
FmPreviewDlg, Hiliter.UFileHiliter, UIOUtils, UMessageBox,
138+
UOpenDialogHelper, UPreferences;
139139

140140

141141
{ TSaveSourceMgr }
@@ -244,53 +244,33 @@ procedure TSaveSourceMgr.HiliteQueryHandler(Sender: TObject;
244244
end;
245245

246246
constructor TSaveSourceMgr.InternalCreate;
247-
resourcestring
248-
// descriptions of supported encodings
249-
sANSIDefaultEncoding = 'ANSI (Default)';
250-
sUTF8Encoding = 'UTF-8';
251-
sUTF16LEEncoding = 'Unicode (Little Endian)';
252-
sUTF16BEEncoding = 'Unicode (Big Endian)';
253247
begin
254248
inherited InternalCreate;
255249
fSourceFileInfo := TSourceFileInfo.Create;
256250
fSourceFileInfo.FileTypeInfo[sfText] := TSourceFileTypeInfo.Create(
257251
'.txt',
258252
GetFileTypeDesc(sfText),
259-
[
260-
TSourceFileEncoding.Create(etSysDefault, sANSIDefaultEncoding),
261-
TSourceFileEncoding.Create(etUTF8, sUTF8Encoding),
262-
TSourceFileEncoding.Create(etUTF16LE, sUTF16LEEncoding),
263-
TSourceFileEncoding.Create(etUTF16BE, sUTF16BEEncoding)
264-
]
253+
[etSysDefault, etUTF8, etUTF16LE, etUTF16BE]
265254
);
266255
fSourceFileInfo.FileTypeInfo[sfPascal] := TSourceFileTypeInfo.Create(
267256
'.pas',
268257
GetFileTypeDesc(sfPascal),
269-
[
270-
TSourceFileEncoding.Create(etSysDefault, sANSIDefaultEncoding),
271-
TSourceFileEncoding.Create(etUTF8, sUTF8Encoding)
272-
]
258+
[etSysDefault, etUTF8]
273259
);
274260
fSourceFileInfo.FileTypeInfo[sfHTML5] := TSourceFileTypeInfo.Create(
275261
'.html',
276262
GetFileTypeDesc(sfHTML5),
277-
[
278-
TSourceFileEncoding.Create(etUTF8, sUTF8Encoding)
279-
]
263+
[etUTF8]
280264
);
281265
fSourceFileInfo.FileTypeInfo[sfXHTML] := TSourceFileTypeInfo.Create(
282266
'.html',
283267
GetFileTypeDesc(sfXHTML),
284-
[
285-
TSourceFileEncoding.Create(etUTF8, sUTF8Encoding)
286-
]
268+
[etUTF8]
287269
);
288270
fSourceFileInfo.FileTypeInfo[sfRTF] := TSourceFileTypeInfo.Create(
289271
'.rtf',
290272
GetFileTypeDesc(sfRTF),
291-
[
292-
TSourceFileEncoding.Create(etSysDefault, sANSIDefaultEncoding)
293-
]
273+
[etSysDefault]
294274
);
295275
fSourceFileInfo.DefaultFileName := GetDefaultFileName;
296276

Src/USourceFileInfo.pas

Lines changed: 46 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,15 @@ TSourceFileEncoding = record
4646
fEncodingType: TEncodingType; // Value of EncodingType property
4747
fDisplayName: string; // Value of DisplayName property
4848
public
49-
/// <summary>Sets values of properties.</summary>
50-
constructor Create(const AEncodingType: TEncodingType;
51-
const ADisplayName: string);
49+
/// <summary>Sets the value of the <c>EncodingType</c> property.</summary>
50+
/// <remarks>The <c>DisplayName</c> property is dependent on the value of
51+
/// the <c>EncodingType</c> property and so can't be set explicitly.
52+
/// </remarks>
53+
constructor Create(const AEncodingType: TEncodingType);
54+
5255
/// <summary>Type of this encoding.</summary>
5356
property EncodingType: TEncodingType read fEncodingType;
57+
5458
/// <summary>Description of encoding for display in dialog box.</summary>
5559
property DisplayName: string read fDisplayName;
5660
end;
@@ -72,7 +76,7 @@ TSourceFileTypeInfo = record
7276
public
7377
/// <summary>Sets values of properties.</summary>
7478
constructor Create(const AExtension, ADisplayName: string;
75-
const AEncodings: array of TSourceFileEncoding);
79+
const AEncodingTypes: array of TEncodingType);
7680
/// <summary>File extension associated with this file type.</summary>
7781
property Extension: string read fExtension;
7882
/// <summary>Name of file extension to display in save dialog box.
@@ -163,6 +167,7 @@ implementation
163167
// Delphi
164168
SysUtils, Windows {for inlining}, Character,
165169
// Project
170+
ULocales,
166171
UStrUtils;
167172

168173

@@ -261,24 +266,54 @@ function TSourceFileInfo.SupportsFileType(const FileType: TSourceFileType):
261266
{ TSourceFileTypeInfo }
262267

263268
constructor TSourceFileTypeInfo.Create(const AExtension, ADisplayName: string;
264-
const AEncodings: array of TSourceFileEncoding);
269+
const AEncodingTypes: array of TEncodingType);
265270
var
266271
I: Integer;
267272
begin
268273
fExtension := AExtension;
269274
fDisplayName := ADisplayName;
270-
SetLength(fEncodings, Length(AEncodings));
271-
for I := 0 to Pred(Length(AEncodings)) do
272-
fEncodings[I] := AEncodings[I];
275+
SetLength(fEncodings, Length(AEncodingTypes));
276+
for I := 0 to Pred(Length(AEncodingTypes)) do
277+
fEncodings[I] := TSourceFileEncoding.Create(AEncodingTypes[I]);
273278
end;
274279

275280
{ TSourceFileEncoding }
276281

277-
constructor TSourceFileEncoding.Create(const AEncodingType: TEncodingType;
278-
const ADisplayName: string);
282+
constructor TSourceFileEncoding.Create(const AEncodingType: TEncodingType);
283+
resourcestring
284+
// Display names associated with each TEncodingType value
285+
sASCIIEncodingName = 'ASCII';
286+
sISO88591Name = 'ISO-8859-1';
287+
sUTF8Name = 'UTF-8';
288+
sUnicodeName = 'UTF-16';
289+
sUTF16BEName = 'UTF-16 Big Endian';
290+
sUTF16LEName = 'UTF-16 Little Endian';
291+
sWindows1252Name = 'Windows-1252';
292+
sSysDefaultName = 'ANSI Code Page %d';
279293
begin
280294
fEncodingType := AEncodingType;
281-
fDisplayName := ADisplayName;
295+
case fEncodingType of
296+
etASCII:
297+
fDisplayName := sASCIIEncodingName;
298+
etISO88591:
299+
fDisplayName := sISO88591Name;
300+
etUTF8:
301+
fDisplayName := sUTF8Name;
302+
etUnicode:
303+
fDisplayName := sUnicodeName;
304+
etUTF16BE:
305+
fDisplayName := sUTF16BEName;
306+
etUTF16LE:
307+
fDisplayName := sUTF16LEName;
308+
etWindows1252:
309+
fDisplayName := sWindows1252Name;
310+
etSysDefault:
311+
fDisplayName := Format(sSysDefaultName, [ULocales.DefaultAnsiCodePage]);
312+
else
313+
fDisplayName := '';
314+
end;
315+
Assert(fDisplayName <> '',
316+
'TSourceFileEncoding.Create: Unrecognised encoding type');
282317
end;
283318

284319
end.

0 commit comments

Comments
 (0)