summaryrefslogtreecommitdiff
path: root/src/ast.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/ast.rs')
-rw-r--r--src/ast.rs70
1 files changed, 33 insertions, 37 deletions
diff --git a/src/ast.rs b/src/ast.rs
index bd6640b..012e05a 100644
--- a/src/ast.rs
+++ b/src/ast.rs
@@ -143,11 +143,11 @@ impl<'a> Document {
pub fn sources(&mut self) -> Vec<PathBuf> {
let mut names = vec![];
- if let Some(x) = self.meta().bindings_filename() {
+ for x in self.meta().bindings_filenames() {
names.push(PathBuf::from(x))
}
- if let Some(x) = self.meta().functions_filename() {
+ for x in self.meta().functions_filenames() {
names.push(PathBuf::from(x))
}
@@ -426,9 +426,9 @@ mod test_extract {
pub struct Metadata {
title: String,
date: Option<String>,
- bindings_filename: Option<PathBuf>,
+ bindings_filenames: Vec<PathBuf>,
bindings: Bindings,
- functions_filename: Option<PathBuf>,
+ functions_filenames: Vec<PathBuf>,
template: Option<String>,
bibliographies: Vec<PathBuf>,
/// Extra class names which should be considered 'correct' for this document
@@ -443,21 +443,21 @@ impl Metadata {
{
let title = get_title(&doc.meta)?;
let date = get_date(&doc.meta);
- let bindings_filename = get_bindings_filename(basedir.as_ref(), &doc.meta)?;
- let functions_filename = get_functions_filename(basedir.as_ref(), &doc.meta)?;
+ let bindings_filenames = get_bindings_filenames(basedir.as_ref(), &doc.meta);
+ let functions_filenames = get_functions_filenames(basedir.as_ref(), &doc.meta);
let template = get_template_name(&doc.meta)?;
let mut bindings = Bindings::new();
- if let Some(ref filename) = bindings_filename {
- get_bindings(filename, &mut bindings)?;
- }
+
let bibliographies = get_bibliographies(basedir.as_ref(), &doc.meta);
let classes = get_classes(&doc.meta);
+
+ get_bindings(&bindings_filenames, &mut bindings)?;
Ok(Metadata {
title,
date,
- bindings_filename,
+ bindings_filenames,
bindings,
- functions_filename,
+ functions_filenames,
template,
bibliographies,
classes,
@@ -479,19 +479,16 @@ impl Metadata {
}
/// Return filename where bindings are specified.
- pub fn bindings_filename(&self) -> Option<&Path> {
- match &self.bindings_filename {
- Some(filename) => Some(&filename),
- None => None,
- }
+ pub fn bindings_filenames(&self) -> Vec<&Path> {
+ self.bindings_filenames.iter().map(|f| f.as_ref()).collect()
}
/// Return filename where functions are specified.
- pub fn functions_filename(&self) -> Option<&Path> {
- match &self.functions_filename {
- Some(filename) => Some(&filename),
- None => None,
- }
+ pub fn functions_filenames(&self) -> Vec<&Path> {
+ self.functions_filenames
+ .iter()
+ .map(|f| f.as_ref())
+ .collect()
}
/// Return the name of the code template, if specified.
@@ -536,24 +533,18 @@ fn get_date(map: &Mapp) -> Option<String> {
}
}
-fn get_bindings_filename<P>(basedir: P, map: &Mapp) -> Result<Option<PathBuf>>
+fn get_bindings_filenames<P>(basedir: P, map: &Mapp) -> Vec<PathBuf>
where
P: AsRef<Path>,
{
- match get_path(map, "bindings") {
- None => Ok(None),
- Some(path) => Ok(Some(basedir.as_ref().join(path))),
- }
+ get_paths(basedir, map, "bindings")
}
-fn get_functions_filename<P>(basedir: P, map: &Mapp) -> Result<Option<PathBuf>>
+fn get_functions_filenames<P>(basedir: P, map: &Mapp) -> Vec<PathBuf>
where
P: AsRef<Path>,
{
- match get_path(map, "functions") {
- None => Ok(None),
- Some(path) => Ok(Some(basedir.as_ref().join(path))),
- }
+ get_paths(basedir, map, "functions")
}
fn get_template_name(map: &Mapp) -> Result<Option<String>> {
@@ -563,10 +554,13 @@ fn get_template_name(map: &Mapp) -> Result<Option<String>> {
}
}
-fn get_path(map: &Mapp, field: &str) -> Option<PathBuf> {
- match get_string(map, field) {
- None => None,
- Some(s) => Some(Path::new(&s).to_path_buf()),
+fn get_paths<P>(basedir: P, map: &Mapp, field: &str) -> Vec<PathBuf>
+where
+ P: AsRef<Path>,
+{
+ match map.get(field) {
+ None => vec![],
+ Some(v) => pathbufs(basedir, v),
}
}
@@ -687,11 +681,13 @@ mod test_join {
}
}
-fn get_bindings<P>(filename: P, bindings: &mut Bindings) -> Result<()>
+fn get_bindings<P>(filenames: &[P], bindings: &mut Bindings) -> Result<()>
where
P: AsRef<Path>,
{
- bindings.add_from_file(filename)?;
+ for filename in filenames {
+ bindings.add_from_file(filename)?;
+ }
Ok(())
}