12e5b6d6dSopenharmony_ci// © 2017 and later: Unicode, Inc. and others. 22e5b6d6dSopenharmony_ci// License & terms of use: http://www.unicode.org/copyright.html 32e5b6d6dSopenharmony_ci/* 42e5b6d6dSopenharmony_ci******************************************************************************* 52e5b6d6dSopenharmony_ci* 62e5b6d6dSopenharmony_ci* Copyright (C) 2009-2012, International Business Machines 72e5b6d6dSopenharmony_ci* Corporation and others. All Rights Reserved. 82e5b6d6dSopenharmony_ci* 92e5b6d6dSopenharmony_ci******************************************************************************* 102e5b6d6dSopenharmony_ci*/ 112e5b6d6dSopenharmony_ci 122e5b6d6dSopenharmony_ci#ifndef DATE_FE_DEBUG 132e5b6d6dSopenharmony_ci#define DATE_FE_DEBUG 0 142e5b6d6dSopenharmony_ci#endif 152e5b6d6dSopenharmony_ci 162e5b6d6dSopenharmony_ci#include <icuglue/icuglue.h> 172e5b6d6dSopenharmony_ci#include "unicode/udat.h" 182e5b6d6dSopenharmony_ci//#include <unicode/tblcoll.h> 192e5b6d6dSopenharmony_ci#include "unicode/datefmt.h" 202e5b6d6dSopenharmony_ci#include "unicode/smpdtfmt.h" 212e5b6d6dSopenharmony_ci#include <string.h> 222e5b6d6dSopenharmony_ci#include <stdio.h> 232e5b6d6dSopenharmony_ci#include "unicode/ustring.h" 242e5b6d6dSopenharmony_ci#include "unicode/gregocal.h" 252e5b6d6dSopenharmony_ci 262e5b6d6dSopenharmony_ci 272e5b6d6dSopenharmony_ci 282e5b6d6dSopenharmony_ci/** 292e5b6d6dSopenharmony_ci * Macro to define the Collator_glue_4_2 class 302e5b6d6dSopenharmony_ci */ 312e5b6d6dSopenharmony_ci#ifdef GLUE_VER 322e5b6d6dSopenharmony_ci#error GLUE_VER is defined 332e5b6d6dSopenharmony_ci#endif 342e5b6d6dSopenharmony_ci 352e5b6d6dSopenharmony_ci#define GLUE_VER(x) class GLUE_SYM_V( DateFormat, x ) : public DateFormat { \ 362e5b6d6dSopenharmony_ci public: static DateFormat *create(UDateFormatStyle timeStyle, \ 372e5b6d6dSopenharmony_ci UDateFormatStyle dateStyle, \ 382e5b6d6dSopenharmony_ci const char *locale, \ 392e5b6d6dSopenharmony_ci const UChar *tzID, \ 402e5b6d6dSopenharmony_ci int32_t tzIDLength, \ 412e5b6d6dSopenharmony_ci const UChar *pattern, \ 422e5b6d6dSopenharmony_ci int32_t patternLength, \ 432e5b6d6dSopenharmony_ci UErrorCode *status, const Locale &loc, const char *ver); \ 442e5b6d6dSopenharmony_ci private: UDateFormat *_this; GLUE_SYM_V( DateFormat, x ) ( UDateFormat* tn ); \ 452e5b6d6dSopenharmony_ci virtual ~ GLUE_SYM_V ( DateFormat, x) (); \ 462e5b6d6dSopenharmony_ci public: \ 472e5b6d6dSopenharmony_ci virtual void* getDynamicClassID() const; \ 482e5b6d6dSopenharmony_ci static void* getStaticClassID() ; \ 492e5b6d6dSopenharmony_ci virtual UnicodeString& format( Calendar& cal, UnicodeString& appendTo, FieldPosition& pos) const; \ 502e5b6d6dSopenharmony_ci virtual void parse( const UnicodeString& text, Calendar& cal, ParsePosition& pos) const; \ 512e5b6d6dSopenharmony_ci virtual Format* clone(void) const; \ 522e5b6d6dSopenharmony_ci public: static int32_t countAvailable(); \ 532e5b6d6dSopenharmony_cipublic: static int32_t appendAvailable(UnicodeString* strs, int32_t i, int32_t count); \ 542e5b6d6dSopenharmony_ci }; \ 552e5b6d6dSopenharmony_ci 562e5b6d6dSopenharmony_ci 572e5b6d6dSopenharmony_ci 582e5b6d6dSopenharmony_ci/** ==================================== The following code runs inside the 'target' version (i.e. old ICU) ========== **/ 592e5b6d6dSopenharmony_ci#if defined ( ICUGLUE_VER ) 602e5b6d6dSopenharmony_ci 612e5b6d6dSopenharmony_ci 622e5b6d6dSopenharmony_ci 632e5b6d6dSopenharmony_ci/* code for some version */ 642e5b6d6dSopenharmony_ci#include <icuglue/gluren.h> 652e5b6d6dSopenharmony_ci#include "oicu.h" 662e5b6d6dSopenharmony_ci 672e5b6d6dSopenharmony_ci#ifdef GLUE_VER 682e5b6d6dSopenharmony_ciGLUE_VER( ICUGLUE_VER ) 692e5b6d6dSopenharmony_ci#endif 702e5b6d6dSopenharmony_ci 712e5b6d6dSopenharmony_ciGLUE_SYM (DateFormat ) :: GLUE_SYM(DateFormat) ( UDateFormat* tn) : 722e5b6d6dSopenharmony_ci _this(tn) 732e5b6d6dSopenharmony_ci{ 742e5b6d6dSopenharmony_ci 752e5b6d6dSopenharmony_ci UErrorCode status = U_ZERO_ERROR; 762e5b6d6dSopenharmony_ci adoptCalendar(new GregorianCalendar(status)); 772e5b6d6dSopenharmony_ci} 782e5b6d6dSopenharmony_ci 792e5b6d6dSopenharmony_ciGLUE_SYM ( DateFormat ) :: ~ GLUE_SYM(DateFormat) () { 802e5b6d6dSopenharmony_ci#if DATE_FE_DEBUG 812e5b6d6dSopenharmony_ci fprintf(stderr, "VCF " ICUGLUE_VER_STR " udat_close"); 822e5b6d6dSopenharmony_ci#endif 832e5b6d6dSopenharmony_ci OICU_udat_close(_this); 842e5b6d6dSopenharmony_ci} 852e5b6d6dSopenharmony_ci 862e5b6d6dSopenharmony_ciDateFormat * 872e5b6d6dSopenharmony_ciGLUE_SYM ( DateFormat ) :: create(UDateFormatStyle timeStyle, 882e5b6d6dSopenharmony_ci UDateFormatStyle dateStyle, 892e5b6d6dSopenharmony_ci const char *locale, 902e5b6d6dSopenharmony_ci const UChar *tzID, 912e5b6d6dSopenharmony_ci int32_t tzIDLength, 922e5b6d6dSopenharmony_ci const UChar *pattern, 932e5b6d6dSopenharmony_ci int32_t patternLength, 942e5b6d6dSopenharmony_ci UErrorCode *status, 952e5b6d6dSopenharmony_ci const Locale &loc, const char */*ver*/) { 962e5b6d6dSopenharmony_ci // TODO: save version 972e5b6d6dSopenharmony_ci //char locBuf[200]; 982e5b6d6dSopenharmony_ci //char kwvBuf[200]; 992e5b6d6dSopenharmony_ci UDateFormat * uc = OICU_udat_open( timeStyle, dateStyle, locale, 1002e5b6d6dSopenharmony_ci tzID, 1012e5b6d6dSopenharmony_ci tzIDLength, 1022e5b6d6dSopenharmony_ci pattern, 1032e5b6d6dSopenharmony_ci patternLength, 1042e5b6d6dSopenharmony_ci status); 1052e5b6d6dSopenharmony_ci if(U_FAILURE(*status)) return NULL; // TODO: ERR? 1062e5b6d6dSopenharmony_ci DateFormat *c = new GLUE_SYM( DateFormat ) ( uc ); 1072e5b6d6dSopenharmony_ci#if DATE_FE_DEBUG 1082e5b6d6dSopenharmony_ci fprintf(stderr, "VCF " ICUGLUE_VER_STR " udat_open=%s ->> %p\n", loc.getName(), (void*)c); 1092e5b6d6dSopenharmony_ci#endif 1102e5b6d6dSopenharmony_ci return c; 1112e5b6d6dSopenharmony_ci} 1122e5b6d6dSopenharmony_ci 1132e5b6d6dSopenharmony_ciUnicodeString& GLUE_SYM (DateFormat ) :: format( Calendar& cal, UnicodeString& appendTo, FieldPosition& pos) const 1142e5b6d6dSopenharmony_ci{ 1152e5b6d6dSopenharmony_ci#if DATE_FE_DEBUG 1162e5b6d6dSopenharmony_ci fprintf(stderr, "VCF " ICUGLUE_VER_STR " - formatting. \n"); 1172e5b6d6dSopenharmony_ci#endif 1182e5b6d6dSopenharmony_ci int32_t len = appendTo.length(); 1192e5b6d6dSopenharmony_ci 1202e5b6d6dSopenharmony_ci UChar junk[200]; 1212e5b6d6dSopenharmony_ci UErrorCode status = U_ZERO_ERROR; 1222e5b6d6dSopenharmony_ci 1232e5b6d6dSopenharmony_ci UFieldPosition pos2; 1242e5b6d6dSopenharmony_ci 1252e5b6d6dSopenharmony_ci int32_t nlen = OICU_udat_format(_this, 1262e5b6d6dSopenharmony_ci cal.getTime(status), 1272e5b6d6dSopenharmony_ci junk, 1282e5b6d6dSopenharmony_ci 200, 1292e5b6d6dSopenharmony_ci &pos2, 1302e5b6d6dSopenharmony_ci &status); 1312e5b6d6dSopenharmony_ci 1322e5b6d6dSopenharmony_ci // todo: use pos2 1332e5b6d6dSopenharmony_ci pos.setBeginIndex(len); 1342e5b6d6dSopenharmony_ci pos.setEndIndex(len += nlen); 1352e5b6d6dSopenharmony_ci appendTo.append(junk, nlen); 1362e5b6d6dSopenharmony_ci 1372e5b6d6dSopenharmony_ci return appendTo; 1382e5b6d6dSopenharmony_ci} 1392e5b6d6dSopenharmony_ci 1402e5b6d6dSopenharmony_civoid GLUE_SYM (DateFormat ) :: parse( const UnicodeString& text, Calendar& cal, ParsePosition& pos) const 1412e5b6d6dSopenharmony_ci{ 1422e5b6d6dSopenharmony_ci return; 1432e5b6d6dSopenharmony_ci} 1442e5b6d6dSopenharmony_ci 1452e5b6d6dSopenharmony_ciFormat* GLUE_SYM (DateFormat ) :: clone(void) const 1462e5b6d6dSopenharmony_ci{ 1472e5b6d6dSopenharmony_ci return NULL; 1482e5b6d6dSopenharmony_ci} 1492e5b6d6dSopenharmony_ci 1502e5b6d6dSopenharmony_ci 1512e5b6d6dSopenharmony_ci 1522e5b6d6dSopenharmony_ci int32_t GLUE_SYM ( DateFormat ) :: countAvailable() { 1532e5b6d6dSopenharmony_ci int32_t count = OICU_udat_countAvailable(); 1542e5b6d6dSopenharmony_ci return count; 1552e5b6d6dSopenharmony_ci } 1562e5b6d6dSopenharmony_ci 1572e5b6d6dSopenharmony_ci 1582e5b6d6dSopenharmony_ciint32_t GLUE_SYM ( DateFormat ) :: appendAvailable(UnicodeString* strs, int32_t i, int32_t /*count*/) { 1592e5b6d6dSopenharmony_ci int avail = OICU_udat_countAvailable(); 1602e5b6d6dSopenharmony_ci UErrorCode status = U_ZERO_ERROR; 1612e5b6d6dSopenharmony_ci OICU_u_init(&status); 1622e5b6d6dSopenharmony_ci#if DATE_FE_DEBUG 1632e5b6d6dSopenharmony_ci fprintf(stderr, "VCF " ICUGLUE_VER_STR " avail %d - init %s\n", avail, u_errorName(status)); 1642e5b6d6dSopenharmony_ci#endif 1652e5b6d6dSopenharmony_ci for(int j=0;j<avail;j++) { 1662e5b6d6dSopenharmony_ci strs[i+j].append(OICU_udat_getAvailable(j)); 1672e5b6d6dSopenharmony_ci strs[i+j].append("@sp=icu"); 1682e5b6d6dSopenharmony_ci strs[i+j].append( ICUGLUE_VER_STR[0] ); // X_y 1692e5b6d6dSopenharmony_ci strs[i+j].append( ICUGLUE_VER_STR[2] ); // x_Y 1702e5b6d6dSopenharmony_ci#if DATE_FE_DEBUG 1712e5b6d6dSopenharmony_ci { 1722e5b6d6dSopenharmony_ci char foo[999]; 1732e5b6d6dSopenharmony_ci const UChar *ss = strs[i+j].getTerminatedBuffer(); 1742e5b6d6dSopenharmony_ci u_austrcpy(foo, ss); 1752e5b6d6dSopenharmony_ci // fprintf(stderr, "VCF " ICUGLUE_VER_STR " appending [%d+%d=%d] <<%s>>\n", i, j, i+j, foo); 1762e5b6d6dSopenharmony_ci } 1772e5b6d6dSopenharmony_ci#endif 1782e5b6d6dSopenharmony_ci } 1792e5b6d6dSopenharmony_ci return OICU_ucol_countAvailable(); 1802e5b6d6dSopenharmony_ci } 1812e5b6d6dSopenharmony_ci 1822e5b6d6dSopenharmony_ciUOBJECT_DEFINE_RTTI_IMPLEMENTATION( GLUE_SYM( DateFormat ) ) 1832e5b6d6dSopenharmony_ci 1842e5b6d6dSopenharmony_ci 1852e5b6d6dSopenharmony_ci 1862e5b6d6dSopenharmony_ci 1872e5b6d6dSopenharmony_ci#else 1882e5b6d6dSopenharmony_ci/** ==================================== The following code runs inside the 'provider' version (i.e. current ICU) ========== **/ 1892e5b6d6dSopenharmony_ci 1902e5b6d6dSopenharmony_ci#if (U_ICU_VERSION_MAJOR_NUM < 49) 1912e5b6d6dSopenharmony_ci#define DATE_PROVIDER_UNSUPPORTED 1922e5b6d6dSopenharmony_ci#endif 1932e5b6d6dSopenharmony_ci 1942e5b6d6dSopenharmony_ci#ifndef DATE_PROVIDER_UNSUPPORTED 1952e5b6d6dSopenharmony_ci// define Collator_XX 1962e5b6d6dSopenharmony_ci#include "icuglue/glver.h" 1972e5b6d6dSopenharmony_ci 1982e5b6d6dSopenharmony_ci// generate list of versions 1992e5b6d6dSopenharmony_cistatic 2002e5b6d6dSopenharmony_ci#include <icuglue/fe_verlist.h> 2012e5b6d6dSopenharmony_ci 2022e5b6d6dSopenharmony_ciclass VersionDateFormatFactory : public UObject { 2032e5b6d6dSopenharmony_cipublic: 2042e5b6d6dSopenharmony_ci virtual DateFormat *createFormat(UDateFormatStyle timeStyle, 2052e5b6d6dSopenharmony_ci UDateFormatStyle dateStyle, 2062e5b6d6dSopenharmony_ci const char *locale, 2072e5b6d6dSopenharmony_ci const UChar *tzID, 2082e5b6d6dSopenharmony_ci int32_t tzIDLength, 2092e5b6d6dSopenharmony_ci const UChar *pattern, 2102e5b6d6dSopenharmony_ci int32_t patternLength, 2112e5b6d6dSopenharmony_ci UErrorCode *status); 2122e5b6d6dSopenharmony_ci virtual const UnicodeString *getSupportedIDs(int32_t &count, UErrorCode &status); 2132e5b6d6dSopenharmony_ci virtual void* getDynamicClassID() const; 2142e5b6d6dSopenharmony_ci static void* getStaticClassID() ; 2152e5b6d6dSopenharmony_ci}; 2162e5b6d6dSopenharmony_ci 2172e5b6d6dSopenharmony_ciUOBJECT_DEFINE_RTTI_IMPLEMENTATION( VersionDateFormatFactory ) 2182e5b6d6dSopenharmony_ci 2192e5b6d6dSopenharmony_ciDateFormat *VersionDateFormatFactory::createFormat(UDateFormatStyle timeStyle, 2202e5b6d6dSopenharmony_ci UDateFormatStyle dateStyle, 2212e5b6d6dSopenharmony_ci const char *locale, 2222e5b6d6dSopenharmony_ci const UChar *tzID, 2232e5b6d6dSopenharmony_ci int32_t tzIDLength, 2242e5b6d6dSopenharmony_ci const UChar *pattern, 2252e5b6d6dSopenharmony_ci int32_t patternLength, 2262e5b6d6dSopenharmony_ci UErrorCode *status) { 2272e5b6d6dSopenharmony_ci Locale loc(locale); 2282e5b6d6dSopenharmony_ci // pull off provider # 2292e5b6d6dSopenharmony_ci char provider[200]; 2302e5b6d6dSopenharmony_ci#if DATE_FE_DEBUG 2312e5b6d6dSopenharmony_ci fprintf(stderr, "VCF:CC %s\n", loc.getName()); 2322e5b6d6dSopenharmony_ci#endif 2332e5b6d6dSopenharmony_ci int32_t len = loc.getKeywordValue("sp", provider, 200, *status); 2342e5b6d6dSopenharmony_ci if(U_FAILURE(*status)||len==0) return NULL; 2352e5b6d6dSopenharmony_ci#if DATE_FE_DEBUG 2362e5b6d6dSopenharmony_ci fprintf(stderr, "VCF:KWV> %s/%d\n", u_errorName(*status), len); 2372e5b6d6dSopenharmony_ci#endif 2382e5b6d6dSopenharmony_ci provider[len]=0; 2392e5b6d6dSopenharmony_ci#if DATE_FE_DEBUG 2402e5b6d6dSopenharmony_ci fprintf(stderr, "VCF:KWV %s\n", provider); 2412e5b6d6dSopenharmony_ci#endif 2422e5b6d6dSopenharmony_ci if(strncmp(provider,"icu",3)) return NULL; 2432e5b6d6dSopenharmony_ci const char *icuver=provider+3; 2442e5b6d6dSopenharmony_ci#if DATE_FE_DEBUG 2452e5b6d6dSopenharmony_ci fprintf(stderr, "VCF:ICUV %s\n", icuver); 2462e5b6d6dSopenharmony_ci#endif 2472e5b6d6dSopenharmony_ci 2482e5b6d6dSopenharmony_ci#if defined(GLUE_VER) 2492e5b6d6dSopenharmony_ci#undef GLUE_VER 2502e5b6d6dSopenharmony_ci#endif 2512e5b6d6dSopenharmony_ci#define GLUE_VER(x) /*printf("%c/%c|%c/%c\n", icuver[0],(#x)[0],icuver[1],(#x)[2]);*/ if(icuver[0]== (#x)[0] && icuver[1]==(#x)[2]) { DateFormat *c = glue ## DateFormat ## x :: create(timeStyle,dateStyle,locale,tzID,tzIDLength,pattern,patternLength,status,loc,icuver); /*fprintf(stderr, "VCF::CC %s -> %p\n", loc.getName(), c);*/ return c; } 2522e5b6d6dSopenharmony_ci#include "icuglue/glver.h" 2532e5b6d6dSopenharmony_ci#if DATE_FE_DEBUG 2542e5b6d6dSopenharmony_ci fprintf(stderr, "VCF:CC %s failed\n", loc.getName()); 2552e5b6d6dSopenharmony_ci#endif 2562e5b6d6dSopenharmony_ci 2572e5b6d6dSopenharmony_ci return NULL; 2582e5b6d6dSopenharmony_ci} 2592e5b6d6dSopenharmony_ci 2602e5b6d6dSopenharmony_ci 2612e5b6d6dSopenharmony_cistatic const UnicodeString *gLocalesDate = NULL; 2622e5b6d6dSopenharmony_cistatic int32_t gLocCountDate = 0; 2632e5b6d6dSopenharmony_ci 2642e5b6d6dSopenharmony_ci 2652e5b6d6dSopenharmony_ciconst UnicodeString 2662e5b6d6dSopenharmony_ci*VersionDateFormatFactory::getSupportedIDs(int32_t &count, UErrorCode &/*status*/) { 2672e5b6d6dSopenharmony_ci if(gLocalesDate==NULL) { 2682e5b6d6dSopenharmony_ci count = 0; 2692e5b6d6dSopenharmony_ci 2702e5b6d6dSopenharmony_ci 2712e5b6d6dSopenharmony_ci /* gather counts */ 2722e5b6d6dSopenharmony_ci 2732e5b6d6dSopenharmony_ci#if defined(GLUE_VER) 2742e5b6d6dSopenharmony_ci#undef GLUE_VER 2752e5b6d6dSopenharmony_ci#endif 2762e5b6d6dSopenharmony_ci#define GLUE_VER(x) count += glue ## DateFormat ## x :: countAvailable(); 2772e5b6d6dSopenharmony_ci#include "icuglue/glver.h" 2782e5b6d6dSopenharmony_ci 2792e5b6d6dSopenharmony_ci#if DATE_FE_DEBUG 2802e5b6d6dSopenharmony_ci printf("VCF: count=%d\n", count); 2812e5b6d6dSopenharmony_ci#endif 2822e5b6d6dSopenharmony_ci UnicodeString *strs = new UnicodeString[count]; 2832e5b6d6dSopenharmony_ci int32_t i = 0; 2842e5b6d6dSopenharmony_ci 2852e5b6d6dSopenharmony_ci#if defined(GLUE_VER) 2862e5b6d6dSopenharmony_ci#undef GLUE_VER 2872e5b6d6dSopenharmony_ci#endif 2882e5b6d6dSopenharmony_ci#define GLUE_VER(x) i += glue ## DateFormat ## x :: appendAvailable(strs, i, count); 2892e5b6d6dSopenharmony_ci#include "icuglue/glver.h" 2902e5b6d6dSopenharmony_ci 2912e5b6d6dSopenharmony_ci#if DATE_FE_DEBUG 2922e5b6d6dSopenharmony_ci printf("VCF: appended count=%d\n", count); 2932e5b6d6dSopenharmony_ci#endif 2942e5b6d6dSopenharmony_ci 2952e5b6d6dSopenharmony_ci gLocCountDate = count; 2962e5b6d6dSopenharmony_ci gLocalesDate = strs; 2972e5b6d6dSopenharmony_ci } 2982e5b6d6dSopenharmony_ci count = gLocCountDate; 2992e5b6d6dSopenharmony_ci return gLocalesDate; 3002e5b6d6dSopenharmony_ci} 3012e5b6d6dSopenharmony_ci 3022e5b6d6dSopenharmony_ci 3032e5b6d6dSopenharmony_ci/* Plugin Code */ 3042e5b6d6dSopenharmony_ci 3052e5b6d6dSopenharmony_ci#include <stdio.h> 3062e5b6d6dSopenharmony_ci#include <unicode/uversion.h> 3072e5b6d6dSopenharmony_ci 3082e5b6d6dSopenharmony_ci//static URegistryKey rkdate = NULL; 3092e5b6d6dSopenharmony_ci 3102e5b6d6dSopenharmony_cistatic VersionDateFormatFactory vdf; 3112e5b6d6dSopenharmony_ci 3122e5b6d6dSopenharmony_ciextern "C" UDateFormat *versionDateFormatOpener(UDateFormatStyle timeStyle, 3132e5b6d6dSopenharmony_ci UDateFormatStyle dateStyle, 3142e5b6d6dSopenharmony_ci const char *locale, 3152e5b6d6dSopenharmony_ci const UChar *tzID, 3162e5b6d6dSopenharmony_ci int32_t tzIDLength, 3172e5b6d6dSopenharmony_ci const UChar *pattern, 3182e5b6d6dSopenharmony_ci int32_t patternLength, 3192e5b6d6dSopenharmony_ci UErrorCode *status) { 3202e5b6d6dSopenharmony_ci DateFormat *df = vdf.createFormat(timeStyle,dateStyle,locale,tzID,tzIDLength,pattern,patternLength,status); 3212e5b6d6dSopenharmony_ci // printf("Hey! I got: %s -> %p\n", locale, df); 3222e5b6d6dSopenharmony_ci return (UDateFormat*)df; 3232e5b6d6dSopenharmony_ci} 3242e5b6d6dSopenharmony_ci 3252e5b6d6dSopenharmony_civoid date_provider_register(UErrorCode &status) { 3262e5b6d6dSopenharmony_ci udat_registerOpener(versionDateFormatOpener, &status); 3272e5b6d6dSopenharmony_ci // rkdate = DateFormat::registerFactory(new VersionDateFormatFactory(), status); 3282e5b6d6dSopenharmony_ci} 3292e5b6d6dSopenharmony_ci 3302e5b6d6dSopenharmony_civoid date_provider_unregister(UErrorCode &status) { 3312e5b6d6dSopenharmony_ci udat_unregisterOpener(versionDateFormatOpener, &status); 3322e5b6d6dSopenharmony_ci} 3332e5b6d6dSopenharmony_ci 3342e5b6d6dSopenharmony_ci#else 3352e5b6d6dSopenharmony_ci 3362e5b6d6dSopenharmony_ci/* no op- this ICU doesn't support date providers */ 3372e5b6d6dSopenharmony_ci 3382e5b6d6dSopenharmony_civoid date_provider_register(UErrorCode &) { 3392e5b6d6dSopenharmony_ci // not supported 3402e5b6d6dSopenharmony_ci} 3412e5b6d6dSopenharmony_ci 3422e5b6d6dSopenharmony_civoid date_provider_unregister(UErrorCode &) { 3432e5b6d6dSopenharmony_ci // not supported 3442e5b6d6dSopenharmony_ci} 3452e5b6d6dSopenharmony_ci 3462e5b6d6dSopenharmony_ci#endif 3472e5b6d6dSopenharmony_ci 3482e5b6d6dSopenharmony_ci/* Plugin- only ICU 4.4+ */ 3492e5b6d6dSopenharmony_ci#if (U_ICU_VERSION_MAJOR_NUM > 4) || ((U_ICU_VERSION_MAJOR_NUM==4)&&(U_ICU_VERSION_MINOR_NUM>3)) 3502e5b6d6dSopenharmony_ci#include "unicode/icuplug.h" 3512e5b6d6dSopenharmony_ci 3522e5b6d6dSopenharmony_ciU_CAPI UPlugTokenReturn U_EXPORT2 date_provider_plugin (UPlugData *data, UPlugReason reason, UErrorCode *status); 3532e5b6d6dSopenharmony_ci 3542e5b6d6dSopenharmony_ciU_CAPI UPlugTokenReturn U_EXPORT2 date_provider_plugin (UPlugData *data, UPlugReason reason, UErrorCode *status) 3552e5b6d6dSopenharmony_ci{ 3562e5b6d6dSopenharmony_ci switch(reason) { 3572e5b6d6dSopenharmony_ci case UPLUG_REASON_QUERY: 3582e5b6d6dSopenharmony_ci uplug_setPlugName(data, "Date Provider Plugin"); 3592e5b6d6dSopenharmony_ci uplug_setPlugLevel(data, UPLUG_LEVEL_HIGH); 3602e5b6d6dSopenharmony_ci break; 3612e5b6d6dSopenharmony_ci case UPLUG_REASON_LOAD: 3622e5b6d6dSopenharmony_ci date_provider_register(*status); 3632e5b6d6dSopenharmony_ci break; 3642e5b6d6dSopenharmony_ci case UPLUG_REASON_UNLOAD: 3652e5b6d6dSopenharmony_ci date_provider_unregister(*status); 3662e5b6d6dSopenharmony_ci break; 3672e5b6d6dSopenharmony_ci default: 3682e5b6d6dSopenharmony_ci break; /* not handled */ 3692e5b6d6dSopenharmony_ci } 3702e5b6d6dSopenharmony_ci return UPLUG_TOKEN; 3712e5b6d6dSopenharmony_ci} 3722e5b6d6dSopenharmony_ci#else 3732e5b6d6dSopenharmony_ci 3742e5b6d6dSopenharmony_ci/* 3752e5b6d6dSopenharmony_ci Note: this ICU version must explicitly call 'date_provider_plugin' 3762e5b6d6dSopenharmony_ci*/ 3772e5b6d6dSopenharmony_ci 3782e5b6d6dSopenharmony_ci#endif /* plugin */ 3792e5b6d6dSopenharmony_ci 3802e5b6d6dSopenharmony_ci#endif /* provider side (vs target) */ 381