void UnSerialization::parseParamTag(const string& str, string& tag, string& tagParam, string& paramValue) { // simple tag. Return just the string if ( str.find('=') == string::npos ) { tag = str; return; } tag = ""; tagParam = ""; paramValue = ""; string::const_iterator p = str.begin(); // get tag name insert_iterator<string> tagIt(tag, tag.begin()); for ( ; p != str.end(); ++p) { if ( isspace(*p) ) break; *tagIt = *p; } // skip white spaces for ( ; isspace(*p) && p != str.end() ; ++p ); // get param name insert_iterator<string> paramIt(tagParam, tagParam.begin()); for ( ; p != str.end(); ++p) { if (*p == '=') break; *paramIt = *p; } // skip white spaces for ( ; p != str.end() && isspace(*p); ++p ); // skip = for ( ; p != str.end() && *p == '='; ++p ); // skip white spaces for ( ; p != str.end() && isspace(*p); ++p ); // skip opening " for ( ; *p == '"' && p != str.end() ; ++p ); // get param value insert_iterator<string> valueIt(paramValue, paramValue.begin()); for ( ; p != str.end(); ++p) { if (*p == '\"') break; *valueIt = *p; } }
bool UnSerialization::seekAndParseSpecificParamTag(nor_utils::StreamTokenizer& st, const string& tag, const string& targetTagParam, string& paramValue) { bool tagFound = false; string rawTag; string foundTag; string::const_iterator p; string tagParam; tagParam = ""; paramValue = ""; do { // the full tag. I.e. <tag param="val"> rawTag = st.next_token(); foundTag = ""; p = rawTag.begin(); // get tag name insert_iterator<string> tagIt(foundTag, foundTag.begin()); for ( ; p != rawTag.end(); ++p) { if ( isspace(*p) ) break; *tagIt = *p; } if ( nor_utils::cmp_nocase(tag, foundTag) ) { tagFound = true; break; } } while( st.has_token() ); if ( !tagFound ) return false; while (targetTagParam.compare(tagParam) != 0 && p != rawTag.end()) { // skip white spaces for ( ; isspace(*p) && p != rawTag.end() ; ++p ); // get param name insert_iterator<string> paramIt(tagParam, tagParam.begin()); for ( ; p != rawTag.end(); ++p) { if (*p == '=') break; *paramIt = *p; } // skip white spaces for ( ; p != rawTag.end() && isspace(*p); ++p ); // skip = for ( ; p != rawTag.end() && *p == '='; ++p ); // skip white spaces for ( ; p != rawTag.end() && isspace(*p); ++p ); // skip opening " for ( ; p != rawTag.end() && *p == '"'; ++p ); // get param value insert_iterator<string> valueIt(paramValue, paramValue.begin()); for ( ; p != rawTag.end(); ++p) { if (*p == '\"') break; *valueIt = *p; } } return true; }
UProperty* FCSharpWrapperGenerator::GetWrapperArgsAndReturnType( const UFunction* Function, FString& OutFormalInteropArgs, FString& OutActualInteropArgs, FString& OutFormalManagedArgs, FString& OutActualManagedArgs ) { OutFormalInteropArgs = TEXT("UObjectHandle self"); OutActualInteropArgs = NativeThisPointer; OutFormalManagedArgs.Empty(); OutActualManagedArgs.Empty(); UProperty* returnValue = nullptr; for (TFieldIterator<UProperty> paramIt(Function); paramIt; ++paramIt) { UProperty* param = *paramIt; if (param->GetPropertyFlags() & CPF_ReturnParm) { returnValue = param; } else { FString argName = param->GetName(); FString argInteropType = GetPropertyInteropType(param); FString argAttrs = GetPropertyInteropTypeAttributes(param); FString argMods = GetPropertyInteropTypeModifiers(param); OutFormalInteropArgs += TEXT(","); if (!argAttrs.IsEmpty()) { OutFormalInteropArgs += TEXT(" "); OutFormalInteropArgs += argAttrs; } if (!argMods.IsEmpty()) { OutFormalInteropArgs += TEXT(" "); OutFormalInteropArgs += argMods; } OutFormalInteropArgs += FString::Printf( TEXT(" %s %s"), *argInteropType, *argName ); OutActualInteropArgs += TEXT(","); if (!argMods.IsEmpty()) { OutActualInteropArgs += TEXT(" "); OutActualInteropArgs += argMods; } OutActualInteropArgs += TEXT(" "); if (param->IsA<UObjectProperty>()) { OutActualInteropArgs += TEXT("(UObjectHandle)"); } OutActualInteropArgs += argName; if (!OutFormalManagedArgs.IsEmpty()) { OutFormalManagedArgs += TEXT(", "); } if (!argMods.IsEmpty()) { OutFormalManagedArgs += argMods + TEXT(" "); } FString ArgManagedType = GetPropertyManagedType(param); OutFormalManagedArgs += FString::Printf(TEXT("%s %s"), *ArgManagedType, *argName); if (!OutActualManagedArgs.IsEmpty()) { OutActualManagedArgs += TEXT(", "); } OutActualManagedArgs += argName; } } return returnValue; }