diff --git a/Cargo.lock b/Cargo.lock index a43c1d4..59b8f42 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -23,6 +23,12 @@ version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" +[[package]] +name = "base64" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b25655df2c3cdd83c5e5b293b88acd880332b2ddadd7c30ac43144fdc0033da9" + [[package]] name = "bitflags" version = "2.13.1" @@ -402,6 +408,7 @@ name = "icon-color-tool" version = "0.1.0" dependencies = [ "anyhow", + "base64", "gtk4", "regex", "serde", diff --git a/Cargo.toml b/Cargo.toml index 99982a7..24d2182 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,3 +10,4 @@ regex = "1" serde = { version = "1", features = ["derive"] } toml = "0.8" walkdir = "2" +base64 = "0.23.0" diff --git a/src/color_scheme.rs b/src/color_scheme.rs index 1de6214..9a18f41 100644 --- a/src/color_scheme.rs +++ b/src/color_scheme.rs @@ -21,8 +21,9 @@ impl ColorScheme { .with_context(|| format!("reading {}", path.display()))?; if !namespace.is_empty() { + let class_re = Regex::new(r#"class=(['"])([^'"]*?)ColorScheme-([^'"]*?)(['"])"#).unwrap(); + content = class_re.replace_all(&content, format!("class=${{1}}${{2}}{namespace}-ColorScheme-${{3}}${{4}}").as_str()).into_owned(); content = content.replace(".ColorScheme-", &format!(".{namespace}-ColorScheme-")); - content = content.replace("class=\"ColorScheme-", &format!("class=\"{namespace}-ColorScheme-")); } let colors = parse_colors(&content); diff --git a/src/composite_icon.rs b/src/composite_icon.rs index 86cce42..00be610 100644 --- a/src/composite_icon.rs +++ b/src/composite_icon.rs @@ -25,16 +25,15 @@ impl CompositeIcon { pub fn render(&self) -> String { if let Some(emblem) = &self.emblem { + use base64::prelude::*; + let bg_b64 = BASE64_STANDARD.encode(&self.bg.content); + let emblem_b64 = BASE64_STANDARD.encode(&emblem.content); format!( r#" - -{} - - -{} - + + "#, - self.bg.content, self.emblem_x, self.emblem_y, self.emblem_size, self.emblem_size, emblem.content + bg_b64, self.emblem_x, self.emblem_y, self.emblem_size, self.emblem_size, emblem_b64 ) } else { self.bg.content.clone()