1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
// Copyright 2016 The rust-url developers. // Copyright 2017 The UNIC Project Developers. // // See the COPYRIGHT file at the top-level directory of this distribution. // // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your // option. This file may not be copied, modified, or distributed // except according to those terms. #![warn( bad_style, missing_debug_implementations, missing_docs, unconditional_recursion )] #![forbid(unsafe_code)] //! # UNIC — Unicode IDNA Compatibility Processing //! //! A component of [`unic`: Unicode and Internationalization Crates for Rust](/unic/). //! //! This UNIC component implements algorithms from [Unicode Technical Standard #46 - Unicode IDNA //! Compatibility Processing](http://unicode.org/reports/tr46/). //! //! Quoting from [UTS #46’s introduction](https://www.unicode.org/reports/tr46/#Introduction): //! //! > Initially, domain names were restricted to ASCII characters. //! > A system was introduced in 2003 for internationalized domain names (IDN). //! > This system is called Internationalizing Domain Names for Applications, //! > or *IDNA2003* for short. //! > This mechanism supports IDNs by means of a client software transformation //! > into a format known as Punycode. //! > //! > A revision of IDNA was approved in 2010 (*IDNA2008*). //! > This revision has a number of incompatibilities with IDNA2003. //! > //! > The incompatibilities force implementers of client software, //! > such as browsers and emailers, //! > to face difficult choices during the transition period //! > as registries shift from IDNA2003 to IDNA2008. //! > This document specifies a mechanism //! > that minimizes the impact of this transition for client software, //! > allowing client software to access domains that are valid under either system. #[macro_use] extern crate matches; use unic_idna_mapping as mapping; use unic_idna_punycode as punycode; mod pkg_info; pub use crate::pkg_info::{PKG_DESCRIPTION, PKG_NAME, PKG_VERSION}; pub use crate::mapping::UNICODE_VERSION; mod process; pub use crate::process::PUNYCODE_PREFIX; pub use crate::process::{to_ascii, to_unicode}; pub use crate::process::{Errors, Flags};