1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* 2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru****************************************************************************** 3ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Copyright (C) 1998-2004, International Business Machines 5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Corporation and others. All Rights Reserved. 6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru****************************************************************************** 8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* ucnvdisp.c: 10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Implements APIs for the ICU's codeset conversion library display names. 11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Modification History: 13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Date Name Description 15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 04/04/99 helena Fixed internal header inclusion. 16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 05/09/00 helena Added implementation to handle fallback mappings. 17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 06/20/2000 helena OS/400 port changes; mostly typecast. 18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 09/08/2004 grhoten split from ucnv.c 19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/ 20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/utypes.h" 22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if !UCONFIG_NO_CONVERSION 24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/ustring.h" 26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/ures.h" 27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/ucnv.h" 28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "cstring.h" 29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "ustr_imp.h" 30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "ucnv_imp.h" 31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "putilimp.h" 32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruucnv_getDisplayName(const UConverter *cnv, 35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const char *displayLocale, 36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar *displayName, int32_t displayNameCapacity, 37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode *pErrorCode) { 38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UResourceBundle *rb; 39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const UChar *name; 40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t length; 41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode localStatus = U_ZERO_ERROR; 42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* check arguments */ 44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { 45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return 0; 46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(cnv==NULL || displayNameCapacity<0 || (displayNameCapacity>0 && displayName==NULL)) { 49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; 50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return 0; 51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* open the resource bundle and get the display name string */ 54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru rb=ures_open(NULL, displayLocale, pErrorCode); 55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(U_FAILURE(*pErrorCode)) { 56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return 0; 57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* use the internal name as the key */ 60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru name=ures_getStringByKey(rb, cnv->sharedData->staticData->name, &length, &localStatus); 61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ures_close(rb); 62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(U_SUCCESS(localStatus)) { 64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* copy the string */ 65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (*pErrorCode == U_ZERO_ERROR) { 66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *pErrorCode = localStatus; 67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru u_memcpy(displayName, name, uprv_min(length, displayNameCapacity)*U_SIZEOF_UCHAR); 69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* convert the internal name into a Unicode string */ 71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru length=(int32_t)uprv_strlen(cnv->sharedData->staticData->name); 72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru u_charsToUChars(cnv->sharedData->staticData->name, displayName, uprv_min(length, displayNameCapacity)); 73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return u_terminateUChars(displayName, displayNameCapacity, length, pErrorCode); 75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif 78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* 80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Hey, Emacs, please set the following: 81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Local Variables: 83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * indent-tabs-mode: nil 84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * End: 85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 87