]> git.phdru.name Git - dotfiles.git/blob - bin/recode_filenames.py
Initial import
[dotfiles.git] / bin / recode_filenames.py
1 #! /usr/bin/env python
2 # -*- coding: koi8-r -*-
3
4
5 import sys
6
7 src_encoding = sys.argv[1]
8 dst_encoding = sys.argv[2]
9
10 if src_encoding == "translit":
11    if dst_encoding == "koi8-r":
12       from m_lib.rus.lat2rus import lat2koi as _recode
13    elif dst_encoding == "cp1251":
14       from m_lib.rus.lat2rus import lat2win as _recode
15    else:
16       raise NotImplementedError, "destination encoding must be koi8-r or cp1251, not `%s'" % dst_encoding
17
18 elif dst_encoding == "translit":
19    if src_encoding == "koi8-r":
20       from m_lib.rus.rus2lat import koi2lat as _recode
21    elif src_encoding == "cp1251":
22       from m_lib.rus.rus2lat import win2lat as _recode
23    else:
24       raise NotImplementedError, "source encoding must be koi8-r or cp1251, not `%s'" % src_encoding
25
26    from m_lib.rus.rus2lat import koi2lat_d
27    koi2lat_d["Ъ"] = '' # remove apostrophs -
28    koi2lat_d["Ь"] = '' # they are not very good characters in filenames
29    koi2lat_d["ъ"] = '' # especially on Windoze
30    koi2lat_d["ь"] = '' # :-)
31
32 elif src_encoding == "url":
33    try:
34       src_encoding, dst_encoding = dst_encoding.split('/')
35    except ValueError:
36       src_encoding = dst_encoding
37    from m_lib.opstring import recode
38    import urllib
39    def _recode(s):
40       s = urllib.unquote(s)
41       if src_encoding <> dst_encoding:
42          s = recode(s, src_encoding, dst_encoding, "replace")
43       return s
44
45 elif dst_encoding == "url":
46    try:
47       src_encoding, dst_encoding = src_encoding.split('/')
48    except ValueError:
49       dst_encoding = src_encoding
50    from m_lib.opstring import recode
51    import urllib
52    def _recode(s):
53       if src_encoding <> dst_encoding:
54          s = recode(s, src_encoding, dst_encoding, "replace")
55       return urllib.quote(s, safe=";/?:@&=+$,()'") # wget treats them as safe
56
57 else:
58    from m_lib.opstring import recode
59    def _recode(s):
60       return recode(s, src_encoding, dst_encoding, "replace")
61
62
63 if __name__ == "__main__":
64    import os
65    for filename in sys.argv[3:]:
66       new_name = _recode(filename)
67       if new_name  <> filename:
68          os.rename(filename, new_name)