From 166bc53ac78be6219a63870447920c920734f640 Mon Sep 17 00:00:00 2001 From: lukeflo Date: Mon, 23 Sep 2024 23:55:04 +0200 Subject: add license informations --- src/backend/bib.rs | 85 ++++++++++++++++++++++++++++---------------------- src/backend/cliargs.rs | 17 ++++++++++ 2 files changed, 64 insertions(+), 38 deletions(-) (limited to 'src/backend') diff --git a/src/backend/bib.rs b/src/backend/bib.rs index aa7272f..6e913fd 100644 --- a/src/backend/bib.rs +++ b/src/backend/bib.rs @@ -1,51 +1,60 @@ +// bibiman - a TUI for managing BibLaTeX databases +// Copyright (C) 2024 lukeflo +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +///// + use biblatex::Bibliography; -use regex::Regex; -use std::{ - fs, - path::{Path, PathBuf}, -}; +use std::{fs, path::PathBuf}; -use super::cliargs::{CLIArgs, PosArgs}; +use super::cliargs::PosArgs; // Set necessary fields // TODO: can surely be made more efficient/simpler -pub struct Bibi { - pub citekeys: Vec, - // pub bibliography: Bibliography, -} - -pub fn get_bibfile(filename: impl AsRef) -> String { - let bibfile = fs::read_to_string(&filename).unwrap(); - bibfile -} - -pub fn get_citekeys(bibstring: &Bibliography) -> Vec { - // 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 which is needed by the struct Bibi - // let mut citekeys: Vec = 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 = bibstring.iter().map(|entry| entry.to_owned().key).collect(); - citekeys.sort_by_key(|name| name.to_lowercase()); - citekeys +pub struct BibiMain { + pub bibfile: PathBuf, // path to bibfile + pub bibfilestring: String, // content of bibfile as string + pub bibliography: Bibliography, // parsed bibliography + pub citekeys: Vec, // list of all citekeys } -impl Bibi { +impl BibiMain { 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(); + let bibfile = PosArgs::parse_pos_args().bibfilearg; + let bibfilestring = fs::read_to_string(&bibfile).unwrap(); + let bibliography = biblatex::Bibliography::parse(&bibfilestring).unwrap(); + let citekeys = Self::get_citekeys(&bibliography); Self { - citekeys: get_citekeys(&bib), - // bibliography: biblatex::Bibliography::parse(&bibfilestring).unwrap(), + bibfile, + bibfilestring, + bibliography, + citekeys, } } + + // get list of citekeys from the given bibfile + // this list is the base for further operations on the bibentries + // since it is the entry point of the biblatex crate. + pub fn get_citekeys(bibstring: &Bibliography) -> Vec { + let mut citekeys: Vec = + bibstring.iter().map(|entry| entry.to_owned().key).collect(); + citekeys.sort_by_key(|name| name.to_lowercase()); + citekeys + } +} + +pub struct BibiData { + pub citekey: Vec, } diff --git a/src/backend/cliargs.rs b/src/backend/cliargs.rs index b820b6a..f3e9fcf 100644 --- a/src/backend/cliargs.rs +++ b/src/backend/cliargs.rs @@ -1,3 +1,20 @@ +// bibiman - a TUI for managing BibLaTeX databases +// Copyright (C) 2024 lukeflo +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +///// + use core::panic; use std::path::{Path, PathBuf}; -- cgit v1.2.3