1#!/usr/bin/python
2# -*- coding: utf-8 -*-
3
4# Test program for :make, :grep and :cgetfile.
5
6from __future__ import print_function, unicode_literals
7import locale
8import io
9import sys
10
11def set_output_encoding(enc=None):
12    """Set the encoding of stdout and stderr
13
14    arguments:
15      enc -- Encoding name.
16             If omitted, locale.getpreferredencoding() is used.
17    """
18    if enc is None:
19        enc = locale.getpreferredencoding()
20
21    def get_text_writer(fo, **kwargs):
22        kw = dict(kwargs)
23        kw.setdefault('errors', 'backslashreplace') # use \uXXXX style
24        kw.setdefault('closefd', False)
25
26        if sys.version_info[0] < 3:
27            # Work around for Python 2.x
28            # New line conversion isn't needed here. Done in somewhere else.
29            writer = io.open(fo.fileno(), mode='w', newline='', **kw)
30            write = writer.write    # save the original write() function
31            enc = locale.getpreferredencoding()
32            def convwrite(s):
33                if isinstance(s, bytes):
34                    write(s.decode(enc))    # convert to unistr
35                else:
36                    write(s)
37                try:
38                    writer.flush()  # needed on Windows
39                except IOError:
40                    pass
41            writer.write = convwrite
42        else:
43            writer = io.open(fo.fileno(), mode='w', **kw)
44        return writer
45
46    sys.stdout = get_text_writer(sys.stdout, encoding=enc)
47    sys.stderr = get_text_writer(sys.stderr, encoding=enc)
48
49
50def main():
51    enc = 'utf-8'
52    if len(sys.argv) > 1:
53        enc = sys.argv[1]
54    set_output_encoding(enc)
55
56    message_tbl = {
57            'utf-8': 'ÀÈÌÒÙ こんにちは 你好',
58            'latin1': 'ÀÈÌÒÙ',
59            'cp932': 'こんにちは',
60            'cp936': '你好',
61            }
62
63    print('Xfoobar.c(10) : %s (%s)' % (message_tbl[enc], enc))
64
65
66if __name__ == "__main__":
67    main()
68