
    o\j                     ~   d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZ  ee          	                                j
        d         Zedz  Zedz  Zedz  Zedz  Z ej        d	ej                  Z ej        d
          Z ej        d          Zd Zd Zd Zd Zedk    r ej         e                       dS dS )    N)datetimetimezone)Path   scriptstorychapterszpromotion-report.jsonu   [\wÀ-ỹĐđ]+uL   (?im)^\s*(?:chương|phần|cảnh)\s+(?:\d+|[ivxlcdm]+)\s*[:.\-–—]?\s*$u[   (?i)\b(?:scene_id|target_words|production note|ghi chú sản xuất|end state|reveal_id)\bc                 ^    t          j        t          | z                                            S N)jsonloadsSCRIPT	read_text)names    script/validate-story.pyloadr      s"    :v}//11222    c                 N    t          j        |                                           S r   )hashlibsha256	hexdigest)datas    r   	sha_bytesr      s    >$))+++r   c                 P    t          t                              |                     S r   )lenWORD_REfindall)texts    r   wordsr      s    wt$$%%%r   c                    & t          d          } t          d          }t          d          }t          d          }t          d          }g }t          t          dz                                            t          t          dz                                            t          t          dz                                            d}||                    d          k    r|                    d           |                    d	d
                              d          |                    dd
                              d          |                    dd
                              d          d}||k    r|                    d           t          |d                   }d t          d|dz             D             }	d |	D             }
|
r+|                    dd	                    |
          z              g g }}t          |	d          D ]E\  }}|                                s|                                                                }|                    |           |s|                    d|dd           t                              |          r|                    d|dd           t                               |          r|                    d|dd           |                    |t#          |                    t&                              t)          |          t          |                                          d           Gt+          |          |k    r*d	                    |                                          dz   nd
}t,          dz  }|                                r|                                nd
}t/          |          o||k    }|s|                    d           t)          |          }|d         \  }}||cxk    r|k    s n |                    d | d!| d"|            g }|                    d#g           D ];}|                    d$d%          d%k    r|                    d&g           D ]}t1          j        d't1          j        |           d(          }|                    |          D ]}|t9          d)|                                d*z
            |                                d*z            &t?          &fd+|                    d,g           |                    d-g           z   |                    d.g           z   D                       }|s|                    |d/         |&d0           Ð=|r%|                    d1t+          |                      g }d2 t          |          D             }d3d4gg d5g d6g d7d8}|                    d9g           D ]} t          | d:                   }!t          d|!          D ]~}"|                    |"d
                                           }#|                    | d;         g           D ]7}$|$                                 |#v r|                    | d;         |"|$d<           8|r%|                    d=t+          |                      i d>dd?|sd@ndAdB| dC| dC         d|dDt+          |          dE|dFt#          |                    t&                              dG|dH|dI||gdJtC          |dKz  dL          dM|r!t          |"                                          nd dN|dO|dP|dQ|dRtG          j$        tJ          j&                  '                                i}%tP          )                    tU          j+        |%dSdTU          dz              tY          tU          j+        |%dB         ||dVdSW                     |%dB         rd)ndS )XNzoutline.jsonzidentity-registry.jsonzreveal-ledger.jsonzproduction-plan.jsonzproject-manifest.json)outline_sha256identity_registry_sha256reveal_ledger_sha256authority_hashesz8current authority bytes differ from production-plan lockoutline_hash zsha256:identity_registry_hashreveal_ledger_hashz9current authority bytes differ from project-manifest lockexpected_chaptersc                 *    g | ]}t           |d dz  S )02dz.txt)CHAPTERS).0indexs     r   
<listcomp>zmain.<locals>.<listcomp>5   s)    OOOuX5*****OOOr   r   c                     g | ]=}|                                 t          |                    t                              >S  )existsstrrelative_toPROJECT)r-   paths     r   r/   zmain.<locals>.<listcomp>6   s;    UUU$t{{}}Us4##G,,--UUUr   zmissing chapters: z, zchapter r+   z emptyz contains spoken headingz contains production marker)chapterr6   r   r   z


zspoken-narration.txtz-spoken narration is not exact sequential joinaccepted_rangezword count z	 outside -entitiesentity_type	characterforbidden_bare_namesu   (?<![\wÀ-ỹĐđ])u   (?![\wÀ-ỹĐđ])r      c              3       K   | ]}|v V  	d S r   r1   )r-   r   contexts     r   	<genexpr>zmain.<locals>.<genexpr>X   s?        n  n$dgo  n  n  n  n  n  nr   allowed_narrative_namesallowed_title_namesrole_address	full_name)entitybarerA   zidentity gate hits: c                      i | ]\  }}|d z   |S )r   r1   )r-   ir   s      r   
<dictcomp>zmain.<locals>.<dictcomp>^   s"    @@@GAtAE4@@@r   u   trùng bảy dấu lấy hơiu    bảy dấu lấy hơi bí mật)u   cue file trùngu   tệp cue trùngu*   nạp từ bàn điều khiển bảo trì)u   tổng phổ đã bị thayu   trang nhạc bị đánh tráou   thay sau khi ký duyệt)u   Minh Khải ra lệnhu*   chiếm quyền tác giả Khúc Giao Mùau   chủ mưu phá buổi diễn)rev_001rev_002rev_003rev_004revealsnot_before_part	reveal_id)rR   parttermzprotected reveal hits: versionstatuspassedfailedverifiedcanonical_titlechapters_presentchapter_rowsspoken_narrationexact_sequential_jointotal_wordstarget_rangeestimated_minutes_at_baselineg(\*m@   spoken_sha256authority_hashes_currentidentity_hitsprotected_reveal_hitsissues
checked_atF   )ensure_asciiindent)rY   r   rg   )rj   )-r   r   r   
read_bytesgetappendremoveprefixintrangejoin	enumerater2   r   strip
HEADING_REsearchPRODUCTION_REr3   r4   r5   r   r   STORYboolrecompileescapefinditermaxstartendanylowerroundencoder   nowr   utc	isoformatREPORT
write_textr   dumpsprint)'outlineregistryledgerplanmanifestrg   	authorityexpected_manifestexpectedpathsmissingrowstextsr.   r6   r   joinedspoken_pathactual
exact_joinr_   lowhighre   rG   rH   patternmatchallowedreveal_hitschapter_textdetection_termsreveal	thresholdrS   r   rT   reportrA   s'                                         @r   mainr      sd	   >""G,--H&''F&''D+,,HF#Vn%<$H$H$J$JKK$-v8P/P.\.\.^.^$_$_ )64H+H*T*T*V*V W W I
 DHH/0000PQQQ",,~r::GG	RR$,LL1I2$N$N$[$[\e$f$f (-A2 F F S ST] ^ ^ 
 %%%QRRR4+,--HOOaA8N8NOOOEUU%UUUG A*TYYw-?-??@@@b%D ** N Nt{{}} 	~~%%''T 	8MM6U6666777T"" 	JMMHUHHHHIII%% 	MMMKUKKKKLLLs43C3CG3L3L/M/MX]^bXcXcoxy}  zI  zI  zK  zK  pL  pL  M  M  	N  	N  	N  	N25e**2H2HV[[%%''$..bF00K(3(:(:(<(<D[""$$$"Ff2&F"2J GEFFF--K%&IC+%%%%%%%%FKFF#FFFFGGGM,,z2.. 	l 	l::m[11[@@JJ5r:: 	l 	lDj![	$![![![\\G ))&11 l l Qb(8!9!9%))++b.!HI  n  n  n  n&**E^`b:c:cflfpfp  rG  IK  gL  gL  ;L  OU  OY  OY  Zh  jl  Om  Om  ;m  n  n  n  n  n l!((F;4GQUbi)j)jkkk	l	l  CAS-?-?AABBBK@@y/?/?@@@L35WXhhhppp{{{	 O **Y++ g g0122	!Y'' 	g 	gD $$T2..4466E'++F;,?DD g g::<<5((&&VK5HRV`d'e'efffg	g
  DBK0@0@BBCCC1&6((h 	J 	7#45	
 	X 	CII 	 	C 7 7 @ @AA 	  	{ 	d 	({V/CQ)G)G 	vG6==??3334 	#I 	  	 !" 	&#$ 	hl8<00::<<% F( djeAFFFMNNN	$*&"4{V\]]lq
r
r
rsssz")11)r   __main__)r   r   rz   sysr   r   pathlibr   __file__resolveparentsr5   r   rx   r,   r   r{   UNICODEr   ru   rw   r   r   r   r   __name__exitr1   r   r   <module>r      sJ     				 



 ' ' ' ' ' ' ' '      
$x..
 
 
"
"
*1
-	8	':	(	(
"*'
4
4RZghh

yzz3 3 3, , ,& & &e* e* e*N zCHTTVV r   