#!/bin/sh # $Id: bib2xml.sh,v 1.12 2022/04/30 08:05:35 hako Exp $ # bib2xml converts a bibtex file to an xml file. # by Hiroshi Hakoyama readonly cmd=$(basename $0) if [ $# -ne 2 ]; then echo "Usage: $cmd template.xml data.bib" 1>&2 exit 1 fi template=$1 bib_file=$2 # reverse_abbr_name() identifies the encoding of the author name, # changes the separator style (A and B; A, B and C), # and abbreviates the first name, if it is ASCII. # Middle name is acceptable. # Examples: # Kodama, Sakie and Fujimori, Hiroka and Hakoyama, Hiroshi # => # Kodama, S., Fujimori, H. and Hakoyama, H. # Le Boeuf, Burney J => Le Boeuf, B. J. # 児玉 紗希江 and 藤森 宏佳 and 箱山  洋 # => # 児玉紗希江, 藤森宏佳 and 箱山 洋 reverse_abbr_name() { encode=$(echo $1 | LC_COLLATE=C grep '[^ -~]') if [ -z "$encode" ]; then echo $1 | sed s/" and "/:/g | awk -F',' -v 'RS=:' -v 'OFS=,' '{print $1,$2}' | sed '$d' | sed s/$/./ | sed 's/, \(.\)[^ ]*/, \1./' | tr '\n' ',' | sed s/,$// | sed 's/\.,/\., /g' | sed 's/\(.*\)\., /\1\. and /' else echo $1 | sed s/" and "/,/g | sed s/" "//g | sed s/,/", "/g | sed 's/\(.*\)\, /\1\ and /' fi } # read fields from a bibtex entry pubType=$(grep '^@.*{' $bib_file | sed -e 's/^@\(.*\){.*/\1/') citeKey=$(grep '^@.*{' $bib_file | sed -e 's/^@.*{\(.*\),/\1/') fields="author abstract title journal volume pages year month day note keywords url affiliation booktitle address editor publisher chapter" for i in $fields; do eval "$i=\"$(grep "^[[:blank:]]*$i = {" $bib_file | sed 's/^[^=]*= {\(.*\)}./\1/')\"" done author=$(reverse_abbr_name "$author") editor=$(reverse_abbr_name "$editor") # write the fields to an xml template commands="s@<\$citeKey/>@$citeKey@g;s@<\$pubType/>@$pubType@g;" for i in $fields; do command="s@<\$fields\.$i/>@$(eval echo '$'$i)@g;" commands=$commands$command done commands=$commands"/>NANA\./d;s@?\.@?@g;s@?\.@?@g" sed -e "$commands" $template > ${citeKey}.xml exit 0