Menu

[r2009]: / trunk / Src / DB.USnippetKind.pas  Maximize  Restore  History

Download this file

166 lines (144 with data), 4.9 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
{
* DB.USnippetKind.pas
*
* Defines a record that provides information about the different snippet kinds
* enumerated by TSnippetKind along with a static class that provides an
* enumerable list of snippet kind information records.
*
* $Rev$
* $Date$
*
* ***** BEGIN LICENSE BLOCK *****
*
* Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
*
* The Original Code is DB.USnippetKind, formerly USnippetKindInfo.pas
*
* The Initial Developer of the Original Code is Peter Johnson
* (http://www.delphidabbler.com/).
*
* Portions created by the Initial Developer are Copyright (C) 2009-2012 Peter
* Johnson. All Rights Reserved.
*
* Contributor(s)
* NONE
*
* ***** END LICENSE BLOCK *****
}
unit DB.USnippetKind;
interface
uses
// Project
UBaseObjects;
type
/// <summary>
/// Enumeration of various supported kinds of snippets.
/// </summary>
TSnippetKind = (
skFreeform, // free-form code - not in any of other supported formats
skRoutine, // procedure or function in standard format
skConstant, // constant definition in standard format
skTypeDef, // type definition in standard format
skUnit, // complete source code unit
skClass // Delphi class or record with methods
);
type
/// <summary>
/// Set of snippet kinds.
/// </summary>
TSnippetKinds = set of TSnippetKind;
type
/// <summary>
/// Provides read only information about a snippet kind
/// </summary>
TSnippetKindInfo = record
strict private
/// <summary>Value of Kind property.</summary>
fKind: TSnippetKind;
/// <summary>Value of DisplayName property.</summary>
fDisplayName: string;
public
/// <summary>Initialises record with required property values.</summary>
constructor Create(AKind: TSnippetKind; const ADisplayName: string);
/// <summary>Snippet kind.</summary>
property Kind: TSnippetKind read fKind;
/// <summary>Display name (description) of snippet kind.</summary>
property DisplayName: string read fDisplayName;
end;
type
/// <summary>
/// Static class that provides a read-only, enumerable, list of
/// TSnippetKindInfo records, one for each snippet kind.
/// </summary>
TSnippetKindInfoList = class(TNoConstructObject)
strict private
type
/// <summary>Array of snippet kind information records. Has element for
/// each snippet kind.</summary>
TSnippetKindInfoArray = array[TSnippetKind] of TSnippetKindInfo;
class var
/// <summary>Array of snippet kind info records.</summary>
fItems: TSnippetKindInfoArray;
/// <summary>Flag indicating if fItems has been initialised.</summary>
fInitialised: Boolean;
strict private
/// <summary>Initialises fItems array.</summary>
class procedure Init;
/// <summary>Read accessor for Items property.</summary>
class function GetItems: TSnippetKindInfoArray; static;
public
/// <summary>Enumerable array of snippet kind info records, one element for
/// each snippet kind.</summary>
class property Items: TSnippetKindInfoArray read GetItems;
end;
implementation
{ TSnippetKindInfo }
constructor TSnippetKindInfo.Create(AKind: TSnippetKind;
const ADisplayName: string);
begin
fKind := AKind;
fDisplayName := ADisplayName;
end;
{ TSnippetKindInfoList }
class function TSnippetKindInfoList.GetItems: TSnippetKindInfoArray;
begin
if not fInitialised then
begin
// The obvious thing to do is to initialise the Items[] array in a class
// constructor. But the required resource strings are read as '' when
// initialisation is done in a class constructor, so we need to jump thru
// these hoops.
Init;
fInitialised := True;
end;
Result := fItems;
end;
class procedure TSnippetKindInfoList.Init;
resourcestring
// Snippet kind descriptions
sFreeForm = 'Freeform';
sRoutine = 'Routine';
sConstant = 'Constant';
sTypeDef = 'Type Definition';
sUnit = 'Unit';
sClass = 'Class / Advanced Record';
const
// Map of snippet kinds onto their descriptions
Descriptions: array[TSnippetKind] of string = (
sFreeform, sRoutine, sConstant, sTypeDef, sUnit, sClass
);
var
Kind: TSnippetKind;
begin
for Kind := Low(TSnippetKind) to High(TSnippetKind) do
fItems[Kind] := TSnippetKindInfo.Create(Kind, Descriptions[Kind]);
end;
end.
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.