[librsvg: 12/23] Move LanguageTags to the accept_language module
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 12/23] Move LanguageTags to the accept_language module
- Date: Mon, 24 May 2021 17:47:31 +0000 (UTC)
commit 722968aa722b16118d69fcc6a4b39ee37aa2d044
Author: Federico Mena Quintero <federico gnome org>
Date: Thu May 20 13:23:20 2021 -0500
Move LanguageTags to the accept_language module
src/accept_language.rs | 69 +++++++++++++++++++++++++++++++++++++++++++++++---
src/cond.rs | 58 ++----------------------------------------
src/drawing_ctx.rs | 2 +-
src/element.rs | 3 ++-
4 files changed, 71 insertions(+), 61 deletions(-)
---
diff --git a/src/accept_language.rs b/src/accept_language.rs
index 9d4626bd..4be8ace2 100644
--- a/src/accept_language.rs
+++ b/src/accept_language.rs
@@ -1,6 +1,7 @@
//! Parser for an Accept-Language HTTP header.
use language_tags::{LanguageTag, ParseError};
+use locale_config::{LanguageRange, Locale};
use std::str::FromStr;
@@ -76,7 +77,8 @@ impl Item {
(s, None)
};
- let tag = LanguageTag::parse(before_semicolon).map_err(AcceptLanguageError::InvalidLanguageTag)?;
+ let tag = LanguageTag::parse(before_semicolon)
+ .map_err(AcceptLanguageError::InvalidLanguageTag)?;
let weight;
@@ -122,6 +124,61 @@ impl Item {
}
}
+/// A list of BCP47 language tags.
+///
+/// https://www.rfc-editor.org/info/rfc5664
+#[derive(Debug, Clone, PartialEq)]
+pub struct LanguageTags(Vec<LanguageTag>);
+
+impl LanguageTags {
+ pub fn empty() -> Self {
+ LanguageTags(Vec::new())
+ }
+
+ /// Converts a `Locale` to a set of language tags.
+ pub fn from_locale(locale: &Locale) -> Result<LanguageTags, String> {
+ let mut tags = Vec::new();
+
+ for locale_range in locale.tags_for("messages") {
+ if locale_range == LanguageRange::invariant() {
+ continue;
+ }
+
+ let str_locale_range = locale_range.as_ref();
+
+ let locale_tag = LanguageTag::from_str(str_locale_range).map_err(|e| {
+ format!(
+ "invalid language tag \"{}\" in locale: {}",
+ str_locale_range, e
+ )
+ })?;
+
+ if !locale_tag.is_language_range() {
+ return Err(format!(
+ "language tag \"{}\" is not a language range",
+ locale_tag
+ ));
+ }
+
+ tags.push(locale_tag);
+ }
+
+ Ok(LanguageTags(tags))
+ }
+
+ pub fn from(tags: Vec<LanguageTag>) -> LanguageTags {
+ LanguageTags(tags)
+ }
+
+ pub fn iter(&self) -> impl Iterator<Item = &LanguageTag> {
+ self.0.iter()
+ }
+
+ pub fn any_matches(&self, language_tag: &LanguageTag) -> bool {
+ self.0.iter().any(|tag| tag.matches(language_tag))
+ }
+}
+
#[cfg(test)]
mod tests {
use super::*;
@@ -263,9 +320,15 @@ mod tests {
#[test]
fn empty_lists() {
- assert!(matches!(AcceptLanguage::parse(""), Err(AcceptLanguageError::NoElements)));
+ assert!(matches!(
+ AcceptLanguage::parse(""),
+ Err(AcceptLanguageError::NoElements)
+ ));
- assert!(matches!(AcceptLanguage::parse(","), Err(AcceptLanguageError::NoElements)));
+ assert!(matches!(
+ AcceptLanguage::parse(","),
+ Err(AcceptLanguageError::NoElements)
+ ));
assert!(matches!(
AcceptLanguage::parse(", , ,,,"),
diff --git a/src/cond.rs b/src/cond.rs
index e24d28d0..1751657f 100644
--- a/src/cond.rs
+++ b/src/cond.rs
@@ -6,8 +6,8 @@ use std::ascii::AsciiExt;
use std::str::FromStr;
use language_tags::LanguageTag;
-use locale_config::{LanguageRange, Locale};
+use crate::accept_language::LanguageTags;
use crate::error::*;
// No extensions at the moment.
@@ -77,61 +77,6 @@ impl RequiredFeatures {
}
}
-/// A list of BCP47 language tags.
-///
-/// https://www.rfc-editor.org/info/rfc5664
-#[derive(Debug, Clone, PartialEq)]
-pub struct LanguageTags(Vec<LanguageTag>);
-
-impl LanguageTags {
- pub fn empty() -> Self {
- LanguageTags(Vec::new())
- }
-
- /// Converts a `Locale` to a set of language tags.
- pub fn from_locale(locale: &Locale) -> Result<LanguageTags, String> {
- let mut tags = Vec::new();
-
- for locale_range in locale.tags_for("messages") {
- if locale_range == LanguageRange::invariant() {
- continue;
- }
-
- let str_locale_range = locale_range.as_ref();
-
- let locale_tag = LanguageTag::from_str(str_locale_range).map_err(|e| {
- format!(
- "invalid language tag \"{}\" in locale: {}",
- str_locale_range, e
- )
- })?;
-
- if !locale_tag.is_language_range() {
- return Err(format!(
- "language tag \"{}\" is not a language range",
- locale_tag
- ));
- }
-
- tags.push(locale_tag);
- }
-
- Ok(LanguageTags(tags))
- }
-
- pub fn from(tags: Vec<LanguageTag>) -> LanguageTags {
- LanguageTags(tags)
- }
-
- pub fn iter(&self) -> impl Iterator<Item = &LanguageTag> {
- self.0.iter()
- }
-
- fn any_matches(&self, language_tag: &LanguageTag) -> bool {
- self.0.iter().any(|tag| tag.matches(language_tag))
- }
-}
-
#[derive(Debug, PartialEq)]
pub struct SystemLanguage(LanguageTags);
@@ -174,6 +119,7 @@ impl SystemLanguage {
#[cfg(test)]
mod tests {
use super::*;
+ use locale_config::Locale;
#[test]
fn required_extensions() {
diff --git a/src/drawing_ctx.rs b/src/drawing_ctx.rs
index c041a7d5..42df5fa2 100644
--- a/src/drawing_ctx.rs
+++ b/src/drawing_ctx.rs
@@ -10,9 +10,9 @@ use std::cell::RefCell;
use std::convert::TryFrom;
use std::rc::{Rc, Weak};
+use crate::accept_language::LanguageTags;
use crate::aspect_ratio::AspectRatio;
use crate::bbox::BoundingBox;
-use crate::cond::LanguageTags;
use crate::coord_units::CoordUnits;
use crate::dasharray::Dasharray;
use crate::document::{AcquiredNodes, NodeId};
diff --git a/src/element.rs b/src/element.rs
index 801b0c9e..5618241b 100644
--- a/src/element.rs
+++ b/src/element.rs
@@ -6,8 +6,9 @@ use std::collections::{HashMap, HashSet};
use std::fmt;
use std::ops::Deref;
+use crate::accept_language::LanguageTags;
use crate::bbox::BoundingBox;
-use crate::cond::{LanguageTags, RequiredExtensions, RequiredFeatures, SystemLanguage};
+use crate::cond::{RequiredExtensions, RequiredFeatures, SystemLanguage};
use crate::css::{Declaration, Origin};
use crate::document::AcquiredNodes;
use crate::drawing_ctx::DrawingCtx;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]