diff options
Diffstat (limited to 'bin')
-rwxr-xr-x | bin/vtono.sh | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/bin/vtono.sh b/bin/vtono.sh new file mode 100755 index 0000000..dd4f8b6 --- /dev/null +++ b/bin/vtono.sh @@ -0,0 +1,78 @@ +#!/bin/sh + +die() +{ + : "${1:?}" + + printf "\033[31;1merr: %b\033[0m\n" "$1" 1>&2 + exit "${2:-1}" +} + +warn() +{ + : "${1:?}" + printf "\033[33;1mwarn: %b\033[0m\n" "$*" 1>&2 +} + +######## +# MAIN # +# ###### + +name= +no= +vcf= +nos= + +if [ -z "$1" ] \ + || [ "$(file --brief --dereference --mime-type "$1")" != "text/vcard" ]; then + die "no or invalid input" +else + vcf="$1" + shift +fi + +strings "$vcf" | while read -r line; do + case "$line" in + 'FN:'*) + name="${line##*:}" + ;; + 'TEL;TYPE='*':'*) + # avoid repetitions in same vacrd entry + no="${line##*:}" + case "$nos" in + *"$no"*) + continue + ;; + esac + nos="${nos}:${no}" + + # make sure $no is E.164-formatted + case "$no" in + *-*) + no="$(printf "%s" "$no" | tr -d '-')" + ;; + esac + case "$no" in + +[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]) + # gotta go fast \+[0-9]{12} + ;; + +974[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]) # qatar + # gotta go fast \+974{8} + ;; + *) + warn "illegal format: ${name}, ${no}" + continue; + ;; + esac + + [ "$1" = "-w" ] && + continue + + [ -n "$no" ] && + printf "%s : %s\n" "$no" "$name" + ;; + 'END:VCARD') + nos= + ;; + esac +done |