1 """This script generates a Python codec module from a Windows Code Page.
3 It uses the function MultiByteToWideChar to generate a decoding table.
7 from ctypes
import wintypes
8 from gencodec
import codegen
11 def genwinmap(codepage
):
12 MultiByteToWideChar
= ctypes
.windll
.kernel32
.MultiByteToWideChar
13 MultiByteToWideChar
.argtypes
= [wintypes
.UINT
, wintypes
.DWORD
,
14 wintypes
.LPCSTR
, ctypes
.c_int
,
15 wintypes
.LPWSTR
, ctypes
.c_int
]
16 MultiByteToWideChar
.restype
= ctypes
.c_int
20 for i
in range(32) + [127]:
21 enc2uni
[i
] = (i
, 'CONTROL CHARACTER')
24 buf
= ctypes
.create_unicode_buffer(2)
25 ret
= MultiByteToWideChar(
29 assert ret
== 1, "invalid code page"
30 assert buf
[1] == '\x00'
32 name
= unicodedata
.name(buf
[0])
39 enc2uni
[i
] = (ord(buf
[0]), name
)
43 def genwincodec(codepage
):
45 map = genwinmap(codepage
)
46 encodingname
= 'cp%d' % codepage
47 code
= codegen("", map, encodingname
)
48 # Replace first lines with our own docstring
50 """Python Character Mapping Codec %s generated on Windows:
52 python Tools/unicode/genwincodec.py %s
54 ''' % (encodingname
, ' '.join(platform
.win32_ver()), codepage
55 ) + code
.split('"""#"', 1)[1]
59 if __name__
== '__main__':
61 genwincodec(int(sys
.argv
[1]))