AlphaDigitize replaces non-letter, non-digit, non-underscore characters with underscore.
BaseName the last path element of a slash-delimited name, with the last dotted suffix removed.
CamelCase converts a string from snake_case to CamelCased.
If there is an interior underscore followed by a lower case letter, drop the underscore and convert the letter to upper case. There is a remote possibility of this rewrite causing a name collision, but it's so remote we're prepared to pretend it's nonexistent - since the C++ generator lowercases names, it's extremely unlikely to have two fields with different capitalizations. In short, _my_field_name_2 becomes XMyFieldName_2.
CamelCaseSlice is like CamelCase, but the argument is a slice of strings to be joined with "_" and then camelcased.
CleanIdentifier makes sure s is a valid 'identifier' string: it contains only letters, numbers, and underscore.
DotJoin joins a slice of strings with '.'
SnakeCase converts a string from CamelCase to snake_case.