Net::LibIDN2

Raku bindings for GNU LibIDN2

NAME

Net::LibIDN2 - Raku bindings for GNU LibIDN2

SYNOPSIS

    use Net::LibIDN2;

    my $idn = Net::LibIDN2.new;

    my Int $code;
    my $ulabel = "m\xFC\xDFli";
    my $alabel = $idn.lookup_u8($ulabel, IDN2_NFC_INPUT, $code);
    say "$alabel $code"; # xn--mli-5ka8l 0

    my $result = $idn.register_u8($ulabel, $alabel, IDN2_NFC_INPUT, $code);
    say "$result $code"; # xn--mli-5ka8l 0
    say $idn.strerror($code);      # success
    say $idn.strerror_name($code); # IDN2_OK

DESCRIPTION

Net::LibIDN2 is a Raku wrapper for the GNU LibIDN2 library.

Using this module requires a native LibIDN2 dependency. Here's how to install it for your OS:

  • Windows

Clone https://gitlab.com/libidn/libidn2 and follow the install instructions in the README. Don't forget to add the path to the installed LibIDN2 to your PATH environment variable!

  • OS X

    $ brew install libidn2

  • Ubuntu/Debian

    $ sudo apt-get install libidn2

  • OpenSUSE

    $ sudo zypper install libidn2

  • Fedora

    $ sudo yum install libidn2

  • Arch/Manjaro

    $ sudo pacman -S libidn2

  • FreeBSD

    pkg install libidn2

or

# cd /usr/ports/devel/libidn2
# make config
# make
# make install
  • OpenBSD

    $ doas pkg_add libidn2

or

$ cd /usr/ports/devel/libidn2
$ doas make
$ doas make install
  • NetBSD

    pkgin install libidn2

or

# cd /usr/pkgsrc/devel/libidn2
# make
# make install

METHODS

  • Net::LibIDN2.check_version(--> Version)

  • Net::LibIDN2.check_version(Str $version --> Version)

  • Net::LibIDN2.check_version(Version $version --> Version)

Compares $version against the version of LibIDN2 installed and returns either an empty string if $version is greater than the version installed, or IDN2_VERSION otherwise.

  • Net::LibIDN2.strerror(Int $errno --> Str)

Returns the error represented by $errno in human readable form.

  • Net::LibIDN2.strerror_name(Int $errno --> Str)

Returns the internal error name of $errno.

  • Net::LibIDN2.to_ascii_8z(Str $input --> Str)

  • Net::LibIDN2.to_ascii_8z(Str flags --> Str)

  • Net::LibIDN2.to_ascii_8z(Str flags, Int $code is rw --> Str)

Converts a UTF8 encoded string $input to ASCII and returns the output. $code, if provided, is assigned to IDN2_OK on success, or another error code otherwise. Requires LibIDN2 v2.0.0 or greater.

  • Net::LibIDN2.to_unicode_8z8z(Str $input --> Str)

  • Net::LibIDN2.to_unicode_8z8z(Str flags --> Str)

  • Net::LibIDN2.to_unicode_8z8z(Str flags, Int $code is rw --> Str)

Converts an ACE encoded domain name $input to UTF8 and returns the output. $code, if provided, is assigned to IDN2_OK on success, or another error code otherwise. Requires LibIDN v2.0.0 or greater.

  • Net::LibIDN2.lookup_u8(Str $input --> Str)

  • Net::LibIDN2.lookup_u8(Str flags --> Str)

  • Net::LibIDN2.lookup_u8(Str flags, Int $code is rw --> Str)

Performs an IDNA2008 lookup string conversion on $input. See RFC 5891, section 5. $input must be a UTF8 encoded string in NFC form if no IDN2_NFC_INPUT flag is passed.

  • Net::LibIDN2.register_u8(Str ainput --> Str)

  • Net::LibIDN2.register_u8(Str ainput, Int $flags --> Str)

  • Net::LibIDN2.register_u8(Str ainput, Int code is rw --> Str)

Performs an IDNA2008 register string conversion on $uinput and $ainput. See RFC 5891, section 4. $uinput must be a UTF8 encoded string in NFC form if no IDN2_NFC_INPUT flag is passed. $ainput must be an ACE encoded string.

CONSTANTS

  • Int IDN2_LABEL_MAX_LENGTH

The maximum label length.

  • Int IDN2_DOMAIN_MAX_LENGTH

The maximum domain name length.

VERSIONING

  • Str IDN2_VERSION

The version of LibIDN2 installed.

  • Int IDN2_VERSION_NUMBER

The version of LibIDN2 installed represented as a 32 bit integer. The first pair of bits represents the major version, the second represents the minor version, and the last 4 represent the patch version.

  • Int IDN2_VERSION_MAJOR

The major version of LibIDN2 installed.

  • Int IDN2_VERSION_MINOR

The minor version of LidIDN2 installed.

  • Int IDN2_VERSION_PATCH

The patch version of LibIDN2 installed.

FLAGS

  • Int IDN2_NFC_INPUT

Normalize the input string using the NFC format.

  • Int IDN2_ALABEL_ROUNDTRIP

Perform optional IDNA2008 lookup roundtrip check.

  • Int IDN2_TRANSITIONAL

Perform Unicode TR46 transitional processing.

  • Int IDN2_NONTRANSITIONAL

Perform Unicode TR46 non-transitional processing.

ERRORS

  • Int IDN2_OK

Success.

  • Int IDN2_MALLOC

Memory allocation failure.

  • Int IDN2_NO_CODESET

Failed to determine a string's encoding.

  • Int IDN2_ICONV_FAIL

Failed to transcode a string to UTF8.

  • Int IDN2_ENCODING_ERROR

Unicode data encoding error.

  • Int IDN2_NFC

Failed to normalize a string.

  • Int IDN2_PUNYCODE_BAD_INPUT

Invalid input to Punycode.

  • Int IDN2_PUNYCODE_BIG_OUTPUT

Punycode output buffer is too small.

  • Int IDN2_PUNYCODE_OVERFLOW

Punycode conversion would overflow.

  • Int IDN2_TOO_BIG_DOMAIN

Domain is larger than IDN2_DOMAIN_MAX_LENGTH.

  • Int IDN2_TOO_BIG_LABEL

Label is larger than IDN2_LABEL_MAX_LENGTH.

  • Int IDN2_INVALID_ALABEL

Invalid A-label.

  • Int IDN2_UALABEL_MISMATCH

Given U-label and A-label do not match.

  • Int IDN2_INVALID_FLAGS

Invalid combination of flags.

  • Int IDN2_NOT_NFC

String is not normalized in NFC format.

  • Int IDN2_2HYPHEN

String has forbidden two hyphens.

  • Int IDN2_HYPHEN_STARTEND

String has forbidden start/end hyphen.

  • Int IDN2_LEADING_COMBINING

String has forbidden leading combining character.

  • Int IDN2_DISALLOWED

String has disallowed character.

  • Int IDN2_CONTEXTJ

String has forbidden context-j character.

  • Int IDN2_CONTEXTJ_NO_RULE

String has context-j character without any rull.

  • Int IDN2_CONTEXTO

String has forbidden context-o character.

  • Int IDN2_CONTEXTO_NO_RULE

String has context-o character without any rull.

  • Int IDN2_UNASSIGNED

String has forbidden unassigned character.

  • Int IDN2_BIDI

String has forbidden bi-directional properties.

  • Int IDN2_DOT_IN_LABEL

Label has forbidden dot (TR46).

  • Int IDN2_INVALID_TRANSITIONAL

Label has a character forbidden in transitional mode (TR46).

  • Int IDN2_INVALID_NONTRANSITIONAL

Label has a character forbidden in non-transitional mode (TR46).

AUTHOR

Ben Davies (kaiepi)

COPYRIGHT AND LICENSE

Copyright 2017 Ben Davies

This library is free software; you can redistribute it and/or modify it under the Artistic License 2.0.

Net::LibIDN2 v0.1.1

Raku bindings for GNU LibIDN2

Authors

  • Ben Davies

License

Artistic-2.0

Dependencies

Test Dependencies

Provides

  • Net::LibIDN2

Documentation

The Camelia image is copyright 2009 by Larry Wall. "Raku" is trademark of the Yet Another Society. All rights reserved.