From 077394149ba57623b9b878c89ed4a13162d4581d Mon Sep 17 00:00:00 2001 From: trivernis Date: Fri, 4 Sep 2020 18:49:25 +0200 Subject: [PATCH] Add formatting implementation for Website Signed-off-by: trivernis --- src/references/bibliography.rs | 38 +++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/src/references/bibliography.rs b/src/references/bibliography.rs index 459df2b..0968704 100644 --- a/src/references/bibliography.rs +++ b/src/references/bibliography.rs @@ -11,11 +11,11 @@ use bibliographix::bibliography::bib_types::repository::Repository; use bibliographix::bibliography::bib_types::tech_report::TechReport; use bibliographix::bibliography::bib_types::thesis::Thesis; use bibliographix::bibliography::bib_types::unpublished::Unpublished; +use bibliographix::bibliography::bib_types::website::Website; use bibliographix::bibliography::bib_types::BibliographyType; use bibliographix::bibliography::bibliography_entry::{ BibliographyEntry, BibliographyEntryReference, }; -use std::sync::MutexGuard; macro_rules! plain_text { ($e:expr) => { @@ -39,7 +39,8 @@ macro_rules! italic_text { }; } -fn create_bib_list(entries: Vec) -> List { +/// Creates a list from a list of bib items +pub fn create_bib_list(entries: Vec) -> List { let mut list = List::new(); for entry in entries { @@ -49,6 +50,7 @@ fn create_bib_list(entries: Vec) -> List { list } +/// Returns the list item for a bib entry fn get_item_for_entry(entry: BibliographyEntryReference) -> ListItem { let entry = entry.lock().unwrap(); @@ -64,7 +66,7 @@ fn get_item_for_entry(entry: BibliographyEntryReference) -> ListItem { BibliographyType::TechReport(tr) => get_item_for_tech_report(&*entry, tr), BibliographyType::Thesis(t) => get_item_for_thesis(&*entry, t), BibliographyType::Unpublished(u) => get_item_for_unpublished(&*entry, u), - _ => unimplemented!(), + BibliographyType::Website(w) => get_item_for_website(&*entry, w), } } @@ -334,10 +336,12 @@ fn get_item_for_thesis(entry: &BibliographyEntry, t: &Thesis) -> ListItem { ListItem::new(Line::Text(text), 0, true) } +/// Returns the list item for an unpublished bib type fn get_item_for_unpublished(entry: &BibliographyEntry, u: &Unpublished) -> ListItem { let mut text = TextLine::new(); text.subtext .push(bold_text!(format!("{}: ", entry.key().clone()))); + text.subtext .push(plain_text!(format!("{}.", u.author.clone()))); text.subtext @@ -349,3 +353,31 @@ fn get_item_for_unpublished(entry: &BibliographyEntry, u: &Unpublished) -> ListI ListItem::new(Line::Text(text), 0, true) } + +fn get_item_for_website(entry: &BibliographyEntry, w: &Website) -> ListItem { + let mut text = TextLine::new(); + text.subtext + .push(bold_text!(format!("{}: ", entry.key().clone()))); + + if let Some(title) = w.title.clone() { + text.subtext.push(italic_text!(format!("{} - ", title))); + } + text.subtext.push(plain_text!(format!("{}", w.url))); + if let Some(author) = w.author.clone() { + text.subtext.push(bold_text!(format!(" by {}", author))) + } + if let Some(accessed) = w.accessed_at.clone() { + text.subtext.push(plain_text!(format!( + "(accessed: {})", + accessed.format("%d.%m.%y") + ))) + } + if let Some(date) = w.date.clone() { + text.subtext.push(plain_text!(format!( + ", Published On: {}", + date.format("%d.%m.%y") + ))) + } + + ListItem::new(Line::Text(text), 0, true) +}