From 51db82a2fca0becf4ff446b867f959d9cdead311 Mon Sep 17 00:00:00 2001 From: sinanmohd Date: Wed, 28 Jun 2023 17:02:26 +0530 Subject: repo: initial commit --- bin/vtono.sh | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100755 bin/vtono.sh (limited to 'bin/vtono.sh') 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 -- cgit v1.2.3