diff options
author | Daniel Silverstone <dsilvers+gitlab@digital-scurf.org> | 2022-09-08 18:27:49 +0000 |
---|---|---|
committer | Daniel Silverstone <dsilvers+gitlab@digital-scurf.org> | 2022-09-08 18:27:49 +0000 |
commit | 4e54fa9ea0485aac2d750c5eb4fa9ead83ecf365 (patch) | |
tree | a7c22c35da5811f19fa02772ecc6498d87d63030 /src/metadata.rs | |
parent | c230684f3bab80154d5224d4f2f71eafd00fd100 (diff) | |
parent | 765b2e1d4d94b2274de28d4efd24bfe77e8d93ac (diff) | |
download | subplot-4e54fa9ea0485aac2d750c5eb4fa9ead83ecf365.tar.gz |
Merge branch 'liw/yamlfile' into 'main'
feat! read document metadata from a YAML file
Closes #283
See merge request subplot/subplot!287
Diffstat (limited to 'src/metadata.rs')
-rw-r--r-- | src/metadata.rs | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/src/metadata.rs b/src/metadata.rs index 5f5e183..dee0b50 100644 --- a/src/metadata.rs +++ b/src/metadata.rs @@ -1,11 +1,11 @@ -use crate::{Bindings, SubplotError, TemplateSpec}; +use crate::{Bindings, SubplotError, TemplateSpec, YamlMetadata}; use std::collections::HashMap; use std::fmt::Debug; use std::ops::Deref; use std::path::{Path, PathBuf}; -use pandoc_ast::{Inline, Map, MetaValue, Pandoc}; +use pandoc_ast::{Inline, Map, MetaValue}; use log::trace; @@ -14,6 +14,7 @@ use log::trace; pub struct Metadata { title: String, date: Option<String>, + markdown_filename: PathBuf, bindings_filenames: Vec<PathBuf>, bindings: Bindings, impls: HashMap<String, DocumentImpl>, @@ -32,22 +33,23 @@ impl Metadata { /// Construct a Metadata from a Document, if possible. pub fn new<P>( basedir: P, - doc: &Pandoc, + meta: &YamlMetadata, template: Option<&str>, ) -> Result<Metadata, SubplotError> where P: AsRef<Path> + Debug, { - let title = get_title(&doc.meta); - let date = get_date(&doc.meta); - let bindings_filenames = get_bindings_filenames(&doc.meta); - let bibliographies = get_bibliographies(basedir.as_ref(), &doc.meta); - let classes = get_classes(&doc.meta); + let map = meta.to_map(); + let title = get_title(&map); + let date = get_date(&map); + let bindings_filenames = get_bindings_filenames(&map); + let bibliographies = get_bibliographies(basedir.as_ref(), &map); + let classes = get_classes(&map); trace!("Loaded basic metadata"); let mut impls = HashMap::new(); - if let Some(raw_impls) = doc.meta.get("impls") { + if let Some(raw_impls) = map.get("impls") { match raw_impls { MetaValue::MetaMap(raw_impls) => { for (impl_name, functions_filenames) in raw_impls.iter() { @@ -74,6 +76,7 @@ impl Metadata { Ok(Metadata { title, date, + markdown_filename: meta.markdown().into(), bindings_filenames, bindings, impls, @@ -92,6 +95,11 @@ impl Metadata { self.date.as_deref() } + /// Return filename of the markdown file. + pub fn markdown_filename(&self) -> &Path { + &self.markdown_filename + } + /// Return filename where bindings are specified. pub fn bindings_filenames(&self) -> Vec<&Path> { self.bindings_filenames.iter().map(|f| f.as_ref()).collect() |