About the author
Many years ago, I wrote the following regular expression:
^(?:\s*)(class)?(?:\s*)(constructor|destructor|function|operator|procedure)(?:\s*)(\w+\.)*(\w+)(?:\s*)((?:\()((?:\;?\s*)(const|var|out)?(?:\s*)&?(\w+)(,\s*\w+)*(?:\s*\:\s*)&?((\w*)\.)*(\w+)(\s*\=\s*(''.*''|\w+|\d+))?)*(?:\)))*((?:\:\s*)((\w*)\.)*(\w+))?;
to parse the Delphi syntax for declaration of a routine.
Since the addition of generics to Delphi, the above regular expression no longer works, if and when there is a generic type in the declaration.
If I treat a simple generic type declaration as just an identifier, then it would be simple to expand the above regular expression.
However, it seems to me that a generic type declaration can be yet another generic type expression.
More investigations needed, I think.
This article discusses the new Delphi 8 property access specifiers.
Continued discussion of undocumented Delphi 8 Property Access Specifiers, and other ways of adding and removing delegates / events handlers, including clearing the list of all the delegates / event handlers.