Add BibEntries, BibTypes and dictionaries
parent
01bec2fdcf
commit
3efe9df1c4
@ -0,0 +1,31 @@
|
||||
use std::sync::{Arc, Mutex};
|
||||
use crate::references::anchor::BibListAnchor;
|
||||
use crate::bibliography::bibliography_dict::BibliographyDictionary;
|
||||
|
||||
/// The root manager for that should be used for further reference operations that
|
||||
/// go beyond insertion.
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct BibManager {
|
||||
root_ref_anchor: Arc<Mutex<BibListAnchor>>,
|
||||
entry_dictionary: Arc<Mutex<BibliographyDictionary>>,
|
||||
}
|
||||
|
||||
impl BibManager {
|
||||
/// Creates a new BibRefManager with an empty root anchor
|
||||
pub fn new() -> Self {
|
||||
Self {
|
||||
root_ref_anchor: Arc::new(Mutex::new(BibListAnchor::new())),
|
||||
entry_dictionary: Arc::new(Mutex::new(BibliographyDictionary::new())),
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns the BibRefManagers root anchor that.
|
||||
pub fn root_ref_anchor(&self) -> Arc<Mutex<BibListAnchor>> {
|
||||
Arc::clone(&self.root_ref_anchor)
|
||||
}
|
||||
|
||||
/// Returns the reference to the entry dictionary
|
||||
pub fn entry_dictionary(&self) -> Arc<Mutex<BibliographyDictionary>> {
|
||||
Arc::clone(&self.entry_dictionary)
|
||||
}
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
/// A type of bibliography entry
|
||||
#[derive(Clone, Debug)]
|
||||
pub enum BibliographyType {
|
||||
Article,
|
||||
Book,
|
||||
Booklet,
|
||||
InBook,
|
||||
InCollection,
|
||||
Manual,
|
||||
Thesis,
|
||||
TechReport,
|
||||
Unpublished,
|
||||
Misc,
|
||||
Url,
|
||||
Repository,
|
||||
}
|
@ -0,0 +1,35 @@
|
||||
use std::collections::HashMap;
|
||||
use std::sync::{Arc, Mutex};
|
||||
use crate::bibliography::bibliography_entry::{BibliographyEntryReference, BibliographyEntry};
|
||||
|
||||
/// A dictionary that contains all bibliography entries
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct BibliographyDictionary {
|
||||
entries: HashMap<String, BibliographyEntryReference>,
|
||||
}
|
||||
|
||||
|
||||
impl BibliographyDictionary {
|
||||
/// Creates a new empty BibliographyDictionary
|
||||
pub fn new() -> Self {
|
||||
Self {
|
||||
entries: HashMap::new(),
|
||||
}
|
||||
}
|
||||
|
||||
/// Inserts a bibliography entry into the map
|
||||
pub fn insert(&mut self, entry: BibliographyEntry) {
|
||||
self.entries.insert(entry.key(), Arc::new(Mutex::new(entry)));
|
||||
}
|
||||
|
||||
/// Returns the reference to the bibliography entry with the given key
|
||||
pub fn get(&mut self, key: &str) -> Option<BibliographyEntryReference> {
|
||||
if let Some(entry) = self.entries.get(&key.to_string()) {
|
||||
Some(Arc::clone(entry))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,30 @@
|
||||
use std::sync::{Arc, Mutex};
|
||||
use crate::bibliography::bib_types::BibliographyType;
|
||||
|
||||
/// A single bibliography entry
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct BibliographyEntry {
|
||||
key: String,
|
||||
note: Option<String>,
|
||||
bib_type: BibliographyType,
|
||||
}
|
||||
|
||||
pub type BibliographyEntryReference = Arc<Mutex<BibliographyEntry>>;
|
||||
|
||||
|
||||
impl BibliographyEntry {
|
||||
/// Creates a new bibliography entry with the given key
|
||||
pub fn new(key: String) -> Self {
|
||||
Self {
|
||||
key,
|
||||
note: None,
|
||||
bib_type: BibliographyType::Misc,
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns the key of the bibliography entry
|
||||
pub fn key(&self) -> String {
|
||||
self.key.clone()
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,3 @@
|
||||
pub mod bibliography_entry;
|
||||
pub mod bibliography_dict;
|
||||
pub mod bib_types;
|
@ -1,13 +1,31 @@
|
||||
use crate::bibliography::bibliography_entry::BibliographyEntryReference;
|
||||
use std::sync::{Arc, Mutex};
|
||||
|
||||
/// A reference to a bibliography entry
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct BibRef {
|
||||
key: String,
|
||||
anchor: Arc<Mutex<BibRefAnchor>>,
|
||||
}
|
||||
|
||||
/// An anchor of a BibRef that can be used in a DOM to remember the place of a BibRef
|
||||
/// and to access the corresponding bibliography entry.
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct BibRefAnchor {
|
||||
entry: Option<BibliographyEntryReference>
|
||||
}
|
||||
|
||||
impl BibRef {
|
||||
/// Creates a new BibRef with a given key
|
||||
pub fn new(key: String) -> Self {
|
||||
Self {
|
||||
key
|
||||
key,
|
||||
anchor: Arc::new(Mutex::new(BibRefAnchor {entry: None}))
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns the anchor of the BibRef
|
||||
pub fn anchor(&self) -> Arc<Mutex<BibRefAnchor>> {
|
||||
Arc::clone(&self.anchor)
|
||||
}
|
||||
}
|
@ -1,3 +1,2 @@
|
||||
pub mod reference_manager;
|
||||
pub mod bib_reference;
|
||||
pub mod anchor;
|
@ -1,23 +0,0 @@
|
||||
use std::sync::{Arc, Mutex};
|
||||
use crate::references::anchor::BibListAnchor;
|
||||
|
||||
/// The root manager for references that should be used for further reference operations that
|
||||
/// go beyond insertion.
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct BibRefManager {
|
||||
root_anchor: Arc<Mutex<BibListAnchor>>,
|
||||
}
|
||||
|
||||
impl BibRefManager {
|
||||
/// Creates a new BibRefManager with an empty root anchor
|
||||
pub fn new() -> Self {
|
||||
Self {
|
||||
root_anchor: Arc::new(Mutex::new(BibListAnchor::new()))
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns the BibRefManagers root anchor that.
|
||||
pub fn root_anchor(&self) -> Arc<Mutex<BibListAnchor>> {
|
||||
Arc::clone(&self.root_anchor)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue