
    i3                        d Z ddlZddlZddlZddlmZ  ee      j                  ZdZ	dZ
dddd	d
ZddiZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zg dZddgZg d Zd! Z e!d"k(  r e         yy)#u?  나머지 22개 파일(15개 복원 + 7개 cell/m1) 마이그레이션.

3가지 유형:
  Type F: f-string 템플릿 (return f-triple-quote) - 값 치환만
  Type A: .format() 호환 (double-brace CSS) - f 접두사 + bg_url 이스케이프
  Type B: raw string (single-brace CSS) - 중괄호 이중화 + f 접두사
    N)Pathz.file:///home/jay/.local/share/fonts/Pretendardz/home/jay/workspace/)_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_RATIOc                 6    | t         v rt         |    d   S d|  dS )Nr   _SIZE_PXDQ_SIZE_MAPpxs    Z/home/jay/workspace/.worktrees/task-2116-dev1/tools/ai-image-gen/_migrate_all_remaining.pyvar_name_for_sizer      s'    	[2q!!B4r?    c                 X    | t         v rt         |    d    dt         |    d    S d|  d|  S )Nr    =    r   PX = r   r   s    r   var_def_for_sizer    %   sB    	[b/!$%SR);(<==B4uRD!!r   c                     | dk(  rd| dS t        |      t        v rt        t        |         d   S t        |      j                  dd      }d| S )Nr   _LH_r   r   ._strLH_RATIO_MAPreplace)kindvalsafes      r   var_name_for_lhr,   +   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"   r   r   r#   r$   r%   )r)   r*   namerefr+   s        r   var_def_for_lhr0   4   st    t|cU%u%%
3x< S*	cs3%  s8C%D$s3%  r   c                    t               }i }t        j                  d|       D ]+  }|j                  t	        |j                  d                   - t        j                  d|       D ]4  }dt	        |j                  d            f|d|j                  d       d<   6 t        j                  d|       D ]>  }d|j                  d      vsd|j                  d      f|d|j                  d       <   @ ||fS )	u.   파일에서 font-size/line-height 값 수집.zfont-size:\s*(\d+)pxr   zline-height:\s*(\d+)pxr   zline-height: zline-height:\s*(\d+\.\d+)r   ratio)setrefinditeraddintgroup)sourcesizeslh_dictms       r   collect_valuesr=   >   s    EEG[[0&9 #		#aggaj/"#[[2F; J37QWWQZ2I-
|2./J[[5v> Jqwwqz!5<aggaj4IGmAGGAJ<01J '>r   c                 R   t               }|r|j                  d       |r|j                  d       g }t        |       D ]?  }|t        v r|j                  t        |   d          |j	                  t        |             A t               }t        |j                         d       D ]  \  }\  }	}
|	dk(  r5t        |
      t        v r$|j                  t        t        |
         d          t        |	|
      }|j                  d      d   j                         }||vsv|j                  |       |j	                  |        g }t               }|D ]K  }|j                  d      d   j                         }||vs*|j                  |       |j	                  |       M t        |      |fS )	u-   Import 심볼 목록과 변수 정의 생성.WORKSPACE_ROOTFONT_DIRr   c                     t        | d         S )Nr   )r&   )xs    r   <lambda>z(build_imports_and_defs.<locals>.<lambda>[   s    AaD	 r   )keyr2   =r   )r3   r6   sortedr   appendr    itemsr&   r'   r0   splitstrip)r:   r;   has_font_pathhas_workspace_pathsymbolsdefsr   seenr$   r)   r*   dr.   
final_defsseen2s                  r   build_imports_and_defsrS   L   sv   eG$%JDUm *KKB*+$R()*
 5D 6IJ ;D#7?s3x<7KKSX.q124%wws|A$$&tHHTNKKN JEE !wws|A$$&uIIdOa 	! '?J&&r   c                    |s| S ddj                  |       }| j                  d      }d}t        |      D ]g  \  }}|r|d   dk(  s|d   dk(  r|j                         }|j	                  d      s|j	                  d      r|d	z   }Q|j	                  d
      sc|d	z   }i |dg}	|r3|	j                  d       |	j                  |       |	j                  d       |	||| dj                  |      S )u?   TOP-LEVEL import 뒤에 삽입 (들여쓰기된 import 무시).zfrom gen_config import , 
r    	zimport zfrom r   zsys.path.insert u    # ── 디자인 토큰 ──)joinrI   	enumeraterJ   
startswithrG   extend)
r9   rM   var_defsimport_linelines
insert_idxilinestrippedblocks
             r   insert_imports_at_toprf   p   s    +DIIg,>+?@KLLEJU# 4Q3$q'T/::<y)X-@-@-IQJ  !23QJ "E78XR#(E*Z 99Ur   c                 h    |D ],  }t        |      }t        j                  d| dd| d|       } . | S )u.   font-size: Npx → font-size: {_VAR}px 치환.font-size:\s*r   font-size: {}px)r   r4   sub)r9   r:   r   vnames       r   replace_font_sizesrm      sK     
!"%RD#E7$'

 Mr   c           	         |j                         D ]t  \  }\  }}t        ||      }|dk(  r t        j                  d| dd| d|       } :t        j                  dt        j                  t        |             dd| d|       } v | S )u   line-height 값 치환.r   line-height:\s*line-height: {rj   	(?![0-9])})rH   r,   r4   rk   escaper&   )r9   r;   r$   r)   r*   rl   s         r   replace_line_heightsrt      s    !--/ ;D#c*4<VV"3%r*!%-F VV"299SX#6"7yA!%+F Mr   c                 .    | j                  t        d      S )u   폰트 경로 치환.file://{FONT_DIR})r(   FONT_PATH_HARDr9   s    r   replace_font_pathry      s    >>.,?AAr   c                 j    t        j                  dt        j                  t              z   dz   d|       S )uB   Path("/home/jay/workspace/...") → WORKSPACE_ROOT / "..." 치환.zPath\("z
([^"]+)"\)zWORKSPACE_ROOT / "\1")r4   rk   rs   WORKSPACE_HARDrx   s    r   replace_workspace_pathsr|      s/    66RYY~..>  r   c                 b    t        j                  dd|       } t        j                  dd|       } | S )u   로컬 FONT_DIR 정의 제거.zF\nFONT_DIR\s*=\s*Path\.home\(\)\s*/\s*["\'].local/share/fonts["\'].*\nrV   zQ\nFONT_DIR\s*=\s*Path\.home\(\)\s*/\s*["\'].local/share/fonts/Pretendard["\'].*\n)r4   rk   rx   s    r   remove_local_font_dirr~      s9    VVQF
 VV\F
 Mr   c                 ~   | j                  d      }t        |      \  }}t        |v }t        |v xr dt        z   |v }t	        ||      }t        ||      }t        |      }t        |      }t        |      }t        ||||      \  }}t        |||      }| j                  |d       t        |      t        |      dS )u6   f-string 템플릿 파일: 값 치환 + import 추가.utf-8encodingPath("r:   lh)	read_textr=   rw   r{   rm   rt   ry   r|   r~   rS   rf   
write_textrF   len)filepathr9   r:   r;   has_fphas_wprM   rN   s           r   process_type_fr      s    1F#F+NE7v%Fv%M(^*Cv*MF.F!&'2Fv&F$V,F"6*F*5'66JMGT"67D9F1E]#g,77r   c                     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) 범위 반환.z0= (""")(\\\s*<!DOCTYPE|\\?\n<!DOCTYPE|<!DOCTYPE)r   """   )r4   r5   startfindrG   )r9   rangesr<   r   ends        r   find_template_rangesr      sj    F[[LfU (
kk%+"91HCMM5#,'( Mr   c           
      ^   | j                  d      }t        |      }t        |      \  }}t        |v }dt        z   |v }t        |      D ]  \  }}||| }	t        j                  dd|	      }	|D ],  }
t        |
      }t        j                  d|
 dd| d	|	      }	. |j                         D ]t  \  }\  }}t        ||      }|dk(  r t        j                  d
| dd| d	|	      }	:t        j                  d
t        j                  t        |             dd| d|	      }	v |	j                  t        d      }	d|	z   }	|d| |	z   ||d z   } t        |      }t        |      }t!        ||||      \  }}t#        |||      }| j%                  |d       t'        |      t)        |      dS )u4   Group A: {{}} CSS + {bg_url} �� f-string 변환.r   r   r   z\{(bg_url|bg_path|font_dir)\}z{{\1}}rh   r   ri   rj   ro   rp   rq   rr   rv   fNr   )r   r   r=   rw   r{   reversedr4   rk   r   rH   r,   rs   r&   r(   r|   r~   rS   rf   r   rF   r   )r   r9   r   r:   r;   r   r   r   r   templater   rl   r$   r)   r*   rM   rN   s                    r   process_type_ar      s   1F!&)F#F+NE7v%F&&0Fv& :
s%$66:IxP 	^B%b)Evvrd"5ugT7RT\]H	^ &mmo 	|NA{c#D#.Et|66_SE"<PUwVZ>[]ef66_RYYs3x5H4I"SWfglfmmoUprz{	| ##N6IK>(*VCD\9%:( %V,F"6*F*5'66JMGT"67D9F1E]#g,77r   c           
         | j                  d      }g }t        j                  d|      D ]F  }|j                  d      }|j	                  d|dz         }|dk7  s/|dz  }|j                  ||f       H t        |      \  }}t        |v }dt        z   |v }	t        |      D ]A  \  }}||| }
|
d	d }|
d
d	 }|
dd
 }|j                  dd      j                  dd      }|D ],  }t        |      }t        j                  d| dd| d|      }. |j                         D ]t  \  }\  }}t        ||      }|dk(  r t        j                  d| dd| d|      }:t        j                  dt        j                  t!        |             dd| d|      }v t        j                  dd      j                  dd      }|j                  |d      }|d	| d| | | z   ||d	 z   }D t#        |      }t%        |      }t'        ||||	      \  }}t)        |||      }| j+                  |d       t-        |      t/        |      dS )uB   Group B: {} CSS (no .format()) → 중괄호 이중화 + f-string.r   r   z6= (""")(\\?\s*<!DOCTYPE|\\?\n<!DOCTYPE|<!DOCTYPE|\\\n)r   r   r   r   r   N{z{{rr   z}}rh   r   ri   rj   ro   rp   rq   rv   r   r   )r   r4   r5   r   r   rG   r=   rw   r{   r   r(   r   rk   rH   r,   rs   r&   r|   r~   rS   rf   r   rF   r   )r   r9   r   r<   r   r   r:   r;   r   r   r   prefixsuffixinnerr   rl   r$   r)   r*   
doubled_fprM   rN   s                         r   process_type_br     s   1FF[[RTZ[ (
kk%+"91HCMM5#,'( $F+NE7v%F&&0Fv& M
s%$"1"#2 c4(00d;  	XB%b)EFFmB4r2mE7$4OQVWE	X &mmo 	vNA{c#D#.Et|/#b9_UGSW;XZ_`/"))CH2E1FiPTcdicjjlRmotu	v $++C6>>sDI
j,?AAfXeWVH"==stL1M4 %V,F"6*F*5'66JMGT"67D9F1E]#g,77r   )	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_07_impact_number_v2.pyzgen_14_svg_first_v2.pyzgen_concept30_hermes.pyzgen_incar_leader_banners.pyzgen_cell7_snu_fair_banners.pyzgen_cell8_snu_leader_banners.py)zgen_15_cjk_typography_v2.pyzgen_c26_production_banners.pyzgen_c35_production_banners.pyzgen_c38_cannes_grid_banners.pyzgen_concept31_patagonia.pyzgen_concepts_21_22_23.pyzgen_concepts_24_26.pyzgen_m3_1_banners.pyzgen_m3_2_banners.pyzgen_m3_3_banners.pyzgen_snu_fair_banners.pyc            
         t         t        z   t        z   } t        dt	        |        d       t        d       t        D ].  }t        t        |z        }t        d| d|d    d|d           0 t         D ].  }t        t        |z        }t        d	| d|d    d|d           0 t        D ].  }t        t        |z        }t        d
| d|d    d|d           0 t        d       t        d       d}| D ]  }t        |z  j                         }g }t        j                  d|      r|j                  d       t        j                  d|      r7d|vr3t	        t        j                  d|            }|j                  d|        t        |v r|j                  d       dt         |v r|j                  d       	 t!        j"                  |       |r't        d| ddj)                  |              |dz  }t        d|         |r%t        d| d       t+        j,                  d       y t        d       y # t$        $ r(}|j                  d|j&                          Y d }~d }~ww xY w)Nu   마이그레이션 대상: u
   개 파일z<============================================================z  [F] u    — sizes=r:   z, lh=r   z  [A] z  [B] z=
============================================================u   검증r   zfont-size:\s*\d+pxz	font-sizezline-height:\s*\d+pxz{_zlh-px:z	font-pathr   zws-pathzsyntax:z	  [FAIL] z: rU   r   z  [OK] rV   u
   건 에러u   
모든 검증 통과!)TYPE_A_FILESTYPE_B_FILESTYPE_F_FILESprintr   r   DIRr   r   r   r4   searchrG   findallrw   r{   astparseSyntaxErrorlinenorZ   sysexit)	all_filesr   rerrorscontentissuescntes           r   mainr   e  s`   |+l:I	'I'7z
BC	(O A37#qcQwZLagY?@A  A37#qcQwZLagY?@A  A37#qcQwZLagY?@A
 
/	(OF !7%%'99*G4MM+&99,g64w;Nbjj!8'BCCMMF3%.)W$MM+&N#$/MM)$	0IIg IaS499V#4"567aKFGA3- -!0 6(*%&'(  	0MMGAHH:.//	0s   >I  	I1	I,,I1__main__)"__doc__r4   r   r   pathlibr   __file__parentr   rw   r{   r   r'   r   r    r,   r0   r=   rS   rf   rm   rt   ry   r|   r~   r   r   r   r   r   r   r   r   __name__ r   r   <module>r      s    
 
 
 
8nA' 	")+,	 
*
"!!'H:	&B
 8*	"8L08h
 $%
1)h zF r   