neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

test_makeencoding.py (1956B)


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