aboutsummaryrefslogtreecommitdiff
path: root/src/backend/bib.rs
diff options
context:
space:
mode:
authorlukeflo2024-09-20 22:31:33 +0200
committerlukeflo2024-09-20 22:31:33 +0200
commitdc45b960a4eda299058e597f6867e4d4be109b1b (patch)
tree30501aa9f1f26413f959d751302fa189508eacc1 /src/backend/bib.rs
downloadbibiman-dc45b960a4eda299058e597f6867e4d4be109b1b.tar.gz
bibiman-dc45b960a4eda299058e597f6867e4d4be109b1b.zip
initial commit
Diffstat (limited to 'src/backend/bib.rs')
-rw-r--r--src/backend/bib.rs51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/backend/bib.rs b/src/backend/bib.rs
new file mode 100644
index 0000000..aa7272f
--- /dev/null
+++ b/src/backend/bib.rs
@@ -0,0 +1,51 @@
+use biblatex::Bibliography;
+use regex::Regex;
+use std::{
+ fs,
+ path::{Path, PathBuf},
+};
+
+use super::cliargs::{CLIArgs, PosArgs};
+
+// Set necessary fields
+// TODO: can surely be made more efficient/simpler
+pub struct Bibi {
+ pub citekeys: Vec<String>,
+ // pub bibliography: Bibliography,
+}
+
+pub fn get_bibfile(filename: impl AsRef<Path>) -> String {
+ let bibfile = fs::read_to_string(&filename).unwrap();
+ bibfile
+}
+
+pub fn get_citekeys(bibstring: &Bibliography) -> Vec<String> {
+ // let bib = Bibliography::parse(&get_bibfile(CLIArgs::parse_cli_args().bibfilearg)).unwrap();
+ // // Define Regex to match citekeys
+ // let re = Regex::new(r"(?m)^\@[a-zA-Z]*\{(.*)\,").unwrap();
+ // // Declare empty vector to fill with captured keys
+ // // Has to be Vec<&str> because of captures_iter method
+ // let mut keys = vec![];
+ // for (_, [key]) in re.captures_iter(&bibfilestring).map(|c| c.extract()) {
+ // keys.push(key);
+ // }
+ // // Transform Vec<&str> to Vec<String> which is needed by the struct Bibi
+ // let mut citekeys: Vec<String> = keys.into_iter().map(String::from).collect();
+ // // Sort vector items case-insensitive
+ // citekeys.sort_by_key(|name| name.to_lowercase());
+ // citekeys
+ let mut citekeys: Vec<String> = bibstring.iter().map(|entry| entry.to_owned().key).collect();
+ citekeys.sort_by_key(|name| name.to_lowercase());
+ citekeys
+}
+
+impl Bibi {
+ pub fn new() -> Self {
+ // TODO: Needs check for config file path as soon as config file is impl
+ let bib = Bibliography::parse(&get_bibfile(PosArgs::parse_pos_args().bibfilearg)).unwrap();
+ Self {
+ citekeys: get_citekeys(&bib),
+ // bibliography: biblatex::Bibliography::parse(&bibfilestring).unwrap(),
+ }
+ }
+}