
    [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  dz  Zedz  dz  Zed	z  Z ej        d
ej                  Z ej        dej                  Z ej        dej                  Zd Z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   storyscriptzoutline.jsonzidentity-registry.jsonzpromotion-report.jsonu   [\wÀ-ỹĐđ]+uQ   ^\s*(?:chương|phần|cảnh|chapter|part|scene)\s*(?:\d+|[ivxlcdm]+)?\s*[:.\-]?u3   \[(?:sfx|music|nhạc|âm thanh|pause|transition)\]c                 t    t          j        |                     d                                                    S )Nutf-8)hashlibsha256encode	hexdigesttexts    script/validate-story.pyshar      s*    >$++g..//99;;;    c                 6    t                               |           S N)WORD_REfindallr   s    r   wordsr      s    ??4   r   c                 j    d                     d | D                                                       dz   S )Nz

c              3   >   K   | ]}|                                 V  d S r   )strip).0r   s     r   	<genexpr>zexact_join.<locals>.<genexpr>   s*      66tzz||666666r   
)joinr   )textss    r   
exact_joinr!      s4    ;;6666666<<>>EEr   c                    | }t                      }|d         D ]}t          t          |                    dg           |                    dg           z   |                    dg           z   |d         gz             t          d          }|D ]:}t	          j        dt	          j        |           d	d
|t          j                  };|                    |                    dg                      d}g }t          |          D ]O}	t	          j	        d| t	          j        |	           d	          t	          j	        dt	          j        |	           d          t	          j	        dt	          j        |	           d          g}
|
D ]}|
                    |          D ]}|                    |	|                    dd|                                          dz   |t          d|                                dz
            |                                dz                                            d           t          |          dk    r|c c c S ːQ|S )N
charactersallowed_narrative_namesallowed_title_namesrole_address	full_nameT)keyreverseu   (?<![\wÀ-ỹĐđ])u   (?![\wÀ-ỹĐđ]) )flagsforbidden_bare_namesug   (?:cô|anh|chị|ông|bà|cậu|em|gọi|hỏi|bảo|đáp|quát|nhìn|nói với|thì thầm với)\s+u   (?i)(?<![\wÀ-ỹĐđ])z[,;:]\s*z
\s*[,!?.:]u
   [\"“]\s*r   r   r   <   P   )fragmentlinecontext2   )setsortedgetlenresubescapeIupdatecompilefinditerappendcountstartmaxendr   )r   registryscrubbed	fragmentsentityallowedvalueleadhitsr/   patternspatternmatchs                r   identity_hitsrN      s'   HI<( A AVZZ(A2FFTikmInInnqwq{q{  }K  MO  rP  rP  P  TZ  [f  Tg  Sh  h  i  i  or  |@  A  A  A 	v 	vEvYRYu5E5EYYY[^`hprptuuuHH$:B??@@@@uDD9%% 
  
 J_$_	(8K8K___``JB29X#6#6BBBCCJDRYx%8%8DDDEE

   	  	 G ))(33    8>>$PQSXS^S^S`S`;a;ade;erz{~  @A  CH  CN  CN  CP  CP  QS  CS  |T  |T  UZ  U^  U^  U`  U`  ac  Uc  |c  sd  sj  sj  sl  sl  m  m  n  n  nt99??KKKKKKK # 	 
 Kr   c                 t   g d}g }|D ]\  }}}d                     | d |                   }t          j        ||t          j        t          j        z            }|r\|                    ||dz   |t          d|                                dz
            |                                dz            d           |S )N))   forged_waiversug   bảy (?:giấy|chữ ký).{0,180}?(?:giả|giả mạo)|giấy từ bỏ.{0,180}?(?:giả|giả mạo))   seven_compartments_functionu]   bảy chìa.{0,180}?mở bảy ngăn|bảy ngăn.{0,180}?(?:biên nhận|hồ sơ sửa nhà))rP   transfer_conditionu   chỉ được bán khi.{0,220}?(?:đồng thuận|quỹ hoàn trả)|điều kiện chuyển quyền.{0,220}?(?:đồng thuận|hoàn trả))	   inspection_false_signatureuv   Tử Dương.{0,240}?(?:ký|xác nhận).{0,180}?(?:chưa đến|không đến).{0,120}?(?:hiện trường|căn nhà)r   r   r   r-   d   )revealbefore_chapterexcerpt)	r   r7   searchr:   Sr>   rA   r@   rB   )chapterschecksrJ   before_countr(   rL   earlyrM   s           r   reveal_hitsra   7   s      F D&, I I"c7		(=L=122	'5"$+66 	IKK3,:JW\]`abdidododqdqrtdt]u]uv{vv  wB  wB  CF  wF  ^F  XG  H  H  I  I  IKr   c                  4   g } t          j        t                              d                    }t          j        t                              d                    }t          |d                   }d t          d|dz             D             }g g }}t          |d          D ]\  }}|                                s/| 	                    d|d           |	                    d           I|                    d          }	|	                    |	           |	                    |t          |                    t                              t          t          |	                    t          |	          d	           |	                                s| 	                    d
|d           t          |	                                d          D ]q\  }
}t"                              |          r| 	                    d|dd|
            t&                              |          r| 	                    d|dd|
            rt*          dz  }|                                r|                    d          nd}|s| 	                    d           t-          |          rt/          |          nd}|r|r||k    r| 	                    d           t          t          |                    }|d         \  }}||cxk    r|k    sn | 	                    d|            t          |                                d          D ]i\  }
}t"                              |          r| 	                    d|
            t&                              |          r| 	                    d|
            j|rt1          ||          ng }|r%| 	                    dt          |                      t-          |          rt3          |          ng }|r%| 	                    dt          |                      g }|rt5          j        d|t4          j                  D ]}|t;          d|                                dz
            |                                dz            }t5          j        d|t4          j        t4          j         z            sT|	                    |!                    dd|                                          dz   |                                d           |r%| 	                    dt          |                      i ddd | sd!nd"d#|  d$|d$         d%|d&tE          d' |D                       d(|d)t          |                    t                              d*|d+||gd,|rtG          |d-z  d.          ndd/|rt          |          nd d0|d1|d2|d3| d4tI          j%        tL          j'                  (                                }tR          *                    t          j+        |d5d67          dz   d           tY          t          j+        |d#         |d&         || d d8         t          tR                    d9d5:                     |d#         rdndS );Nr
   )encodingr]   c                 0    g | ]}t           d z  |ddz  S )r]   02dz.txt)STORY)r   is     r   
<listcomp>zmain.<locals>.<listcomp>L   s*    QQQQUZQ....0QQQr   r   zmissing_chapter:re    )chapterpathr   r   zempty_chapter:zheading::zproduction_marker:zspoken-narration.txt!missing_or_empty_spoken_narration*spoken_narration_not_exact_sequential_joinallowed_word_rangezword_count_out_of_range:zheading_in_spoken:zproduction_marker_in_spoken:zstandalone_identity_fragments:zprotected_reveal_too_early:uM   Tô Nhã Cầm\s+(?:đi|bước|mở|đứng|ngồi|gọi|nói|đưa|gửi)\br   x      uY   (?:nhớ|hồi ức|năm ấy|ngày trước|lá thư|bản ghi|giọng.*?vang|trong mơ)r   )r0   r1   z0deceased_character_outside_historical_container:versionstatuspassedfailedverifiedcanonical_titleexpected_chapterschapters_presentc              3   >   K   | ]}|                                 V  d S r   )exists)r   ps     r   r   zmain.<locals>.<genexpr>q   sh        Z  Z  OP  @A  @H  @H  @J  @J  Z  Z  Z  Z  Z  Zr   chapter_rowsspoken_narrationtotal_wordstarget_rangeestimated_minutes_at_baselineg(\*m@   spoken_sha256rN   protected_reveal_hitsdeceased_container_hitsissues
checked_atF   )ensure_asciiindent   )rv   r]   r   r   report)r   )-jsonloadsOUTLINE	read_textIDENTITYr6   range	enumerater{   r>   strrelative_toPROJECTr   r   r   
splitlines
HEADING_RErM   PRODUCTION_REr[   rf   allr!   rN   ra   r7   r=   r:   rA   r@   rB   r\   r?   sumroundr   nowr   utc	isoformatREPORT
write_textdumpsprint)r   outlinerC   expectedpathschapter_textsrowsrg   rk   r   line_nor0   narration_path	narrationexpected_textr?   lowhighid_hits	protecteddead_nowmr1   r   s                           r   mainr   G   s   Fj**G*<<==Gz(,,g,>>??H7:&''HQQ%8a<:P:PQQQEb4MUA&& a a4{{}} 	MM4Q444555  $$$~~w~//T"""3t/?/?/H/H+I+ITWX]^bXcXcTdTdpstxpypyzz{{{zz|| 	4MM21222333&t'8'8!<< 	a 	aMGT%%Rv}}5Q5Q5Q5Q5Q5Q'R'R'R##D))`6==9_a9_9_9_V]9_9_+`+`+`	a 33N>L>S>S>U>U](('(:::[]IHfmm$GHHH14]1C1CKJ}---M~]~yM'A'A6==Q}C~C~C~i  !!E,-IC%4/Q%/Q/Q!R!R!R"9#7#7#9#91== _ _D!!P6==1Og1O1O#P#P#P%%^v}}5]T[5]5]'^'^'^4=EmIx0002GNMs7||MMNNN.1-.@.@HM***bIO&-- Nc)nn N NOOOH imoxz|z~ 	i 	iAAaggiim 4 4QUUWWS[ @AG9y  |C  EG  EI  LN  LP  EP  Q  Q ia		)J)J1)LW^WdWdWfWf g ghhhbaRUV^R_R_aabbb v	i  v	(6#G88x  v	
W]S]  v	^opw  yJ  qK  v	  L_  `h  v	  i{  |  Z  Z  TY  Z  Z  Z  |Z  |Z  v	  [i  jn  v	  oA  BE  FT  F`  F`  ah  Fi  Fi  Bj  Bj  v	  kx  y~  v	  M  OR  SW  NX  v	  Yx  RW  y^  y~  D  EK  K  LM  yN  yN  yN  ]^  v	  _n  AJ  oT  or  s|  o}  o}  o}  PT  v	  Ud  el  v	  mD  EN  v	  Oh  iq  v	  rz  {A	  v	  B	N	  O	W	  O	[	  \	d	  \	h	  O	i	  O	i	  O	s	  O	s	  O	u	  O	u	  v	F
djU!DDDTISZ[[[	$*
!3vFX?Yhmw}  B  @B  B  xC  MP  QW  MX  MX  Y  Y  gl  m  m  m  n  n  nz")11)r   __main__)r   r   r7   sysr   r   pathlibr   __file__resolveparentsr   rf   r   r   r   r<   UNICODEr   r:   r   r   r   r   r!   rN   ra   r   __name__exit r   r   <module>r      s|     				 



 ' ' ' ' ' ' ' '      
$x..
 
 
"
"
*1
-'
H
~
-X 88	(	(
"*'
4
4RZlnpnrss

QSUSWXX< < <! ! !F F F  0   -* -* -*^ z838DDFF+++++r   