chiark / gitweb /
shapelib hidden: Include occ info in ItemData
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 11 Mar 2021 15:02:30 +0000 (15:02 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 11 Mar 2021 15:06:32 +0000 (15:06 +0000)
Nothing uses this yet

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

index 6f9d1eda91c8059bf0408f837c48d33e695be362..7b3b6264b68b1aa6cd2b764345d9b59d6be9bb3c 100644 (file)
@@ -46,6 +46,13 @@ struct ItemDetails {
 struct ItemData {
   d: Arc<ItemDetails>,
   group: Arc<GroupData>,
+  occ: Option<Arc<OccData>>,
+}
+
+#[derive(Debug,Clone)]
+struct OccData {
+  item_name: String,
+  desc: Html,
 }
 
 #[derive(Error,Debug)]
@@ -63,6 +70,8 @@ pub enum LibraryLoadError {
   #[error("glob pattern {pat:?} matched filename with no extension {path:?}")]
   GlobNoExtension { pat: String, path: String },
   #[error("{:?}",&self)]
+  OccultationColourMissing(String),
+  #[error("{:?}",&self)]
   ExpectedTable(String),
   #[error("{:?}",&self)]
   ExpectedString(String),
@@ -376,9 +385,23 @@ fn load_catalogue(libname: &str, dirname: &str, toml_path: &str) -> Contents {
       let item_name = format!("{}{}{}", gdefn.item_prefix,
                               fe.item_spec, gdefn.item_suffix);
 
+      let occ = match &group.d.occulted {
+        None => None,
+        Some(OccultationMethod::ByColour { colour }) => {
+          if ! group.d.colours.contains_key(colour.as_str()) {
+            throw!(LLE::OccultationColourMissing(colour.clone()));
+          }
+          Some(Arc::new(OccData {
+            item_name: subst(&item_name, "_c", &colour)?,
+            desc: Html(subst(&fe.desc.0, "_colour", "")?),
+          }))
+        },
+      };
+
       let mut add1 = |item_name: &str, desc| {
         let idata = ItemData {
           group: group.clone(),
+          occ: occ.clone(),
           d: Arc::new(ItemDetails { desc }),
         };
         type H<'e,X,Y> = hash_map::Entry<'e,X,Y>;