12e5b6d6dSopenharmony_ci// © 2016 and later: Unicode, Inc. and others.
22e5b6d6dSopenharmony_ci// License & terms of use: http://www.unicode.org/copyright.html
32e5b6d6dSopenharmony_ci/*
42e5b6d6dSopenharmony_ci*******************************************************************************
52e5b6d6dSopenharmony_ci*   Copyright (C) 2010-2012, International Business Machines
62e5b6d6dSopenharmony_ci*   Corporation and others.  All Rights Reserved.
72e5b6d6dSopenharmony_ci*******************************************************************************
82e5b6d6dSopenharmony_ci*   file name:  idna.h
92e5b6d6dSopenharmony_ci*   encoding:   UTF-8
102e5b6d6dSopenharmony_ci*   tab size:   8 (not used)
112e5b6d6dSopenharmony_ci*   indentation:4
122e5b6d6dSopenharmony_ci*
132e5b6d6dSopenharmony_ci*   created on: 2010mar05
142e5b6d6dSopenharmony_ci*   created by: Markus W. Scherer
152e5b6d6dSopenharmony_ci*/
162e5b6d6dSopenharmony_ci
172e5b6d6dSopenharmony_ci#ifndef __IDNA_H__
182e5b6d6dSopenharmony_ci#define __IDNA_H__
192e5b6d6dSopenharmony_ci
202e5b6d6dSopenharmony_ci/**
212e5b6d6dSopenharmony_ci * \file
222e5b6d6dSopenharmony_ci * \brief C++ API: Internationalizing Domain Names in Applications (IDNA)
232e5b6d6dSopenharmony_ci */
242e5b6d6dSopenharmony_ci
252e5b6d6dSopenharmony_ci#include "unicode/utypes.h"
262e5b6d6dSopenharmony_ci
272e5b6d6dSopenharmony_ci#if U_SHOW_CPLUSPLUS_API
282e5b6d6dSopenharmony_ci
292e5b6d6dSopenharmony_ci#if !UCONFIG_NO_IDNA
302e5b6d6dSopenharmony_ci
312e5b6d6dSopenharmony_ci#include "unicode/bytestream.h"
322e5b6d6dSopenharmony_ci#include "unicode/stringpiece.h"
332e5b6d6dSopenharmony_ci#include "unicode/uidna.h"
342e5b6d6dSopenharmony_ci#include "unicode/unistr.h"
352e5b6d6dSopenharmony_ci
362e5b6d6dSopenharmony_ciU_NAMESPACE_BEGIN
372e5b6d6dSopenharmony_ci
382e5b6d6dSopenharmony_ciclass IDNAInfo;
392e5b6d6dSopenharmony_ci
402e5b6d6dSopenharmony_ci/**
412e5b6d6dSopenharmony_ci * Abstract base class for IDNA processing.
422e5b6d6dSopenharmony_ci * See http://www.unicode.org/reports/tr46/
432e5b6d6dSopenharmony_ci * and http://www.ietf.org/rfc/rfc3490.txt
442e5b6d6dSopenharmony_ci *
452e5b6d6dSopenharmony_ci * The IDNA class is not intended for public subclassing.
462e5b6d6dSopenharmony_ci *
472e5b6d6dSopenharmony_ci * This C++ API currently only implements UTS #46.
482e5b6d6dSopenharmony_ci * The uidna.h C API implements both UTS #46 (functions using UIDNA service object)
492e5b6d6dSopenharmony_ci * and IDNA2003 (functions that do not use a service object).
502e5b6d6dSopenharmony_ci * @stable ICU 4.6
512e5b6d6dSopenharmony_ci */
522e5b6d6dSopenharmony_ciclass U_COMMON_API IDNA : public UObject {
532e5b6d6dSopenharmony_cipublic:
542e5b6d6dSopenharmony_ci    /**
552e5b6d6dSopenharmony_ci     * Destructor.
562e5b6d6dSopenharmony_ci     * @stable ICU 4.6
572e5b6d6dSopenharmony_ci     */
582e5b6d6dSopenharmony_ci    ~IDNA();
592e5b6d6dSopenharmony_ci
602e5b6d6dSopenharmony_ci    /**
612e5b6d6dSopenharmony_ci     * Returns an IDNA instance which implements UTS #46.
622e5b6d6dSopenharmony_ci     * Returns an unmodifiable instance, owned by the caller.
632e5b6d6dSopenharmony_ci     * Cache it for multiple operations, and delete it when done.
642e5b6d6dSopenharmony_ci     * The instance is thread-safe, that is, it can be used concurrently.
652e5b6d6dSopenharmony_ci     *
662e5b6d6dSopenharmony_ci     * UTS #46 defines Unicode IDNA Compatibility Processing,
672e5b6d6dSopenharmony_ci     * updated to the latest version of Unicode and compatible with both
682e5b6d6dSopenharmony_ci     * IDNA2003 and IDNA2008.
692e5b6d6dSopenharmony_ci     *
702e5b6d6dSopenharmony_ci     * The worker functions use transitional processing, including deviation mappings,
712e5b6d6dSopenharmony_ci     * unless UIDNA_NONTRANSITIONAL_TO_ASCII or UIDNA_NONTRANSITIONAL_TO_UNICODE
722e5b6d6dSopenharmony_ci     * is used in which case the deviation characters are passed through without change.
732e5b6d6dSopenharmony_ci     *
742e5b6d6dSopenharmony_ci     * Disallowed characters are mapped to U+FFFD.
752e5b6d6dSopenharmony_ci     *
762e5b6d6dSopenharmony_ci     * For available options see the uidna.h header.
772e5b6d6dSopenharmony_ci     * Operations with the UTS #46 instance do not support the
782e5b6d6dSopenharmony_ci     * UIDNA_ALLOW_UNASSIGNED option.
792e5b6d6dSopenharmony_ci     *
802e5b6d6dSopenharmony_ci     * By default, the UTS #46 implementation allows all ASCII characters (as valid or mapped).
812e5b6d6dSopenharmony_ci     * When the UIDNA_USE_STD3_RULES option is used, ASCII characters other than
822e5b6d6dSopenharmony_ci     * letters, digits, hyphen (LDH) and dot/full stop are disallowed and mapped to U+FFFD.
832e5b6d6dSopenharmony_ci     *
842e5b6d6dSopenharmony_ci     * @param options Bit set to modify the processing and error checking.
852e5b6d6dSopenharmony_ci     *                See option bit set values in uidna.h.
862e5b6d6dSopenharmony_ci     * @param errorCode Standard ICU error code. Its input value must
872e5b6d6dSopenharmony_ci     *                  pass the U_SUCCESS() test, or else the function returns
882e5b6d6dSopenharmony_ci     *                  immediately. Check for U_FAILURE() on output or use with
892e5b6d6dSopenharmony_ci     *                  function chaining. (See User Guide for details.)
902e5b6d6dSopenharmony_ci     * @return the UTS #46 IDNA instance, if successful
912e5b6d6dSopenharmony_ci     * @stable ICU 4.6
922e5b6d6dSopenharmony_ci     */
932e5b6d6dSopenharmony_ci    static IDNA *
942e5b6d6dSopenharmony_ci    createUTS46Instance(uint32_t options, UErrorCode &errorCode);
952e5b6d6dSopenharmony_ci
962e5b6d6dSopenharmony_ci    /**
972e5b6d6dSopenharmony_ci     * Converts a single domain name label into its ASCII form for DNS lookup.
982e5b6d6dSopenharmony_ci     * If any processing step fails, then info.hasErrors() will be true and
992e5b6d6dSopenharmony_ci     * the result might not be an ASCII string.
1002e5b6d6dSopenharmony_ci     * The label might be modified according to the types of errors.
1012e5b6d6dSopenharmony_ci     * Labels with severe errors will be left in (or turned into) their Unicode form.
1022e5b6d6dSopenharmony_ci     *
1032e5b6d6dSopenharmony_ci     * The UErrorCode indicates an error only in exceptional cases,
1042e5b6d6dSopenharmony_ci     * such as a U_MEMORY_ALLOCATION_ERROR.
1052e5b6d6dSopenharmony_ci     *
1062e5b6d6dSopenharmony_ci     * @param label Input domain name label
1072e5b6d6dSopenharmony_ci     * @param dest Destination string object
1082e5b6d6dSopenharmony_ci     * @param info Output container of IDNA processing details.
1092e5b6d6dSopenharmony_ci     * @param errorCode Standard ICU error code. Its input value must
1102e5b6d6dSopenharmony_ci     *                  pass the U_SUCCESS() test, or else the function returns
1112e5b6d6dSopenharmony_ci     *                  immediately. Check for U_FAILURE() on output or use with
1122e5b6d6dSopenharmony_ci     *                  function chaining. (See User Guide for details.)
1132e5b6d6dSopenharmony_ci     * @return dest
1142e5b6d6dSopenharmony_ci     * @stable ICU 4.6
1152e5b6d6dSopenharmony_ci     */
1162e5b6d6dSopenharmony_ci    virtual UnicodeString &
1172e5b6d6dSopenharmony_ci    labelToASCII(const UnicodeString &label, UnicodeString &dest,
1182e5b6d6dSopenharmony_ci                 IDNAInfo &info, UErrorCode &errorCode) const = 0;
1192e5b6d6dSopenharmony_ci
1202e5b6d6dSopenharmony_ci    /**
1212e5b6d6dSopenharmony_ci     * Converts a single domain name label into its Unicode form for human-readable display.
1222e5b6d6dSopenharmony_ci     * If any processing step fails, then info.hasErrors() will be true.
1232e5b6d6dSopenharmony_ci     * The label might be modified according to the types of errors.
1242e5b6d6dSopenharmony_ci     *
1252e5b6d6dSopenharmony_ci     * The UErrorCode indicates an error only in exceptional cases,
1262e5b6d6dSopenharmony_ci     * such as a U_MEMORY_ALLOCATION_ERROR.
1272e5b6d6dSopenharmony_ci     *
1282e5b6d6dSopenharmony_ci     * @param label Input domain name label
1292e5b6d6dSopenharmony_ci     * @param dest Destination string object
1302e5b6d6dSopenharmony_ci     * @param info Output container of IDNA processing details.
1312e5b6d6dSopenharmony_ci     * @param errorCode Standard ICU error code. Its input value must
1322e5b6d6dSopenharmony_ci     *                  pass the U_SUCCESS() test, or else the function returns
1332e5b6d6dSopenharmony_ci     *                  immediately. Check for U_FAILURE() on output or use with
1342e5b6d6dSopenharmony_ci     *                  function chaining. (See User Guide for details.)
1352e5b6d6dSopenharmony_ci     * @return dest
1362e5b6d6dSopenharmony_ci     * @stable ICU 4.6
1372e5b6d6dSopenharmony_ci     */
1382e5b6d6dSopenharmony_ci    virtual UnicodeString &
1392e5b6d6dSopenharmony_ci    labelToUnicode(const UnicodeString &label, UnicodeString &dest,
1402e5b6d6dSopenharmony_ci                   IDNAInfo &info, UErrorCode &errorCode) const = 0;
1412e5b6d6dSopenharmony_ci
1422e5b6d6dSopenharmony_ci    /**
1432e5b6d6dSopenharmony_ci     * Converts a whole domain name into its ASCII form for DNS lookup.
1442e5b6d6dSopenharmony_ci     * If any processing step fails, then info.hasErrors() will be true and
1452e5b6d6dSopenharmony_ci     * the result might not be an ASCII string.
1462e5b6d6dSopenharmony_ci     * The domain name might be modified according to the types of errors.
1472e5b6d6dSopenharmony_ci     * Labels with severe errors will be left in (or turned into) their Unicode form.
1482e5b6d6dSopenharmony_ci     *
1492e5b6d6dSopenharmony_ci     * The UErrorCode indicates an error only in exceptional cases,
1502e5b6d6dSopenharmony_ci     * such as a U_MEMORY_ALLOCATION_ERROR.
1512e5b6d6dSopenharmony_ci     *
1522e5b6d6dSopenharmony_ci     * @param name Input domain name
1532e5b6d6dSopenharmony_ci     * @param dest Destination string object
1542e5b6d6dSopenharmony_ci     * @param info Output container of IDNA processing details.
1552e5b6d6dSopenharmony_ci     * @param errorCode Standard ICU error code. Its input value must
1562e5b6d6dSopenharmony_ci     *                  pass the U_SUCCESS() test, or else the function returns
1572e5b6d6dSopenharmony_ci     *                  immediately. Check for U_FAILURE() on output or use with
1582e5b6d6dSopenharmony_ci     *                  function chaining. (See User Guide for details.)
1592e5b6d6dSopenharmony_ci     * @return dest
1602e5b6d6dSopenharmony_ci     * @stable ICU 4.6
1612e5b6d6dSopenharmony_ci     */
1622e5b6d6dSopenharmony_ci    virtual UnicodeString &
1632e5b6d6dSopenharmony_ci    nameToASCII(const UnicodeString &name, UnicodeString &dest,
1642e5b6d6dSopenharmony_ci                IDNAInfo &info, UErrorCode &errorCode) const = 0;
1652e5b6d6dSopenharmony_ci
1662e5b6d6dSopenharmony_ci    /**
1672e5b6d6dSopenharmony_ci     * Converts a whole domain name into its Unicode form for human-readable display.
1682e5b6d6dSopenharmony_ci     * If any processing step fails, then info.hasErrors() will be true.
1692e5b6d6dSopenharmony_ci     * The domain name might be modified according to the types of errors.
1702e5b6d6dSopenharmony_ci     *
1712e5b6d6dSopenharmony_ci     * The UErrorCode indicates an error only in exceptional cases,
1722e5b6d6dSopenharmony_ci     * such as a U_MEMORY_ALLOCATION_ERROR.
1732e5b6d6dSopenharmony_ci     *
1742e5b6d6dSopenharmony_ci     * @param name Input domain name
1752e5b6d6dSopenharmony_ci     * @param dest Destination string object
1762e5b6d6dSopenharmony_ci     * @param info Output container of IDNA processing details.
1772e5b6d6dSopenharmony_ci     * @param errorCode Standard ICU error code. Its input value must
1782e5b6d6dSopenharmony_ci     *                  pass the U_SUCCESS() test, or else the function returns
1792e5b6d6dSopenharmony_ci     *                  immediately. Check for U_FAILURE() on output or use with
1802e5b6d6dSopenharmony_ci     *                  function chaining. (See User Guide for details.)
1812e5b6d6dSopenharmony_ci     * @return dest
1822e5b6d6dSopenharmony_ci     * @stable ICU 4.6
1832e5b6d6dSopenharmony_ci     */
1842e5b6d6dSopenharmony_ci    virtual UnicodeString &
1852e5b6d6dSopenharmony_ci    nameToUnicode(const UnicodeString &name, UnicodeString &dest,
1862e5b6d6dSopenharmony_ci                  IDNAInfo &info, UErrorCode &errorCode) const = 0;
1872e5b6d6dSopenharmony_ci
1882e5b6d6dSopenharmony_ci    // UTF-8 versions of the processing methods ---------------------------- ***
1892e5b6d6dSopenharmony_ci
1902e5b6d6dSopenharmony_ci    /**
1912e5b6d6dSopenharmony_ci     * Converts a single domain name label into its ASCII form for DNS lookup.
1922e5b6d6dSopenharmony_ci     * UTF-8 version of labelToASCII(), same behavior.
1932e5b6d6dSopenharmony_ci     *
1942e5b6d6dSopenharmony_ci     * @param label Input domain name label
1952e5b6d6dSopenharmony_ci     * @param dest Destination byte sink; Flush()ed if successful
1962e5b6d6dSopenharmony_ci     * @param info Output container of IDNA processing details.
1972e5b6d6dSopenharmony_ci     * @param errorCode Standard ICU error code. Its input value must
1982e5b6d6dSopenharmony_ci     *                  pass the U_SUCCESS() test, or else the function returns
1992e5b6d6dSopenharmony_ci     *                  immediately. Check for U_FAILURE() on output or use with
2002e5b6d6dSopenharmony_ci     *                  function chaining. (See User Guide for details.)
2012e5b6d6dSopenharmony_ci     * @return dest
2022e5b6d6dSopenharmony_ci     * @stable ICU 4.6
2032e5b6d6dSopenharmony_ci     */
2042e5b6d6dSopenharmony_ci    virtual void
2052e5b6d6dSopenharmony_ci    labelToASCII_UTF8(StringPiece label, ByteSink &dest,
2062e5b6d6dSopenharmony_ci                      IDNAInfo &info, UErrorCode &errorCode) const;
2072e5b6d6dSopenharmony_ci
2082e5b6d6dSopenharmony_ci    /**
2092e5b6d6dSopenharmony_ci     * Converts a single domain name label into its Unicode form for human-readable display.
2102e5b6d6dSopenharmony_ci     * UTF-8 version of labelToUnicode(), same behavior.
2112e5b6d6dSopenharmony_ci     *
2122e5b6d6dSopenharmony_ci     * @param label Input domain name label
2132e5b6d6dSopenharmony_ci     * @param dest Destination byte sink; Flush()ed if successful
2142e5b6d6dSopenharmony_ci     * @param info Output container of IDNA processing details.
2152e5b6d6dSopenharmony_ci     * @param errorCode Standard ICU error code. Its input value must
2162e5b6d6dSopenharmony_ci     *                  pass the U_SUCCESS() test, or else the function returns
2172e5b6d6dSopenharmony_ci     *                  immediately. Check for U_FAILURE() on output or use with
2182e5b6d6dSopenharmony_ci     *                  function chaining. (See User Guide for details.)
2192e5b6d6dSopenharmony_ci     * @return dest
2202e5b6d6dSopenharmony_ci     * @stable ICU 4.6
2212e5b6d6dSopenharmony_ci     */
2222e5b6d6dSopenharmony_ci    virtual void
2232e5b6d6dSopenharmony_ci    labelToUnicodeUTF8(StringPiece label, ByteSink &dest,
2242e5b6d6dSopenharmony_ci                       IDNAInfo &info, UErrorCode &errorCode) const;
2252e5b6d6dSopenharmony_ci
2262e5b6d6dSopenharmony_ci    /**
2272e5b6d6dSopenharmony_ci     * Converts a whole domain name into its ASCII form for DNS lookup.
2282e5b6d6dSopenharmony_ci     * UTF-8 version of nameToASCII(), same behavior.
2292e5b6d6dSopenharmony_ci     *
2302e5b6d6dSopenharmony_ci     * @param name Input domain name
2312e5b6d6dSopenharmony_ci     * @param dest Destination byte sink; Flush()ed if successful
2322e5b6d6dSopenharmony_ci     * @param info Output container of IDNA processing details.
2332e5b6d6dSopenharmony_ci     * @param errorCode Standard ICU error code. Its input value must
2342e5b6d6dSopenharmony_ci     *                  pass the U_SUCCESS() test, or else the function returns
2352e5b6d6dSopenharmony_ci     *                  immediately. Check for U_FAILURE() on output or use with
2362e5b6d6dSopenharmony_ci     *                  function chaining. (See User Guide for details.)
2372e5b6d6dSopenharmony_ci     * @return dest
2382e5b6d6dSopenharmony_ci     * @stable ICU 4.6
2392e5b6d6dSopenharmony_ci     */
2402e5b6d6dSopenharmony_ci    virtual void
2412e5b6d6dSopenharmony_ci    nameToASCII_UTF8(StringPiece name, ByteSink &dest,
2422e5b6d6dSopenharmony_ci                     IDNAInfo &info, UErrorCode &errorCode) const;
2432e5b6d6dSopenharmony_ci
2442e5b6d6dSopenharmony_ci    /**
2452e5b6d6dSopenharmony_ci     * Converts a whole domain name into its Unicode form for human-readable display.
2462e5b6d6dSopenharmony_ci     * UTF-8 version of nameToUnicode(), same behavior.
2472e5b6d6dSopenharmony_ci     *
2482e5b6d6dSopenharmony_ci     * @param name Input domain name
2492e5b6d6dSopenharmony_ci     * @param dest Destination byte sink; Flush()ed if successful
2502e5b6d6dSopenharmony_ci     * @param info Output container of IDNA processing details.
2512e5b6d6dSopenharmony_ci     * @param errorCode Standard ICU error code. Its input value must
2522e5b6d6dSopenharmony_ci     *                  pass the U_SUCCESS() test, or else the function returns
2532e5b6d6dSopenharmony_ci     *                  immediately. Check for U_FAILURE() on output or use with
2542e5b6d6dSopenharmony_ci     *                  function chaining. (See User Guide for details.)
2552e5b6d6dSopenharmony_ci     * @return dest
2562e5b6d6dSopenharmony_ci     * @stable ICU 4.6
2572e5b6d6dSopenharmony_ci     */
2582e5b6d6dSopenharmony_ci    virtual void
2592e5b6d6dSopenharmony_ci    nameToUnicodeUTF8(StringPiece name, ByteSink &dest,
2602e5b6d6dSopenharmony_ci                      IDNAInfo &info, UErrorCode &errorCode) const;
2612e5b6d6dSopenharmony_ci};
2622e5b6d6dSopenharmony_ci
2632e5b6d6dSopenharmony_ciclass UTS46;
2642e5b6d6dSopenharmony_ci
2652e5b6d6dSopenharmony_ci/**
2662e5b6d6dSopenharmony_ci * Output container for IDNA processing errors.
2672e5b6d6dSopenharmony_ci * The IDNAInfo class is not suitable for subclassing.
2682e5b6d6dSopenharmony_ci * @stable ICU 4.6
2692e5b6d6dSopenharmony_ci */
2702e5b6d6dSopenharmony_ciclass U_COMMON_API IDNAInfo : public UMemory {
2712e5b6d6dSopenharmony_cipublic:
2722e5b6d6dSopenharmony_ci    /**
2732e5b6d6dSopenharmony_ci     * Constructor for stack allocation.
2742e5b6d6dSopenharmony_ci     * @stable ICU 4.6
2752e5b6d6dSopenharmony_ci     */
2762e5b6d6dSopenharmony_ci    IDNAInfo() : errors(0), labelErrors(0), isTransDiff(false), isBiDi(false), isOkBiDi(true) {}
2772e5b6d6dSopenharmony_ci    /**
2782e5b6d6dSopenharmony_ci     * Were there IDNA processing errors?
2792e5b6d6dSopenharmony_ci     * @return true if there were processing errors
2802e5b6d6dSopenharmony_ci     * @stable ICU 4.6
2812e5b6d6dSopenharmony_ci     */
2822e5b6d6dSopenharmony_ci    UBool hasErrors() const { return errors!=0; }
2832e5b6d6dSopenharmony_ci    /**
2842e5b6d6dSopenharmony_ci     * Returns a bit set indicating IDNA processing errors.
2852e5b6d6dSopenharmony_ci     * See UIDNA_ERROR_... constants in uidna.h.
2862e5b6d6dSopenharmony_ci     * @return bit set of processing errors
2872e5b6d6dSopenharmony_ci     * @stable ICU 4.6
2882e5b6d6dSopenharmony_ci     */
2892e5b6d6dSopenharmony_ci    uint32_t getErrors() const { return errors; }
2902e5b6d6dSopenharmony_ci    /**
2912e5b6d6dSopenharmony_ci     * Returns true if transitional and nontransitional processing produce different results.
2922e5b6d6dSopenharmony_ci     * This is the case when the input label or domain name contains
2932e5b6d6dSopenharmony_ci     * one or more deviation characters outside a Punycode label (see UTS #46).
2942e5b6d6dSopenharmony_ci     * <ul>
2952e5b6d6dSopenharmony_ci     * <li>With nontransitional processing, such characters are
2962e5b6d6dSopenharmony_ci     * copied to the destination string.
2972e5b6d6dSopenharmony_ci     * <li>With transitional processing, such characters are
2982e5b6d6dSopenharmony_ci     * mapped (sharp s/sigma) or removed (joiner/nonjoiner).
2992e5b6d6dSopenharmony_ci     * </ul>
3002e5b6d6dSopenharmony_ci     * @return true if transitional and nontransitional processing produce different results
3012e5b6d6dSopenharmony_ci     * @stable ICU 4.6
3022e5b6d6dSopenharmony_ci     */
3032e5b6d6dSopenharmony_ci    UBool isTransitionalDifferent() const { return isTransDiff; }
3042e5b6d6dSopenharmony_ci
3052e5b6d6dSopenharmony_ciprivate:
3062e5b6d6dSopenharmony_ci    friend class UTS46;
3072e5b6d6dSopenharmony_ci
3082e5b6d6dSopenharmony_ci    IDNAInfo(const IDNAInfo &other) = delete;  // no copying
3092e5b6d6dSopenharmony_ci    IDNAInfo &operator=(const IDNAInfo &other) = delete;  // no copying
3102e5b6d6dSopenharmony_ci
3112e5b6d6dSopenharmony_ci    void reset() {
3122e5b6d6dSopenharmony_ci        errors=labelErrors=0;
3132e5b6d6dSopenharmony_ci        isTransDiff=false;
3142e5b6d6dSopenharmony_ci        isBiDi=false;
3152e5b6d6dSopenharmony_ci        isOkBiDi=true;
3162e5b6d6dSopenharmony_ci    }
3172e5b6d6dSopenharmony_ci
3182e5b6d6dSopenharmony_ci    uint32_t errors, labelErrors;
3192e5b6d6dSopenharmony_ci    UBool isTransDiff;
3202e5b6d6dSopenharmony_ci    UBool isBiDi;
3212e5b6d6dSopenharmony_ci    UBool isOkBiDi;
3222e5b6d6dSopenharmony_ci};
3232e5b6d6dSopenharmony_ci
3242e5b6d6dSopenharmony_ciU_NAMESPACE_END
3252e5b6d6dSopenharmony_ci
3262e5b6d6dSopenharmony_ci#endif  // UCONFIG_NO_IDNA
3272e5b6d6dSopenharmony_ci
3282e5b6d6dSopenharmony_ci#endif /* U_SHOW_CPLUSPLUS_API */
3292e5b6d6dSopenharmony_ci
3302e5b6d6dSopenharmony_ci#endif  // __IDNA_H__
331