summaryrefslogtreecommitdiffstats
path: root/vendor/unic-langid
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
commit698f8c2f01ea549d77d7dc3338a12e04c11057b9 (patch)
tree173a775858bd501c378080a10dca74132f05bc50 /vendor/unic-langid
parentInitial commit. (diff)
downloadrustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.tar.xz
rustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.zip
Adding upstream version 1.64.0+dfsg1.upstream/1.64.0+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/unic-langid')
-rw-r--r--vendor/unic-langid/.cargo-checksum.json1
-rw-r--r--vendor/unic-langid/Cargo.toml37
-rw-r--r--vendor/unic-langid/README.md70
-rw-r--r--vendor/unic-langid/src/lib.rs123
4 files changed, 231 insertions, 0 deletions
diff --git a/vendor/unic-langid/.cargo-checksum.json b/vendor/unic-langid/.cargo-checksum.json
new file mode 100644
index 000000000..67ac5998f
--- /dev/null
+++ b/vendor/unic-langid/.cargo-checksum.json
@@ -0,0 +1 @@
+{"files":{"Cargo.toml":"927c0bc2dea454aab20d550b4ab728ee5c3803ac12f95a89f518b8a56633e941","README.md":"f68b87b732b8a0d7fe6bc3b4ff5989207e87bd51f98220136ced4cd65f814f7c","src/lib.rs":"4f5812d6d76581105e85b09227f91544bc0f32b77ccda470953865b70fa74f53"},"package":"73328fcd730a030bdb19ddf23e192187a6b01cd98be6d3140622a89129459ce5"} \ No newline at end of file
diff --git a/vendor/unic-langid/Cargo.toml b/vendor/unic-langid/Cargo.toml
new file mode 100644
index 000000000..2a07c71aa
--- /dev/null
+++ b/vendor/unic-langid/Cargo.toml
@@ -0,0 +1,37 @@
+# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
+#
+# When uploading crates to the registry Cargo will automatically
+# "normalize" Cargo.toml files for maximal compatibility
+# with all versions of Cargo and also rewrite `path` dependencies
+# to registry (e.g., crates.io) dependencies
+#
+# If you believe there's an error in this file please file an
+# issue against the rust-lang/cargo repository. If you're
+# editing this file be aware that the upstream Cargo.toml
+# will likely look very different (and much more reasonable)
+
+[package]
+edition = "2018"
+name = "unic-langid"
+version = "0.9.0"
+authors = ["Zibi Braniecki <gandalf@mozilla.com>"]
+include = ["src/**/*", "benches/*.rs", "Cargo.toml", "README.md"]
+description = "API for managing Unicode Language Identifiers"
+readme = "README.md"
+categories = ["internationalization"]
+license = "MIT/Apache-2.0"
+repository = "https://github.com/zbraniecki/unic-locale"
+[dependencies.unic-langid-impl]
+version = "0.9"
+
+[dependencies.unic-langid-macros]
+version = "0.9"
+optional = true
+[dev-dependencies.unic-langid-macros]
+version = "0.9"
+
+[features]
+default = []
+likelysubtags = ["unic-langid-impl/likelysubtags"]
+macros = ["unic-langid-macros"]
+serde = ["unic-langid-impl/serde"]
diff --git a/vendor/unic-langid/README.md b/vendor/unic-langid/README.md
new file mode 100644
index 000000000..4ec1f3195
--- /dev/null
+++ b/vendor/unic-langid/README.md
@@ -0,0 +1,70 @@
+# unic-langid [![Build Status](https://travis-ci.org/zbraniecki/unic-locale.svg?branch=master)](https://travis-ci.org/zbraniecki/unic-locale) [![Coverage Status](https://coveralls.io/repos/github/zbraniecki/unic-locale/badge.svg?branch=master)](https://coveralls.io/github/zbraniecki/unic-locale?branch=master)
+
+`unic-langid` is an API for managing [Unicode Language Identifiers](http://unicode.org/reports/tr35/#Unicode_language_identifier).
+
+The crate provides a way to create a struct from a string, manipulate its fields, canonicalize it, and serialize into a string.
+
+Usage
+-----
+
+```rust
+use unic_langid::LanguageIdentifier;
+
+let loc: LanguageIdentifier = "en-US".parse().expect("Parsing failed.");
+
+assert_eq!(loc.language(), "en");
+assert_eq!(loc.script(), None);
+assert_eq!(loc.region(), Some("US"));
+
+loc.set_script(Some("latn"));
+
+assert_eq!(&loc.to_string(), "en-Latn-US");
+```
+
+```rust
+use unic_langid::LanguageIdentifier;
+
+let langid = LanguageIdentifier::from_parts(
+ Some("en"),
+ None,
+ None,
+ Some(&["nedis", "macos"])
+).expect("Parsing failed.");
+
+assert_eq!(&langid.to_string(), "en-macos-nedis")
+```
+
+Macros
+------
+
+`unic-langid` can be also compiled with `features = ["macros"]` which enables `langid!` macro:
+
+```rust
+use unic_langid::langid;
+
+// The `const` assignment will currently work only
+// if the langid doesn't contain any variants.
+const EN_US: LanguageIdentifier = langid!("en-US");
+
+fn main() {
+ let de_at = langid!("de-AT");
+
+ assert_eq!(&de_at.to_string(), "de-AT")
+ assert_eq!(&EN_US.to_string(), "en-US")
+}
+```
+
+The macro allows for compile-time parsing and validation of literal language identifiers.
+
+Status
+------
+
+The crate is mostly complete on the `well-formed` level. The next batch of work will go into
+API maturity.
+
+Get Involved
+------------
+
+`unic-langid` is open-source, licensed under the Apache License, Version 2.0. We
+encourage everyone to take a look at our code and we'll listen to your
+feedback.
diff --git a/vendor/unic-langid/src/lib.rs b/vendor/unic-langid/src/lib.rs
new file mode 100644
index 000000000..8da1c8450
--- /dev/null
+++ b/vendor/unic-langid/src/lib.rs
@@ -0,0 +1,123 @@
+//! `unic-langid` is a core API for parsing, manipulating, and serializing Unicode Language
+//! Identifiers.
+//!
+//! The crate provides algorithms for parsing a string into a well-formed language identifier
+//! as defined by [`UTS #35: Unicode LDML 3.1 Unicode Language Identifier`].
+//!
+//! # Examples
+//!
+//! ```
+//! use unic_langid::LanguageIdentifier;
+//! use unic_langid::subtags::{Language, Script, Region};
+//!
+//! let mut li: LanguageIdentifier = "en-US".parse()
+//! .expect("Parsing failed.");
+//!
+//! let lang: Language = "en".parse().expect("Parsing failed.");
+//! let region: Region = "US".parse().expect("Parsing failed.");
+//! assert_eq!(li.language, lang);
+//! assert_eq!(li.script, None);
+//! assert_eq!(li.region, Some(region));
+//! assert_eq!(li.variants().len(), 0);
+//!
+//! let region: Region = "GB".parse().expect("Parsing failed.");
+//! li.region = Some(region);
+//!
+//! assert_eq!(li.to_string(), "en-GB");
+//! ```
+//!
+//! For more details, see [`LanguageIdentifier`].
+//!
+//! # Optional features
+//!
+//! ## `langid!` and `langids!` macros
+//!
+//! If `feature = "macros"` is selected, the crate provides a procedural macro
+//! which allows to construct build-time well-formed language identifiers with zero-cost at runtime.
+//!
+//! ``` ignore
+//! use unic_langid::{langid, langids, lang, region, script, variant};
+//! use unic_langid::subtags::{Language, Script, Region, Variant};
+//! use std::str::FromStr;
+//!
+//! let es_ar = langid!("es-AR");
+//! let en_us = langid!("en-US");
+//!
+//! assert_eq!(&es_ar.to_string(), "es-AR");
+//! assert_eq!(&en_us.to_string(), "en-US");
+//!
+//! let lang_ids = langids!("es-AR", "en-US", "de");
+//!
+//! assert_eq!(lang_ids[0], "es-AR");
+//! assert_eq!(lang_ids[1], "en-US");
+//! assert_eq!(lang_ids[2], "de");
+//!
+//! assert_eq!(lang!("pl"), "pl");
+//! assert_eq!(lang!("pl"), Language::from_str("pl").unwrap());
+//!
+//! assert_eq!(script!("latn"), "Latn");
+//! assert_eq!(script!("latn"), Script::from_str("Latn").unwrap());
+//!
+//! assert_eq!(region!("us"), "US");
+//! assert_eq!(region!("us"), Region::from_str("us").unwrap());
+//!
+//! assert_eq!(variant!("macos"), "macos");
+//! assert_eq!(variant!("macos"), Variant::from_str("macos").unwrap());
+//! ```
+//!
+//! The macros produce instances of `LanguageIdentifier` the same way as parsing from `&str` does,
+//! but since the parsing is performed at build time, it doesn't need a `Result`.
+//!
+//! At the moment `langid!` can also be used for const variables, but only if no variants are used.
+//!
+//! The macros are optional to reduce the dependency chain and compilation time of `unic-langid`.
+//!
+//! ## Likely Subtags
+//!
+//! If `feature = "likelysubtags"` is selected, the `LanguageIdentifier` gains two more methods:
+//!
+//! * add_likely_subtags
+//! * remove_likely_subtags
+//!
+//! Both of them operate in place updating the existing `LanguageIdentifier` by either extending
+//! subtags to most likely values, or removing the subtags that are not needed.
+//!
+//! Both methods return a `bool` that indicates if the identifier has been modified.
+//!
+//! ``` ignore
+//! use unic_langid::LanuageIdentifier;
+//!
+//! let mut li: LanguageIdentifier = "fr-FR".parse()
+//! .expect("Parsing failed.");
+//!
+//! assert_eq!(li.add_likely_subtags(), true);
+//! assert_eq!(li, "fr-Latn-FR");
+//!
+//! assert_eq!(li.remove_likely_subtags(), true);
+//! assert_eq!(li, "fr");
+//! ```
+//!
+//! The feature is optional because it increases the binary size of the library by including
+//! a data table for CLDR likelySubtags.
+//!
+//! [`UTS #35: Unicode LDML 3.1 Unicode Language Identifier`]: https://unicode.org/reports/tr35/tr35.html#Unicode_language_identifier
+//! [`LanguageIdentifier`]: ./struct.LanguageIdentifier.html
+
+pub use unic_langid_impl::*;
+
+#[cfg(feature = "unic-langid-macros")]
+pub use unic_langid_macros::{lang, langid, region, script, variant};
+
+#[cfg(feature = "unic-langid-macros")]
+#[macro_export]
+macro_rules! langids {
+ ( $($langid:expr),* ) => {
+ {
+ let mut v = vec![];
+ $(
+ v.push(langid!($langid));
+ )*
+ v
+ }
+ };
+}