chiark / gitweb /
shapelib, subst: Allow colours to provide magic substs
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 15 May 2022 15:52:56 +0000 (16:52 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 15 May 2022 20:41:22 +0000 (21:41 +0100)
Eg, for text colour.  The dice want this.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/shapelib-toml.rs
src/shapelib.rs

index 5de8d5725d10e6249bfdb4ae43baf7b2c69d6b82..e0ef998593c336166b240159a5b1f05282766906 100644 (file)
@@ -93,6 +93,7 @@ pub enum OccultationMethod {
 pub struct RecolourData {
   pub abbrev: String,
   #[cfg(doc)] pub map: HashMap<String, String>,
+  #[serde(default)] pub substs: HashMap<String,String>,
 }
 
 #[doc(hidden)]
index a3d71d31b489878f61069ec5ee9edde579dd417b..d68923a13550b64aea20a66893492a315bd30fc8 100644 (file)
@@ -1388,6 +1388,7 @@ fn process_files_entry(
   let mut add1 = |
     c_colour: Option<(&'static str, &str)>,
     c_abbrev: Option<(&'static str, &str)>,
+    c_substs: Option<&HashMap<String, String>>,
   | {
     let c_colour_all =colour_subst_1(mformat,Dollars::Text, substn, c_colour);
     let c_colour =    colour_subst_1(mformat,Dollars::Text, subst,  c_colour);
@@ -1445,6 +1446,7 @@ fn process_files_entry(
       for (k,v) in chain!{
         fe.extra_fields.iter().filter(|(k,_v)| k.starts_with('x')),
         &magic.substs,
+        c_substs.into_iter().map(IntoIterator::into_iter).flatten(),
       } {
         spec = substn(spec, format!("${{{}}}", k), v)?;
       }
@@ -1468,11 +1470,12 @@ fn process_files_entry(
   };
 
   if group.d.colours.is_empty() {
-    add1(None, None)?;
+    add1(None, None, None)?;
   } else {
     for (colour, recolourdata) in &group.d.colours {
       add1(Some(("${colour}", colour)),
-           Some(("_c", &recolourdata.abbrev)))?;
+           Some(("_c", &recolourdata.abbrev)),
+           Some(&recolourdata.substs))?;
     }
   }
 }