Skip to content

Commit 5ec55ba

Browse files
committed
Add new TCSSBuilder.EnsureSelector method
This added because attempting to add an existing selector raises an exception and reading a non-existant selector returns a null pointer. This makes it hard to write bug-free code without checking for the existence of a selector. It's been annoying me for years!
1 parent c4ef947 commit 5ec55ba

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

Src/UCSSBuilder.pas

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,12 @@ TCSSBuilder = class(TObject)
8383
@param Selector [in] Name of new selector.
8484
@return New empty selector object.
8585
}
86+
function EnsureSelector(const Selector: string): TCSSSelector;
87+
{Returns selector object with given name or adds a new selector with the
88+
given name if no such selector exists.
89+
@parm Selector [in] Name of selector.
90+
@return Reference to new or pre-existing selector.
91+
}
8692
procedure Clear;
8793
{Clears all selectors from style sheet and frees selector objects.
8894
}
@@ -204,6 +210,18 @@ destructor TCSSBuilder.Destroy;
204210
inherited;
205211
end;
206212

213+
function TCSSBuilder.EnsureSelector(const Selector: string): TCSSSelector;
214+
{Returns selector object with given name or adds a new selector with the given
215+
name if no such selector exists.
216+
@parm Selector [in] Name of selector.
217+
@return Reference to new or pre-existing selector.
218+
}
219+
begin
220+
Result := GetSelector(Selector);
221+
if not Assigned(Result) then
222+
Result := AddSelector(Selector);
223+
end;
224+
207225
function TCSSBuilder.GetSelector(const Selector: string): TCSSSelector;
208226
{Read access method for Selectors property. Returns selector object with given
209227
name.

0 commit comments

Comments
 (0)