X-Git-Url: https://git.plutz.net/?p=confetti;a=blobdiff_plain;f=pages%2Fcards.sh;h=538146d83749fdc2b1c24d403c1a69e51487b090;hp=506022ff727bcd9ba0507f9945806c093394456a;hb=90288ab07bb1ec83a91581fadc674a87a250a853;hpb=16a2240ce347132c7000ca22989e83801cf3ebf0 diff --git a/pages/cards.sh b/pages/cards.sh index 506022f..538146d 100755 --- a/pages/cards.sh +++ b/pages/cards.sh @@ -60,26 +60,12 @@ list_hi_companies(){ list_categories() { catfile="${_DATA}/mappings/categories" - sort -u "$catfile" + sort -u "$catfile" \ + | sed -r '/^[\t ]*$/d' } -listcards() { - filterex='s;^([^\n]+)\n.*$;\1;p' - printf '%s\n' "${_GET[filter]}" |tr '^' '\n' \ - | sed -r 's;[]\/\(\)\\\^\$\?\.\+\*\;\[\{\}];\\\\&;g' \ - | while read each; do - case $each in - name:*) expr='(FN|NICKNAME|N)(\;[^\n]+)*:[^\n]*'"(${each#*:})";; - street:*) expr='ADR(\;[^\n]+)*:([^\;]*;){2}[^\;\n]*'"(${each#*:})";; - zip:*) expr='ADR(\;[^\n]+)*:([^\;]*;){5}[^\;\n]*'"(${each#*:})";; - any:*|:*) expr="[^\n]*"'(\;[^\n]+)*:[^\n]*'"(${each#*:})";; - *:*) expr="${each%%:*}"'(\;[^\n]+)*:[^\n]*'"(${each#*:})";; - *) expr="(${each})";; - esac - filterex='/(^|\n)'"${expr}"'/{'"${filterex}"'}' - done - - for file in "${_DATA}/vcard/"*.vcf; do +listcards_order(){ + while read file; do case "${_GET[order]}" in firstname) printf '%s\t%s\n' "$(sed -rn 's:^N(;.+)*\:([^;]*;){1} *([^;]*).*$:\3:p' "$file")" "$file" @@ -94,12 +80,43 @@ listcards() { ;; esac done \ - | sort -u |sed -r 's;^.*\t;;' \ - | while read n; do + | sort -u |sed -r 's;^.*\t;;' +} + +listcards_filter(){ + filterex='s;^([^\n]+)\n.*$;\1;p' + printf '%s\n' "${_GET[filter]}" |tr '^' '\n' \ + | sed -r 's;[]\/\(\)\\\^\$\?\.\+\*\;\[\{\}];\\\\&;g' \ + | while read each; do + case $each in + name:*) expr='(FN|NICKNAME|N)(\;[^\n]+)*:[^\n]*'"(${each#*:})";; + street:*) expr='ADR(\;[^\n]+)*:([^\;]*;){2}[^\;\n]*'"(${each#*:})";; + zip:*) expr='ADR(\;[^\n]+)*:([^\;]*;){5}[^\;\n]*'"(${each#*:})";; + any:*|:*) expr="[^\n]*"'(\;[^\n]+)*:[^\n]*'"(${each#*:})";; + *:*) expr="${each%%:*}"'(\;[^\n]+)*:[^\n]*'"(${each#*:})";; + *) expr="(${each})";; + esac + filterex='/(^|\n)'"${expr}"'/I{'"${filterex}"'}' + done + + while read n; do { printf '%s\n' "$n"; cat "$n"; } \ - | sed -rn ':X;N;$!bX; {'"$filterex"'}' - done \ - | sed -r 's;^(.*/)*;;;' + | sed -En ':X;N;$!bX; {'"$filterex"'}' + done + +} + +listcards() { + printf %s\\n "${_DATA}/vcard/"*.vcf \ + | listcards_filter \ + | listcards_order \ + | sed -E 's;^(.*/)*;;;' +} + +listcards_mail() { + printf %s\\n "${_DATA}/vcard/"*.vcf \ + | listcards_filter \ + | xargs -r -d\\n sed -En 's:^EMAIL(;.+)*\:(.+)\r$:\2,:p' } vcf_parse() {