]> git.plutz.net Git - lobster/blobdiff - pdiread.sh
Merge commit 'a27498203e5d589514f082a0fcdcca53e31c595e' into cgilite
[lobster] / pdiread.sh
index 6f15658dc912c72a187c1559328e1e77a763b741..58baa88dac998826f5bb886b882bb322839a9459 100755 (executable)
@@ -103,6 +103,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