# libidn lib "idn"; # IDNA errors const int \IDNA_SUCCESS = 0; const int \IDNA_STRINGPREP_ERROR = 1; const int \IDNA_PUNYCODE_ERROR = 2; const int \IDNA_CONTAINS_NON_LDH = 3; const int \IDNA_CONTAINS_LDH = 3; const int \IDNA_CONTAINS_MINUS = 4; const int \IDNA_INVALID_LENGTH = 5; const int \IDNA_NO_ACE_PREFIX = 6; const int \IDNA_ROUNDTRIP_VERIFY_ERROR = 7; const int \IDNA_CONTAINS_ACE_PREFIX = 8; const int \IDNA_ICONV_ERROR = 9; const int \IDNA_MALLOC_ERROR = 201; const int \IDNA_DLOPEN_ERROR = 202; # IDNA flags const int \IDNA_ALLOW_UNASSIGNED = 1; const int \IDNA_USE_STD3_ASCII_RULES = 2; default int idna_to_ascii_8z(char *host, char **buffer, int flags); function idn\utf8_to_ascii(string $host, string &$result, int $flags = 0) : int { let buffer = &NULL; let host = strval($host); let flags = intval($flags); set $result = to_string(*buffer); return to_int(idna_to_ascii_8z); free free(buffer); } default char *idna_strerror(int rc); function idn\strerror(int $rc) : string { return to_string(idna_strerror); let rc = intval($rc); }