]> git.plutz.net Git - confetti/blobdiff - pdiread.sh
implemented card ordering
[confetti] / pdiread.sh
index e01c71c42229790ae65b34f15fd8416a1bf38415..cbbc4e57b232a7473296eedb53eb73aa67c88dd7 100755 (executable)
@@ -38,11 +38,6 @@ pdi_load() {
     # === strip trailing CR (but keep CRs in property value) ===
     # s;\r$;;;  # already done in in previous filter
 
-    # unscramble aggregated fields
-    :disag
-    s;^([^:]+:)((.*[^\])?(\\\\)*),;\1\2\n\1;;
-    t disag;
-
     # === Normalise various known vendor properties ===
                 s;^X-MS-CARDPICTURE(\;|:);PHOTO\1;;
                         s;^X-GENDER(\;|:);GENDER\1;;
@@ -75,6 +70,11 @@ pdi_load() {
 
     # === Insert empty attribute fields where no attributes are present ===
     s;^([^;:]+):;\1\;:;;
+
+    # unscramble aggregated fields
+    :disag
+    s;^([^:]+:)((.*[^\])?(\\\\)*),;\1\2\n\1;;
+    t disag;
     '
 }
 
@@ -91,6 +91,7 @@ pdi_count(){
 pdi_attrib(){
   local card=":$1" name="$2" cnt="${3:-1}"
   while [ $cnt -gt 0 ]; do
+    [ "${card#*${BR}${name};}" = "$card" ] && return 1
     card="${card#*${BR}${name};}"
     cnt=$((cnt - 1))
   done
@@ -100,6 +101,7 @@ pdi_attrib(){
 pdi_value(){
   local card="${BR}$1" name="$2" cnt="${3:-1}"
   while [ $cnt -gt 0 ]; do
+    [ "${card#*${BR}${name};*:}" = "$card" ] && return 1
     card="${card#*${BR}${name};*:}"
     cnt=$((cnt - 1))
   done