@@ -256,13 +256,13 @@ def _transformer(cls, tokens, slant, extend):
256
256
def fontname (name ):
257
257
result = name
258
258
if slant :
259
- result += '_Slant_' + str (int (1000 * slant ))
259
+ result += b '_Slant_' + bytes (int (1000 * slant ))
260
260
if extend != 1.0 :
261
- result += '_Extend_' + str (int (1000 * extend ))
261
+ result += b '_Extend_' + bytes (int (1000 * extend ))
262
262
return result
263
263
264
264
def italicangle (angle ):
265
- return str (float (angle ) - np .arctan (slant ) / np .pi * 180 )
265
+ return bytes (float (angle ) - np .arctan (slant ) / np .pi * 180 )
266
266
267
267
def fontmatrix (array ):
268
268
array = array .lstrip ('[' ).rstrip (']' ).strip ().split ()
@@ -276,31 +276,31 @@ def fontmatrix(array):
276
276
newmatrix = np .dot (modifier , oldmatrix )
277
277
array [::2 ] = newmatrix [0 :3 , 0 ]
278
278
array [1 ::2 ] = newmatrix [0 :3 , 1 ]
279
- return '[' + ' ' .join (str (x ) for x in array ) + ']'
279
+ return b '[' + ' ' .join (bytes (x ) for x in array ) + b ']'
280
280
281
281
def replace (fun ):
282
282
def replacer (tokens ):
283
283
token , value = next (tokens ) # name, e.g., /FontMatrix
284
- yield value
284
+ yield bytes ( value )
285
285
token , value = next (tokens ) # possible whitespace
286
286
while token == 'whitespace' :
287
- yield value
287
+ yield bytes ( value )
288
288
token , value = next (tokens )
289
289
if value != '[' : # name/number/etc.
290
- yield fun (value )
290
+ yield bytes ( fun (value ) )
291
291
else : # array, e.g., [1 2 3]
292
292
array = []
293
293
while value != ']' :
294
294
array += value
295
295
token , value = next (tokens )
296
296
array += value
297
- yield fun ('' .join (array ))
297
+ yield bytes ( fun ('' .join (array ) ))
298
298
return replacer
299
299
300
300
def suppress (tokens ):
301
301
for x in itertools .takewhile (lambda x : x [1 ] != 'def' , tokens ):
302
302
pass
303
- yield ''
303
+ yield b ''
304
304
305
305
table = {'/FontName' : replace (fontname ),
306
306
'/ItalicAngle' : replace (italicangle ),
@@ -325,18 +325,10 @@ def transform(self, effects):
325
325
multiplier by which the font is to be extended (so values less
326
326
than 1.0 condense). Returns a new :class:`Type1Font` object.
327
327
"""
328
- buffer = io .BytesIO ()
329
- try :
328
+ with io .BytesIO () as buffer :
330
329
tokenizer = self ._tokens (self .parts [0 ])
331
- for value in self ._transformer (tokenizer ,
332
- slant = effects .get ('slant' , 0.0 ),
333
- extend = effects .get ('extend' , 1.0 )):
334
- if six .PY3 and isinstance (value , int ):
335
- value = chr (value )
336
- value = value .encode ('latin-1' )
337
- buffer .write (value )
338
- result = buffer .getvalue ()
339
- finally :
340
- buffer .close ()
341
-
342
- return Type1Font ((result , self .parts [1 ], self .parts [2 ]))
330
+ transformed = self ._transformer (tokenizer ,
331
+ slant = effects .get ('slant' , 0.0 ),
332
+ extend = effects .get ('extend' , 1.0 ))
333
+ map (buffer .write , transformed )
334
+ return Type1Font ((buffer .getvalue (), self .parts [1 ], self .parts [2 ]))
0 commit comments