tadd script to parse references from bibliography - scholarref - tools for DOI and BiBTeX reference extraction, fetching, and parsing
 (HTM) git clone git://src.adamsgaard.dk/scholarref
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 35e9fa3443bfcd8066f13e76eb2638a3c4b62a10
 (DIR) parent 1dfd14081d8726f3c4f856771135c55f365ff259
 (HTM) Author: Anders Damsgaard <anders@adamsgaard.dk>
       Date:   Wed, 15 Sep 2021 14:27:06 +0200
       
       add script to parse references from bibliography
       
       Diffstat:
         A parseref                            |      73 +++++++++++++++++++++++++++++++
       
       1 file changed, 73 insertions(+), 0 deletions(-)
       ---
 (DIR) diff --git a/parseref b/parseref
       t@@ -0,0 +1,73 @@
       +#!/bin/sh
       +set -e
       +
       +die() {
       +        printf '%s\n' "$1" >&2
       +        exit 1
       +}
       +
       +get_citation()
       +{
       +        awk -v id="$1" '
       +                function getval(str) {
       +                        sub(/.*= *{*/, "", str)
       +                        sub(/},*$/, "", str)
       +                        gsub(/[{}]/, "", str)
       +                        return str
       +                }
       +
       +                {
       +                        if (match(tolower($0), tolower(id))) 
       +                                found = 1
       +                        if (found) {
       +                                if (match(tolower($0), /author *=/))
       +                                        author = getval($0)
       +                                else if (match(tolower($0), /year *=/))
       +                                        year = getval($0)
       +                                else if (match(tolower($0), /title *=/))
       +                                        title = getval($0)
       +                                else if (match(tolower($0), /journal *=/))
       +                                        journal = getval($0)
       +                                else if (match(tolower($0), /volume *=/))
       +                                        volume = getval($0)
       +                                else if (match(tolower($0), /number *=/))
       +                                        number = getval($0)
       +                                else if (match(tolower($0), /pages *=/))
       +                                        pages = getval($0)
       +                                else if (match(tolower($0), /doi *=/))
       +                                        doi = getval($0)
       +                                else if (match($0, /^ *} *$/)) {
       +                                        found = 0
       +                                        sub(/--/, "–", pages)
       +                                        split(author, authors, / +and +/)
       +                                        nauthors = length(authors)
       +                                        for (i = 1; i <= nauthors; i++) {
       +                                                printf "%s", authors[i]
       +                                                if (i < nauthors - 1)
       +                                                        printf ", "
       +                                                else if (i == nauthors - 1)
       +                                                        printf " and "
       +                                        }
       +                                        printf " %d ā€œ%sā€. %s", year, title, journal
       +                                        if (length(volume) > 0)
       +                                                printf " %s", volume
       +                                        if (length(number) > 0)
       +                                                printf "(%s)", number
       +                                        if (length(pages) > 0)
       +                                                printf ", %s.", pages
       +                                        if (length(doi) > 0)
       +                                                printf " doi: %s", doi
       +                                        printf "\n"
       +                                }
       +                        }
       +                }
       +        ' "$BIB"
       +}
       +
       +if [ $# -lt 1 ]; then
       +        while read -r id; do
       +                get_citation "$id"
       +        done
       +else
       +        get_citation "$@"
       +fi