3

T'ícã@sFdZddlZddlZddlmZddlmZddlmZm	Z	m
Z
mZmZddl
Z
yddlmZWnek
rxdZYnXed)d*d+d,d-d.d/gƒZGdd„de
ƒZeeeeefdœdd„Zd0eeeeedœdd„Zd1eeeeedœdd„Zeeed œd!d"„Zeeed#œd$d%„Zeee	eed&œd'd(„ZejjeƒdS)2z#Image utility functions for Sphinx.éN)ÚOrderedDict)Úpath)ÚIOÚBinaryIOÚ
NamedTupleÚOptionalÚTuple)ÚImageú.gifú	image/gifú.jpgú
image/jpegú.pngú	image/pngú.pdfúapplication/pdfú.svgú
image/svg+xmlú.svgzú.aiúapplication/illustratorc@seZdZUeeedS)ÚDataURIN)Ú__name__Ú
__module__Ú__qualname__ÚstrÚmimetypeÚcharsetÚbytesÚdata©r r ú4/tmp/pip-build-gk9425m9/sphinx/sphinx/util/images.pyrs
r)ÚfilenameÚreturncCs–y|tj|ƒ}|ddkrd}n4t|dtƒs:t|dtƒrRt|dƒt|dƒf}|dkrztrztj|ƒ}|j}WdQRX|Stk
rdSXdS)Nrééÿÿÿÿ)	Ú	imagesizeÚgetÚ
isinstanceÚfloatÚintr	ÚopenÚsizeÚ	Exception)r"r,Zimr r r!Úget_image_size!s
r.)ÚstreamÚdefaultr#cCstj|ƒ}|rd|S|SdS)Nzimage/)ÚimghdrÚwhat)r/r0Zimgtyper r r!Úguess_mimetype_for_stream2s
r3Ú)r"r0r#cCsNtj|jƒƒ\}}|tkr"t|Stj|ƒrJt|dƒ}t||dSQRX|S)NÚrb)r0)rÚsplitextÚlowerÚ
mime_suffixesÚexistsr+r3)r"r0Ú_ÚextÚfr r r!Úguess_mimetype:s
r=)rr#cCs&x tjƒD]\}}||kr
|Sq
WdS)N)r8Úitems)rr;Z	_mimetyper r r!Úget_image_extensionEsr?)Úurir#cCs‚|jdƒsdSd}d}|dd…jddƒ\}}x<|jdƒD].}|dkrHq:|jd	ƒr`|d
d…}q:|r:|}q:Wtj|ƒ}t|||ƒS)Nzdata:z
text/plainzUS-ASCIIéú,r$ú;Úbase64zcharset=é)Ú
startswithÚsplitrDÚ	b64decoder)r@rrZ
propertiesrÚpropZ
image_datar r r!Úparse_data_uriMs


rJ)Úhr<r#cCs2yd|jƒjƒkrdSWntk
r,YnXdS)zEAn additional imghdr library helper; test the header is SVG's or not.z<svgzsvg+xmlN)Údecoder7ÚUnicodeDecodeError)rKr<r r r!Útest_svgbsrN)r
r)rr
)rr)rr)rr)rr)rr)N)r4N)Ú__doc__rDr1ÚcollectionsrÚosrÚtypingrrrrrr&ZPILr	ÚImportErrorr8rrr*r.r3r=r?rJrrNÚtestsÚappendr r r r!Ú<module>s4