]> git.phdru.name Git - dotfiles.git/commitdiff
bin: Refactor and improve more re-encoding utilities
authorOleg Broytman <phd@phdru.name>
Fri, 25 Oct 2024 11:54:18 +0000 (14:54 +0300)
committerOleg Broytman <phd@phdru.name>
Fri, 25 Oct 2024 11:54:18 +0000 (14:54 +0300)
bin/iconv.py
bin/iconvx.py
bin/recode-inplace

index 9cb164fef0aa72bc6a2399d1ab4a988dd27d4c59..8c8d96f0f252fccc493901249a0b67561c573474 100755 (executable)
@@ -2,31 +2,25 @@
 "Recode to default charset"
 
 import sys
-from getopt import getopt
-from m_lib.defenc import default_encoding
 
-from_charset = "cp1251"
-to_charset = default_encoding
+from recode_filenames import parse_args
+from_encoding, to_encoding, files = parse_args(default='-')
 
-options, arguments = getopt(sys.argv[1:], 'f:t:')
-for option, value in options:
-    if option == '-f':
-        from_charset = value
-    elif option == '-t':
-        to_charset = value
 
 output = getattr(sys.stdout, 'buffer', sys.stdout)
 
 
-if arguments:
-    for file in arguments:
+if files != ['-']:
+    for file in files:
         with open(file, 'rb') as infile:
             for line in infile:
                 output.write(
-                    line.decode(from_charset, "replace").
-                    encode(to_charset, "replace"))
+                    line.decode(from_encoding, "replace").
+                    encode(to_encoding, "replace"))
 else:
     input = getattr(sys.stdin, 'buffer', sys.stdin)
     for line in input:
         output.write(
-            line.decode(from_charset, "replace").encode(to_charset, "replace"))
+            line.decode(from_encoding, "replace").
+            encode(to_encoding, "replace")
+        )
index b4c990e1aeee6e1c93dd4339ec52cbb5e035b14c..7e9297309c3ecfd52aa59c605ef93e89d8de7673 100755 (executable)
@@ -1,38 +1,23 @@
 #! /usr/bin/env python3
 "iconv wrapper"
 
-from getopt import getopt
-import os, shutil, sys, tempfile
+import os, shutil, tempfile
 
-options, arguments = getopt(sys.argv[1:], 'f:t:')
-
-from_charset = to_charset = None
-
-for option, value in options:
-    if option == '-f':
-        from_charset = value
-    elif option == '-t':
-        to_charset = value
-
-
-if from_charset is None:
-    raise ValueError("you must use -f param to name source charset")
-
-if to_charset is None:
-    raise ValueError("you must use -t param to name destination charset")
+from recode_filenames import parse_args
+from_encoding, to_encoding, files = parse_args(default='-')
 
 
 tempfname = "_iconvx" + tempfile.gettempprefix() + "tmp"
 
-if arguments:
+if files != ['-']:
     try:
-        for file in arguments:
+        for file in files:
             os.system(
                 "iconv.py -f '%s' -t '%s' '%s' > '%s'" % (
-                    from_charset, to_charset, file, tempfname))
+                    from_encoding, to_encoding, file, tempfname))
             shutil.copy2(tempfname, file)
     finally:
         os.unlink(tempfname)
 
 else:  # filter stdin => stdout
-    os.system("iconv.py -f '%s' -t '%s'" % (from_charset, to_charset))
+    os.system("iconv.py -f '%s' -t '%s'" % (from_encoding, to_encoding))
index 77ff3063f46ce5dc62fb0191706959ec4e592a19..91b629a1d2d69ab468c427c540e1194e6dbd272a 100755 (executable)
@@ -1,14 +1,12 @@
 #! /bin/sh
+set -e
 
-fromenc="$1"
-toenc="$2"
-shift 2
+tmpfile="`mktemp`"
+trap "exec rm -f $tmpfile" EXIT HUP INT QUIT PIPE TERM
 
-tmpfile="`mktemp`" &&
+. get_encodings
 
-for file in "$@"; do
-   iconv -f "$fromenc" -t "$toenc" "$file" >"$tmpfile" &&
+for file in "$filenames"; do
+   iconv -f "$from_encoding" -t "$to_encoding" "$file" >"$tmpfile"
    cp "$tmpfile" "$file"
 done
-
-exec rm "$tmpfile"