diff -ur v1/idt.py v2/idt.py --- v1/idt.py 2018-09-25 22:19:24.000000000 +0900 +++ v2/idt.py 2018-10-02 22:53:13.000000000 +0900 @@ -52,13 +52,11 @@ if __name__ == "__main__": b = nkf.get_stdin() - opt = nkf.guess(b) - u8 = nkf.cvt(b, '-u') - s = nkf.dec(u8) + (s, opt) = nkf.to_str(b) s = '\n'.join( map( cv, s.split('\n') ) ) - u8 = nkf.enc(s) - b = nkf.cvt(u8, opt) + o = get_opt('-o', '') + b = nkf.str_to( s, '-' + o if o else opt ) nkf.put_stdout(b) # EOF diff -ur v1/nkf.py v2/nkf.py --- v1/nkf.py 2018-09-18 22:20:14.000000000 +0900 +++ v2/nkf.py 2018-10-02 23:07:15.000000000 +0900 @@ -22,23 +22,45 @@ fo = sys.stdout if six.PY2 else sys.stdout.buffer fo.write(b) -def guess(b): +opt_dic = { + 'ISO-2022-JP': '-j', + 'EUC-JP': '-e', + 'Shift_JIS': '-s', + 'UTF-8': '-u', + 'ASCII': '', +} + +def guess(b, style_opt=False): b = do_cmd('nkf -g', b) - return dec(b).strip() + opt = dec(b).strip() + return opt_dic.get(opt, '-u') if style_opt else opt -def cvt(b, opt): - if opt == 'ASCII': +def cvt(b, opt, do_guess=False): + if opt not in opt_dic.values(): + opt = opt_dic.get(opt, '-u') + if opt == '': return b - d = { - 'ISO-2022-JP': '-j', - 'EUC-JP': '-e', - 'Shift_JIS': '-s', - 'UTF-8': '-u', - } - if opt not in d.values(): - opt = d.get(opt, '-u') + if do_guess: + from_opt = guess(b, True) + if from_opt == '' or from_opt == opt: + return b return do_cmd('nkf ' + opt, b) +def to_utf8(b): + opt = guess(b, True) + u8 = b if opt in ('-u', '') else cvt(b, '-u') + return (u8, opt) + +def utf8_to(u8, opt): + return u8 if opt in ('-u', '') else cvt(u8, opt) + +def to_str(b): + (u8, opt) = to_utf8(b) + return ( dec(u8), opt ) + +def str_to(s, opt): + return utf8_to( enc(s), opt ) + if __name__ == "__main__": b = get_stdin() opt = guess(b)