mirror of
https://github.com/python/cpython.git
synced 2025-07-15 23:35:23 +00:00
Merged revisions 74000-74001 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r74000 | amaury.forgeotdarc | 2009-07-13 22:01:11 +0200 (lun., 13 juil. 2009) | 4 lines #1616979: Add the cp720 (Arabic DOS) encoding. Since there is no official mapping file from unicode.org, the codec file is generated on Windows with the new genwincodec.py script. ........ r74001 | amaury.forgeotdarc | 2009-07-13 22:03:21 +0200 (lun., 13 juil. 2009) | 2 lines NEWS entry for r74000. ........
This commit is contained in:
parent
514ae0178d
commit
8b84ea0aa4
5 changed files with 383 additions and 2 deletions
|
@ -237,11 +237,11 @@ def python_tabledef_code(varname, map, comments=1, key_precision=2):
|
|||
else:
|
||||
mapchar = chr(mapvalue)
|
||||
if mapcomment and comments:
|
||||
append(' %r\t# %s -> %s' % (mapchar,
|
||||
append(' %a \t# %s -> %s' % (mapchar,
|
||||
hexrepr(key, key_precision),
|
||||
mapcomment))
|
||||
else:
|
||||
append(' %r' % mapchar)
|
||||
append(' %a' % mapchar)
|
||||
|
||||
append(')')
|
||||
return l
|
||||
|
|
61
Tools/unicode/genwincodec.py
Normal file
61
Tools/unicode/genwincodec.py
Normal file
|
@ -0,0 +1,61 @@
|
|||
"""This script generates a Python codec module from a Windows Code Page.
|
||||
|
||||
It uses the function MultiByteToWideChar to generate a decoding table.
|
||||
"""
|
||||
|
||||
import ctypes
|
||||
from ctypes import wintypes
|
||||
from gencodec import codegen
|
||||
import unicodedata
|
||||
|
||||
def genwinmap(codepage):
|
||||
MultiByteToWideChar = ctypes.windll.kernel32.MultiByteToWideChar
|
||||
MultiByteToWideChar.argtypes = [wintypes.UINT, wintypes.DWORD,
|
||||
wintypes.LPCSTR, ctypes.c_int,
|
||||
wintypes.LPWSTR, ctypes.c_int]
|
||||
MultiByteToWideChar.restype = ctypes.c_int
|
||||
|
||||
enc2uni = {}
|
||||
|
||||
for i in list(range(32)) + [127]:
|
||||
enc2uni[i] = (i, 'CONTROL CHARACTER')
|
||||
|
||||
for i in range(256):
|
||||
buf = ctypes.create_unicode_buffer(2)
|
||||
ret = MultiByteToWideChar(
|
||||
codepage, 0,
|
||||
chr(i), 1,
|
||||
buf, 2)
|
||||
assert ret == 1, "invalid code page"
|
||||
assert buf[1] == '\x00'
|
||||
try:
|
||||
name = unicodedata.name(buf[0])
|
||||
except ValueError:
|
||||
try:
|
||||
name = enc2uni[i][1]
|
||||
except KeyError:
|
||||
name = ''
|
||||
|
||||
enc2uni[i] = (ord(buf[0]), name)
|
||||
|
||||
return enc2uni
|
||||
|
||||
def genwincodec(codepage):
|
||||
import platform
|
||||
map = genwinmap(codepage)
|
||||
encodingname = 'cp%d' % codepage
|
||||
code = codegen("", map, encodingname)
|
||||
# Replace first lines with our own docstring
|
||||
code = '''\
|
||||
"""Python Character Mapping Codec %s generated on Windows:
|
||||
%s with the command:
|
||||
python Tools/unicode/genwincodec.py %s
|
||||
"""#"
|
||||
''' % (encodingname, ' '.join(platform.win32_ver()), codepage
|
||||
) + code.split('"""#"', 1)[1]
|
||||
|
||||
print(code)
|
||||
|
||||
if __name__ == '__main__':
|
||||
import sys
|
||||
genwincodec(int(sys.argv[1]))
|
7
Tools/unicode/genwincodecs.bat
Normal file
7
Tools/unicode/genwincodecs.bat
Normal file
|
@ -0,0 +1,7 @@
|
|||
@rem Recreate some python charmap codecs from the Windows function
|
||||
@rem MultiByteToWideChar.
|
||||
|
||||
@cd /d %~dp0
|
||||
@mkdir build
|
||||
@rem Arabic DOS code page
|
||||
c:\python30\python genwincodec.py 720 > build/cp720.py
|
Loading…
Add table
Add a link
Reference in a new issue