B .^@sddlZddlZddlmZmZddlmZmZm Z ddZ GdddejZ Gd d d ej Zed ed d Zee je e ee jeee jddS)N)Image ImageFile)i8i16leo16lecCs|dddkS)N)sDanMsLinS)prefixr r 6/tmp/pip-install-mwhup7aw/Pillow/PIL/MspImagePlugin.py_accept$sr c@seZdZdZdZddZdS) MspImageFileMSPz Windows PaintcCs|jd}|dddkr$tdd}x,tdddD]}|t|||dA}q6W|dkrftdd|_t|ddt|d df|_|ddd krd d |jdd fg|_ndd |jddfg|_dS)N r)sDanMsLinSznot an MSP filerzbad MSP checksum1sDanMraw)rr)rrrr) fpread SyntaxErrorrangei16mode_sizesizeZtile)selfschecksumir r r _open2s "zMspImageFile._openN)__name__ __module__ __qualname__formatformat_descriptionr r r r r r -sr c@seZdZdZddZdS) MspDecoderTc Cst}td|jjdd}y4|jdtd|jj |j |jj d}Wntj k rrt dYnXxt |D]\}}y|dkr||w~|j |}t||krt d ||fd}xx||kr>t||} |d 7}| dkrtd ||\} } || | |d7}q| } ||||| || 7}qWWq~tj k rft d |Yq~Xq~W||d dS)N)rz<%dHrzTruncated MSP file in row maprz/Truncated MSP file, expected %d bytes on row %srZBczCorrupted MSP file in row %d)rrr)rr)ioBytesIO bytearraystateZxsizefdseekstruct unpack_fromZysizererrorOSError enumeratewritelenrZ set_as_rawgetvalue) rbufferimgZ blank_lineZrowmapxZrowlenrowidxZruntypeZruncountZrunvalr r r decodens@ $        zMspDecoder.decodeN)r!r"r#Z _pulls_fdr=r r r r r&Is#r&rcCs|jdkrtd|jdgd}tdtd|d<|d<|j\|d<|d <d \|d <|d <d \|d <|d<|j\|d<|d<d}x|D] }||A}qW||d<x|D]}|t|qWt||dd|jddfgdS)Nrzcannot write mode %s as MSPrsDasnMrr)rrrrr(r) r)rrr)rrr)rr3rrr5o16r_save)Zimrfilenameheaderrhr r r rDs     rDz.msp)r*r0rr_binaryrrrrrCr r Z PyDecoderr&Zregister_decoderrDZ register_openr$Z register_saveZregister_extensionr r r r s P