1f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/*
2f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)***************************************************************************
3f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)* Copyright (C) 2008-2010, International Business Machines Corporation
4f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)* and others. All Rights Reserved.
5f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)***************************************************************************
6f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*   file name:  uspoof.h
7f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*   encoding:   US-ASCII
8f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*   tab size:   8 (not used)
9f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*   indentation:4
10f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*
11f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*   created on: 2008Feb13
12f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*   created by: Andy Heninger
13f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*
14f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*   Unicode Spoof Detection
15f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*/
16f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
17f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#ifndef USPOOF_H
18f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#define USPOOF_H
19f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
20f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/utypes.h"
21f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/uset.h"
22f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/parseerr.h"
23f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/localpointer.h"
24f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
25f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if !UCONFIG_NO_NORMALIZATION
26f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
27f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
28f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if U_SHOW_CPLUSPLUS_API
29f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/unistr.h"
30f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/uniset.h"
31f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
32f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_NAMESPACE_USE
33f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif
34f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
35f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
36f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
37f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * \file
38f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * \brief Unicode Security and Spoofing Detection, C API.
39f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
40f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * These functions are intended to check strings, typically
41f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * identifiers of some type, such as URLs, for the presence of
42f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * characters that are likely to be visually confusing -
43f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * for cases where the displayed form of an identifier may
44f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * not be what it appears to be.
45f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
46f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Unicode Technical Report #36, http://unicode.org/reports/tr36, and
47f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Unicode Technical Standard #39, http://unicode.org/reports/tr39
48f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * "Unicode security considerations", give more background on
49f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * security an spoofing issues with Unicode identifiers.
50f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The tests and checks provided by this module implement the recommendations
51f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * from those Unicode documents.
52f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
53f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The tests available on identifiers fall into two general categories:
54f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *   -#  Single identifier tests.  Check whether an identifier is
55f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *       potentially confusable with any other string, or is suspicious
56f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *       for other reasons.
57f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *   -#  Two identifier tests.  Check whether two specific identifiers are confusable.
58f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *       This does not consider whether either of strings is potentially
59f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *       confusable with any string other than the exact one specified.
60f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
61f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The steps to perform confusability testing are
62f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *   -#  Open a USpoofChecker.
63f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *   -#  Configure the USPoofChecker for the desired set of tests.  The tests that will
64f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *       be performed are specified by a set of USpoofChecks flags.
65f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *   -#  Perform the checks using the pre-configured USpoofChecker.  The results indicate
66f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *       which (if any) of the selected tests have identified possible problems with the identifier.
67f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *       Results are reported as a set of USpoofChecks flags;  this mirrors the form in which
68f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *       the set of tests to perform was originally specified to the USpoofChecker.
69f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
70f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * A USpoofChecker may be used repeatedly to perform checks on any number of identifiers.
71f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
72f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Thread Safety: The test functions for checking a single identifier, or for testing
73f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * whether two identifiers are possible confusable, are thread safe.
74f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * They may called concurrently, from multiple threads, using the same USpoofChecker instance.
75f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
76f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * More generally, the standard ICU thread safety rules apply:  functions that take a
77f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * const USpoofChecker parameter are thread safe.  Those that take a non-const
78f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * USpoofChecier are not thread safe.
79f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
80f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
81f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Descriptions of the available checks.
82f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
83f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * When testing whether pairs of identifiers are confusable, with the uspoof_areConfusable()
84f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * family of functions, the relevant tests are
85f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
86f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *   -# USPOOF_SINGLE_SCRIPT_CONFUSABLE:  All of the characters from the two identifiers are
87f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *      from a single script, and the two identifiers are visually confusable.
88f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *   -# USPOOF_MIXED_SCRIPT_CONFUSABLE:  At least one of the identifiers contains characters
89f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *      from more than one script, and the two identifiers are visually confusable.
90f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *   -# USPOOF_WHOLE_SCRIPT_CONFUSABLE: Each of the two identifiers is of a single script, but
91f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *      the two identifiers are from different scripts, and they are visually confusable.
92f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
93f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The safest approach is to enable all three of these checks as a group.
94f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
95f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * USPOOF_ANY_CASE is a modifier for the above tests.  If the identifiers being checked can
96f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * be of mixed case and are used in a case-sensitive manner, this option should be specified.
97f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
98f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * If the identifiers being checked are used in a case-insensitive manner, and if they are
99f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * displayed to users in lower-case form only, the USPOOF_ANY_CASE option should not be
100f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * specified.  Confusabality issues involving upper case letters will not be reported.
101f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
102f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * When performing tests on a single identifier, with the uspoof_check() family of functions,
103f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * the relevant tests are:
104f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
105f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *    -# USPOOF_MIXED_SCRIPT_CONFUSABLE: the identifier contains characters from multiple
106f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *       scripts, and there exists an identifier of a single script that is visually confusable.
107f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *    -# USPOOF_WHOLE_SCRIPT_CONFUSABLE: the identifier consists of characters from a single
108f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *       script, and there exists a visually confusable identifier.
109f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *       The visually confusable identifier also consists of characters from a single script.
110f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *       but not the same script as the identifier being checked.
111f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *    -# USPOOF_ANY_CASE: modifies the mixed script and whole script confusables tests.  If
112f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *       specified, the checks will consider confusable characters of any case.  If this flag is not
113f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *       set, the test is performed assuming case folded identifiers.
114f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *    -# USPOOF_SINGLE_SCRIPT: check that the identifier contains only characters from a
115f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *       single script.  (Characters from the 'common' and 'inherited' scripts are ignored.)
116f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *       This is not a test for confusable identifiers
117f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *    -# USPOOF_INVISIBLE: check an identifier for the presence of invisible characters,
118f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *       such as zero-width spaces, or character sequences that are
119f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *       likely not to display, such as multiple occurrences of the same
120f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *       non-spacing mark.  This check does not test the input string as a whole
121f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *       for conformance to any particular syntax for identifiers.
122f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *    -# USPOOF_CHAR_LIMIT: check that an identifier contains only characters from a specified set
123f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *       of acceptable characters.  See uspoof_setAllowedChars() and
124f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *       uspoof_setAllowedLocales().
125f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
126f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  Note on Scripts:
127f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *     Characters from the Unicode Scripts "Common" and "Inherited" are ignored when considering
128f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *     the script of an identifier. Common characters include digits and symbols that
129f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *     are normally used with text from more than one script.
130f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
131f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  Identifier Skeletons:  A skeleton is a transformation of an identifier, such that
132f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  all identifiers that are confusable with each other have the same skeleton.
133f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  Using skeletons, it is possible to build a dictionary data structure for
134f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  a set of identifiers, and then quickly test whether a new identifier is
135f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  confusable with an identifier already in the set.  The uspoof_getSkeleton()
136f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  family of functions will produce the skeleton from an identifier.
137f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
138f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  Note that skeletons are not guaranteed to be stable between versions
139f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  of Unicode or ICU, so an applications should not rely on creating a permanent,
140f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  or difficult to update, database of skeletons.  Instabilities result from
141f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  identifying new pairs or sequences of characters that are visually
142f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  confusable, and thus must be mapped to the same skeleton character(s).
143f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
144f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
145f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
146f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)struct USpoofChecker;
147f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)typedef struct USpoofChecker USpoofChecker; /**< typedef for C of USpoofChecker */
148f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
149f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
150f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Enum for the kinds of checks that USpoofChecker can perform.
151f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * These enum values are used both to select the set of checks that
152f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * will be performed, and to report results from the check function.
153f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
154f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 4.2
155f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
156f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)typedef enum USpoofChecks {
157f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /**   Single script confusable test.
158f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      *   When testing whether two identifiers are confusable, report that they are if
159f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      *   both are from the same script and they are visually confusable.
160f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      *   Note: this test is not applicable to a check of a single identifier.
161f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      */
162f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    USPOOF_SINGLE_SCRIPT_CONFUSABLE =   1,
163f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
164f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /** Mixed script confusable test.
165f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     *  When checking a single identifier, report a problem if
166f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     *    the identifier contains multiple scripts, and
167f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     *    is confusable with some other identifier in a single script
168f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     *  When testing whether two identifiers are confusable, report that they are if
169f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     *    the two IDs are visually confusable,
170f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     *    and at least one contains characters from more than one script.
171f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     */
172f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    USPOOF_MIXED_SCRIPT_CONFUSABLE  =   2,
173f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
174f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /** Whole script confusable test.
175f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     *  When checking a single identifier, report a problem if
176f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     *    The identifier is of a single script, and
177f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     *    there exists a confusable identifier in another script.
178f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     *  When testing whether two identifiers are confusable, report that they are if
179f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     *    each is of a single script,
180f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     *    the scripts of the two identifiers are different, and
181f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     *    the identifiers are visually confusable.
182f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)     */
183f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    USPOOF_WHOLE_SCRIPT_CONFUSABLE  =   4,
184f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
185f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /** Any Case Modifier for confusable identifier tests.
186f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        If specified, consider all characters, of any case, when looking for confusables.
187f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        If USPOOF_ANY_CASE is not specified, identifiers being checked are assumed to have been
188f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        case folded.  Upper case confusable characters will not be checked.
189f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        Selects between Lower Case Confusable and
190f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)        Any Case Confusable.   */
191f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    USPOOF_ANY_CASE                 =   8,
192f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
193f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /** Check that an identifier contains only characters from a
194f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      * single script (plus chars from the common and inherited scripts.)
195f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      * Applies to checks of a single identifier check only.
196f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      */
197f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    USPOOF_SINGLE_SCRIPT            =  16,
198f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
199f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /** Check an identifier for the presence of invisible characters,
200f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      * such as zero-width spaces, or character sequences that are
201f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      * likely not to display, such as multiple occurrences of the same
202f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      * non-spacing mark.  This check does not test the input string as a whole
203f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      * for conformance to any particular syntax for identifiers.
204f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      */
205f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    USPOOF_INVISIBLE                =  32,
206f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
207f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    /** Check that an identifier contains only characters from a specified set
208f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      * of acceptable characters.  See uspoof_setAllowedChars() and
209f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      * uspoof_setAllowedLocales().
210f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)      */
211f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    USPOOF_CHAR_LIMIT               =  64,
212f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
213f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    USPOOF_ALL_CHECKS               = 0x7f
214f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)    } USpoofChecks;
215f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
216f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
217f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
218f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  Create a Unicode Spoof Checker, configured to perform all
219f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  checks except for USPOOF_LOCALE_LIMIT and USPOOF_CHAR_LIMIT.
220f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  Note that additional checks may be added in the future,
221f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  resulting in the changes to the default checking behavior.
222f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
223f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  @param status  The error code, set if this function encounters a problem.
224f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  @return        the newly created Spoof Checker
225f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  @stable ICU 4.2
226f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
227f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_STABLE USpoofChecker * U_EXPORT2
228f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)uspoof_open(UErrorCode *status);
229f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
230f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
231f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
232f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Open a Spoof checker from its serialized from, stored in 32-bit-aligned memory.
233f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Inverse of uspoof_serialize().
234f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The memory containing the serialized data must remain valid and unchanged
235f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * as long as the spoof checker, or any cloned copies of the spoof checker,
236f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * are in use.  Ownership of the memory remains with the caller.
237f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The spoof checker (and any clones) must be closed prior to deleting the
238f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * serialized data.
239f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
240f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param data a pointer to 32-bit-aligned memory containing the serialized form of spoof data
241f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param length the number of bytes available at data;
242f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *               can be more than necessary
243f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param pActualLength receives the actual number of bytes at data taken up by the data;
244f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                      can be NULL
245f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param pErrorCode ICU error code
246f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @return the spoof checker.
247f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
248f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @see uspoof_open
249f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @see uspoof_serialize
250f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 4.2
251f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
252f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_STABLE USpoofChecker * U_EXPORT2
253f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)uspoof_openFromSerialized(const void *data, int32_t length, int32_t *pActualLength,
254f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                          UErrorCode *pErrorCode);
255f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
256f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
257f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * Open a Spoof Checker from the source form of the spoof data.
258f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * The Three inputs correspond to the Unicode data files confusables.txt
259f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * confusablesWholeScript.txt and xidmdifications.txt as described in
260f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * Unicode UAX 39.  The syntax of the source data is as described in UAX 39 for
261f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * these files, and the content of these files is acceptable input.
262f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *
263f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * The character encoding of the (char *) input text is UTF-8.
264f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *
265f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @param confusables a pointer to the confusable characters definitions,
266f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                    as found in file confusables.txt from unicode.org.
267f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @param confusablesLen The length of the confusables text, or -1 if the
268f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                    input string is zero terminated.
269f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @param confusablesWholeScript
270f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                    a pointer to the whole script confusables definitions,
271f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                    as found in the file confusablesWholeScript.txt from unicode.org.
272f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @param confusablesWholeScriptLen The length of the whole script confusables text, or
273f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                    -1 if the input string is zero terminated.
274f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @param errType     In the event of an error in the input, indicates
275f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                    which of the input files contains the error.
276f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                    The value is one of USPOOF_SINGLE_SCRIPT_CONFUSABLE or
277f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                    USPOOF_WHOLE_SCRIPT_CONFUSABLE, or
278f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                    zero if no errors are found.
279f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @param pe          In the event of an error in the input, receives the position
280f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                    in the input text (line, offset) of the error.
281f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @param status      an in/out ICU UErrorCode.  Among the possible errors is
282f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                    U_PARSE_ERROR, which is used to report syntax errors
283f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                    in the input.
284f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @return            A spoof checker that uses the rules from the input files.
285f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @stable ICU 4.2
286f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  */
287f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_STABLE USpoofChecker * U_EXPORT2
288f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)uspoof_openFromSource(const char *confusables,  int32_t confusablesLen,
289f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                      const char *confusablesWholeScript, int32_t confusablesWholeScriptLen,
290f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                      int32_t *errType, UParseError *pe, UErrorCode *status);
291f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
292f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
293f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
294f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * Close a Spoof Checker, freeing any memory that was being held by
295f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *   its implementation.
296f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @stable ICU 4.2
297f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  */
298f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_STABLE void U_EXPORT2
299f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)uspoof_close(USpoofChecker *sc);
300f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
301f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if U_SHOW_CPLUSPLUS_API
302f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
303f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_NAMESPACE_BEGIN
304f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
305f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
306f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * \class LocalUSpoofCheckerPointer
307f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * "Smart pointer" class, closes a USpoofChecker via uspoof_close().
308f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * For most methods see the LocalPointerBase base class.
309f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
310f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @see LocalPointerBase
311f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @see LocalPointer
312f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 4.4
313f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
314f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_DEFINE_LOCAL_OPEN_POINTER(LocalUSpoofCheckerPointer, USpoofChecker, uspoof_close);
315f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
316f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_NAMESPACE_END
317f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
318f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif
319f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
320f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
321f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Clone a Spoof Checker.  The clone will be set to perform the same checks
322f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *   as the original source.
323f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
324f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param sc       The source USpoofChecker
325f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param status   The error code, set if this function encounters a problem.
326f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @return
327f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 4.2
328f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
329f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_STABLE USpoofChecker * U_EXPORT2
330f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)uspoof_clone(const USpoofChecker *sc, UErrorCode *status);
331f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
332f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
333f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
334f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Specify the set of checks that will be performed by the check
335f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * functions of this Spoof Checker.
336f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
337f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param sc       The USpoofChecker
338f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param checks         The set of checks that this spoof checker will perform.
339f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                 The value is a bit set, obtained by OR-ing together
340f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                 values from enum USpoofChecks.
341f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param status   The error code, set if this function encounters a problem.
342f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 4.2
343f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
344f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
345f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_STABLE void U_EXPORT2
346f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)uspoof_setChecks(USpoofChecker *sc, int32_t checks, UErrorCode *status);
347f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
348f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
349f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Get the set of checks that this Spoof Checker has been configured to perform.
350f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
351f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param sc       The USpoofChecker
352f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param status   The error code, set if this function encounters a problem.
353f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @return         The set of checks that this spoof checker will perform.
354f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                 The value is a bit set, obtained by OR-ing together
355f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                 values from enum USpoofChecks.
356f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 4.2
357f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
358f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
359f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_STABLE int32_t U_EXPORT2
360f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)uspoof_getChecks(const USpoofChecker *sc, UErrorCode *status);
361f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
362f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
363f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Limit characters that are acceptable in identifiers being checked to those
364f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * normally used with the languages associated with the specified locales.
365f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Any previously specified list of locales is replaced by the new settings.
366f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
367f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * A set of languages is determined from the locale(s), and
368f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * from those a set of acceptable Unicode scripts is determined.
369f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Characters from this set of scripts, along with characters from
370f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * the "common" and "inherited" Unicode Script categories
371f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * will be permitted.
372f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
373f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Supplying an empty string removes all restrictions;
374f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * characters from any script will be allowed.
375f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
376f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The USPOOF_CHAR_LIMIT test is automatically enabled for this
377f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * USpoofChecker when calling this function with a non-empty list
378f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * of locales.
379f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
380f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The Unicode Set of characters that will be allowed is accessible
381f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * via the uspoof_getAllowedChars() function.  uspoof_setAllowedLocales()
382f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * will <i>replace</i> any previously applied set of allowed characters.
383f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
384f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Adjustments, such as additions or deletions of certain classes of characters,
385f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * can be made to the result of uspoof_setAllowedLocales() by
386f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * fetching the resulting set with uspoof_getAllowedChars(),
387f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * manipulating it with the Unicode Set API, then resetting the
388f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * spoof detectors limits with uspoof_setAllowedChars()
389f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
390f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param sc           The USpoofChecker
391f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param localesList  A list list of locales, from which the language
392f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                     and associated script are extracted.  The locales
393f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                     are comma-separated if there is more than one.
394f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                     White space may not appear within an individual locale,
395f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                     but is ignored otherwise.
396f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                     The locales are syntactically like those from the
397f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                     HTTP Accept-Language header.
398f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                     If the localesList is empty, no restrictions will be placed on
399f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                     the allowed characters.
400f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
401f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param status       The error code, set if this function encounters a problem.
402f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 4.2
403f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
404f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_STABLE void U_EXPORT2
405f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)uspoof_setAllowedLocales(USpoofChecker *sc, const char *localesList, UErrorCode *status);
406f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
407f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
408f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Get a list of locales for the scripts that are acceptable in strings
409f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  to be checked.  If no limitations on scripts have been specified,
410f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  an empty string will be returned.
411f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
412f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  uspoof_setAllowedChars() will reset the list of allowed to be empty.
413f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
414f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  The format of the returned list is the same as that supplied to
415f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  uspoof_setAllowedLocales(), but returned list may not be identical
416f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  to the originally specified string; the string may be reformatted,
417f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  and information other than languages from
418f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *  the originally specified locales may be omitted.
419f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
420f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param sc           The USpoofChecker
421f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param status       The error code, set if this function encounters a problem.
422f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @return             A string containing a list of  locales corresponding
423f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                     to the acceptable scripts, formatted like an
424f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                     HTTP Accept Language value.
425f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
426f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 4.2
427f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
428f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_STABLE const char * U_EXPORT2
429f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)uspoof_getAllowedLocales(USpoofChecker *sc, UErrorCode *status);
430f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
431f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
432f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
433f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Limit the acceptable characters to those specified by a Unicode Set.
434f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *   Any previously specified character limit is
435f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *   is replaced by the new settings.  This includes limits on
436f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *   characters that were set with the uspoof_setAllowedLocales() function.
437f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
438f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The USPOOF_CHAR_LIMIT test is automatically enabled for this
439f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * USpoofChecker by this function.
440f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
441f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param sc       The USpoofChecker
442f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param chars    A Unicode Set containing the list of
443f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                 characters that are permitted.  Ownership of the set
444f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                 remains with the caller.  The incoming set is cloned by
445f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                 this function, so there are no restrictions on modifying
446f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                 or deleting the USet after calling this function.
447f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param status   The error code, set if this function encounters a problem.
448f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 4.2
449f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
450f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_STABLE void U_EXPORT2
451f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)uspoof_setAllowedChars(USpoofChecker *sc, const USet *chars, UErrorCode *status);
452f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
453f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
454f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
455f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Get a USet for the characters permitted in an identifier.
456f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * This corresponds to the limits imposed by the Set Allowed Characters
457f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * functions. Limitations imposed by other checks will not be
458f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * reflected in the set returned by this function.
459f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
460f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The returned set will be frozen, meaning that it cannot be modified
461f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * by the caller.
462f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
463f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Ownership of the returned set remains with the Spoof Detector.  The
464f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * returned set will become invalid if the spoof detector is closed,
465f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * or if a new set of allowed characters is specified.
466f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
467f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
468f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param sc       The USpoofChecker
469f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param status   The error code, set if this function encounters a problem.
470f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @return         A USet containing the characters that are permitted by
471f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                 the USPOOF_CHAR_LIMIT test.
472f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 4.2
473f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
474f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_STABLE const USet * U_EXPORT2
475f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)uspoof_getAllowedChars(const USpoofChecker *sc, UErrorCode *status);
476f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
477f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
478f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if U_SHOW_CPLUSPLUS_API
479f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
480f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Limit the acceptable characters to those specified by a Unicode Set.
481f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *   Any previously specified character limit is
482f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *   is replaced by the new settings.    This includes limits on
483f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *   characters that were set with the uspoof_setAllowedLocales() function.
484f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
485f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The USPOOF_CHAR_LIMIT test is automatically enabled for this
486f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * USoofChecker by this function.
487f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
488f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param sc       The USpoofChecker
489f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param chars    A Unicode Set containing the list of
490f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                 characters that are permitted.  Ownership of the set
491f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                 remains with the caller.  The incoming set is cloned by
492f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                 this function, so there are no restrictions on modifying
493f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                 or deleting the USet after calling this function.
494f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param status   The error code, set if this function encounters a problem.
495f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 4.2
496f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
497f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_STABLE void U_EXPORT2
498f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)uspoof_setAllowedUnicodeSet(USpoofChecker *sc, const UnicodeSet *chars, UErrorCode *status);
499f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
500f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
501f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
502f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Get a UnicodeSet for the characters permitted in an identifier.
503f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * This corresponds to the limits imposed by the Set Allowed Characters /
504f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * UnicodeSet functions. Limitations imposed by other checks will not be
505f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * reflected in the set returned by this function.
506f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
507f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The returned set will be frozen, meaning that it cannot be modified
508f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * by the caller.
509f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
510f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Ownership of the returned set remains with the Spoof Detector.  The
511f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * returned set will become invalid if the spoof detector is closed,
512f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * or if a new set of allowed characters is specified.
513f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
514f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
515f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param sc       The USpoofChecker
516f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param status   The error code, set if this function encounters a problem.
517f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @return         A UnicodeSet containing the characters that are permitted by
518f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                 the USPOOF_CHAR_LIMIT test.
519f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 4.2
520f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
521f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_STABLE const UnicodeSet * U_EXPORT2
522f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)uspoof_getAllowedUnicodeSet(const USpoofChecker *sc, UErrorCode *status);
523f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif
524f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
525f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
526f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
527f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Check the specified string for possible security issues.
528f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The text to be checked will typically be an identifier of some sort.
529f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The set of checks to be performed is specified with uspoof_setChecks().
530f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
531f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param sc      The USpoofChecker
532f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param text    The string to be checked for possible security issues,
533f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                in UTF-16 format.
534f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param length  the length of the string to be checked, expressed in
535f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                16 bit UTF-16 code units, or -1 if the string is
536f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                zero terminated.
537f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param position      An out parameter that receives the index of the
538f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                first string position that fails the allowed character
539f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                limitation checks.
540f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                This parameter may be null if the position information
541f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                is not needed.
542f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                If the string passes the requested checks the
543f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                parameter value will not be set.
544f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param status  The error code, set if an error occurred while attempting to
545f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                perform the check.
546f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                Spoofing or security issues detected with the input string are
547f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                not reported here, but through the function's return value.
548f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @return        An integer value with bits set for any potential security
549f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                or spoofing issues detected.  The bits are defined by
550f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                enum USpoofChecks.  Zero is returned if no issues
551f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                are found with the input string.
552f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 4.2
553f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
554f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_STABLE int32_t U_EXPORT2
555f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)uspoof_check(const USpoofChecker *sc,
556f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                         const UChar *text, int32_t length,
557f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                         int32_t *position,
558f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                         UErrorCode *status);
559f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
560f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
561f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
562f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Check the specified string for possible security issues.
563f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The text to be checked will typically be an identifier of some sort.
564f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The set of checks to be performed is specified with uspoof_setChecks().
565f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
566f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param sc      The USpoofChecker
567f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param text    A UTF-8 string to be checked for possible security issues.
568f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param length  the length of the string to be checked, or -1 if the string is
569f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                zero terminated.
570f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param position      An out parameter that receives the index of the
571f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                first string position that fails the allowed character
572f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                limitation checks.
573f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                This parameter may be null if the position information
574f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                is not needed.
575f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                If the string passes the requested checks the
576f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                parameter value will not be set.
577f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param status  The error code, set if an error occurred while attempting to
578f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                perform the check.
579f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                Spoofing or security issues detected with the input string are
580f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                not reported here, but through the function's return value.
581f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                If the input contains invalid UTF-8 sequences,
582f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                a status of U_INVALID_CHAR_FOUND will be returned.
583f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @return        An integer value with bits set for any potential security
584f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                or spoofing issues detected.  The bits are defined by
585f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                enum USpoofChecks.  Zero is returned if no issues
586f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                are found with the input string.
587f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 4.2
588f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
589f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_STABLE int32_t U_EXPORT2
590f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)uspoof_checkUTF8(const USpoofChecker *sc,
591f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                 const char *text, int32_t length,
592f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                 int32_t *position,
593f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                 UErrorCode *status);
594f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
595f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
596f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if U_SHOW_CPLUSPLUS_API
597f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
598f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Check the specified string for possible security issues.
599f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The text to be checked will typically be an identifier of some sort.
600f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The set of checks to be performed is specified with uspoof_setChecks().
601f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
602f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param sc      The USpoofChecker
603f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param text    A UnicodeString to be checked for possible security issues.
604f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @position      An out parameter that receives the index of the
605f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                first string position that fails the allowed character
606f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                limitation checks.
607f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                This parameter may be null if the position information
608f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                is not needed.
609f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                If the string passes the requested checks the
610f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                parameter value will not be set.
611f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param status  The error code, set if an error occurred while attempting to
612f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                perform the check.
613f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                Spoofing or security issues detected with the input string are
614f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                not reported here, but through the function's return value.
615f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
616f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @return        An integer value with bits set for any potential security
617f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                or spoofing issues detected.  The bits are defined by
618f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                enum USpoofChecks.  Zero is returned if no issues
619f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                are found with the input string.
620f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 4.2
621f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
622f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_STABLE int32_t U_EXPORT2
623f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)uspoof_checkUnicodeString(const USpoofChecker *sc,
624f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                          const U_NAMESPACE_QUALIFIER UnicodeString &text,
625f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                          int32_t *position,
626f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                          UErrorCode *status);
627f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
628f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif
629f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
630f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
631f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
632f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Check the whether two specified strings are visually confusable.
633f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The types of confusability to be tested - single script, mixed script,
634f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * or whole script - are determined by the check options set for the
635f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * USpoofChecker.
636f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
637f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The tests to be performed are controlled by the flags
638f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *   USPOOF_SINGLE_SCRIPT_CONFUSABLE
639f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *   USPOOF_MIXED_SCRIPT_CONFUSABLE
640f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *   USPOOF_WHOLE_SCRIPT_CONFUSABLE
641f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * At least one of these tests must be selected.
642f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
643f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * USPOOF_ANY_CASE is a modifier for the tests.  Select it if the identifiers
644f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *   may be of mixed case.
645f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * If identifiers are case folded for comparison and
646f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * display to the user, do not select the USPOOF_ANY_CASE option.
647f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
648f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
649f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param sc      The USpoofChecker
650f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param s1      The first of the two strings to be compared for
651f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                confusability.  The strings are in UTF-16 format.
652f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param length1 the length of the first string, expressed in
653f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                16 bit UTF-16 code units, or -1 if the string is
654f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                zero terminated.
655f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param s2      The second of the two strings to be compared for
656f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                confusability.  The strings are in UTF-16 format.
657f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param length2 The length of the second string, expressed in
658f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                16 bit UTF-16 code units, or -1 if the string is
659f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                zero terminated.
660f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param status  The error code, set if an error occurred while attempting to
661f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                perform the check.
662f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                Confusability of the strings is not reported here,
663f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                but through this function's return value.
664f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @return        An integer value with bit(s) set corresponding to
665f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                the type of confusability found, as defined by
666f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                enum USpoofChecks.  Zero is returned if the strings
667f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                are not confusable.
668f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 4.2
669f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
670f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_STABLE int32_t U_EXPORT2
671f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)uspoof_areConfusable(const USpoofChecker *sc,
672f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                     const UChar *s1, int32_t length1,
673f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                     const UChar *s2, int32_t length2,
674f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                     UErrorCode *status);
675f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
676f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
677f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
678f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
679f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Check the whether two specified strings are visually confusable.
680f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The types of confusability to be tested - single script, mixed script,
681f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * or whole script - are determined by the check options set for the
682f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * USpoofChecker.
683f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
684f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param sc      The USpoofChecker
685f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param s1      The first of the two strings to be compared for
686f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                confusability.  The strings are in UTF-8 format.
687f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param length1 the length of the first string, in bytes, or -1
688f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                if the string is zero terminated.
689f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param s2      The second of the two strings to be compared for
690f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                confusability.  The strings are in UTF-18 format.
691f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param length2 The length of the second string in bytes, or -1
692f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                if the string is zero terminated.
693f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param status  The error code, set if an error occurred while attempting to
694f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                perform the check.
695f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                Confusability of the strings is not reported here,
696f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                but through this function's return value.
697f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @return        An integer value with bit(s) set corresponding to
698f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                the type of confusability found, as defined by
699f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                enum USpoofChecks.  Zero is returned if the strings
700f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                are not confusable.
701f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 4.2
702f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
703f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_STABLE int32_t U_EXPORT2
704f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)uspoof_areConfusableUTF8(const USpoofChecker *sc,
705f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                         const char *s1, int32_t length1,
706f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                         const char *s2, int32_t length2,
707f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                         UErrorCode *status);
708f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
709f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
710f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
711f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
712f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if U_SHOW_CPLUSPLUS_API
713f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
714f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Check the whether two specified strings are visually confusable.
715f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The types of confusability to be tested - single script, mixed script,
716f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * or whole script - are determined by the check options set for the
717f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * USpoofChecker.
718f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
719f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param sc      The USpoofChecker
720f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param s1      The first of the two strings to be compared for
721f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                confusability.  The strings are in UTF-8 format.
722f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param s2      The second of the two strings to be compared for
723f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                confusability.  The strings are in UTF-18 format.
724f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param status  The error code, set if an error occurred while attempting to
725f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                perform the check.
726f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                Confusability of the strings is not reported here,
727f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                but through this function's return value.
728f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @return        An integer value with bit(s) set corresponding to
729f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                the type of confusability found, as defined by
730f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                enum USpoofChecks.  Zero is returned if the strings
731f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                are not confusable.
732f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 4.2
733f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
734f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_STABLE int32_t U_EXPORT2
735f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)uspoof_areConfusableUnicodeString(const USpoofChecker *sc,
736f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                                  const U_NAMESPACE_QUALIFIER UnicodeString &s1,
737f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                                  const U_NAMESPACE_QUALIFIER UnicodeString &s2,
738f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                                  UErrorCode *status);
739f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif
740f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
741f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
742f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
743f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *  Get the "skeleton" for an identifier string.
744f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *  Skeletons are a transformation of the input string;
745f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *  Two strings are confusable if their skeletons are identical.
746f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *  See Unicode UAX 39 for additional information.
747f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *
748f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *  Using skeletons directly makes it possible to quickly check
749f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *  whether an identifier is confusable with any of some large
750f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *  set of existing identifiers, by creating an efficiently
751f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *  searchable collection of the skeletons.
752f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *
753f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @param sc      The USpoofChecker
754f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @param type    The type of skeleton, corresponding to which
755f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                of the Unicode confusable data tables to use.
756f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                The default is Mixed-Script, Lowercase.
757f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                Allowed options are USPOOF_SINGLE_SCRIPT_CONFUSABLE and
758f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                USPOOF_ANY_CASE_CONFUSABLE.  The two flags may be ORed.
759f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @param s       The input string whose skeleton will be computed.
760f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @param length  The length of the input string, expressed in 16 bit
761f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                UTF-16 code units, or -1 if the string is zero terminated.
762f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @param dest    The output buffer, to receive the skeleton string.
763f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @param destCapacity  The length of the output buffer, in 16 bit units.
764f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                The destCapacity may be zero, in which case the function will
765f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                return the actual length of the skeleton.
766f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @param status  The error code, set if an error occurred while attempting to
767f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                perform the check.
768f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @return        The length of the skeleton string.  The returned length
769f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                is always that of the complete skeleton, even when the
770f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                supplied buffer is too small (or of zero length)
771f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *
772f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @stable ICU 4.2
773f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  */
774f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_STABLE int32_t U_EXPORT2
775f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)uspoof_getSkeleton(const USpoofChecker *sc,
776f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                   uint32_t type,
777f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                   const UChar *s,  int32_t length,
778f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                   UChar *dest, int32_t destCapacity,
779f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                   UErrorCode *status);
780f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
781f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
782f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *  Get the "skeleton" for an identifier string.
783f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *  Skeletons are a transformation of the input string;
784f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *  Two strings are confusable if their skeletons are identical.
785f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *  See Unicode UAX 39 for additional information.
786f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *
787f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *  Using skeletons directly makes it possible to quickly check
788f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *  whether an identifier is confusable with any of some large
789f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *  set of existing identifiers, by creating an efficiently
790f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *  searchable collection of the skeletons.
791f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *
792f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @param sc      The USpoofChecker
793f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @param type    The type of skeleton, corresponding to which
794f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                of the Unicode confusable data tables to use.
795f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                The default is Mixed-Script, Lowercase.
796f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                Allowed options are USPOOF_SINGLE_SCRIPT_CONFUSABLE and
797f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                USPOOF_ANY_CASE.  The two flags may be ORed.
798f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @param s       The UTF-8 format input string whose skeleton will be computed.
799f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @param length  The length of the input string, in bytes,
800f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                or -1 if the string is zero terminated.
801f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @param dest    The output buffer, to receive the skeleton string.
802f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @param destCapacity  The length of the output buffer, in bytes.
803f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                The destCapacity may be zero, in which case the function will
804f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                return the actual length of the skeleton.
805f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @param status  The error code, set if an error occurred while attempting to
806f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                perform the check.  Possible Errors include U_INVALID_CHAR_FOUND
807f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                   for invalid UTF-8 sequences, and
808f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                   U_BUFFER_OVERFLOW_ERROR if the destination buffer is too small
809f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                   to hold the complete skeleton.
810f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @return        The length of the skeleton string, in bytes.  The returned length
811f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                is always that of the complete skeleton, even when the
812f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                supplied buffer is too small (or of zero length)
813f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *
814f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @stable ICU 4.2
815f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  */
816f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_STABLE int32_t U_EXPORT2
817f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)uspoof_getSkeletonUTF8(const USpoofChecker *sc,
818f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                       uint32_t type,
819f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                       const char *s,  int32_t length,
820f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                       char *dest, int32_t destCapacity,
821f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                       UErrorCode *status);
822f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
823f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if U_SHOW_CPLUSPLUS_API
824f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
825f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *  Get the "skeleton" for an identifier string.
826f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *  Skeletons are a transformation of the input string;
827f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *  Two strings are confusable if their skeletons are identical.
828f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *  See Unicode UAX 39 for additional information.
829f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *
830f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *  Using skeletons directly makes it possible to quickly check
831f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *  whether an identifier is confusable with any of some large
832f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *  set of existing identifiers, by creating an efficiently
833f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *  searchable collection of the skeletons.
834f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *
835f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @param sc      The USpoofChecker.
836f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @param type    The type of skeleton, corresponding to which
837f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                of the Unicode confusable data tables to use.
838f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                The default is Mixed-Script, Lowercase.
839f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                Allowed options are USPOOF_SINGLE_SCRIPT_CONFUSABLE and
840f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                USPOOF_ANY_CASE_CONFUSABLE.  The two flags may be ORed.
841f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @param s       The input string whose skeleton will be computed.
842f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @param dest    The output string, to receive the skeleton string.
843f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @param destCapacity  The length of the output buffer, in bytes.
844f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                The destCapacity may be zero, in which case the function will
845f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                return the actual length of the skeleton.
846f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @param status  The error code, set if an error occurred while attempting to
847f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *                perform the check.
848f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @return        A reference to the destination (skeleton) string.
849f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  *
850f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  * @stable ICU 4.2
851f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)  */
852f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_STABLE UnicodeString & U_EXPORT2
853f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)uspoof_getSkeletonUnicodeString(const USpoofChecker *sc,
854f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                                uint32_t type,
855f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                                const UnicodeString &s,
856f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                                UnicodeString &dest,
857f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                                UErrorCode *status);
858f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif   /* U_SHOW_CPLUSPLUS_API */
859f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
860f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
861f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**
862f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Serialize the data for a spoof detector into a chunk of memory.
863f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The flattened spoof detection tables can later be used to efficiently
864f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * instantiate a new Spoof Detector.
865f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
866f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param sc   the Spoof Detector whose data is to be serialized.
867f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param data a pointer to 32-bit-aligned memory to be filled with the data,
868f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *             can be NULL if capacity==0
869f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param capacity the number of bytes available at data,
870f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *                 or 0 for preflighting
871f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @param status an in/out ICU UErrorCode; possible errors include:
872f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * - U_BUFFER_OVERFLOW_ERROR if the data storage block is too small for serialization
873f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * - U_ILLEGAL_ARGUMENT_ERROR  the data or capacity parameters are bad
874f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @return the number of bytes written or needed for the spoof data
875f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *
876f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @see utrie2_openFromSerialized()
877f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @stable ICU 4.2
878f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */
879f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)U_STABLE int32_t U_EXPORT2
880f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)uspoof_serialize(USpoofChecker *sc,
881f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                 void *data, int32_t capacity,
882f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)                 UErrorCode *status);
883f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
884f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
885f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif
886f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)
887f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif   /* USPOOF_H */
888