Ë
    ÚÍ:j)  ã                   ó€  — U d Z ddlZddlmZ ddlmZmZmZmZm	Z	 ddddd	œZ
eeef   ed
<    G d„ de«      Z	 d$dededede	ee   ef   fd„Zdededededede	ee   ef   fd„Zdee   defd„Zdededefd„Zdede	eef   fd„Zdededefd„Zdee   dededefd„Zdededefd„Z G d „ d!«      Z G d"„ d#«      Zy)%zÒSparse Bit Set encoding/decoding for IFT (Incremental Font Transfer).

Implements the sparse bit set format defined in the W3C IFT specification:
https://w3c.github.io/IFT/Overview.html#sparse-bit-set-decoding
é    N)Údeque)ÚDictÚIterableÚOptionalÚSetÚTupleé   é   é   é   ©é   é   é   é    Ú_BF_MAX_HEIGHTc                   ó   — e Zd Zy)ÚSparseBitSetDecodeErrorN)Ú__name__Ú
__module__Ú__qualname__© ó    ús/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/fontTools/misc/iftSparseBitSet.pyr   r      s   „ Ør   r   ÚdataÚbiasÚmaxValueÚreturnc                 ó    — | st        d«      ‚t        | d   «      \  }}t        |   }||kD  rt        d|› d|› d|› �«      ‚t        | ||||«      S )aM  Decode a sparse bit set from binary data.

    Args:
        data: bytes-like object containing the sparse bit set encoding.
        bias: integer added to each decoded value.

    Returns:
        A tuple (values, bytesConsumed) where values is a set of integers
        and bytesConsumed is the number of bytes read from data.
    z
Empty datar   zHeight z exceeds max z for branch factor )r   Ú_decodeHeaderr   Ú_decodeImpl)r   r   r   ÚbranchFactorÚheightÚ	maxHeights         r   Údecoder%      sp   € ñ Ü% lÓ3Ð3ä(¨¨a©Ó1Ñ€L�&ä˜|Ñ,€IØ�	ÒÜ%Ø�f�X˜]¨9¨+Ð5HÈÈÐWó
ð 	
ô �t˜\¨6°4¸ÓBÐBr   r"   r#   c                 óÐ  — |dk(  rt        «       dfS t        | |«      }t        «       }t        «       }|j                  d«       |�r|j	                  «       \  }}	|j                  «       }
|
€t        d«      ‚|
dk(  rX||	z
  dz   }||z  }||z   }||kD  rŒPt        |||z   dz
  |z   «      }|dk  rd}||k  r|j                  t        ||dz   «      «       Œ�||	z
  }||z  }	 t        |
d«      }|dk(  rnb|	|k(  r5||z   |z   }||kD  r|j                  «        n?|dk\  r0|j                  |«       n||z  }|j                  ||z   |	dz   f«       |
d|z   z  }
Œt|r�Œ||j                  «       fS )Nr   é   )r   r'   zUnexpected end of datar   )ÚsetÚ_InputBitStreamr   ÚappendÚpopleftÚnextr   ÚminÚupdateÚrangeÚ_trailingZerosÚclearÚaddÚbytesConsumed)r   r"   r#   r   r   Ú	bitStreamÚresultÚqueueÚstartÚdepthÚbitsÚexpÚnodeSizeÚ	fillStartÚfillEndÚnextNodeSizeÚbitIndexÚvalÚ
startDeltas                      r   r!   r!   1   s«  € ð �‚{ä“�qˆzÐä  lÓ3€IÜ“u€Fô %*£G€EØ	‡L�L�Ôâ
Ø—}‘}“‰ˆˆuØ�~‰~ÓˆØˆ<Ü)Ð*BÓCÐCð �1Š9Ø˜5‘. 1Ñ$ˆCØ# SÑ(ˆHØ ™ˆIØ˜8Ò#ØÜ˜( E¨HÑ$4°qÑ$8¸4Ñ$?Ó@ˆGØ˜1Š}Ø�	Ø˜GÒ#Ø—‘œe I¨w¸©{Ó;Ô<Øð �u‰nˆØ# SÑ(ˆØÜ% d¨BÓ/ˆHØ˜2Š~ØØ˜ŠØ˜hÑ&¨Ñ-�Ø˜’>Ø—K‘K”MØØ˜!’8Ø—J‘J˜s•Oà%¨Ñ4�
Ø—‘˜e jÑ0°%¸!±)Ð<Ô=Ø�a˜8‘mÐ$Ñ$ˆDð ó1 ðP �I×+Ñ+Ó-Ð.Ð.r   Úvaluesc                 ó   — t        t        | «      «      }|st        dd«      S |d   }t        |«      }d}dD ]D  }t        ||«      }|t        |   kD  rŒt        |||«      }|�t        |«      t        |«      k  sŒC|}ŒF |€t        d|› �«      ‚|S )zøEncode a set of integers as a sparse bit set.

    Tries all branching factors and returns the shortest encoding.

    Args:
        values: iterable of non-negative integers.

    Returns:
        bytes containing the sparse bit set encoding.
    r   r   éÿÿÿÿNr   zCannot encode max value )Úsortedr(   Ú_encodeHeaderÚ_treeHeightr   Ú_encodeWithBfÚlenÚ
ValueError)rB   ÚvaluesSortedr   ÚvalueSetÚbestr"   r#   Úencodeds           r   ÚencoderO   j   s¬   € ô œ#˜f›+Ó&€LÙÜ˜Q Ó"Ð"à˜BÑ€HÜ�<Ó €Hà €DØ%ò ˆÜ˜\¨8Ó4ˆØ”N <Ñ0Ò0ØÜ ¨,¸Ó?ˆØˆ<œ3˜w›<¬#¨d«)Ó3Ø‰Dðð €|ÜÐ3°H°:Ð>Ó?Ð?Ø€Kr   c                 ó:   — dddddœ}t        |dz  ||    z  g«      S )Nr   r'   r   é   r   )Úbytes)r"   r#   ÚbranchFactorToIds      r   rF   rF   Š   s.   € Ø  q¨aÑ0ÐÜ�6˜Q‘;Ð"2°<Ñ"@Ñ@ÐAÓBÐBr   Ú
headerBytec                 ó8   — | dz  }dddddœ}| dz	  dz  }||   |fS )NrQ   r   r   r   r   )r   r'   r   rQ   r	   r   )rT   ÚidÚidToBranchFactorr#   s       r   r    r    �   s9   € Ø	�dÑ	€BØ  q¨RÑ0ÐØ˜A‰o Ñ%€FØ˜BÑ Ð'Ð'r   c                 ó8   — d}| }||k  r|| z  }|dz  }||k  rŒ|S )z<Return the minimum tree height needed to represent maxValue.r'   r   )r"   r   r#   Úcapacitys       r   rG   rG   –   s8   € à€FØ€HØ
�hÒ
Ø�LÑ ˆØ�!‰ˆð �hÓ
ð €Mr   rL   c                 ó  ‡— |dk(  rt        |d«      S i g}| D ].  }||z  }||z  }||d   vrd|d   |<   |d   |xx   d|z  z  cc<   Œ0 t        d|«      D ]U  }|d   }i }	|j                  «       D ](  \  }}
||z  }||z  }||	vrd|	|<   |	|xx   d|z  z  cc<   Œ* |j                  |	«       ŒW t	        | «      Šdt
        dt
        dt
        fˆfd„}t        |«      }||z  }t        ddd|dz
  fg«      }|rï|j                  «       \  }}}}|dz
  |z
  }d|cxk  rt        |«      k  rn n||   j                  |d«      nd}
||dz
  k  r$ |||«      ||z
  dz   k(  r|j                  d«       Œy|j                  |
«       |
dk7  r_||dz
  k  rW||z
  dz   |z  }|
}|rHt        |d«      }||z  |z   }|||z  z   }||z   dz
  }|j                  ||dz   ||f«       |d|z   z  }|rŒH|rŒït        ||«      |j                  «       z   S )	Nr   r'   rD   ÚloÚhir   c                 ó^   •— t        j                  ‰|«      t        j                  ‰| «      z
  S ©N)ÚbisectÚbisect_rightÚbisect_left)r[   r\   rK   s     €r   Ú
rangeCountz!_encodeWithBf.<locals>.rangeCount½   s/   ø€ Ü×"Ñ" <°Ó4´v×7IÑ7IØ˜"ó8
ñ 
ð 	
r   r   )rF   r/   Úitemsr*   rE   ÚintÚ_OutputBitStreamr   r+   rI   ÚgetÚwriter0   ÚtoBytes)rL   r"   r#   ÚlayersÚvÚ	nodeIndexÚbitPosÚ_Ú	prevLayerÚnewLayerÚbitmaskÚparentIndexrb   ÚstreamÚsubtreeSizer6   r8   Ú
rangeStartÚrangeEndÚlayerIdxÚ	childSizer9   r?   Ú
childIndexÚ
childStartÚchildEndrK   s                             @r   rH   rH       sŸ  ø€ Ø�‚{Ü˜\¨1Ó-Ð-ð %' 4€Fàò ,ˆØ˜Ñ%ˆ	Ø�\Ñ!ˆØ˜F 1™IÑ%Ø#$ˆF�1‰I�iÑ Øˆq‰	�)Ó  V¡Ñ+Ôð,ô �1�fÓò 	 ˆØ˜2‘Jˆ	Ø#%ˆØ"+§/¡/Ó"3ò 	1ÑˆI�wØ# |Ñ3ˆKØ Ñ-ˆFØ (Ñ*Ø()�˜Ñ%Ø�[Ó! Q¨&¡[Ñ0Ô!ð	1ð 	�‰�hÕð	 ô ˜(Ó#€Lð
”sð 
¤ð 
¬õ 
ô ˜lÓ+€FØ Ñ&€KÜ.3°a¸¸A¸{ÈQ¹Ð5OÐ4PÓ.Q€Eá
Ø16·±³Ñ.ˆ	�5˜* hØ˜A‘: Ñ%ˆð 34°xÔ2MÄ#ÀfÃ+Õ2MˆF�8Ñ× Ñ  ¨AÔ.ÐSTð 	ð �F˜Q‘JÒÙ˜: xÓ0°H¸zÑ4IÈAÑ4MÒMà�L‰L˜ŒOØà�‰�WÔà�aŠ<˜E F¨Q¡JÒ.Ø! JÑ.°Ñ2°|ÑCˆIØˆDÙÜ)¨$°Ó3�Ø&¨Ñ5¸Ñ@�
Ø'¨(°YÑ*>Ñ>�
Ø%¨	Ñ1°AÑ5�Ø—‘˜j¨%°!©)°ZÀÐJÔKØ˜!˜x™-Ð(Ñ(�ò ò/ ô> ˜ vÓ.°·±Ó1AÑAÐAr   r@   ÚmaxBitsc                 óN   — | dk(  r|S d}| dz  dk(  r| dz  } |dz  }| dz  dk(  rŒ|S ©Nr   r'   r   )r@   r{   Úcounts      r   r0   r0   ê   sD   € Ø
ˆa‚xØˆØ€EØ�‰7�qŠ.Ø�‰	ˆØ�‰
ˆð �‰7�q‹.ð €Lr   c                   ó>   — e Zd ZdZdedefd„Zdee   fd„Zdefd„Z	y)	r)   zBReads bit nodes from a byte array, starting after the header byte.r   r"   c                 ó<   — || _         || _        d| _        d| _        y )Nr'   r   )r   r"   Ú	byteIndexÚsubIndex)Úselfr   r"   s      r   Ú__init__z_InputBitStream.__init__÷   s   € ØˆŒ	Ø(ˆÔØˆŒØˆ�r   r   c                 óR  — | j                   dv rª| j                  t        | j                  «      k\  ry d| j                   z  dz
  }| j                  | j                     | j                  z	  |z  }| xj                  | j                   z  c_        | j                  dk\  rd| _        | xj                  dz  c_        |S | j                   dk(  rS| j                  t        | j                  «      k\  ry | j                  | j                     }| xj                  dz  c_        |S | j                   dk(  r~| j                  dz   t        | j                  «      k\  ry | j                  }| j                  }||   ||dz      dz  z  ||dz      dz  z  ||dz      d	z  z  }| xj                  d
z  c_        |S y )N©r   r   r'   r   r   r   rQ   r   r
   é   r   )r"   r�   rI   r   r‚   )rƒ   Úmaskr@   ÚbÚis        r   r,   z_InputBitStream.nextý   sn  € Ø×Ñ Ñ&Ø�~‰~¤ T§Y¡Y£Ò/ØØ˜×*Ñ*Ñ*¨aÑ/ˆDØ—9‘9˜TŸ^™^Ñ,°·±Ñ=ÀÑEˆCØ�MŠM˜T×.Ñ.Ñ.�MØ�}‰} Ò!Ø !�”Ø—’ !Ñ#•ØˆJØ×Ñ !Ò#Ø�~‰~¤ T§Y¡Y£Ò/ØØ—)‘)˜DŸN™NÑ+ˆCØ�NŠN˜aÑ�NØˆJØ×Ñ "Ò$Ø�~‰~ Ñ!¤S¨¯©£^Ò3ØØ—	‘	ˆAØ—‘ˆAØ�A‘$˜!˜A ™E™( a™-Ñ(¨A¨a°!©e©H¸©NÑ;¸qÀÀQÁ¹xÈ2¹~ÑNˆCØ�NŠN˜aÑ�NØˆJØr   c                 óF   — | j                   | j                  dkD  rdz   S dz   S r}   )r�   r‚   ©rƒ   s    r   r3   z_InputBitStream.bytesConsumed  s$   € Ø�~‰~ d§m¡m°aÒ&7 Ñ?Ð?¸QÑ?Ð?r   N)
r   r   r   Ú__doc__rR   rd   r„   r   r,   r3   r   r   r   r)   r)   ô   s6   „ ÙLð˜Uð °#ó ð�h˜s‘mó ð6@˜sô @r   r)   c                   ó8   — e Zd ZdZdefd„Zdeddfd„Zdefd„Zy)	re   z#Writes bit nodes into a byte array.r"   c                 ó>   — || _         t        «       | _        d| _        y )Nr   )r"   Ú	bytearrayr   r‚   )rƒ   r"   s     r   r„   z_OutputBitStream.__init__  s   € Ø(ˆÔÜ“KˆŒ	Øˆ�r   Úvaluer   Nc                 óÖ  — | j                   dv rœd| j                   z  dz
  }||z  }| j                  dk(  r| j                  j                  d«       | j                  dxx   || j                  z  z  cc<   | xj                  | j                   z  c_        | j                  dk\  rd| _        y y | j                   dk(  r| j                  j                  |dz  «       y | j                   dk(  r‚| j                  j                  |dz  «       | j                  j                  |dz	  dz  «       | j                  j                  |dz	  dz  «       | j                  j                  |d	z	  dz  «       y y )
Nr†   r'   r   rD   r   éÿ   r   r
   r‡   )r"   r‚   r   r*   )rƒ   r‘   rˆ   s      r   rg   z_OutputBitStream.write$  s1  € Ø×Ñ Ñ&Ø˜×*Ñ*Ñ*¨aÑ/ˆDØ�T‰MˆEØ�}‰} Ò!Ø—	‘	× Ñ  Ô#Ø�I‰I�b‹M˜U d§m¡mÑ3Ñ3‹MØ�MŠM˜T×.Ñ.Ñ.�MØ�}‰} Ò!Ø !�•ð "à×Ñ !Ò#Ø�I‰I×Ñ˜U T™\Õ*Ø×Ñ "Ò$Ø�I‰I×Ñ˜U T™\Ô*Ø�I‰I×Ñ˜e q™j¨DÑ0Ô1Ø�I‰I×Ñ˜e r™k¨TÑ1Ô2Ø�I‰I×Ñ˜e r™k¨TÑ1Õ2ð	 %r   c                 ó,   — t        | j                  «      S r^   )rR   r   rŒ   s    r   rh   z_OutputBitStream.toBytes6  s   € Ü�T—Y‘YÓÐr   )	r   r   r   r�   rd   r„   rg   rR   rh   r   r   r   re   re     s0   „ Ù-ð Só ð
3˜3ð 3 4ó 3ð$ ˜ô  r   re   )r   l   ÿÿ )r�   r_   Úcollectionsr   Útypingr   r   r   r   r   r   rd   Ú__annotations__Ú	Exceptionr   rR   r%   r!   rO   rF   r    rG   rH   r0   r)   re   r   r   r   ú<module>r™      sŒ  ðòó Ý ß 7Õ 7ð &(¨B°2¸1Ñ!=€��S˜#�X‘Ó =ô	˜iô 	ð
 1;ñCØ
ðCØðCØ*-ðCà
ˆ3ˆs‰8�Sˆ=ÑóCð66/Ø
ð6/Ø"ð6/Ø,/ð6/Ø7:ð6/ØFIð6/à
ˆ3ˆs‰8�Sˆ=Ñó6/ðr�8˜C‘=ð  Uó ð@C ð C¨Sð C°Uó Cð
(˜cð ( e¨C°¨H¡oó (ð˜cð ¨Sð °Só ðGB˜C ™Hð GB°Cð GBÀð GBÈó GBðT˜ð  cð ¨có ÷%@ñ %@÷P ò  r   