16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************* 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Copyright (C) 2000-2011, International Business Machines 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Corporation and others. All Rights Reserved. 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************* 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* file name: uversion.h 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* encoding: US-ASCII 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* tab size: 8 (not used) 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* indentation:4 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Created by: Vladimir Weinstein 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Gets included by utypes.h and Windows .rc files 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \file 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \brief C API: API for accessing ICU version numbers. 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*===========================================================================*/ 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* Main ICU version information */ 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*===========================================================================*/ 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef UVERSION_H 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define UVERSION_H 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/umachine.h" 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* Actual version info lives in uvernum.h */ 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uvernum.h" 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** Maximum length of the copyright string. 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_COPYRIGHT_STRING_LENGTH 128 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** An ICU version consists of up to 4 numbers from 0..255. 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_MAX_VERSION_LENGTH 4 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** In a string, ICU version fields are delimited by dots. 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_VERSION_DELIMITER '.' 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** The maximum length of an ICU version string. 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_MAX_VERSION_STRING_LENGTH 20 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** The binary form of a version on ICU APIs is an array of 4 uint8_t. 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * To compare two versions, use memcmp(v1,v2,sizeof(UVersionInfo)). 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef uint8_t UVersionInfo[U_MAX_VERSION_LENGTH]; 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*===========================================================================*/ 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* C++ namespace if supported. Versioned unless versioning is disabled. */ 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*===========================================================================*/ 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \def U_NAMESPACE_BEGIN 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This is used to begin a declaration of a public ICU C++ API. 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * When not compiling for C++, it does nothing. 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * When compiling for C++, it begins an extern "C++" linkage block (to protect 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * against cases in which an external client includes ICU header files inside 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * an extern "C" linkage block). 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * It also begins a versioned-ICU-namespace block. 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \def U_NAMESPACE_END 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This is used to end a declaration of a public ICU C++ API. 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * When not compiling for C++, it does nothing. 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * When compiling for C++, it ends the extern "C++" block begun by 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * U_NAMESPACE_BEGIN. 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * It also ends the versioned-ICU-namespace block begun by U_NAMESPACE_BEGIN. 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \def U_NAMESPACE_USE 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This is used to specify that the rest of the code uses the 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * public ICU C++ API namespace. 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This is invoked by default; we recommend that you turn it off: 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * See the "Recommended Build Options" section of the ICU4C readme 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (http://source.icu-project.org/repos/icu/icu/trunk/readme.html#RecBuild) 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \def U_NAMESPACE_QUALIFIER 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This is used to qualify that a function or class is part of 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the public ICU C++ API namespace. 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This macro is unnecessary since ICU 49 requires namespace support. 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * You can just use "icu::" instead. 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* Define namespace symbols if the compiler supports it. */ 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifdef __cplusplus 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# if U_DISABLE_RENAMING 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define U_ICU_NAMESPACE icu 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org namespace U_ICU_NAMESPACE { } 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# else 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define U_ICU_NAMESPACE U_ICU_ENTRY_POINT_RENAME(icu) 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org namespace U_ICU_NAMESPACE { } 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org namespace icu = U_ICU_NAMESPACE; 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# endif 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define U_NAMESPACE_BEGIN extern "C++" { namespace U_ICU_NAMESPACE { 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define U_NAMESPACE_END } } 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define U_NAMESPACE_USE using namespace U_ICU_NAMESPACE; 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define U_NAMESPACE_QUALIFIER U_ICU_NAMESPACE:: 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# ifndef U_USING_ICU_NAMESPACE 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define U_USING_ICU_NAMESPACE 1 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# endif 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# if U_USING_ICU_NAMESPACE 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_NAMESPACE_USE 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# endif 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define U_NAMESPACE_BEGIN 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define U_NAMESPACE_END 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define U_NAMESPACE_USE 1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define U_NAMESPACE_QUALIFIER 1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*===========================================================================*/ 1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* General version helper functions. Definitions in putil.c */ 1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*===========================================================================*/ 1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Parse a string with dotted-decimal version information and 1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * fill in a UVersionInfo structure with the result. 1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Definition of this function lives in putil.c 1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param versionArray The destination structure for the version information. 1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param versionString A string with dotted-decimal version information, 1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * with up to four non-negative number fields with 1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * values of up to 255 each. 1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4 1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE void U_EXPORT2 1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgu_versionFromString(UVersionInfo versionArray, const char *versionString); 1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Parse a Unicode string with dotted-decimal version information and 1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * fill in a UVersionInfo structure with the result. 1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Definition of this function lives in putil.c 1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param versionArray The destination structure for the version information. 1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param versionString A Unicode string with dotted-decimal version 1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * information, with up to four non-negative number 1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * fields with values of up to 255 each. 1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.2 1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE void U_EXPORT2 1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgu_versionFromUString(UVersionInfo versionArray, const UChar *versionString); 1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Write a string with dotted-decimal version information according 1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * to the input UVersionInfo. 1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Definition of this function lives in putil.c 1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param versionArray The version information to be written as a string. 1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param versionString A string buffer that will be filled in with 1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * a string corresponding to the numeric version 1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * information in versionArray. 1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The buffer size must be at least U_MAX_VERSION_STRING_LENGTH. 1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.4 1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE void U_EXPORT2 1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgu_versionToString(const UVersionInfo versionArray, char *versionString); 1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Gets the ICU release version. The version array stores the version information 1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * for ICU. For example, release "1.3.31.2" is then represented as 0x01031F02. 1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Definition of this function lives in putil.c 1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param versionArray the version # information, the result will be filled in 1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE void U_EXPORT2 1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgu_getVersion(UVersionInfo versionArray); 1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 194