## pr29 pr29 |

## Synopsis

    #define             IDNAPI
    enum                Pr29_rc;
    int                 pr29_4                              (const uint32_t *in,
                                                             size_t len);
    int                 pr29_4z                             (const uint32_t *in);
    int                 pr29_8z                             (const char *in);
    const char *        pr29_strerror                       (Pr29_rc rc);

## Description

## Details

### IDNAPI

    #define             IDNAPI

### enum Pr29_rc

    typedef enum {
        PR29_SUCCESS = 0,
        PR29_PROBLEM = 1,		/* String is a problem sequence. */
        PR29_STRINGPREP_ERROR = 2 /* Charset conversion failed (p29_8*). */
    } Pr29_rc;

Enumerated return codes for `pr29_4()`, `pr29_4z()`, `pr29_8z()`. The value 0 is guaranteed to always correspond to success.

`PR29_SUCCESS` | Successful operation. This value is guaranteed to always be zero, the remaining ones are only guaranteed to hold non-zero values, for logical comparison purposes.
`PR29_PROBLEM` | A problem sequence was encountered.
`PR29_STRINGPREP_ERROR` | The character set conversion failed (only for `pr29_8z()`).

### pr29_4 ()

    int                 pr29_4                              (const uint32_t *in,
                                                             size_t len);

Check the input to see if it may be normalized into different strings by different NFKC implementations, due to an anomaly in the NFKC specifications.

`in` : | input array with unicode code points.
`len` : | length of input array with unicode code points.
Returns : | Returns the Pr29_rc value `PR29_SUCCESS` on success, and `PR29_PROBLEM` if the input sequence is a "problem sequence" (i.e., may be normalized into different strings by different implementations).

### pr29_4z ()

    int                 pr29_4z                             (const uint32_t *in);

Check the input to see if it may be normalized into different strings by different NFKC implementations, due to an anomaly in the NFKC specifications.

`in` : | zero terminated array of Unicode code points.
Returns : | Returns the Pr29_rc value `PR29_SUCCESS` on success, and `PR29_PROBLEM` if the input sequence is a "problem sequence" (i.e., may be normalized into different strings by different implementations).

### pr29_8z ()

    int                 pr29_8z                             (const char *in);

Check the input to see if it may be normalized into different strings by different NFKC implementations, due to an anomaly in the NFKC specifications.

`in` : | zero terminated input UTF-8 string.
Returns : | Returns the Pr29_rc value `PR29_SUCCESS` on success, and `PR29_PROBLEM` if the input sequence is a "problem sequence" (i.e., may be normalized into different strings by different implementations), or `PR29_STRINGPREP_ERROR` if there was a problem converting the string from UTF-8 to UCS-4.

### pr29_strerror ()

    const char *        pr29_strerror                       (Pr29_rc rc);

Convert a return code integer to a text string. This string can be used to output a diagnostic message to the user.

PR29_SUCCESS: Successful operation. This value is guaranteed to always be zero, the remaining ones are only guaranteed to hold non-zero values, for logical comparison purposes. PR29_PROBLEM: A problem sequence was encountered. PR29_STRINGPREP_ERROR: The character set conversion failed (only for `pr29_8z()`).

`rc` : | an Pr29_rc return code.
Returns : | Returns a pointer to a statically allocated string containing a description of the error with the return code `rc`.