a94e6be43c
`printf` behaviour is more predictable then `echo` because bash is just overdoing things
119 lines
3.8 KiB
Bash
Executable File
119 lines
3.8 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
######################################################################
|
|
# @author : swytch
|
|
# @file : bibinput
|
|
# @license : GPLv3
|
|
# @created : Wednesday May 20, 2020 17:57:47 CEST
|
|
#
|
|
# @description : create a bibliography entry through dmenu
|
|
# @dependencies : dmenu
|
|
######################################################################
|
|
|
|
|
|
parse(){
|
|
if [ "$1" = "@" ]; then
|
|
grep "$1" "$file" | awk -F '{' '{print $2} ' | tr ',' '\n' | sed '/^[[:space:]]*$/d' | sort -r
|
|
elif [ "$1" = "keywords" ]; then
|
|
grep "$1" "$file" | awk -F '"' '{print $2} ' | tr ' ' '\n' | sed -e 's/,//g' -e '/^[[:space:]]*$/d' | sort -u
|
|
else
|
|
grep "$1" "$file" | sed "s/,$//g" | awk -F '"' '{print $2} ' | sort -u
|
|
|
|
fi
|
|
}
|
|
|
|
input() {
|
|
if [ "$1" = "reference" ]; then
|
|
refinput | dmenu -i -p 'reference?' -l 10
|
|
elif [ "$1" = "doctype" ]; then
|
|
printf "$doctypes" | sed "s| |\n|g" | dmenu -i -p 'doctype?'
|
|
elif [ "$1" = "author" ]; then
|
|
parse "author" | dmenu -i -p 'author name? (surname, first name)' -l 10
|
|
elif [ "$1" = "keywords" ]; then
|
|
parse "keywords" | dmenu -i -p "keywords? {$keywords}" -l 10
|
|
else
|
|
parse "$1" | dmenu -i -p "$1?" -l 10
|
|
fi
|
|
}
|
|
|
|
refinput(){
|
|
printf "ref$(cat "$file" | grep '@' | wc -l | awk '{printf $1}')\n" && parse "@"
|
|
}
|
|
|
|
doctypes="article book online techreport"
|
|
file="$(find $HOME/documents/bibliographies/ -type f -not -path '*/\.*' | dmenu -l 20 -p "[bibinput] which bibliography?")" # the -not -path allows find to ignore hidden files
|
|
|
|
[ -z "$file" ] && exit 1
|
|
|
|
refs="$(cat "$file" | grep "@" | sed "s/,$//g" | awk -F '{' '{print $2}' | tr '\n' ' ')"
|
|
|
|
# if the file does not exist, create it
|
|
if [ ! -e "$file" ]; then
|
|
mkfile="$(printf "No\\nYes" | dmenu -i -p "$file does not exist. Create it?")"
|
|
[ "$mkfile" = "Yes" ] && (touch "$file")
|
|
fi
|
|
|
|
doctype="$(input "doctype")"
|
|
[ -z "$doctype" ] && exit 1
|
|
reference="$(input "reference")"
|
|
[ -z "$reference" ] && exit 1
|
|
while [ "${refs#*"$reference"}" != "$refs" ]; do
|
|
reference="$(refinput | dmenu -i -p 'ref already exist, please provide another' -l 10)"
|
|
[ -z "$refname" ] && exit 1
|
|
done
|
|
author="$(input "author")"
|
|
[ -z "$author" ] && exit 1
|
|
title="$(input "title")"
|
|
[ -z "$title" ] && exit 1
|
|
year="$(input "year")"
|
|
[ -z "$year" ] && exit 1
|
|
if [ "article" == "$doctype" ]; then
|
|
journal="$(input "journal")"
|
|
[ -z "$journal" ] && exit 1
|
|
volume="$(input "volume")"
|
|
fi
|
|
if [ "$doctype" = "book" ]; then
|
|
publisher="$(input "publisher")"
|
|
[ -z "$publisher" ] && exit 1
|
|
fi
|
|
if [ "$doctype" = "online" ]; then
|
|
url="{URL}"
|
|
fi
|
|
if [ "$doctype" = "techreport" ]; then
|
|
institution="$(input "institution")"
|
|
[ -z "$institution" ] && exit 1
|
|
fi
|
|
keyword="$(input "keywords")"
|
|
keywords=$keyword
|
|
if [ -z "$keyword" ]; then
|
|
keyword_test="no"
|
|
else
|
|
keyword_test="$(printf "yes\nno" |dmenu -p "another keyword?")"
|
|
keyword_test=${keyword_test:-"no"}
|
|
fi
|
|
while [ "$keyword_test" = "yes" ]; do
|
|
keyword="$(input "keywords")"
|
|
if [ -z "$keyword" ];then
|
|
keyword_test="no"
|
|
elif [ "${keywords#*"$keyword"}" != "$keywords" ]; then
|
|
keyword_test="$(printf "yes\nno" |dmenu -p "keyword already given. another keyword?")"
|
|
keyword_test=${keyword_test:-"no"}
|
|
else
|
|
keywords="$keywords, $keyword"
|
|
keyword_test="$(printf "yes\nno" |dmenu -p "another keyword?")"
|
|
keyword_test=${keyword_test:-no}
|
|
fi
|
|
done
|
|
|
|
printf "\n@$doctype{"$reference"," >> "$file"
|
|
printf "\n\tauthor = \"$author\"," >> "$file"
|
|
printf "\n\ttitle = \"$title\"," >> "$file"
|
|
printf "\n\tyear = \"$year\"," >> "$file"
|
|
[ -n "$journal" ] && printf "\n\tjournal = \"$journal\"," >> "$file"
|
|
[ -n "$volume" ] && printf "\n\tvolume = \"$volume\"," >> "$file"
|
|
[ -n "$publisher" ] && printf "\n\tpublisher = \"$publisher\"," >> "$file"
|
|
[ -n "$url" ] && printf "\n\turl = \"$url\"," >> "$file"
|
|
[ -n "$institution" ] && printf "\n\tinstitution = \"$institution\"," >> "$file"
|
|
printf "\n\tkeywords = \"$keywords\"" >> "$file"
|
|
printf "\n}" >> "$file"
|