
    ,h                          d Z ddlZddlZddlmZ ddlmZ ddgZej                  d   dk(  Zd	Z	d
Z
dZdZdZddZd Zd Zy)z
Compressed Rich Text Format (RTF) worker

Based on Rich Text Format (RTF) Compression Algorithm
https://msdn.microsoft.com/en-us/library/cc463890(v=exchg.80).aspx
    N)BytesIO   )crc32compress
decompress   s   {\rtf1\ansi\mac\deff0\deftab720{\fonttbl;}{\f0\fnil \froman \fswiss \fmodern \fscript \fdecor MS Sans SerifSymbolArialTimes New RomanCourier{\colortbl\red0\green0\blue0
\par \pard\plain\f0\fs20\b\i\u\tab\tx   i   s   LZFus   MELAc                 $   d}t        t        dt        t        z
  z  z         }t        }|ryt        }t        |       }d}d}d}	d}
d}d}	 t        |||      \  }}}|j                  |dkD  r|nd      }|sX|d|dz
  z  z  }|dz  }|	dz  }	|dz  dz  }|
t        j                  d|      z  }
|t        j                  d	|      z  }||
d
|	 z  }n|dkD  r@|d|dz
  z  z  }|dz  }|	dz  }	|dz  dz  |dz
  dz  z  }|
t        j                  d|      z  }
nA|dk(  r"t        rt        |      n|||<   |dz   t        z  }|d|dz
  z  z  }|dz  }|	dz  }	|
|z  }
d}|dkD  r)|t        j                  d	|      z  }||
d
|	 z  }d}d}d}	d}
;t        j                  dt        |            }nt        }| }t        j                  dd      }t        j                  dt        |      dz         }t        j                  dt        |             }||z   |z   |z   |z   S )z~
    Compress `data` using RTF compression algorithm
    If `compressed` flag is False, data will be written uncompressed
            r   r           >HBN      <I   )list	INIT_DICTMAX_DICT_SIZEINIT_DICT_SIZE
COMPRESSEDr   _find_longest_matchreadstructpackPY3ordr   UNCOMPRESSEDlen)data
compressedoutput_buffer	init_dictwrite_offset	comp_type	in_streamcontrol_bytecontrol_bittoken_offsettoken_buffer	match_lenlongest_matchdict_offsetchardict_ref	crc_value	comp_sizeraw_sizes                      _/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/compressed_rtf/compressed_rtf.pyr   r       s   
 MY)G!HHII!L	DM		 $Iy,G 5K>>=13D-!LD[1_ 44q !(50Q6D( ;;S,!??m|!<< 1$ Aq$88L1$K A%L +e 39%)S=1  1H FKKh$??L %)?B#d)	,/(4q(8M'I Aq$88L1$K A%L D(L !?!V[[l%CCM!\-<%@@M#$L"#K#$L#&La b KKeM&:;	 !	KKj1	D#m"4r"9:I{{4T+Hx)+i7-GGr   c                    t        t              }|dt        t        z
  z  z  }t	        |       dk  rt        d      t        }t               }t        |       }t        j                  d|j                  d            d   }t        j                  d|j                  d            d   }|j                  d      }t        j                  d|j                  d            d   }t        |j                  |dz
              }	|t        k(  r|t        |	j                               k7  rt        d      |	j                  d       d	}
|
sU|	j                  d
      }|s	 |j)                         S dj                  t        |            }t        d
d      D ]  }||    dk(  r|	j                  d      }|s nt        j                  d|      d   }|dz	  dz  }|dz  }||k(  rd}
 n|dz   }t        |      D ]W  }||z   t        z  }||   }t         r|j#                  t%        |g             n|j#                  |       |||<   |d
z   t        z  }Y |	j                  d
      }|s n6|j#                  |       t         rt        |      n|||<   |d
z   t        z  } |
sU|j)                         S |t&        k(  r!|dk7  rt        d      |	j                  |      S t        d      )z;
    Decompress `data` using RTF compression algorithm
    r      z#Data must be at least 16 bytes longr   r   r   r   z$CRC is invalid! The file is corrupt!Fr   z{0:08b}	   1r   r   r   r   Tz#CRC is invalid! Must be 0x00000000!z Unknown type of RTF compression!)r   r   r   r   r"   	Exceptionr   r   unpackr   r   r   seekformatr    ranger   writebytesr!   getvalue)r#   r&   r'   r%   r)   r4   r5   r(   r3   contentsendvalcontrolitokenoffsetlengthactual_lengthstepread_offsetr1   s                        r6   r   r   r   s   
 YI788I
4y2~=>>!LIMI dINN1$56q9I}}T9>>!#45a8Hq!IdINN1$56q9I y~~i"n56HJhmmo..BCCa--"CT !!##S  &&s3x0G1a[ FA2;#%"--*C"MM$4Q7E#qjN:F"V^F#v-"$*QJM %m 4 J'-}&E(5)//tf>)//526	,/(4q(8M'IJ #--*C!'',:=c#h3Il+$01$4#EL?F Z !!## 
l	"
"ABB}}X&&:;;r   c                 `   |j                  d      }|sdd|fS |}d}d}d}d}	 | |t        z     t        rt        |      n|k(  rv|dz  }|dk  r1||kD  r,||z
  dz   }t        rt        |      n|| |<   |dz   t        z  }|}|j                  d      }|sd|j	                  |j                         |z
  d       |||fS |j	                  |j                         |z
  dz
  d       d}|j                  d      }|sn|dz  }|||z   k\  rn|j	                  |j                         |z
  dz
  d       |||fS )z 
    Find the longest match
    r   r      )r   r   r   r    r=   tell)	r&   streamr'   r1   prev_write_offset
dict_indexr.   longest_match_lenr0   s	            r6   r   r      sb   
 ;;q>D!\!!$JIK
Z-/0#SY4PNIB9/@#@(94q87:#d)	,' ,q 0MA$-!;;q>DFKKMI5q9"$5|CCKK	1A5q9I;;q>Da
*->>>1 2 KK	)A-q1)<77r   )T)__doc__r   sysior   r   __all__version_infor   r   r   r   r   r!   r   r   r    r   r6   <module>r[      sk     
  |
$	qQ" 
 
OHdJ$Z(8r   