]> git.plutz.net Git - lobster/blobdiff - pdiread.sh
merge from confetti
[lobster] / pdiread.sh
index 08fbaec3fb373c2fbb6cdde7974caaa520b849e3..f547cb689c1857d4397e9d7565cedc4f3ba0000a 100755 (executable)
@@ -113,6 +113,33 @@ pdi_load() {
     p;' "$@"
 }
 
+pdi_escape(){
+  local in out=''
+  for in in "$@"; do
+    out="${out}${out:+;}"
+    while [ "$in" ]; do case $in in
+      \\*) out="${out}\\\\"; in="${in#\\}" ;;
+      ,*) out="${out}\\,"; in="${in#,}" ;;
+      \;*) out="${out}\\;"; in="${in#;}" ;;
+      "$BR"*) out="${out}\\n"; in="${in#${BR}}" ;;
+      *) out="${out}${in%%[\\,;${BR}]*}"; in="${in#"${in%%[\\,;${BR}]*}"}" ;;
+    esac; done
+  done
+  printf '%s\n' "$out"
+}
+
+pdi_unescape(){
+  local in out=''
+  [ $# -gt 0 ] && in="$*" || in="$(cat)"
+  while [ "$in" ]; do case $in in
+    \\\\*) out="${out}\\"; in="${in#\\\\}" ;;
+    \\n*) out="${out}${BR}"; in="${in#\\n}" ;;
+    \\*) in="${in#\\}" ;;
+    *) out="${out}${in%%\\*}"; in="${in#"${in%%\\*}"}" ;;
+  esac; done
+  printf '%s\n' "$out"
+}
+
 pdi_count(){
   local card="$1" name="$2" rc='' cnt=0
   while rc="${card#*${BR}${name};}"; do