
    9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)%zSparse 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__     j/var/www/html/eeg-assistent/abrechnung/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	%fX]9+5HW
 	
 t\64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    {qzl3IuF %*GE	LL
}}u~~<)*BCC 195.1$C#S(HI8#(EH$4q$84$?@G1}	G#eIw{;< un#S(%dB/H2~h&->KKM!8JJsO%4
ej0%!)<=a8m$$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 )zEncode 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,?<3w<#d)3D |3H:>??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.    qa06Q;"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qR0Ao%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/    ""<4v7I7I"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-- %'4F ,%	\!F1I%#$F1Ii q	)V+, 1f 	 2J	#%"+//"3 	1Iw#|3K-F(*()%[!Q&[0!	1 	h	  (#L
s 
 
 
 l+F&K.3aA{Q5O4P.QE
16.	5*hA:% 34x2M#f+2MF8  A.ST 	 FQJ:x0Hz4IA4MMLLOWa<EFQJ.!J.2|CID)$3&5@
'(Y*>>
%	1A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    
axE7q.	
 7q. 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   &~~TYY/***a/D99T^^,=ECMMT...M}}! !!#J!#~~TYY/))DNN+CNNaNJ"$~~!S^3		AAA$!AE(a-(Aa!eHN;qQx2~NCNNa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$    ~~dmma&7??Q??r   N)
r   r   r   __doc__rR   rd   r   r   r,   r3   r   r   r   r)   r)      s6    LU # hsm 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 rd| 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TME}}!		  #IIbMUdmm33MMMT...M}}! ! "!#IIUT\*"$IIUT\*IIeqjD01IIerkT12IIerkT12	 %r   c                 ,    t        | j                        S r^   )rR   r   r   s    r   rh   z_OutputBitStream.toBytes6  s    TYYr   )	r   r   r   r   rd   r   rg   rR   rh   r   r   r   re   re     s0    -S 
33 34 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 &(B21!=S#X =	i 	
 1;C
CC*-C
3s8S=C66/
6/"6/,/6/7:6/FI6/
3s8S=6/r8C= U @C CS CU C
(c (eCHo (c S S GBCH GBC GB GB GBT c c %@ %@P   r   