diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2021-05-10 19:44:11 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2021-05-19 12:13:36 +0000 |
| commit | d15541df914c50805062da1b489e43dceb11d593 (patch) | |
| tree | ba84bd58b0d298eb4b58ebede42d6ce0bac3c5ea /android | |
| parent | 7703ae1e04ea94162512991fc8348fb0e2ed2d10 (diff) | |
| download | mullvadvpn-d15541df914c50805062da1b489e43dceb11d593.tar.xz mullvadvpn-d15541df914c50805062da1b489e43dceb11d593.zip | |
Implement `Normalize` for `android::StringValue`
Diffstat (limited to 'android')
| -rw-r--r-- | android/translations-converter/src/android/mod.rs | 1 | ||||
| -rw-r--r-- | android/translations-converter/src/normalize.rs | 31 |
2 files changed, 32 insertions, 0 deletions
diff --git a/android/translations-converter/src/android/mod.rs b/android/translations-converter/src/android/mod.rs index b43277c509..8bc9f8e41e 100644 --- a/android/translations-converter/src/android/mod.rs +++ b/android/translations-converter/src/android/mod.rs @@ -4,5 +4,6 @@ mod strings; pub use self::{ plurals::{PluralQuantity, PluralResource, PluralResources}, + string_value::StringValue, strings::{StringResource, StringResources}, }; diff --git a/android/translations-converter/src/normalize.rs b/android/translations-converter/src/normalize.rs index e9a2eb3757..395f0186cf 100644 --- a/android/translations-converter/src/normalize.rs +++ b/android/translations-converter/src/normalize.rs @@ -1,6 +1,37 @@ +use lazy_static::lazy_static; +use regex::Regex; + pub trait Normalize { /// Normalize the string value into a common format. /// /// Makes it possible to compare different representations of translation messages. fn normalize(&self) -> String; } + +mod android { + use super::*; + use crate::android::StringValue; + + lazy_static! { + static ref LINE_BREAKS: Regex = Regex::new(r"\s*\n\s*").unwrap(); + static ref APOSTROPHES: Regex = Regex::new(r"\\'").unwrap(); + static ref DOUBLE_QUOTES: Regex = Regex::new(r#"\\""#).unwrap(); + static ref PARAMETERS: Regex = Regex::new(r"%[0-9]*\$").unwrap(); + } + + impl Normalize for StringValue { + fn normalize(&self) -> String { + // Collapse line breaks present in the XML file + let value = LINE_BREAKS.replace_all(&*self, " "); + // Unescape apostrophes + let value = APOSTROPHES.replace_all(&value, "'"); + // Unescape double quotes + let value = DOUBLE_QUOTES.replace_all(&value, r#"""#); + // Mark where parameters are positioned, removing the parameter index + let value = PARAMETERS.replace_all(&value, "%"); + + // Unescape XML characters + htmlize::unescape(value.as_bytes()) + } + } +} |
