encode Python strings more correctly than before
authorThorsten Glaser <tg@mirbsd.org>
Fri, 20 Jun 2014 22:51:48 +0000 (22:51 +0000)
committerThorsten Glaser <tg@mirbsd.org>
Fri, 20 Jun 2014 22:51:48 +0000 (22:51 +0000)
… and I had searched wide and far. But, as Teckids commit
8c602b87620514d04965f3fcd8000ea65652fd80 describes, hex-encoding
e̲v̲e̲r̲y̲ appears to be the only really working way…

mksh/verscmp

index b1fa29a..9d7efe0 100644 (file)
@@ -1,7 +1,7 @@
 #!/bin/mksh
-# $MirOS: contrib/hosted/tg/verscmp,v 1.1 2013/01/03 22:15:00 tg Exp $
+# $MirOS: contrib/hosted/tg/verscmp,v 1.2 2014/06/20 22:50:56 tg Exp $
 #-
-# Copyright © 2013
+# Copyright © 2013, 2014
 #      Thorsten Glaser <tg@mirbsd.org>
 #
 # Provided that these terms and disclaimer and all copyright notices
@@ -28,12 +28,30 @@ fa=$1; fb=$2
 py='# coding: utf-8'
 nl=$'\n'
 
+function str2python {
+       [[ -o utf8-mode ]]; local u=$?
+       set +U
+
+       local s="$*" t=\"
+       local -i i=0 n=${#s}
+       local -Uui16 -Z5 hv
+
+       while (( i < n )); do
+               hv=1#${s:(i++):1}
+               t+=\\x${hv#16#}
+       done
+       t+=\"
+       print -nr -- "$t"
+
+       (( u )) || set -U
+}
+
 function pyadd {
        local field=$1 file=$2 cola colb rest
 
        py+=$nl"$field = {"
        while read cola colb rest; do
-               py+=$nl"'''${cola//\\/\\\\}''': '''${colb//\\/\\\\}''',"
+               py+=$nl"$(str2python "$cola"): $(str2python "$colb"),"
        done <"$file"
        py+=$nl"}"
 }