/*
*******************************************************************************
*   Copyright (C) 2000-2003, International Business Machines
*   Corporation and others.  All Rights Reserved.
*******************************************************************************
*
*   file name:  uversion.h
*   encoding:   US-ASCII
*   tab size:   8 (not used)
*   indentation:4
*
*   Created by: Vladimir Weinstein
*
*  Contains all the important version numbers for ICU. 
*  Gets included by utypes.h and Windows .rc files
*/

/*===========================================================================*/
/* Main ICU version information                                              */
/*===========================================================================*/

#ifndef UVERSION_H
#define UVERSION_H

/** IMPORTANT: When updating version, the following things need to be done:   */
/** source/common/unicode/uversion.h - this file: update major, minor,        */
/**        patchlevel, suffix, version, short version constants, namespace,   */
/**                                                             and copyright */
/** source/common/common.dsp - update 'Output file name' on the link tab so   */
/**                   that it contains the new major/minor combination        */
/** source/i18n/i18n.dsp - same as for the common.dsp                         */
/** source/layout/layout.dsp - same as for the common.dsp                     */
/** source/stubdata/stubdata.dsp - same as for the common.dsp                 */
/** source/extra/ustdio/ustdio.dsp - same as for the common.dsp               */
/** source/data/makedata.mak - change U_ICUDATA_NAME so that it contains      */
/**                            the new major/minor combination                */
/** source/tools/genren/genren.pl - use this script according to the README   */
/**                    in that folder                                         */

#include "unicode/umachine.h"

/** The standard copyright notice that gets compiled into each library. 
 *  This value will change in the subsequent releases of ICU
 *  @draft ICU 2.4
 */
#define U_COPYRIGHT_STRING \
  " Copyright (C) 2003, International Business Machines Corporation and others. All Rights Reserved. "

/** Maximum length of the copyright string.
 *  @draft ICU 2.4
 */
#define U_COPYRIGHT_STRING_LENGTH  128

/** The current ICU major version as an integer. 
 *  This value will change in the subsequent releases of ICU
 *  @draft ICU 2.4
 */
#define U_ICU_VERSION_MAJOR_NUM 2

/** The current ICU minor version as an integer. 
 *  This value will change in the subsequent releases of ICU
 *  @draft ICU 2.6
 */
#define U_ICU_VERSION_MINOR_NUM 8

/** The current ICU patchlevel version as an integer.  
 *  This value will change in the subsequent releases of ICU
 *  @draft ICU 2.4
 */
#define U_ICU_VERSION_PATCHLEVEL_NUM 0

/** Glued version suffix for renamers 
 *  This value will change in the subsequent releases of ICU
 *  @draft ICU 2.6
 */
#define U_ICU_VERSION_SUFFIX _2_8

/** The current ICU library version as a dotted-decimal string. The patchlevel
 *  only appears in this string if it non-zero. 
 *  This value will change in the subsequent releases of ICU
 *  @draft ICU 2.4
 */
#define U_ICU_VERSION "2.8"

/** The current ICU library major/minor version as a string without dots, for library name suffixes. 
 *  This value will change in the subsequent releases of ICU
 *  @draft ICU 2.6
 */
#define U_ICU_VERSION_SHORT "28"

/** An ICU version consists of up to 4 numbers from 0..255.
 *  @draft ICU 2.4
 */
#define U_MAX_VERSION_LENGTH 4

/** In a string, ICU version fields are delimited by dots.
 *  @draft ICU 2.4
 */
#define U_VERSION_DELIMITER '.'

/** The maximum length of an ICU version string.
 *  @draft ICU 2.4
 */
#define U_MAX_VERSION_STRING_LENGTH 20

/** The binary form of a version on ICU APIs is an array of 4 uint8_t.
 *  @draft ICU 2.4
 */
typedef uint8_t UVersionInfo[U_MAX_VERSION_LENGTH];

#if U_HAVE_NAMESPACE && defined(XP_CPLUSPLUS)
#define U_ICU_NAMESPACE icu_2_8
namespace U_ICU_NAMESPACE { }
namespace icu = U_ICU_NAMESPACE;
U_NAMESPACE_USE
#endif


/*===========================================================================*/
/* General version helper functions. Definitions in putil.c                  */
/*===========================================================================*/

/**
 * Parse a string with dotted-decimal version information and
 * fill in a UVersionInfo structure with the result.
 * Definition of this function lives in putil.c
 *
 * @param versionArray The destination structure for the version information.
 * @param versionString A string with dotted-decimal version information,
 *                      with up to four non-negative number fields with
 *                      values of up to 255 each.
 *  @draft ICU 2.4
 */
U_CAPI void U_EXPORT2
u_versionFromString(UVersionInfo versionArray, const char *versionString);

/**
 * Write a string with dotted-decimal version information according
 * to the input UVersionInfo.
 * Definition of this function lives in putil.c
 *
 * @param versionArray The version information to be written as a string.
 * @param versionString A string buffer that will be filled in with
 *                      a string corresponding to the numeric version
 *                      information in versionArray.
 *                      The buffer size must be at least U_MAX_VERSION_STRING_LENGTH.
 *  @draft ICU 2.4
 */
U_CAPI void U_EXPORT2
u_versionToString(UVersionInfo versionArray, char *versionString);

/**
 * Gets the ICU release version.  The version array stores the version information
 * for ICU.  For example, release "1.3.31.2" is then represented as 0x01031F02.
 * Definition of this function lives in putil.c
 *
 * @param versionArray the version # information, the result will be filled in
 * @stable ICU 2.0
 */
U_CAPI void U_EXPORT2
u_getVersion(UVersionInfo versionArray);


/*===========================================================================
 * ICU collation framework version information                               
 * Version info that can be obtained from a collator is affected by these    
 * numbers in a secret and magic way. Please use collator version as whole
 *===========================================================================
 */

/** Collation runtime version (sort key generator, strcoll). 
 * If the version is different, sortkeys for the same string could be different 
 * version 2 was in ICU 1.8.1. changed is: compression intervals, French secondary 
 * compression, generating quad level always when strength is quad or more 
 * version 4 - ICU 2.2 - tracking UCA changes, ignore completely ignorables 
 * in contractions, ignore primary ignorables after shifted 
 * This value may change in the subsequent releases of ICU
 * @draft ICU 2.4
 */
#define UCOL_RUNTIME_VERSION 4

/** Builder code version. When this is different, same tailoring might result
 * in assigning different collation elements to code points                  
 * version 2 was in ICU 1.8.1. added support for prefixes, tweaked canonical 
 * closure. However, the tailorings should probably get same CEs assigned    
 * version 5 - ICU 2.2 - fixed some bugs, renamed some indirect values.      
 * Backward compatible with the old rules. 
 * This value may change in the subsequent releases of ICU
 * @draft ICU 2.4
 */
#define UCOL_BUILDER_VERSION 5

/** *** Removed *** Instead we use the data we read from FractionalUCA.txt
 * This is the version of FractionalUCA.txt tailoring rules
 * Version 1 was in ICU 1.8.1. Version two contains canonical closure for
 * supplementary code points 
 * Version 4 in ICU 2.2, following UCA=3.1.1d6, UCD=3.2.0 
 * This value may change in the subsequent releases of ICU
 * @draft ICU 2.4
 */
/*#define UCOL_FRACTIONAL_UCA_VERSION 4*/

/** This is the version of the tailorings 
 *  This value may change in the subsequent releases of ICU
 *  @draft ICU 2.4
 */
#define UCOL_TAILORINGS_VERSION 1

#endif
