§
    y�’jL  ã                  ó²   — d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ ddl	m
Z
mZmZ d(d
„Zd(d„Zd)d„Zd(d„Zd*d„Zd+d„Z	 d,d-d„Zd.d„Zd/d#„Zd0d&„Zd.d'„ZdS )1é    )ÚannotationsN)ÚPath)ÚAnyé   )ÚMANIFEST_PATHÚROOT_DIRÚTOP_LEVEL_CATEGORY_RULESÚtextÚstrÚreturnc                óf   — d                      d„ t          j        d| ¦  «        D ¦   «         ¦  «        S )NÚ c              3  óB   K  — | ]}t          j        |¦  «        °|V — Œd S ©N)ÚunicodedataÚ	combining)Ú.0Úchs     ú9C:\Projects\DSCons\tools\hd2026_ingest_support\helpers.pyú	<genexpr>z strip_accents.<locals>.<genexpr>   sG   è è € ð ð àÝÔ$ RÑ(Ô(ðØ
ðð ð ð ð ð ó    ÚNFKD)Újoinr   Ú	normalize©r
   s    r   Ústrip_accentsr      sA   € Ø�7Š7ð ð åÔ'¨°Ñ5Ô5ðñ ô ñ ô ð r   c                óÈ   — t          | ¦  «        } |                      dd¦  «                             dd¦  «        } t          j        dd| ¦  «                             ¦   «         } | S )Nu   Ä‘Údu   Ä�ÚDú\s+ú )r   ÚreplaceÚreÚsubÚstripr   s    r   Únormalize_keyr&      sV   € Ý˜ÑÔ€DØ�<Š<˜˜cÑ"Ô"×*Ò*¨4°Ñ5Ô5€DÝŒ6�&˜#˜tÑ$Ô$×*Ò*Ñ,Ô,€DØ€Kr   Úpathú
Path | strc                ó6  — t          | ¦  «                             dd¦  «        }t          |¦  «                             ¦   «         }|                     dd¦  «        }t	          j        dd|¦  «        }t	          j        dd|¦  «        }|                     ¦   «         S )Nú\ú/ú&r!   z[^a-z0-9/.\- ]+r    )r   r"   r&   Úlowerr#   r$   r%   )r'   ÚrawÚ
normalizeds      r   Únormalize_relative_pathr0      s„   € Ý
ˆd‰)Œ)×
Ò
˜D #Ñ
&Ô
&€CÝ˜sÑ#Ô#×)Ò)Ñ+Ô+€Jà×#Ò# C¨Ñ-Ô-€JÝ”Ð*¨C°Ñ<Ô<€JÝ”˜  ZÑ0Ô0€JØ×ÒÑÔÐr   c                óÊ   — t          | ¦  «                             ¦   «         }t          j        dd|¦  «        }t          j        dd|¦  «                             d¦  «        }|pdS )Nz
[^a-z0-9]+ú-z-{2,}Úunknown)r&   r-   r#   r$   r%   )r
   r/   s     r   Úslugifyr4   %   sZ   € Ý˜tÑ$Ô$×*Ò*Ñ,Ô,€JÝ”˜ s¨JÑ7Ô7€JÝ”˜ # zÑ2Ô2×8Ò8¸Ñ=Ô=€JØÐ"˜Ð"r   Únamec                ó„   — t          | ¦  «        }t          j        ¦   «         D ]\  }}t          |¦  «        |k    r|c S ŒdS )NÚunknown_mixed)r&   r	   Úitems)r5   r/   r.   Úcategorys       r   Úclassify_top_level_entryr:   ,   sQ   € Ý˜tÑ$Ô$€JÝ1Ô7Ñ9Ô9ð ð ‰ˆˆXÝ˜ÑÔ Ò+Ð+ØˆOˆOˆOð ,àˆ?r   Úroot_dirr   úlist[dict[str, object]]c                ó  — g }t          |                      ¦   «         d„ ¬¦  «        D ]e}|j                             d¦  «        rŒt	          |j        ¦  «        }|                     |j        |                     ¦   «         rdnd|dœ¦  «         Œf|S )Nc                ó   — | j         S r   )r5   )Úitems    r   ú<lambda>z+collect_top_level_summary.<locals>.<lambda>6   s   € ¸T¼Y€ r   )Úkeyú.Ú	directoryÚfile)Ú
entry_nameÚ
entry_typer9   )ÚsortedÚiterdirr5   Ú
startswithr:   ÚappendÚis_dir)r;   ÚrowsÚentryr9   s       r   Úcollect_top_level_summaryrN   4   s¥   € Ø$&€DÝ˜×(Ò(Ñ*Ô*Ð0FÐ0FÐGÑGÔGð 

ð 

ˆØŒ:× Ò  Ñ%Ô%ð 	ØÝ+¨E¬JÑ7Ô7ˆØ�Šà#œjØ-2¯\ª\©^¬^ÐG˜k˜kÀØ$ðð ñ	
ô 	
ð 	
ð 	
ð €Kr   é°  é–   é
   Ú
chunk_sizeÚintÚoverlapÚ
max_chunksú	list[str]c                óÄ  — d                      |                      ¦   «         ¦  «        }|sg S g }d}|t          |¦  «        k     r�t          |¦  «        |k     rŠt          t          |¦  «        ||z   ¦  «        }|                     |||…         ¦  «         |t          |¦  «        k    rn9t          d||z
  ¦  «        }|t          |¦  «        k     rt          |¦  «        |k     °Š|S )Nr!   r   )r   ÚsplitÚlenÚminrJ   Úmax)r
   rR   rT   rU   ÚcleanedÚchunksÚstartÚends           r   Ú
chunk_textr`   D   sÛ   € ð �hŠh�t—z’z‘|”|Ñ$Ô$€GØð Øˆ	Ø€FØ€EØ
•#�g‘,”,Ò
Ð
¥3 v¡;¤;°Ò#;Ð#;Ý•#�g‘,”, ¨
Ñ 2Ñ3Ô3ˆØ�Š�g˜e C˜iÔ(Ñ)Ô)Ð)Ø•#�g‘,”,ÒÐØÝ�A�s˜W‘}Ñ%Ô%ˆð •#�g‘,”,Ò
Ð
¥3 v¡;¤;°Ò#;Ð#;ð €Mr   c                ó¼  — | j                              ¦   «         }	 |                      ¦   «         j        dk    rd| j        › d|› d�S n# t
          $ r Y nw xY w|dv �r(	 dd l}|                     | dd¬¦  «        }g }|j        d d	…         D ]¡}g }t          | 
                    d¬
¦  «        ¦  «        D ]C\  }}|dk    r n7d„ |D ¦   «         }	|	r(|                     d                     |	¦  «        ¦  «         ŒD|r4|                     d|j        › d�d                     |¦  «        z   ¦  «         Œ¢|                     ¦   «          d                     |¦  «        }
|
                     ¦   «         r
|
d d…         S n# t
          $ r Y nw xY w|dk    �r"dd l}g }	 |                     | ¦  «        5 }|                     d¦  «        }d d d ¦  «         n# 1 swxY w Y   |                     dd¬¦  «        }|                     dd¦  «                             d¦  «        D ]J}|                     d¦  «        r3d|v r/|                     |                     dd¦  «        d         ¦  «         ŒKd                     d„ |D ¦   «         ¦  «        }
|
                     ¦   «         r
|
d d…         S n# t
          $ r Y nw xY w|dk    ré	 dd l}|                     t3          | ¦  «        ¦  «        }g }t          |j        d d …         ¦  «        D ]_\  }}|                     ¦   «         }|rD|                     ¦   «         r0|                     d!|dz   › d|                     ¦   «         › �¦  «         Œ`d                     |¦  «        }
|
                     ¦   «         r
|
d d…         S n# t
          $ r Y nw xY w|d"v r0	 |                      dd¬#¦  «        d d…         S # t
          $ r Y nw xY wd$| j        › d|› d�S )%Ni@KL u,   [TÃ i liá»‡u dá»± Ã¡n kÃ­ch thÆ°á»›c lá»›n: u    - Ä�á»‹nh dáº¡ng ú]>   ú.xlsmú.xlsxr   T)Ú	read_onlyÚ	data_onlyé   )Úvalues_onlyéP   c                ó–   — g | ]F}|®t          |¦  «                             ¦   «         ¯%t          |¦  «                             ¦   «         ‘ŒGS r   )r   r%   )r   Úvals     r   ú
<listcomp>zload_text.<locals>.<listcomp>j   sI   € ð  ð  ð  àØ˜?­s°3©x¬x¯~ª~Ñ/?Ô/?˜?õ ˜C™œŸšÑ(Ô(à*˜?˜?r   z | u   [Báº£ng tÃ­nh: z]
ú
z

ià.  ú.docxzword/document.xmlúutf-8Úignore)Úerrorsz</w:p>ú<zw:tú>r   r!   c              3  óf   K  — | ],}|                      ¦   «         ¯|                      ¦   «         V — Œ-d S r   )r%   )r   Úfragments     r   r   zload_text.<locals>.<genexpr>‡   sO   è è € ð ð Ø%-¸h¿nºnÑ>NÔ>NðØ—’Ñ Ô ðð ð ð ð ð r   ú.pdfé   z[Trang >   ú.jsonú.mdú.txt)Úencodingrq   u   [TÃ i liá»‡u dá»± Ã¡n: )Úsuffixr-   ÚstatÚst_sizer5   Ú	ExceptionÚopenpyxlÚload_workbookÚ
worksheetsÚ	enumerateÚ	iter_rowsrJ   r   ÚtitleÚcloser%   ÚzipfileÚZipFileÚreadÚdecoder"   rX   rI   ÚpypdfÚ	PdfReaderr   ÚpagesÚextract_textÚ	read_text)r'   r|   r€   ÚwbÚsheet_textsÚsheetÚ	rows_textÚrow_idxÚrowÚrow_valsr
   r‡   Ú	fragmentsÚarchiveÚ	xml_bytesÚxml_textr.   r‹   ÚreaderÚ
pages_textÚidxÚpageÚ	extracteds                          r   Ú	load_textr    U   s  € ØŒ[×ÒÑ Ô €FðØ�9Š9‰;Œ;Ô Ò*Ð*ØhÀ$Ä)ÐhÐhÐ_eÐhÐhÐhÐhð +øåð ð ð Øˆðøøøð Ð#Ð#Ñ#ð	ØˆOˆOˆOà×'Ò'¨¸ÈÐ'ÑMÔMˆBØˆKØœ r¨ rÔ*ð ð �Ø�	Ý$-¨e¯oªoÈ$¨oÑ.OÔ.OÑ$PÔ$Pð 	?ð 	?‘L�G˜SØ ’|�|Ø˜ð ð  à#&ð ñ  ô  �Hð
  ð ?Ø!×(Ò(¨¯ª°HÑ)=Ô)=Ñ>Ô>Ð>øØð Ø×&Ò&Ø:¨%¬+Ð:Ð:Ð:¸T¿YºYÀyÑ=QÔ=QÑQñô ð øð �HŠH‰JŒJˆJØ—;’;˜{Ñ+Ô+ˆDØ�zŠz‰|Œ|ð $Ø˜F˜U˜F”|Ð#ð$øåð 	ð 	ð 	ØˆDð	øøøð �ÒÑØˆˆˆà!ˆ	ð	Ø—’ Ñ&Ô&ð >¨'Ø#ŸLšLÐ)<Ñ=Ô=�	ð>ð >ð >ñ >ô >ð >ð >ð >ð >ð >ð >øøøð >ð >ð >ð >à ×'Ò'¨¸Ð'ÑAÔAˆHØ×'Ò'¨°$Ñ7Ô7×=Ò=¸cÑBÔBð ;ð ;�Ø—>’> %Ñ(Ô(ð ;¨S°C¨Z¨ZØ×$Ò$ S§Y¢Y¨s°AÑ%6Ô%6°qÔ%9Ñ:Ô:Ð:øØ—8’8ð ð Ø1:ðñ ô ñ ô ˆDð �zŠz‰|Œ|ð $Ø˜F˜U˜F”|Ð#ð$øåð 	ð 	ð 	ØˆDð	øøøð �ÒÐð	ØˆLˆLˆLà—_’_¥S¨¡Y¤YÑ/Ô/ˆFØˆJÝ& v¤|°B°Q°BÔ'7Ñ8Ô8ð Qð Q‘	��TØ ×-Ò-Ñ/Ô/�	Øð Q §¢Ñ!2Ô!2ð QØ×%Ò%Ð&O°°a±Ð&OÐ&O¸I¿OºOÑ<MÔ<MÐ&OÐ&OÑPÔPÐPøØ—;’;˜zÑ*Ô*ˆDØ�zŠz‰|Œ|ð $Ø˜F˜U˜F”|Ð#ð$øåð 	ð 	ð 	ØˆDð	øøøð Ð)Ð)Ð)ð	Ø—>’>¨7¸8�>ÑDÔDÀVÀeÀVÔLÐLøÝð 	ð 	ð 	ØˆDð	øøøð L T¤YÐKÐKÀ&ÐKÐKÐKÐKs€   ›*A Á
AÁAÁDE4 Å4
FÆ FÆJ Æ'G	Æ=J Ç	GÇJ ÇGÇC
J Ê
J*Ê)J*Ê4CN Î
NÎNÎ!O  Ï 
OÏOÚmanifestúdict[str, Any]ÚNonec                óž   — t           j                             dd¬¦  «         t          j        t	          j        | dd¬¦  «        d¬¦  «         d S )NT)ÚparentsÚexist_okFé   )Úensure_asciiÚindentro   )r{   )r   ÚparentÚmkdirÚ
write_textÚjsonÚdumps)r¡   s    r   Úwrite_manifestr¯   ¨   sX   € ÝÔ×Ò t°dÐÑ;Ô;Ð;ÝÔÝŒ
�8¨%¸Ð:Ñ:Ô:ÀWðñ ô ð ð ð r   Úproject_rootú
list[Path]c                óR  — h d£}g }t          |                      d¦  «        ¦  «        D ]}}|                     ¦   «         sŒ|j                             d¦  «        s|j                             d¦  «        rŒL|j                             ¦   «         |vrŒh|                     |¦  «         Œ~|S )N>   ú.docú.xlsry   rv   rz   rn   rc   rd   Ú*rB   z~$)rG   ÚrglobÚis_filer5   rI   r|   r-   rJ   )r°   Ú	supportedÚfilesr'   s       r   Úiter_project_filesrº   ¯   s²   € ØRÐRÐR€IØ€EÝ�|×)Ò)¨#Ñ.Ô.Ñ/Ô/ð ð ˆØ�|Š|‰~Œ~ð 	ØØŒ9×Ò Ñ$Ô$ð 	¨¬	×(<Ò(<¸TÑ(BÔ(Bð 	ØØŒ;×ÒÑÔ iÐ/Ð/ØØ�Š�TÑÔÐÐØ€Lr   c                óP   — t          |                      t          ¦  «        ¦  «        S r   )r   Úrelative_tor   )r'   s    r   Úrelative_to_rootr½   ½   s   € Ýˆt×Ò¥Ñ)Ô)Ñ*Ô*Ð*r   )r
   r   r   r   )r'   r(   r   r   )r5   r   r   r   )r;   r   r   r<   )rO   rP   rQ   )
r
   r   rR   rS   rT   rS   rU   rS   r   rV   )r'   r   r   r   )r¡   r¢   r   r£   )r°   r   r   r±   )Ú
__future__r   r­   r#   r   Úpathlibr   Útypingr   Úconfigr   r   r	   r   r&   r0   r4   r:   rN   r`   r    r¯   rº   r½   © r   r   ú<module>rÃ      sr  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø 	€	€	€	Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ Eðð ð ð ðð ð ð ðð ð ð ð#ð #ð #ð #ðð ð ð ðð ð ð ð" NPðð ð ð ð ð"PLð PLð PLð PLðfð ð ð ðð ð ð ð+ð +ð +ð +ð +ð +r   