bool getPictureDataForType(PackagePtr pParams, int index, std::vector<unsigned char> &buf, std::string &type) { PA_ErrorCode err = eER_NoErr; unsigned i = 0; PA_Unistring t; std::map<CUTF8String, uint32_t> types; PA_Picture picture = *(PA_Picture *)(pParams[index - 1]); while (err == eER_NoErr) { t = PA_GetPictureData(picture, ++i, NULL); err = PA_GetLastError(); if(err == eER_NoErr) { uint32_t len = (uint32_t)(t.fLength * 4) + sizeof(uint8_t); std::vector<uint8_t> u(len); PA_ConvertCharsetToCharset( (char *)t.fString, t.fLength * sizeof(PA_Unichar), eVTC_UTF_16, (char *)&u[0], len, eVTC_UTF_8 ); CUTF8String uti; uti = CUTF8String((const uint8_t *)&u[0]); CUTF8String typestring; size_t pos, found; found = 0; for(pos = uti.find(';'); pos != CUTF8String::npos; pos = uti.find(';', found)) { typestring = uti.substr(found, pos-found); found = pos + 1; types.insert(std::map<CUTF8String, uint32_t>::value_type(typestring, i)); } typestring = uti.substr(found, uti.length()-found); types.insert(std::map<CUTF8String, uint32_t>::value_type(typestring, i)); } } std::map<CUTF8String, uint32_t>::iterator itr; itr = types.find((const uint8_t *)type.c_str()); if (itr != types.end()) { uint32_t pos = itr->second; PA_Handle h = PA_NewHandle(0); err = eER_NoErr; PA_GetPictureData(picture, pos, h); err = PA_GetLastError(); if(err == eER_NoErr) { unsigned long insize = PA_GetHandleSize(h); buf.resize(insize); memcpy(&buf[0], (const void *)PA_LockHandle(h), insize); PA_UnlockHandle(h); PA_DisposeHandle(h); return true; } } return false; }
void _toPictureString(PA_Variable variable, CUTF8String &pictureString) { pictureString.clear(); char buf[64]; size_t len; uint32_t i = 0; PA_ErrorCode err = eER_NoErr; while (err == eER_NoErr) { PA_Handle h = PA_NewHandle(0); PA_Unistring u = PA_GetPictureData(variable.uValue.fPicture, ++i, h); err = PA_GetLastError(); if(err == eER_NoErr) { C_TEXT t; t.setUTF16String(&u); CUTF8String format, formatList; t.copyUTF8String(&formatList); size_t pos = formatList.find(';'); if(pos == CUTF8String::npos) { format = formatList; }else{ format = formatList.substr(0, pos); } if(pictureString.length()) pictureString.append((const uint8_t *)", ", 2); if(PA_GetHandleSize(h) == 1) { len = sprintf(buf,"1 byte (%s)", format.c_str()); }else{ len = sprintf(buf,"%u bytes (%s)", (unsigned int)PA_GetHandleSize(h), format.c_str()); } pictureString.append((const uint8_t *)buf, len); } PA_DisposeHandle(h); } }
void Get_URL_Blob( PA_PluginParameters params ) { char* c_url; PA_Unistring* URL; PA_Handle returnValue; MemoryBuffer buffer; URL = PA_GetStringParameter( params, 1 ); c_url = PA_UnistringToChar(URL); buffer = getURL(c_url); returnValue = PA_NewHandle(buffer.size); memcpy(*returnValue,buffer.data, buffer.size); PA_ReturnBlobHandle( params, returnValue ); }