00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __IDNA_H__
00018 #define __IDNA_H__
00019
00025 #include "unicode/utypes.h"
00026
00027 #if !UCONFIG_NO_IDNA
00028
00029 #include "unicode/bytestream.h"
00030 #include "unicode/stringpiece.h"
00031 #include "unicode/uidna.h"
00032 #include "unicode/unistr.h"
00033
00034 U_NAMESPACE_BEGIN
00035
00036 class IDNAInfo;
00037
00050 class U_COMMON_API IDNA : public UObject {
00051 public:
00056 ~IDNA();
00057
00091 static IDNA *
00092 createUTS46Instance(uint32_t options, UErrorCode &errorCode);
00093
00114 virtual UnicodeString &
00115 labelToASCII(const UnicodeString &label, UnicodeString &dest,
00116 IDNAInfo &info, UErrorCode &errorCode) const = 0;
00117
00136 virtual UnicodeString &
00137 labelToUnicode(const UnicodeString &label, UnicodeString &dest,
00138 IDNAInfo &info, UErrorCode &errorCode) const = 0;
00139
00160 virtual UnicodeString &
00161 nameToASCII(const UnicodeString &name, UnicodeString &dest,
00162 IDNAInfo &info, UErrorCode &errorCode) const = 0;
00163
00182 virtual UnicodeString &
00183 nameToUnicode(const UnicodeString &name, UnicodeString &dest,
00184 IDNAInfo &info, UErrorCode &errorCode) const = 0;
00185
00186
00187
00202 virtual void
00203 labelToASCII_UTF8(StringPiece label, ByteSink &dest,
00204 IDNAInfo &info, UErrorCode &errorCode) const;
00205
00220 virtual void
00221 labelToUnicodeUTF8(StringPiece label, ByteSink &dest,
00222 IDNAInfo &info, UErrorCode &errorCode) const;
00223
00238 virtual void
00239 nameToASCII_UTF8(StringPiece name, ByteSink &dest,
00240 IDNAInfo &info, UErrorCode &errorCode) const;
00241
00256 virtual void
00257 nameToUnicodeUTF8(StringPiece name, ByteSink &dest,
00258 IDNAInfo &info, UErrorCode &errorCode) const;
00259 };
00260
00261 class UTS46;
00262
00268 class U_COMMON_API IDNAInfo : public UMemory {
00269 public:
00274 IDNAInfo() : errors(0), labelErrors(0), isTransDiff(FALSE), isBiDi(FALSE), isOkBiDi(TRUE) {}
00280 UBool hasErrors() const { return errors!=0; }
00287 uint32_t getErrors() const { return errors; }
00301 UBool isTransitionalDifferent() const { return isTransDiff; }
00302
00303 private:
00304 friend class UTS46;
00305
00306 IDNAInfo(const IDNAInfo &other);
00307 IDNAInfo &operator=(const IDNAInfo &other);
00308
00309 void reset() {
00310 errors=labelErrors=0;
00311 isTransDiff=FALSE;
00312 isBiDi=FALSE;
00313 isOkBiDi=TRUE;
00314 }
00315
00316 uint32_t errors, labelErrors;
00317 UBool isTransDiff;
00318 UBool isBiDi;
00319 UBool isOkBiDi;
00320 };
00321
00322 U_NAMESPACE_END
00323
00324 #endif // UCONFIG_NO_IDNA
00325 #endif // __IDNA_H__