- int firstDigit = (int)(dec/16.0);
- int secondDigit = (int)(dec - (firstDigit*16.0));
- buf[0] = hexArray[firstDigit];
- buf[1] = hexArray[secondDigit];
- buf[2] = 0;
+ const wxChar chUnderscore = wxT('_');
+
+ for ( wxString::iterator it = str->begin(); it != str->end(); ++it )
+ {
+ const wxChar ch = *it;
+ if ( wxIsdigit(ch) )
+ {
+ if ( it == str->begin() )
+ {
+ // Identifiers can't start with a digit.
+ str->insert(0, chUnderscore); // prepend underscore
+ it = str->begin(); // restart as string changed
+ continue;
+ }
+ }
+ else if ( !wxIsalpha(ch) && ch != chUnderscore )
+ {
+ // Not a valid character in C identifiers.
+ *it = chUnderscore;
+ }
+ }
+
+ // Double underscores are not allowed in normal C identifiers and are
+ // useless anyhow.
+ str->Replace(wxT("__"), wxT("_"));