
    Siz/              
          d Z ddlZddlZddlmZ  ee      j                  ZdddddZd	d
iZ	g dZ
ddgZdZdZdefdZdedefdZdedefdZdedefdZdedefdZdedefdZdedefdZdededededef
d Zdedededefd!Zdedededefd"Zded#ed$ed%edef
d&Zdedefd'Z d%ed(edefd)Z!d* Z"e#d+k(  r e"        yy),u   7개 cell/m1 파일의 하드코딩 제거 마이그레이션 스크립트.

두 그룹을 처리:
  Group A (cell1,cell2,m1_1,m1_2,m1_3): .format() 호환 ({{}} CSS), {bg_url} placeholder
  Group B (cell7,cell8): raw string ({} CSS), no .format()
    N)Path)_CTA_PX
CTA_MIN_PX)_SUBHEAD_PXSUBHEAD_MIN_PX)_HEADLINE_PXHEADLINE_MIN_PX)
_METRIC_PXCORE_METRIC_MIN_PX)(   @   T   `   z1.3)	_LH_RATIOHEAD_SUB_RATIO)zgen_cell1_incar_fair_banners.pyz!gen_cell2_incar_leader_banners.pyzgen_m1_1_fair_banners.pyzgen_m1_2_leader_banners.pyzgen_m1_3_support_banners.pyzgen_cell7_snu_fair_banners.pyzgen_cell8_snu_leader_banners.pyz.file:///home/jay/.local/share/fonts/Pretendardz/home/jay/workspace/sourcec                     g }t        j                  d|       D ]F  }|j                  d      }| j                  d|dz         }|dk7  s/|dz  }|j	                  ||f       H |S )u7   HTML 템플릿 문자열의 (start, end) 범위 반환.z1= (""")(\\?\s*<!DOCTYPE|\\?\n<!DOCTYPE|<!DOCTYPE)   z"""   )refinditerstartfindappend)r   rangesmr   ends        W/home/jay/workspace/.worktrees/task-2117-dev1/tools/ai-image-gen/_migrate_remaining7.pyfind_template_rangesr    ,   sj    F[[MvV (
kk%+"91HCMM5#,'( M    templatereturnc                     t        j                  d|       D ch c]  }t        |j                  d             c}S c c}w )u(   템플릿 내 font-size: Npx 값 수집.zfont-size:\s*(\d+)pxr   r   r   intgroup)r"   r   s     r   collect_font_sizesr(   :   s.    %'[[1H(%STC
OTTTs   !=c                 D   i }t        j                  d|       D ]0  }dt        |j                  d            f||j                  d      <   2 t        j                  d|       D ];  }d|j                  d      vsd|j                  d      f||j                  d      <   = |S )u=   템플릿 내 line-height 값 수집. {원본문자열: 값}.zline-height:\s*(\d+)pxpxr   r   zline-height:\s*(\d+\.\d+)ratior%   )r"   resultr   s      r   collect_line_heightsr-   ?   s    F[[2H= 5"C
O4qwwqz5 [[5x@ 7qwwqz!")1771:!6F1771:7 Mr!   r*   c                 6    | t         v rt         |    d   S d|  dS )Nr   _SIZE_PXDQ_MAPr*   s    r   var_name_for_sizer4   L   s%    	V|bz!}B4r?r!   c                 X    | t         v rt         |    d    dt         |    d    S d|  d|  S )Nr    = r   r/   PX = r1   r3   s    r   var_def_for_sizer8   R   s=    	V|*Q-F2JqM?33B4uRD!!r!   kindc                     | dk(  rd| dS t        |      t        v rt        t        |         d   S t        |      j                  dd      }d| S )Nr*   _LH_r0   r   ._strLH_RATIO_MAPreplace)r9   valsafes      r   var_name_for_lhrD   X   sY    t|cU"~
3x<CH%a((s8C%D$=r!   c                     | dk(  rd| d| S t        |      t        v rt        t        |         \  }}| d| S t        |      j                  dd      }d| d| S )Nr*   r;   r7   r6   r<   r=   r>   )r9   rB   namerefrC   s        r   var_def_for_lhrH   b   st    t|cU%u%%
3x< S*	cs3%  s8C%D$s3%  r!   sizeslh_dicthas_font_pathhas_workspace_pathc                    t               }|r|j                  d       |r|j                  d       g }t        |       D ]?  }|t        v r|j                  t        |   d          |j	                  t        |             A t        |j                         d       D ]]  \  }\  }}	|dk(  r5t        |	      t        v r$|j                  t        t        |	         d          |j	                  t        ||	             _ t               }
g }|D ]K  }|j                  d      d   j                         }||
vs*|
j                  |       |j	                  |       M t        |      |fS )	uB   필요한 gen_config import 심볼 목록과 변수 정의 반환.WORKSPACE_ROOTFONT_DIRr   c                     t        | d         S )Nr   )r?   )xs    r   <lambda>z needed_imports.<locals>.<lambda>z   s    s1Q4y r!   )keyr+   =r   )setaddsortedr2   r   r8   itemsr?   r@   rH   splitstrip)rI   rJ   rK   rL   symbolsvar_defsr*   originalr9   rB   seenunique_defsdrF   s                 r   needed_importsra   l   s=   eG$%JHUm .<KKr
1&(,-.
 "(=P!Q 3+47?s3x<7KKSX.q12tS123 5DK "wws|A$$&tHHTNq!	" '?K''r!   c                    t        j                  dd|       } |D ],  }t        |      }t        j                  d| dd| d|       } . |j                         D ]g  \  }\  }}t	        ||      }|dk(  r5| j                  d| dd| d      } | j                  d	| dd
| d      } O| j                  d| d| d      } i | j                  t        d      } d| z   } | S )u4   Group A: {{}} CSS + {bg_url} 패턴 f-string 변환.z\{(bg_url)\}z{{\1}}font-size:\s*r*   font-size: {}pxline-height: line-height: {line-height:line-height:{}file://{FONT_DIR}f)r   subr4   rX   rD   rA   FONT_PATH_HARD)r"   rI   rJ   r*   vnamer]   r9   rB   s           r   convert_template_group_arp      s,    vvoy(;H  
!"%66RD#E7$'

 ") +4c*4<''uB'!%-H
  ''se2& t,H
  ''u%!%+H& 2EGH X~HOr!   c                 <   | dd }| dd }| dd }|j                  dd      j                  dd      }|D ],  }t        |      }t        j                  d| d	d
| d|      }. |j	                         D ]g  \  }\  }	}
t        |	|
      }|	d	k(  r5|j                  d|
 d	d| d      }|j                  d|
 d	d| d      }O|j                  d|
 d| d      }i t        j                  dd      j                  dd      }|j                  |d      }d| | | S )u3   Group B: raw {} CSS (no .format()) f-string 변환.Nr   {z{{rj   z}}rc   r*   rd   re   rf   rg   rh   ri   rk   rl   )rA   r4   r   rm   rX   rD   rn   )r"   rI   rJ   prefixsuffixinnerr*   ro   r]   r9   rB   doubled_font_paths               r   convert_template_group_brx      sz    bq\Fbc]FQrNE MM#t$,,S$7E  
!"%RD#E7$'

 ") +4c*4<MMuB'!%-E MMse2& t,E
 MMu%!%+E$ '..sD9AA#tLMM+/BDE vhugfX&&r!   r[   r\   filenamec                    |s| S ddj                  |       }| j                  d      }d}t        |      D ]  \  }}|j                         }	|rN|d   dk7  rF|d   dk7  r>|	j	                  d      s|	j	                  d      r|d	z   }n|	j	                  d
      r|d	z   }|si|d   dk7  sr|d   dk7  s{d|	v s|d	z   } |dg}
|r3|
j                  d       |
j                  |       |
j                  d       |
||| dj                  |      S )u"   Import와 디자인 토큰 삽입.zfrom gen_config import , 
r    	zimport zfrom r   zsys.path.insertgcloud_auth u    # ── 디자인 토큰 ──)joinrY   	enumeraterZ   
startswithr   extend)r   r[   r\   ry   import_linelines
insert_idxilinestrippedblocks              r   add_imports_and_tokensr      s!   +DIIg,>+?@K LLEJU# 
4::<DGsNtAw$""9-1D1DW1MU
$$%67U
DGsNtAw$=H;TQJ
 "E78XR#(E*Z 99Ur!   c                 n    t        j                  dt        j                  t              z   dz   d|       } | S )uB   Path("/home/jay/workspace/...") → WORKSPACE_ROOT / "..." 치환.Path\("z
([^"]+)"\)zWORKSPACE_ROOT / "\1")r   rm   escapeWORKSPACE_HARD)r   s    r   replace_workspace_pathsr     s5     VVRYY~..> F Mr!   r'   c                 B   t         | z  }|j                  d      }|}t        |      }|s| dddS t               }i }t        |v }t
        |v }	|D ]2  \  }
}||
| }|t        |      z  }|j                  t        |             4 t        |      D ]8  \  }
}||
| }|dk(  rt        |||      }nt        |||      }|d|
 |z   ||d z   }: t        |      }t        ||||	      \  }}t        ||||       }|j                  |d       | dt!        |      t#        |      |d	S )
u   파일 처리.zutf-8)encodingSKIPzno templates found)filestatusreasonANOK)r   r   rI   lh_countr[   )DIR	read_textr    rU   rn   r   r(   updater-   reversedrp   rx   r   ra   r   
write_textrW   len)ry   r'   filepathr   r]   r   	all_sizesall_lhrK   rL   r   r   r"   	convertedr[   r\   s                   r   process_filer     su   X~H1FH "&)F F>RSS IF"f,M'61 6
s%$'11	*8456 v& ;
s%$C<09fMI09fMI)+fSTl:; %V,F 'y&-I[\GX#FGXxHF 1 	"K r!   c                  V   t        d       t        d       t        d       g } t        D ]Y  }t        |d      }| j                  |       t        d|d    d| d|j	                  dd	       d
|j	                  dd	              [ t
        D ]Y  }t        |d      }| j                  |       t        d|d    d| d|j	                  dd	       d
|j	                  dd	              [ t        d       t        d       t        d       d}t        t
        z   D ]X  }t        |z  }|j                         }t        t        j                  d|            }t        t        j                  d|            }t        t        j                  d|            }|j                  t              }	t        t        j                  dt        j                  t              z   |            }
g }|r|j                  d|        |r|j                  d|        |	r|j                  d|	        |
r|j                  d|
        |r't        d| ddj                  |              |dz  }Kt        d|        [ t        d       dd l}t        t
        z   D ]9  }t        |z  }	 |j#                  |j                                t        d|        ; |r%t        d| d       t'        j(                  d       y t        d        y # t$        $ r }t        d| d|        |dz  }Y d }~d }~ww xY w)!Nz<============================================================u%   7개 파일 마이그레이션 시작r   z  [r   z] u    — sizes=rI   r   z, lh=r   Bz=
============================================================u   검증r   zfont-size:\s*\d+pxzline-height:\s*\d+pxzline-height:\s*\d+\.\d+[^p]r   z
font-size:zlh-px:z
font-path:zws-path:z	  [FAIL] z: r{   r   z  [OK] u   
AST 파싱 검증:u   
총 u   건 에러 발견u   
모든 검증 통과!)printGROUP_Ar   r   getGROUP_Br   r   r   r   findallcountrn   r   r   r   astparseSyntaxErrorsysexit)resultsrl   rerrorsr   contentfs_countlh_px_countlh_ratio_count	font_pathws_pathissuesr   es                 r   mainr   C  s   	(O	
12	(OG aC qAhK=1#[wr1B0C5zZ\I]H^_`a
  aC qAhK=1#[wr1B0C5zZ\I]H^_`a 
/	(O	(OFw !7$$&rzz"7AB"**%<gFGRZZ(FPQMM.1	bjjbii.G!GQRV]]Zz#:;{m&<=fmmj$<=FMMHWI"67IaS499V#4"567aKFGA3- +!0 

 !w 7	IIh((*+GA3- 	 vh/01'(  	IaS1#&'aKF	s   -K??	L(L##L(__main__)$__doc__r   r   pathlibr   __file__parentr   r2   r@   r   r   rn   r   r?   r    rU   r(   dictr-   r&   r4   r8   rD   rH   booltuplera   rp   rx   listr   r   r   r   __name__ r!   r   <module>r      s   
 
 
8n 	")+,	
 
*
 $%
 B' U U U

3 
4 
# # " " "# s ! !c !(# ( (T (W[ (`e (>'s '3 ' '# 'T+'s +'3 +' +'# +'\3   QT Y\ B
C 
C 
/3 /s /t /d=)@ zF r!   