summaryrefslogtreecommitdiffhomepage
path: root/android
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2021-05-10 19:44:11 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2021-05-19 12:13:36 +0000
commitd15541df914c50805062da1b489e43dceb11d593 (patch)
treeba84bd58b0d298eb4b58ebede42d6ce0bac3c5ea /android
parent7703ae1e04ea94162512991fc8348fb0e2ed2d10 (diff)
downloadmullvadvpn-d15541df914c50805062da1b489e43dceb11d593.tar.xz
mullvadvpn-d15541df914c50805062da1b489e43dceb11d593.zip
Implement `Normalize` for `android::StringValue`
Diffstat (limited to 'android')
-rw-r--r--android/translations-converter/src/android/mod.rs1
-rw-r--r--android/translations-converter/src/normalize.rs31
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())
+ }
+ }
+}