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

c              3   >   K   | ]}|                                 V  d S r	   )strip.0xs     r   	<genexpr>zexact_join.<locals>.<genexpr>	   s*      (B(Bq(B(B(B(B(B(Br   
)joinr   )textss    r   
exact_joinr!   	   s3    V[[(B(BE(B(B(BBBHHJJ4OOr   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 ]M}	t	          j	        d| t	          j        |	           d	          t	          j	        dt	          j        |	           d          t	          j	        dt	          j        |	           d          fD ]}
|

                    |          D ]}|                    |	|                    dd|                                          dz   |t          d|                                dz
            |                                dz                                            d           t          |          dk    r|c c c S ːO|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   )textregistryscrubbed	fragmentseallowedvalueleadhitsfpatternms               r   identity_hitsrO   
   s   
y
<
  5 5Q
QUU4R88?TUW9X9XXYZY^Y^_mnpYqYqqst  vA  tB  sC  C  D  D  IL  UY  Z  Z  Z'{{e'bbi>N>N'b'b'bcfgovxvz { { {xx155/334444p


 ! !Q*^^bill^^^__`b`j  lPwy  xA  BC  xD  xD  lP  lP  lP  aQ  aQ  RT  R\  ]C  km  kt  uv  kw  kw  ]C  ]C  ]C  RD  RD  E ! !gX&& ! !qKKAX^^D17799%E%Ea%GRZ[^_`abahahajajkmam[n[nopototovovwyoy[yRz  SA  SA  SC  SC  D  D  E  E  E
4yy"}}D[[[[[[[}!! 	r   c                    g d}g }|D ]\  }}}d                     | d |                   }t          j        ||t          j        t          j        z            D ]}|t          d|                                dz
            |                                dz            }t          j        d|d d         t          j        t          j        z            rz|	                    ||dz   |d            |S )	N))   reversed_crack_timelineu}   (?:mười ba|13) (?:vết nứt|ảnh).{0,220}?(?:đảo (?:thứ tự|thời gian)|đổi hướng vì.{0,100}?thời gian))   recycled_bearingsu   (?:gối cầu|vật liệu).{0,180}?(?:tái chế|thay lô|đánh tráo).{0,160}?(?:Khải Phong|liên danh)|Khải Phong.{0,220}?(?:gối cầu|vật liệu).{0,120}?(?:tái chế|thay))   original_calibrationum   (?:Gia Hân|bản hiệu chuẩn gốc).{0,220}?(?:giữ|trao|chứng minh).{0,120}?(?:ghép trang|chữ ký))	   early_opening_orderuu   Hạo Nhiên.{0,220}?(?:ra lệnh|chỉ đạo).{0,120}?mở cầu sớm|lệnh mở cầu sớm.{0,180}?Hạo Nhiên)rU   independent_vibration_datau   Vĩnh Khang.{0,220}?(?:giữ|lưu).{0,120}?(?:mười ba phút|13 phút).{0,100}?(?:rung|dữ liệu)|thiết bị đo độc lập.{0,220}?(?:mười ba phút|13 phút)r   r   d   uw   (?:chưa|không)\s+(?:đủ|thể).{0,100}?(?:chứng minh|xác định|kết luận)|(?:nghi|nếu|có thể).{0,100}$   r   )revealbefore_chapterexcerpt)
r   r7   r=   r:   SrA   r@   rB   searchr>   )	chapterschecksrK   beforer(   patearlyrN   r1   s	            r   reveal_hitsrf      s8   	Q 	Q 	Q 	 Q Q^VC		(7F7#$$%;s5bd++ Q QaQqwwyy}%%aeeggck127i  K  LS  TX  UX  TX  LY  Z\  Z^  _a  _c  Zc  d  d  m  em;;fQhIIJJJ5r   c                  
   g } t          j        t                                                    }t          j        t                                                    }t          |d                   }d t          d|dz             D             }g }g }t          |d          D ]\  }}|                                s/| 	                    d|d           |	                    d           I|                                }	|	                    |	           |	                    |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|                                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          |                      i ddd| sdndd|  d|d         d|dt5          d |D                       d|dt          |                    t                              d |d!||gd"|rt7          |d#z  d$          nd%d&|rt          |          nd d'|d(|d)| d*t9          j        t<          j                                                   }tB          "                    t          j#        |d+d,-          d.z              tI          t          j#        |d         |d         || d d/         t          tB                    d0d+1                     |d         rd%ndS )2Nra   c                 0    g | ]}t           d z  |ddz  S )ra   02dz.txt)STORY)r   is     r   
<listcomp>zmain.<locals>.<listcomp>(   sr      FD  FD  FD  kl  GL  MW  GW  [\  Xf  Xf  Xf  Xf  Gf  FD  FD  FDr   r   zmissing_chapter:ri    )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:versionstatuspassedfailedverifiedcanonical_titleexpected_chapterschapters_presentc              3   >   K   | ]}|                                 V  d S r	   )existsr   s     r   r   zmain.<locals>.<genexpr>=   sh        zU  zU  JK  {|  {C  {C  {E  {E  zU  zU  zU  zU  zU  zUr   chapter_rowsspoken_narrationtotal_wordstarget_rangeestimated_minutes_at_baselineg(\*m@   r   spoken_sha256rO   protected_reveal_hitsissues
checked_atF   )ensure_asciiindentr      )rx   ra   r   r   report)r   )%jsonloadsOUTLINE	read_textIDENTITYr6   range	enumerater}   r>   strrelative_toPROJECTr   r   r   
splitlines
HEADING_REmatchPRODUCTION_REr`   rj   allr!   rO   rf   sumroundr   nowr   utc	isoformatREPORT
write_textdumpsprint)r   outlinerD   expectedpathsr    rowsrk   ro   rC   nr0   narration_path	narrationexpected_textr?   lowhighids	protectedr   s                        r   mainr   '   si   
4:g//11227DJxGYGYG[G[<\<\8fijqr|j}f~f~]e  FD  FD  pu  vw  x@  AB  xB  pC  pC  FD  FD  FD  @E  KM  EJ  SU  NRq!! Q QVQt	Zv}}%?%?%?%?@@@bAQAQAQRZ~~$T***4;;!3tO_O_`gOhOhKiKiruv{  }A  wB  wB  sC  sC  MP  QU  MV  MV  8W  8W  ,X  ,X  ,X	=fmm$<Q$<$<$<===$//++A.. Q QfatBV]]+Aa+A+A+Aa+A+ABBB4  P/OA/O/O/OA/O/O!P!P!PQ ,,UcUjUjUlUl7t~7O7O7Q7Q7QrtYD&-- CDDD$'JJ6z%   Bx-xI}$<$<V]]Kw=x=x=x
5g.B&CXSUD'I%'I'IJJJ--//22 R RVQtdCFMM*Bq*B*BCCC$Q.PQ.P.P Q Q Q*3;]9X&&&BAs3xxAABBB!$U3;uKfmmJ#i..JJKKK 	J	1  	J	XfBhh(  	J	:RXj  	J	Yjkr  tE  lF  	J	  GZ  [c  	J	  dv  wz  zU  zU  OT  zU  zU  zU  wU  wU  	J	  Vd  ei  	J	  j|  }@  AO  A[  A[  \c  Ad  Ad  }e  }e  	J	  fs  ty  	J	  zH  JM  NR  IS  	J	  Ts  MR  tY  ty  z  @F  zF  GH  tI  tI  tI  XY  	J	  Zi  |E  jO  jm  nw  jx  jx  jx  KO  	J	  P_  `c  	J	  d{  |E  	J	  FN  OU  	J	  Vb  ck  co  px  p|  c}  c}  cG	  cG	  cI	  cI	  	J	  K	Q	  K	\	  K	\	  ]	a	  ]	g	  h	n	  |	A
  I
J
  ]	K
  ]	K
  ]	K
  L
P
  ]	P
  K	Q
  K	Q
  K	Q
  R
W
  X
\
  X
b
  o
u
  v
@  o
A  MS  Tf  Mg  v{  EK  LO  MO  LO  EP  Z]  ^d  Ze  Ze  c
f  c
f  ty  X
z  X
z  X
z  R
{  R
{  R
{  HN  OY  HZ  Ca  CD  CD  `a  |ar   __main__)r
   r   r7   sysr   r   pathlibr   __file__resolveparentsr   rj   r   r   r   r<   UNICODEr   r:   r   r   r   r   r!   rO   rf   r   __name__exit r   r   <module>r      s                   & & & & & & & &      X  (+''/E'RgJg'qx  zY  rYhp  af  g~  a~  Z`
%bj11ZRZ  I\  ]_  ]a  >b  >b*  q{  qs  q{  |r  su  sw  qx  qx  cp 8 8 8 & & & O O O    a a a. Z(((((r   