]> git.plutz.net Git - lobster/blobdiff - pdiread.sh
Merge commit 'a27498203e5d589514f082a0fcdcca53e31c595e' into cgilite
[lobster] / pdiread.sh
index 08fbaec3fb373c2fbb6cdde7974caaa520b849e3..58baa88dac998826f5bb886b882bb322839a9459 100755 (executable)
@@ -26,16 +26,6 @@ include_pdi="$0"
 BR='
 '
 
-unescape() {
-  local unescape='s;(^(\\\\)*|[^\\](\\\\)*)\\n;\1\n;g; s;\\(.);\1;g'
-  if [ $# -eq 0 ]; then
-    sed -E "$unescape"
-  else
-    printf %s "$*" \
-    | sed -E "$unescape"
-  fi
-}
-
 pdi_load() {
   # normalise PDI file for processing with pdi_* functions
   # functions in this library can only be applied to normalised data
@@ -113,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