o
    e                     @  s   U d Z ddlmZ ddlmZ ddlmZ ddlmZm	Z	m
Z
 dddZdddZdddZe	jee	jee	jdd e	jee	jdd iZded< d ddZdS )!zSupport functions called by the C++ library binding layer.

Not intended to be called from Python, and subject to change at any time.
    )annotations)Callable)warn)
DictionaryNamePdfpdfr   versionstrreturnNonec                 C  sd   t j| jvrdS | jddd}d|v r ||d< W d   dS W d   dS 1 s+w   Y  dS )z-Update XMP metadata to specified PDF version.NF)Zset_pikepdf_as_editorZupdate_docinfozpdf:PDFVersion)r   ZMetadataZRootZopen_metadata)r   r	   meta r   CD:\Projects\ConvertPro\env\Lib\site-packages\pikepdf/_cpphelpers.pyupdate_xmp_pdfversion   s   
"r   nintc                   sz   | dk rt d|  dg }| dkr$t| d d\} }|| | dkstd  fddt|D }d	d
d |D S )z9Excel-style column numbering A..Z, AA..AZ..BA..ZZ.., AAA.   Can't represent z in alphabetic numberingr      Ac                   s   g | ]} | qS r   r   ).0vbaser   r   
<listcomp>$   s    z_alpha.<locals>.<listcomp> c                 s  s    | ]}t |V  qd S N)chr)r   or   r   r   	<genexpr>%   s    z_alpha.<locals>.<genexpr>)
ValueErrordivmodappendordreversedjoin)r   prZordsr   r   r   _alpha   s   
r)   c                 C  s`   d|   kr
dksn t d|  dd}d}|D ]\}}| |kr-||7 }| |8 } | |ks!q|S )z>Convert integer n to Roman numeral representation as a string.r   i  r   z in Roman numerals))i  M)i  ZCM)i  D)i  ZCD)d   C)Z   ZXC)2   L)(   ZXL)
   X)	   ZIX)   V)   ZIV)r   Ir   )r!   )r   Zroman_numeralsromanvalueZnumeralr   r   r   _roman(   s   r;   c                 C     t |  S r   )r)   lowerxr   r   r   <lambda>F       r@   c                 C  r<   r   )r;   r=   r>   r   r   r   r@   H   rA   z dict[Name, Callable[[int], str]]LABEL_STYLE_MAP
label_dictint | Dictionaryc                 C  s   t | tr	t| S d}tj| v r| tj }|t|7 }tj| v rUtj| v r*| tj nd}t |ts8tdt d}| tj }t |trPt	| }||}||7 }|S tdt |S )z?Convert a label dictionary returned by QPDF into a text string.r   r   z9Page label dictionary has invalid non-integer start valuez2Page label dictionary has invalid page label style)

isinstancer   r
   r   PSZStr   UserWarningrB   )rC   labelprefixZnumeric_valuestyleZstyle_fnr:   r   r   r   label_from_label_dictL   s*   







rL   N)r   r   r	   r
   r   r   )r   r   r   r
   )rC   rD   r   r
   )__doc__
__future__r   typingr   warningsr   Zpikepdfr   r   r   r   r)   r;   r+   r
   r   aRr(   rB   __annotations__rL   r   r   r   r   <module>   s   





	