mirror of https://github.com/python/cpython.git
Apply some cosmetic fixes to the output of the script.
Only include the decoding map if no table can be generated.
This commit is contained in:
parent
982e8d671c
commit
bd20ea55bc
|
@ -15,12 +15,14 @@
|
|||
The tool also writes marshalled versions of the mapping tables to the
|
||||
same location (with .mapping extension).
|
||||
|
||||
Written by Marc-Andre Lemburg (mal@lemburg.com). Modified to generate
|
||||
Unicode table maps for decoding.
|
||||
Written by Marc-Andre Lemburg (mal@lemburg.com).
|
||||
|
||||
(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
|
||||
(c) Copyright Guido van Rossum, 2000.
|
||||
|
||||
Table generation:
|
||||
(c) Copyright Marc-Andre Lemburg, 2005.
|
||||
Licensed to PSF under a Contributor Agreement.
|
||||
|
||||
"""#"
|
||||
|
||||
|
@ -117,21 +119,22 @@ def readmap(filename):
|
|||
|
||||
return enc2uni
|
||||
|
||||
def hexrepr(t):
|
||||
def hexrepr(t, precision=4):
|
||||
|
||||
if t is None:
|
||||
return 'None'
|
||||
try:
|
||||
len(t)
|
||||
except:
|
||||
return '0x%04x' % t
|
||||
return '0x%0*X' % (precision, t)
|
||||
try:
|
||||
return '(' + ', '.join(map(lambda t: '0x%04x' % t, t)) + ')'
|
||||
return '(' + ', '.join(['0x%0*X' % (precision, item)
|
||||
for item in t]) + ')'
|
||||
except TypeError, why:
|
||||
print '* failed to convert %r: %s' % (t, why)
|
||||
raise
|
||||
|
||||
def python_mapdef_code(varname, map, comments=1):
|
||||
def python_mapdef_code(varname, map, comments=1, precisions=(2, 4)):
|
||||
|
||||
l = []
|
||||
append = l.append
|
||||
|
@ -150,6 +153,7 @@ def python_mapdef_code(varname, map, comments=1):
|
|||
mappings = map.items()
|
||||
mappings.sort()
|
||||
i = 0
|
||||
key_precision, value_precision = precisions
|
||||
for mapkey, mapvalue in mappings:
|
||||
mapcomment = ''
|
||||
if isinstance(mapkey, tuple):
|
||||
|
@ -164,8 +168,8 @@ def python_mapdef_code(varname, map, comments=1):
|
|||
# No need to include identity mappings, since these
|
||||
# are already set for the first 256 code points.
|
||||
continue
|
||||
key = hexrepr(mapkey)
|
||||
value = hexrepr(mapvalue)
|
||||
key = hexrepr(mapkey, key_precision)
|
||||
value = hexrepr(mapvalue, value_precision)
|
||||
if mapcomment and comments:
|
||||
append(' %s: %s,\t# %s' % (key, value, mapcomment))
|
||||
else:
|
||||
|
@ -188,7 +192,7 @@ def python_mapdef_code(varname, map, comments=1):
|
|||
|
||||
return l
|
||||
|
||||
def python_tabledef_code(varname, map, comments=1):
|
||||
def python_tabledef_code(varname, map, comments=1, key_precision=2):
|
||||
|
||||
l = []
|
||||
append = l.append
|
||||
|
@ -236,7 +240,7 @@ def python_tabledef_code(varname, map, comments=1):
|
|||
mapchar = unichr(mapvalue)
|
||||
if mapcomment and comments:
|
||||
append(' %r\t# %s -> %s' % (mapchar,
|
||||
hexrepr(key),
|
||||
hexrepr(key, key_precision),
|
||||
mapcomment))
|
||||
else:
|
||||
append(' %r' % mapchar)
|
||||
|
@ -263,7 +267,8 @@ def codegen(name, map, comments=1):
|
|||
encoding_map_code = python_mapdef_code(
|
||||
'encoding_map',
|
||||
codecs.make_encoding_map(map),
|
||||
comments=comments)
|
||||
comments=comments,
|
||||
precisions=(4, 2))
|
||||
|
||||
l = [
|
||||
'''\
|
||||
|
@ -303,22 +308,28 @@ class StreamReader(Codec,codecs.StreamReader):
|
|||
def getregentry():
|
||||
|
||||
return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
|
||||
''')
|
||||
|
||||
# Add decoding table or map (with preference to the table)
|
||||
if not decoding_table_code:
|
||||
l.append('''
|
||||
### Decoding Map
|
||||
''')
|
||||
l.extend(decoding_map_code)
|
||||
|
||||
# Add optional decoding table
|
||||
if decoding_table_code:
|
||||
l.extend(decoding_map_code)
|
||||
else:
|
||||
l.append('''
|
||||
### Decoding Table
|
||||
''')
|
||||
l.extend(decoding_table_code)
|
||||
|
||||
# Add encoding map
|
||||
l.append('''
|
||||
### Encoding Map
|
||||
''')
|
||||
l.extend(encoding_map_code)
|
||||
|
||||
# Final new-line
|
||||
l.append('\n')
|
||||
|
||||
return '\n'.join(l)
|
||||
|
||||
|
@ -343,6 +354,8 @@ def convertdir(dir,prefix='',comments=1):
|
|||
mapnames = os.listdir(dir)
|
||||
for mapname in mapnames:
|
||||
mappathname = os.path.join(dir, mapname)
|
||||
if not os.path.isfile(mappathname):
|
||||
continue
|
||||
name = os.path.split(mapname)[1]
|
||||
name = name.replace('-','_')
|
||||
name = name.split('.')[0]
|
||||
|
|
Loading…
Reference in New Issue