
    hzM                        S SK Jr  S SKJrJrJrJrJrJr  S SK	J	r	  S SK
r
S SKJrJr  S SKJr  \\\\4   rSS jrSS jrS	r " S
 S\5      r " S S5      r " S S5      rg)    )annotations)IterableAnySequenceUnionoverloadOptional)arrayN)	unhexlifyhexlify)decodec                ~    [        S5      nU  H  nUR                  [        U5      5        M     UR                  5       $ )z-Returns multiple hex strings `data` as bytes.B)r
   extendr   tobytes)data
byte_arrayhexstrs      H/var/www/html/env/lib/python3.13/site-packages/ezdxf/tools/binarydata.pyhex_strings_to_bytesr      s7    sJ)F+,     c                P    [        U 5      R                  5       R                  5       $ )z)Returns `data` bytes as plain hex string.)r   upperr   )r   s    r   bytes_to_hexstrr      s    4= ''))r   s     c                      \ rS rSrSrg)EndOfBufferError    N)__name__
__module____qualname____firstlineno____static_attributes__r   r   r   r   r      s    r   r   c                      \ rS rSrSrSSS jjr\SS j5       rSS jrSS jr	SS jr
SS jrSS	 jrSS
 jrSSS jjrSS jrSrg)
ByteStream!   zfProcess little endian binary data organized as bytes, data is padded to
4 byte boundaries by default.
c                >    [        U5      U l        SU l        X l        g Nr   )
memoryviewbufferindex_align)selfr*   aligns      r   __init__ByteStream.__init__'   s     (
 r   c                F    U R                   [        U R                  5      :  $ N)r+   lenr*   r-   s    r   has_dataByteStream.has_data,   s    zzC,,,r   c                R    XR                   -  nU(       a  XR                   -   U-
  $ U$ r2   )r,   )r-   r+   modulos      r   r.   ByteStream.align0   s'    $/5u{{"V+@5@r   c                    U R                   (       d  [        S5      e[        R                  " XR                  U R
                  S9nU R                  U R
                  [        R                  " U5      -   5      U l        U$ )zRead data defined by a struct format string. Insert little endian
format character '<' as first character, if machine has native big
endian byte order.
Unexpected end of buffer.)offset)r5   r   structunpack_fromr*   r+   r.   calcsize)r-   fmtresults      r   read_structByteStream.read_struct4   sX    
 }}"#>??##CTZZHZZ

V__S-A AB
r   c                *    U R                  S5      S   $ )N<dr   rB   r4   s    r   
read_floatByteStream.read_float@       %a((r   c                *    U R                  S5      S   $ )Nz<Lr   rF   r4   s    r   	read_longByteStream.read_longC   rI   r   c                *    U R                  S5      S   $ )Nz<lr   rF   r4   s    r   read_signed_longByteStream.read_signed_longF   rI   r   c                $    U R                  S5      $ )Nz<3drF   r4   s    r   read_vertexByteStream.read_vertexI   s    &&r   c                    U R                   n[        U R                  [        U5      5       H>  nX#   S:X  d  M  U R                  nU R	                  US-   5      U l        [        X$U US9s  $    [        S5      e)u   PS: Padded String. This is a string, terminated with a zero byte.
The file’s text encoding (code page) is used to encode/decode the bytes
into a string.
r      encodingz?Unexpected end of buffer, did not detect terminating zero byte.)r*   ranger+   r3   r.   r   r   )r-   rV   r*   	end_indexstart_indexs        r   read_padded_stringByteStream.read_padded_stringL   sr    
 tzz3v;7I A%"jj!ZZ	A6
f;hOO 8 M
 	
r   c                   U R                   n[        U R                  [        U5      S5       HE  nXUS-    [        :X  d  M  U R                  nU R                  US-   5      U l        [        XU SS9s  $    [        S5      e)zPUS: Padded Unicode String. The bytes are encoded using Unicode
encoding. The bytes consist of byte pairs and the string is terminated
by 2 zero bytes.
   	utf_16_lerU   z@Unexpected end of buffer, did not detect terminating zero bytes.)r*   rW   r+   r3   	NULL_NULLr.   r   r   )r-   r*   rX   rY   s       r   read_padded_unicode_string%ByteStream.read_padded_unicode_string\   s    
 tzz3v;:I)a-0I="jj!ZZ	A6
y1K  ; N
 	
r   )r,   r*   r+   N)   )r*   Bytesr.   intreturnbool)r+   rd   rf   rd   )r@   strrf   r   rf   floatrf   rd   rf   Sequence[float])utf_8)rV   rh   rf   rh   rf   rh   )r   r    r!   r"   __doc__r/   propertyr5   r.   rB   rG   rK   rN   rQ   rZ   r`   r#   r   r   r   r%   r%   !   sI    
!
 - -A
)))'
 
r   r%   c                     \ rS rSrSr  S4     S5S jjr\S6S j5       rS7S jrS7S jr	S8S jr
S8S jrS8S	 jrS8S
 jrS9S jrS8S jrS8S jrS8S jrS8S jrS:S jrS8S jr\S8S j5       r\S9S j5       rS;S<S jjr\S8S j5       r\S9S j5       rS;S<S jjrS8S jr\S:S j5       r\S=S j5       rS;S>S jjr\S:S j5       r\S=S j5       rS;S>S jjr\S:S j5       r\S=S  j5       r\      S?S! j5       r S@     SAS" jjrS8S# jrS8S$ jrS8S% jrSBS& jrSCS:S' jjr S8S( jr!SDS) jr"SDS* jr#SDS+ jr$SES, jr%SFS- jr&S8S. jr'SGSHS/ jjr(SGSIS0 jjr)SJS1 jr*S2r+g3)K	BitStreamo   z:Process little endian binary data organized as bit stream.c                J    [        U5      U l        SU l        X l        X0l        g r(   )r)   r*   	bit_index
dxfversionrV   )r-   r*   rw   rV   s       r   r/   BitStream.__init__s   s!     !($ r   c                L    U R                   S-	  [        U R                  5      :  $ )N   )rv   r3   r*   r4   s    r   r5   BitStream.has_data~   s    ~~"S%555r   c                    U R                   S-	  [        U R                   S-  5      -   nX!-  nU(       a  X!U-
  -  nUS-  U l         g)zAlign to byte border.rz      N)rv   rg   )r-   count
byte_indexr8   s       r   r.   BitStream.align   sE    nn)T$..12D-EE
#&.(J#qr   c                .    U =R                   U-  sl         g)zSkip `count` bits.N)rv   r-   r~   s     r   skipBitStream.skip   s    %r   c                    U R                   nU =R                   S-  sl          U R                  US-	     SUS-  -	  -  (       a  S$ S$ ! [         a    [        S5      ef = f)zRead one bit from buffer.rT   rz      r}   r   r;   )rv   r*   
IndexErrorr   )r-   r+   s     r   read_bitBitStream.read_bit   sd    !	@EQJ/4EAI3FG1NQN 	@"#>??	@s   !A A Ac                8   U R                   nU R                  nX!-   nUS-
  S-	  [        U5      :  a  [        S5      eX@l         SUS-  -	  nUS-	  nSnX6   nUS:  a>  US-  nX-  (       a  US-  nUS-  nUS-  nU(       d  U(       a  SnUS-  nX6   nUS:  a  M>  U$ )zRead `count` bits from buffer.rT   rz   r;   r   r}   r   )rv   r*   r3   r   )	r-   r~   r+   r*   next_bit_indextest_bittest_byte_indexvalue	test_bytes	            r   	read_bitsBitStream.read_bits   s    Q1$s6{2"#>??'EAI&1*+	aiaKE#
QJENH1$"3	 ai r   c                $    U R                  S5      $ )z*Read an unsigned byte (8 bit) from buffer.   r   r4   s    r   read_unsigned_byteBitStream.read_unsigned_byte   s    ~~a  r   c                P    U R                  S5      nUS-  (       a
  U) S-  S-   * $ U$ )z'Read a signed byte (8 bit) from buffer.r   r      rT   r   r-   r   s     r   read_signed_byteBitStream.read_signed_byte   s0    q!4<ftmq())Lr   c                    U R                   nU R                  S-	  nX1-   nU[        U5      ::  a  U =R                  US-  -  sl        X#U $ [        S5      e)Nrz   r;   )r*   rv   r3   r   )r-   r~   r*   rY   rX   s        r   read_aligned_bytesBitStream.read_aligned_bytes   sV    nn)'	F#NNeqj(Ni00"#>??r   c                    U R                   S-  (       a#  U R                  S5      nU R                  S5      nOU R                  S5      u  pUS-  U-   $ )z,Read an unsigned short (16 bit) from buffer.r}   r   r]   rv   r   r   )r-   s1s2s      r   read_unsigned_shortBitStream.read_unsigned_short   sJ    >>A"B"B,,Q/FBa2~r   c                N    U R                  5       nUS-  (       a
  U) S-  S-   * $ U$ )z)Read a signed short (16 bit) from buffer.   i  rT   r   r   s     r   read_signed_shortBitStream.read_signed_short   s0    ((*6>fvo*++Lr   c                    U R                   S-  (       a-  U R                  nU" S5      nU" S5      nU" S5      nU" S5      nOU R                  S5      u  p#pEUS-  US-  -   US-  -   U-   $ )z+Read an unsigned long (32 bit) from buffer.r}   r   rb         r   )r-   r   l1l2l3l4s         r   read_unsigned_longBitStream.read_unsigned_long   sp    >>AI1B1B1B1B!44Q7NBBbR2X&"'2R77r   c                N    U R                  5       nUS-  (       a
  U) S-  S-   * $ U$ )z(Read a signed long (32 bit) from buffer.l        l    rT   )r   r   s     r   rN   BitStream.read_signed_long   s2    ''):fz)Q.//Lr   c                   ^ U R                   S-  (       a+  U R                  m[        U4S j[        S5       5       5      nO[        U R	                  S5      5      n[
        R                  " SU5      S   $ )Nr}   c              3  4   >#    U  H  nT" S 5      v   M     g7f)r   Nr   ).0_r   s     r   	<genexpr>'BitStream.read_float.<locals>.<genexpr>   s     8x!1xs   r   rE   r   )rv   r   bytesrW   r   r=   unpack)r-   r   r   s     @r   rG   BitStream.read_float   sW    >>AI8uQx88D0034D}}T4(++r   c                    U R                  5       nU(       a1  U R                  5       nU(       a  U R                  5       nU(       a  gggg)Nr}      r]   r   )r   )r-   bits     r   read_3_bitsBitStream.read_3_bits   s8    mmo--/Cmmor   c                    g r2   r   r4   s    r   read_bit_shortBitStream.read_bit_short      r   c                    g r2   r   r   s     r   r   r     r   r   c                h   ^ ^ U 4S jmUS:X  a  T" 5       $ [        U4S j[        U5       5       5      $ )Nc                    > TR                  S5      n U S:X  a  TR                  5       $ U S:X  a  TR                  5       $ U S:X  a  ggNr]   r   rT      )r   r   r   bitsr-   s    r   _read'BitStream.read_bit_short.<locals>._read  sJ    >>!$Dqy--//..00r   rT   c              3  2   >#    U  H  nT" 5       v   M     g 7fr2   r   r   r   r   s     r   r   +BitStream.read_bit_short.<locals>.<genexpr>       7,Q,   tuplerW   r-   r~   r   s   ` @r   r   r     -    		 A:7N7%,777r   c                    g r2   r   r4   s    r   read_bit_longBitStream.read_bit_long   r   r   c                    g r2   r   r   s     r   r   r   $  r   r   c                h   ^ ^ U 4S jmUS:X  a  T" 5       $ [        U4S j[        U5       5       5      $ )Nc                    > TR                  S5      n U S:X  a  TR                  5       $ U S:X  a  TR                  5       $ U S:X  a  ggr   )r   rN   r   r   s    r   r   &BitStream.read_bit_long.<locals>._read)  sJ    >>!$Dqy,,....00r   rT   c              3  2   >#    U  H  nT" 5       v   M     g 7fr2   r   r   s     r   r   *BitStream.read_bit_long.<locals>.<genexpr>7  r   r   r   r   s   ` @r   r   r   (  r   r   c                    SnSnU R                  S5      nUS:  a'  XR                  5       U-  -  nUS-  nUS-  nUS:  a  M'  U$ )Nr   rz   rT   r   )r   r   )r-   r   shiftinglengths       r   read_bit_long_longBitStream.read_bit_long_long?  sY    "qj,,.(::EaKFMH qj r   c                    g r2   r   r4   s    r   read_raw_doubleBitStream.read_raw_doubleI  r   r   c                    g r2   r   r   s     r   r   r   M  r   r   c                l   ^  US:X  a  T R                  5       $ [        U 4S j[        U5       5       5      $ )NrT   c              3  D   >#    U  H  nTR                  5       v   M     g 7fr2   )rG   r   r   r-   s     r   r   ,BitStream.read_raw_double.<locals>.<genexpr>U  s     ALq**L    )rG   r   rW   r   s   ` r   r   r   Q  s,    A:??$$AE%LAAAr   c                    g r2   r   r4   s    r   read_bit_doubleBitStream.read_bit_doubleW  r   r   c                    g r2   r   r   s     r   r   r   [  r   r   c                h   ^ ^ U 4S jmUS:X  a  T" 5       $ [        U4S j[        U5       5       5      $ )Nc                 p   > TR                  S5      n U S:X  a  TR                  5       $ U S:X  a  gU S:X  a  gg)Nr]   r   rT         ?        )r   rG   r   s    r   r   (BitStream.read_bit_double.<locals>._read`  s<    >>!$Dqy((r   rT   c              3  2   >#    U  H  nT" 5       v   M     g 7fr2   r   r   s     r   r   ,BitStream.read_bit_double.<locals>.<genexpr>n  r   r   r   r   s   ` @r   r   r   _  r   r   c                    g r2   r   r4   s    r   read_bit_double_default!BitStream.read_bit_double_defaultp  r   r   c                    g r2   r   r   s     r   r   r   t  r   r   c                    g r2   r   )r-   r~   defaults      r   r   r   x  s     	r   c                   ^ ^^^ [         R                  " ST5      mUUU 4S jmUS:X  a  T" 5       $ [        U4S j[        U5       5       5      $ )NrE   c                   > TR                  S5      n U S:X  a  T$ U S:X  a>  [        U4S j[        S5       5       5      TSS  -   n[        R                  " SU5      S   $ U S:X  a  [        T5      nTR                  5       US'   TR                  5       US'   TR                  5       US'   TR                  5       US'   TR                  5       US'   TR                  5       US'   [        R                  " SU5      S   $ TR                  5       $ )	Nr]   r   rT   c              3  D   >#    U  H  nTR                  5       v   M     g 7fr2   r   r   s     r   r   CBitStream.read_bit_double_default.<locals>._read.<locals>.<genexpr>  s     FX$1133Xr   rb   rE      rz   )r   r   rW   r=   r   	bytearrayr   rG   )r   _datar   r   r-   s     r   r   0BitStream.read_bit_double_default.<locals>._read  s    >>!$DqyFU1XFF12h  }}T51!44!$224a224a224a224a224a224a}}T51!44((r   rT   c              3  2   >#    U  H  nT" 5       v   M     g 7fr2   r   r   s     r   r   4BitStream.read_bit_double_default.<locals>.<genexpr>  r   r   )r=   packr   rW   )r-   r~   r   r   r   s   ` `@@r   r   r   ~  s?     {{4)	), A:7N7%,777r   c                    SnSn U R                  5       nUS-  (       a  X#S-  U-  -  nUS-  nOX#S-  U-  -  nUS-  (       a  U* $ U$ ME  )zModular characters are a method of storing compressed integer
values. They consist of a stream of bytes, terminating when the high
bit (8) of the byte is 0 else another byte follows. Negative numbers
are indicated by bit 7 set in the last byte.

r   r      r}   ?   @   r  r-   r   r   chars       r   read_signed_modular_chars#BitStream.read_signed_modular_chars  sk     **,Dd{+(22A +(22!%v7%7 r   c                f    SnSn U R                  5       nX#S-  U-  -  nUS-  nUS-  (       d  U$ M-  )zModular characters are a method of storing compressed integer
values. They consist of a stream of bytes, terminating when the high
bit (8) of the byte is 0 else another byte follows.

r   r  r}   r   r  r  s       r   read_unsigned_modular_chars%BitStream.read_unsigned_modular_chars  sJ     **,DTkh..EMH4K r   c                l    U R                  5       nUS-  (       a  U R                  5       S-  US-  -  $ U$ )zModular shorts are a method of storing compressed unsigned integer
values. Only 1 or 2 shorts in practical usage (1GB), if the high
bit (16) of the first short is set another short follows.

r      i  r   )r-   shorts     r   read_modular_shortsBitStream.read_modular_shorts  s;     ((*6>,,."4HHLr   c                P    U R                  5       (       a  gU R                  S5      $ )N)r   r   r   rz   r   r   r4   s    r   read_bit_extrusionBitStream.read_bit_extrusion  s!    ==?? ''**r   c                Z    US:  a  U R                  5       (       a  gU R                  5       $ )NAC1015r   r  )r-   rw   s     r   read_bit_thicknessBitStream.read_bit_thickness  s'    !}}##%%r   c                "    U R                  5       $ r2   )r   r4   s    r   read_cm_colorBitStream.read_cm_color  s    ""$$r   c                   ^  T R                  5       n[        U 4S j[        U5       5       5      nUR                  T R                  S9$ )Nc              3  D   >#    U  H  nTR                  5       v   M     g 7fr2   r  r   s     r   r   &BitStream.read_text.<locals>.<genexpr>  s     F1T,,..r   rU   )r   r   rW   r   rV   r-   r   r   s   `  r   	read_textBitStream.read_text  s:    $$&FfFF{{DMM{22r   c                   ^  T R                  5       n[        U 4S j[        US-  5       5       5      nUR                  SS9$ )Nc              3  D   >#    U  H  nTR                  5       v   M     g 7fr2   r  r   s     r   r   .BitStream.read_text_unicode.<locals>.<genexpr>  s     J8I1T,,..8Ir   r]   utf16rU   )r   r   rW   r   r+  s   `  r   read_text_unicodeBitStream.read_text_unicode  s=     $$&Jfqj8IJJ{{G{,,r   c                b    U R                   S:  a  U R                  5       $ U R                  5       $ )NAC1018)rw   r,  r2  r4   s    r   read_text_variableBitStream.read_text_variable  s*    ??X%>>##))++r   c                    U R                  5       nSnSnU R                  5       nU R                  5       nUS-  (       a  U R                  5       nUS-  (       a  U R                  5       nXBU4$ )z+Returns tuple (rgb, color_name, book_name). rT   r]   )r   r   r   r6  )r-   r   
color_name	book_namergbrcs         r   read_cm_color_cmsBitStream.read_cm_color_cms  sk    !
	  "$$&6002J6//1I	))r   c                   U R                  5       nUS-	  nUS-  nU(       ag  SnSnSnSnUS-  (       a  U R                  5       S-  nUS-  (       a  U R                  5       nUS-  (       a  U R                  5       nUS-	  nUS-  nXEXg4$ U$ )	zZReturns color index as int or tuple (rgb, color_handle,
transparency_type, transparency).
r   r   Nr   i r      r   )r   read_handler   )	r-   flags_and_indexflagsr+   r<  color_handletransparency_typetransparencyr   s	            r   read_cm_color_encBitStream.read_cm_color_enc  s     --/1$$&CL $Lt|))+j8t|#//1t|))+$(BJ!#d{&7EELr   c                    U R                  S5      nUS:X  a  U R                  5       $ US:X  a  U R                  5       S-   $ U R                  5       $ )Nr]   r   rT   i  )r   r   r   )r-   r   s     r   read_object_typeBitStream.read_object_type  sP    ~~a 19**,,QY**,u44++--r   c                >   U R                  S5      nU R                  S5      nUS:X  a  US-   $ US:X  a  US-
  $ [        S5      n[        U5       H  nU R                  5       XE'   M     [        R
                  " SU5      S   nUS:  a  U$ US:X  a  X-   $ US	:X  a  X-
  $ g)
z Returns handle as integer value.rb   r   rT   r   s           z<Qr   
      )r   r  rW   r   r=   r   )r-   	referencecoder   r   r+   r<   s          r   rB  BitStream.read_handle  s    ~~a "19q= 19q= <=6]E113DK #tT*1-!8Mrz ))rz ))r   c                *    SU R                  U5      -  $ )zReturns handle as hex string.z%X)rB  )r-   rP  s     r   read_hex_handleBitStream.read_hex_handle5  s    d&&y111r   c                   US:X  a  U R                  5       $ US:X  a  U R                  5       $ US:X  a  U R                  5       $ US:X  a  U R                  5       $ US:X  a  U R	                  5       $ US:X  a  U R                  5       $ US:X  a  U R                  5       $ US:X  a  U R                  S	5      $ US
:X  a  U R                  5       $ US:X  a  U R                  S	5      $ US:X  a  U R                  S5      $ US:X  a  U R                  5       $ US:X  a  U R                  5       $ US:X  a  U R                  5       $ US:X  a  U R                  5       $ US:X  a  U R                  5       $ [        SU 35      e)zGRead data from bit stream by data codes defined in the
ODA reference.

r   RCRSBSRLBLRD2RDr]   BD2BD3BDrz   TTVHBLLCMCzUnknown code: )r   r   r   r   rN   r   r   r   r,  r6  rT  r   r&  
ValueError)r-   rQ  s     r   	read_codeBitStream.read_code9  sw   
 3;==?"T\**,,T\))++T\&&((T\((**T\%%''T\''))U]''**T\''))U]''**U]''**S[>>##T\**,,S[''))U]**,,U]%%''>$011r   )rv   r*   rw   rV   N)r"  cp1252)r*   rc   rw   rh   rV   rh   re   )r~   rd   rf   Nonerk   )r~   rd   rf   zSequence[int]ri   )rT   )r~   rd   rf   zUnion[int, Sequence[int]])r~   rd   rf   rm   )r~   rd   rf   Union[float, Sequence[float]])r~   rd   r   rj   rf   rm   )rT   r   )r~   rd   r   rj   rf   rk  rl   )r"  ro   )rf   ztuple[int, str, str])rf   z#Union[int, Sequence[Optional[int]]])r   )rP  rd   rf   rd   )rP  rd   rf   rh   )rQ  rh   ),r   r    r!   r"   rp   r/   rq   r5   r.   r   r   r   r   r   r   r   r   r   rN   rG   r   r   r   r   r   r   r   r   r  r  r  r  r#  r&  r,  r2  r6  r>  rH  rK  rB  rT  rg  r#   r   r   r   rs   rs   o   s   D # 		!	! 	! 		! 6 6) @8!@
8,    8"    8.    B    8"     #(	  0388',8	&8@8* 
+&%3
-,*0..2%2r   rs   )r   zIterable[str]rf   r   )r   r   rf   rh   )
__future__r   typingr   r   r   r   r   r	   r
   r=   binasciir   r   codecsr   r   r  r)   rc   r   r   r_   EOFErrorr   r%   rs   r   r   r   <module>rq     sc    # E E   ' eY
*+ *
 		x 	K
 K
\o2 o2r   