OLD | NEW |
(Empty) | |
| 1 /* |
| 2 ******************************************************************************* |
| 3 * |
| 4 * Copyright (C) 2003-2010, International Business Machines |
| 5 * Corporation and others. All Rights Reserved. |
| 6 * |
| 7 ******************************************************************************* |
| 8 * file name: usprep.h |
| 9 * encoding: US-ASCII |
| 10 * tab size: 8 (not used) |
| 11 * indentation:4 |
| 12 * |
| 13 * created on: 2003jul2 |
| 14 * created by: Ram Viswanadha |
| 15 */ |
| 16 |
| 17 #ifndef __USPREP_H__ |
| 18 #define __USPREP_H__ |
| 19 |
| 20 /** |
| 21 * \file |
| 22 * \brief C API: Implements the StringPrep algorithm. |
| 23 */ |
| 24 |
| 25 #include "unicode/utypes.h" |
| 26 #include "unicode/localpointer.h" |
| 27 |
| 28 /** |
| 29 * |
| 30 * StringPrep API implements the StingPrep framework as described by RFC 3454. |
| 31 * StringPrep prepares Unicode strings for use in network protocols. |
| 32 * Profiles of StingPrep are set of rules and data according to with the |
| 33 * Unicode Strings are prepared. Each profiles contains tables which describe |
| 34 * how a code point should be treated. The tables are broadly classied into |
| 35 * <ul> |
| 36 * <li> Unassinged Table: Contains code points that are unassigned |
| 37 * in the Unicode Version supported by StringPrep. Currently |
| 38 * RFC 3454 supports Unicode 3.2. </li> |
| 39 * <li> Prohibited Table: Contains code points that are prohibted from |
| 40 * the output of the StringPrep processing function. </li> |
| 41 * <li> Mapping Table: Contains code ponts that are deleted from the output
or case mapped. </li> |
| 42 * </ul> |
| 43 * |
| 44 * The procedure for preparing Unicode strings: |
| 45 * <ol> |
| 46 * <li> Map: For each character in the input, check if it has a mapping |
| 47 * and, if so, replace it with its mapping. </li> |
| 48 * <li> Normalize: Possibly normalize the result of step 1 using Unicode |
| 49 * normalization. </li> |
| 50 * <li> Prohibit: Check for any characters that are not allowed in the |
| 51 * output. If any are found, return an error.</li> |
| 52 * <li> Check bidi: Possibly check for right-to-left characters, and if |
| 53 * any are found, make sure that the whole string satisfies the |
| 54 * requirements for bidirectional strings. If the string does not |
| 55 * satisfy the requirements for bidirectional strings, return an |
| 56 * error. </li> |
| 57 * </ol> |
| 58 * @author Ram Viswanadha |
| 59 */ |
| 60 #if !UCONFIG_NO_IDNA |
| 61 |
| 62 #include "unicode/parseerr.h" |
| 63 |
| 64 /** |
| 65 * The StringPrep profile |
| 66 * @stable ICU 2.8 |
| 67 */ |
| 68 typedef struct UStringPrepProfile UStringPrepProfile; |
| 69 |
| 70 |
| 71 /** |
| 72 * Option to prohibit processing of unassigned code points in the input |
| 73 * |
| 74 * @see usprep_prepare |
| 75 * @stable ICU 2.8 |
| 76 */ |
| 77 #define USPREP_DEFAULT 0x0000 |
| 78 |
| 79 /** |
| 80 * Option to allow processing of unassigned code points in the input |
| 81 * |
| 82 * @see usprep_prepare |
| 83 * @stable ICU 2.8 |
| 84 */ |
| 85 #define USPREP_ALLOW_UNASSIGNED 0x0001 |
| 86 |
| 87 /** |
| 88 * enums for the standard stringprep profile types |
| 89 * supported by usprep_openByType. |
| 90 * @see usprep_openByType |
| 91 * @stable ICU 4.2 |
| 92 */ |
| 93 typedef enum UStringPrepProfileType { |
| 94 /** |
| 95 * RFC3491 Nameprep |
| 96 * @stable ICU 4.2 |
| 97 */ |
| 98 USPREP_RFC3491_NAMEPREP, |
| 99 /** |
| 100 * RFC3530 nfs4_cs_prep |
| 101 * @stable ICU 4.2 |
| 102 */ |
| 103 USPREP_RFC3530_NFS4_CS_PREP, |
| 104 /** |
| 105 * RFC3530 nfs4_cs_prep with case insensitive option |
| 106 * @stable ICU 4.2 |
| 107 */ |
| 108 USPREP_RFC3530_NFS4_CS_PREP_CI, |
| 109 /** |
| 110 * RFC3530 nfs4_cis_prep |
| 111 * @stable ICU 4.2 |
| 112 */ |
| 113 USPREP_RFC3530_NFS4_CIS_PREP, |
| 114 /** |
| 115 * RFC3530 nfs4_mixed_prep for prefix |
| 116 * @stable ICU 4.2 |
| 117 */ |
| 118 USPREP_RFC3530_NFS4_MIXED_PREP_PREFIX, |
| 119 /** |
| 120 * RFC3530 nfs4_mixed_prep for suffix |
| 121 * @stable ICU 4.2 |
| 122 */ |
| 123 USPREP_RFC3530_NFS4_MIXED_PREP_SUFFIX, |
| 124 /** |
| 125 * RFC3722 iSCSI |
| 126 * @stable ICU 4.2 |
| 127 */ |
| 128 USPREP_RFC3722_ISCSI, |
| 129 /** |
| 130 * RFC3920 XMPP Nodeprep |
| 131 * @stable ICU 4.2 |
| 132 */ |
| 133 USPREP_RFC3920_NODEPREP, |
| 134 /** |
| 135 * RFC3920 XMPP Resourceprep |
| 136 * @stable ICU 4.2 |
| 137 */ |
| 138 USPREP_RFC3920_RESOURCEPREP, |
| 139 /** |
| 140 * RFC4011 Policy MIB Stringprep |
| 141 * @stable ICU 4.2 |
| 142 */ |
| 143 USPREP_RFC4011_MIB, |
| 144 /** |
| 145 * RFC4013 SASLprep |
| 146 * @stable ICU 4.2 |
| 147 */ |
| 148 USPREP_RFC4013_SASLPREP, |
| 149 /** |
| 150 * RFC4505 trace |
| 151 * @stable ICU 4.2 |
| 152 */ |
| 153 USPREP_RFC4505_TRACE, |
| 154 /** |
| 155 * RFC4518 LDAP |
| 156 * @stable ICU 4.2 |
| 157 */ |
| 158 USPREP_RFC4518_LDAP, |
| 159 /** |
| 160 * RFC4518 LDAP for case ignore, numeric and stored prefix |
| 161 * matching rules |
| 162 * @stable ICU 4.2 |
| 163 */ |
| 164 USPREP_RFC4518_LDAP_CI |
| 165 } UStringPrepProfileType; |
| 166 |
| 167 /** |
| 168 * Creates a StringPrep profile from the data file. |
| 169 * |
| 170 * @param path string containing the full path pointing to the directory |
| 171 * where the profile reside followed by the package name |
| 172 * e.g. "/usr/resource/my_app/profiles/mydata" on a Unix system
. |
| 173 * if NULL, ICU default data files will be used. |
| 174 * @param fileName name of the profile file to be opened |
| 175 * @param status ICU error code in/out parameter. Must not be NULL. |
| 176 * Must fulfill U_SUCCESS before the function call. |
| 177 * @return Pointer to UStringPrepProfile that is opened. Should be closed by |
| 178 * calling usprep_close() |
| 179 * @see usprep_close() |
| 180 * @stable ICU 2.8 |
| 181 */ |
| 182 U_STABLE UStringPrepProfile* U_EXPORT2 |
| 183 usprep_open(const char* path, |
| 184 const char* fileName, |
| 185 UErrorCode* status); |
| 186 |
| 187 /** |
| 188 * Creates a StringPrep profile for the specified profile type. |
| 189 * |
| 190 * @param type The profile type |
| 191 * @param status ICU error code in/out parameter. Must not be NULL. |
| 192 * Must fulfill U_SUCCESS before the function call. |
| 193 * @return Pointer to UStringPrepProfile that is opened. Should be clos
ed by |
| 194 * calling usprep_close() |
| 195 * @see usprep_close() |
| 196 * @stable ICU 4.2 |
| 197 */ |
| 198 U_STABLE UStringPrepProfile* U_EXPORT2 |
| 199 usprep_openByType(UStringPrepProfileType type, |
| 200 UErrorCode* status); |
| 201 |
| 202 /** |
| 203 * Closes the profile |
| 204 * @param profile The profile to close |
| 205 * @stable ICU 2.8 |
| 206 */ |
| 207 U_STABLE void U_EXPORT2 |
| 208 usprep_close(UStringPrepProfile* profile); |
| 209 |
| 210 #if U_SHOW_CPLUSPLUS_API |
| 211 |
| 212 U_NAMESPACE_BEGIN |
| 213 |
| 214 /** |
| 215 * \class LocalUStringPrepProfilePointer |
| 216 * "Smart pointer" class, closes a UStringPrepProfile via usprep_close(). |
| 217 * For most methods see the LocalPointerBase base class. |
| 218 * |
| 219 * @see LocalPointerBase |
| 220 * @see LocalPointer |
| 221 * @stable ICU 4.4 |
| 222 */ |
| 223 U_DEFINE_LOCAL_OPEN_POINTER(LocalUStringPrepProfilePointer, UStringPrepProfile,
usprep_close); |
| 224 |
| 225 U_NAMESPACE_END |
| 226 |
| 227 #endif |
| 228 |
| 229 /** |
| 230 * Prepare the input buffer for use in applications with the given profile. This
operation maps, normalizes(NFKC), |
| 231 * checks for prohited and BiDi characters in the order defined by RFC 3454 |
| 232 * depending on the options specified in the profile. |
| 233 * |
| 234 * @param prep The profile to use |
| 235 * @param src Pointer to UChar buffer containing the string to prepare |
| 236 * @param srcLength Number of characters in the source string |
| 237 * @param dest Pointer to the destination buffer to receive the output |
| 238 * @param destCapacity The capacity of destination array |
| 239 * @param options A bit set of options: |
| 240 * |
| 241 * - USPREP_NONE Prohibit processing of unassigned code points in
the input |
| 242 * |
| 243 * - USPREP_ALLOW_UNASSIGNED Treat the unassigned code points are in the inpu
t |
| 244 * as normal Unicode code points. |
| 245 * |
| 246 * @param parseError Pointer to UParseError struct to receive information
on position |
| 247 * of error if an error is encountered. Can be NULL. |
| 248 * @param status ICU in/out error code parameter. |
| 249 * U_INVALID_CHAR_FOUND if src contains |
| 250 * unmatched single surrogates. |
| 251 * U_INDEX_OUTOFBOUNDS_ERROR if src contains |
| 252 * too many code points. |
| 253 * U_BUFFER_OVERFLOW_ERROR if destCapacity is not enoug
h |
| 254 * @return The number of UChars in the destination buffer |
| 255 * @stable ICU 2.8 |
| 256 */ |
| 257 |
| 258 U_STABLE int32_t U_EXPORT2 |
| 259 usprep_prepare( const UStringPrepProfile* prep, |
| 260 const UChar* src, int32_t srcLength, |
| 261 UChar* dest, int32_t destCapacity, |
| 262 int32_t options, |
| 263 UParseError* parseError, |
| 264 UErrorCode* status ); |
| 265 |
| 266 |
| 267 #endif /* #if !UCONFIG_NO_IDNA */ |
| 268 |
| 269 #endif |
OLD | NEW |