FX_BOOL util::printf(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) { int iSize = params.size(); if (iSize < 1) return FALSE; std::wstring c_ConvChar(params[0].ToCFXWideString().c_str()); std::vector<std::wstring> c_strConvers; int iOffset = 0; int iOffend = 0; c_ConvChar.insert(c_ConvChar.begin(),L'S'); while(iOffset != -1) { iOffend = c_ConvChar.find(L"%",iOffset+1); std::wstring strSub; if (iOffend == -1) strSub = c_ConvChar.substr(iOffset); else strSub = c_ConvChar.substr(iOffset ,iOffend - iOffset); c_strConvers.push_back(strSub); iOffset = iOffend ; } std::wstring c_strResult; //for(int iIndex = 1;iIndex < params.size();iIndex++) std::wstring c_strFormat; for(int iIndex = 0;iIndex < (int)c_strConvers.size();iIndex++) { c_strFormat = c_strConvers[iIndex]; if (iIndex == 0) { c_strResult = c_strFormat; continue; } CFX_WideString strSegment; if (iIndex >= iSize) { c_strResult += c_strFormat; continue; } switch (ParstDataType(&c_strFormat)) { case UTIL_INT: strSegment.Format(c_strFormat.c_str(), params[iIndex].ToInt()); break; case UTIL_DOUBLE: strSegment.Format(c_strFormat.c_str(), params[iIndex].ToDouble()); break; case UTIL_STRING: strSegment.Format(c_strFormat.c_str(), params[iIndex].ToCFXWideString().c_str()); break; default: strSegment.Format(L"%S", c_strFormat.c_str()); break; } c_strResult += strSegment.GetBuffer(strSegment.GetLength()+1); } c_strResult.erase(c_strResult.begin()); vRet = c_strResult.c_str(); return TRUE; }
FX_BOOL util::printf(OBJ_METHOD_PARAMS) { int iSize = params.size(); if (iSize < 1) return FALSE; std::wstring c_ConvChar((const wchar_t*)(FX_LPCWSTR)params[0].operator CFX_WideString()); std::vector<std::wstring> c_strConvers; int iOffset = 0; int iOffend = 0; c_ConvChar.insert(c_ConvChar.begin(),L'S'); while(iOffset != -1) { iOffend = c_ConvChar.find(L"%",iOffset+1); std::wstring strSub; if (iOffend == -1) strSub = c_ConvChar.substr(iOffset); else strSub = c_ConvChar.substr(iOffset ,iOffend - iOffset); c_strConvers.push_back(strSub); iOffset = iOffend ; } std::wstring c_strResult; //for(int iIndex = 1;iIndex < params.size();iIndex++) std::wstring c_strFormat; for(int iIndex = 0;iIndex < (int)c_strConvers.size();iIndex++) { c_strFormat = c_strConvers[iIndex]; if (iIndex == 0) { c_strResult = c_strFormat; continue; } CFX_WideString strSegment; if (iIndex >= iSize) { c_strResult += c_strFormat; continue; } switch (ParstDataType(&c_strFormat)) { case UTIL_INT: strSegment.Format((FX_LPCWSTR)c_strFormat.c_str(),(int)params[iIndex]); break; case UTIL_DOUBLE: strSegment.Format((FX_LPCWSTR)c_strFormat.c_str(),(double)params[iIndex]); break; case UTIL_STRING: strSegment.Format((FX_LPCWSTR)c_strFormat.c_str(),(FX_LPCWSTR)params[iIndex].operator CFX_WideString()); break; default: strSegment.Format((FX_LPCWSTR)L"%S", (FX_LPCWSTR)c_strFormat.c_str()); break; } c_strResult += (wchar_t*)strSegment.GetBuffer(strSegment.GetLength()+1); } c_strResult.erase(c_strResult.begin()); vRet = (FX_LPCWSTR)c_strResult.c_str(); return TRUE; }