§
    ƒ£Ìj(  ã                   óÈ  — d Z ddlZddlZddlZddlZddlZdZdZdZdZ	dZ
dZd	Zej                             d
¦  «        ZdZdZdZi Zefd„ZdZd.d„Zd/d„Zd.d„Zd„ Zd„ Zd„ Z	 	 d0d„Zd„ Zd„ Zedk    �rldej         v rÇdZ! ee!d¬ ¦  «        Z" ee"d¬ ¦  «        Z#e"e#k    s
J d!¦   «         ‚ ee"¦  «        Z$ e%e$ &                    ¦   «         ¦  «        sJ d"e$z  ¦   «         ‚ e'd#¦  «          e'd$ e( e¦   «         ¦  «         e(e¦  «        fz  ¦  «         e$ )                    ¦   «         D ]\  Z*Z+ e'd%e+rd&nd'›d(e*›�¦  «         ŒdS d)ej         v r†ej         d*d…         D ]tZ, ee,¦  «        Z$d+„ e$ )                    ¦   «         D ¦   «         Z- e'e-sd&nd'›d(ej         .                    e,¦  «        ›d(e-sdnd,d- /                    e-¦  «        z   ›�¦  «         ŒudS  e'e ¦  «         dS dS )1u.  
å®�é”�å“�ç‰Œå¥—ä»¶ â€”â€” Logo + Slogan æ ‡å‡†ï¼ˆå”¯ä¸€æ�ƒå¨�å®žçŽ°ï¼‰
================================================================
ã€�é“�å¾‹ã€‘æ‰€æœ‰å¯¹å¤–ç‰©æ–™ä¸Žå·¥ä½œæ–‡æ¡£ï¼ˆHTML/PDFï¼‰å¿…é¡»å�« Logo + sloganã€‚
æœ¬æ¨¡å�—æ˜¯å”¯ä¸€å®žçŽ°ï¼Œä»»ä½•ç”Ÿæˆ�å™¨éƒ½ä»Žè¿™é‡Œå�–ï¼Œä¸�å¾—å�„å†™ä¸€ä»½ã€‚

  é¡µçœ‰ï¼šLogoï¼ˆbase64 å†…è�”ï¼‰+ BIORI BIOTECH + å®�é”�ç”Ÿç‰© + æ ‡ç­¾ + ã€�sloganã€‘
  é¡µè„šï¼šBIORI BIOTECH Â· å®�é”�ç”Ÿç‰© ï½œ ç”µè¯� ï½œ ç½‘å�€ ï½œ é‚®ç®± ï½œ åœ°å�€  + ã€�sloganã€‘

ç”¨æ³•ï¼ˆç”Ÿæˆ�å™¨é‡Œï¼‰ï¼š
    import brand_kit as BK
    html = BK.inject(html, theme='dark', tag='è�¥é”€ä¸­å¿ƒ', footer_extra='...')
    # å¹‚ç­‰ï¼šé‡�å¤�è°ƒç”¨ä¸�ä¼šå� ä¸¤å¥—

è‡ªæ£€ï¼š
    python3 brand_kit.py --verify æ–‡ä»¶.html      # å�•æ–‡ä»¶
    python3 brand_kit.py --selftest              # æ¨¡å�—è‡ªæ£€
é    Nu'   å®ˆæŠ¤ç”Ÿå‘½å�¥åº·ï¼Œç¼”é€ ç¾Žå¥½ç”Ÿæ´»zBIORI BIOTECHu   å®�é”�ç”Ÿç‰©z0756-8699969zwww.biori.comzmarketing@biori.comu#   ç� æµ·å¸‚é¦™æ´²åŒºæ°´å²¸ä¸€è·¯88å�·u(   ~/work/å…¬å�¸èµ„æ–™/logo_transparent.png)úbior-brand-v1úbior-headerzbior-sloganu   å®ˆæŠ¤ç”Ÿå‘½å�¥åº·éH   c                 ó¾  — | t           v rt           |          S 	 ddlm} n# t          $ r t	          d¦  «        ‚w xY wt
          j                             t          ¦  «        st          dt          z  ¦  «        ‚| 
                    t          ¦  «                             d¦  «        }|j        \  }}t          t          || z  |z  ¦  «        ¦  «        }|                     || f|j        ¦  «        }t#          j        ¦   «         }|                     |dd¬¦  «         d	t)          j        |                     ¦   «         ¦  «                             ¦   «         z   }|t           | <   |S )
uN   è¿”å›ž logo çš„ data URIï¼ˆç¼©æ”¾åˆ°é«˜åº¦ hï¼ŒPNG ä¼˜åŒ–ï¼‰ã€‚ç»“æžœç¼“å­˜ã€‚r   )ÚImageu6   éœ€è¦� Pillowï¼š/usr/bin/python3 -m pip install pillowu   Logo æº�æ–‡ä»¶ä¸�å­˜åœ¨ï¼š%sÚRGBAÚPNGT)ÚformatÚoptimizezdata:image/png;base64,)Ú_logo_cacheÚPILr   ÚImportErrorÚRuntimeErrorÚosÚpathÚexistsÚLOGO_SRCÚFileNotFoundErrorÚopenÚconvertÚsizeÚintÚroundÚresizeÚLANCZOSÚioÚBytesIOÚsaveÚbase64Ú	b64encodeÚgetvalueÚdecode)Úhr   ÚimÚwÚhhÚnwÚbufÚuris           õD   /Users/liuxinyuan/Desktop/Hermesè¾“å‡º-å·¥ä½œç±»/è„šæœ¬/brand_kit.pyÚlogo_data_urir+   -   sE  € à�KÐÐÝ˜1Œ~ÐðUØÐÐÐÐÐÐøÝð Uð Uð UÝÐSÑTÔTÐTðUøøøåŒ7�>Š>�(Ñ#Ô#ð KÝÐ >ÅÑ IÑJÔJÐJØ	�Š•HÑ	Ô	×	%Ò	% fÑ	-Ô	-€BØŒG�E€A€rÝ	�U�1�q‘5˜2‘:ÑÔÑ	Ô	€BØ	�Š�B˜�7˜EœMÑ	*Ô	*€BÝ
Œ*‰,Œ,€CØ‡G‚GˆC˜¨€GÑ-Ô-Ð-Ø
"¥VÔ%5°c·l²l±n´nÑ%EÔ%E×%LÒ%LÑ%NÔ%NÑ
N€CØ…K��NØ€Js   ˜ Ÿ9uÒ  
/* ===== bior-brand-v1 Â· å®�é”�å“�ç‰Œæ ‡å‡†ï¼ˆLogo+Sloganï¼‰===== */
.bior-header{background:linear-gradient(135deg,#0d47a1 0%,#1565c0 50%,#1a73e8 100%);color:#fff;
  box-shadow:0 2px 8px rgba(13,71,161,.18);
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif}
.bior-header-inner{max-width:1560px;margin:0 auto;display:flex;align-items:center;gap:13px;padding:10px 22px}
.bior-logo-chip{background:#fff;border-radius:8px;padding:3px 10px;display:flex;align-items:center;
  box-shadow:0 1px 3px rgba(0,0,0,.16);flex:none}
.bior-logo-chip img{height:34px;width:auto;display:block}
.bior-brand{line-height:1.24;flex:none}
.bior-name{font-size:15px;font-weight:700;letter-spacing:.6px;display:block}
.bior-cn{font-size:11px;opacity:.86;display:block;letter-spacing:1.5px}
.bior-tagwrap{margin-left:auto;text-align:right;line-height:1.3;flex:none}
.bior-tag{font-size:11px;opacity:.85;display:block}
.bior-slogan{font-size:13.5px;font-weight:600;letter-spacing:2px;display:block;
  text-shadow:0 1px 2px rgba(0,0,0,.13)}
.bior-footer{background:#0d2a52;color:#c9d8ee;padding:15px 22px;text-align:center;line-height:1.9;
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif}
.bior-footer-slogan{font-size:14px;font-weight:700;letter-spacing:3px;color:#fff;margin-bottom:5px}
.bior-footer-meta{font-size:11px;opacity:.8}
.bior-footer-meta b{font-weight:600;color:#fff;opacity:.95}
.bior-footer-extra{font-size:10.5px;opacity:.6;margin-top:5px}
/* ç™½åº•é¡¶æ �å�˜ä½“ï¼ˆå·¥ä½œå�°é¡µé�¢ï¼‰ */
.bior-header.light{background:#fff;border-bottom:1px solid #e0e0e0;box-shadow:0 1px 4px rgba(0,0,0,.06)}
.bior-header.light .bior-name{color:#1852B6}
.bior-header.light .bior-cn{color:#5f6368;opacity:1}
.bior-header.light .bior-tag{color:#9aa0a6;opacity:1}
.bior-header.light .bior-slogan{color:#1565c0;text-shadow:none}
.bior-header.light .bior-logo-chip{box-shadow:none;padding:0;background:transparent;border-radius:0}
@media(max-width:760px){
  .bior-slogan{font-size:11px;letter-spacing:1px}
  .bior-header-inner{gap:9px;padding:9px 13px}
  .bior-logo-chip img{height:26px}
}
@media print{.bior-footer{background:#0d2a52 !important;-webkit-print-color-adjust:exact;print-color-adjust:exact}}
Údarkõ   è�¥é”€ä¸­å¿ƒc                 óŒ   — d| dk    rdndz   }d|›dt          ¦   «         ›dt          ›dt          ›d	t          ›d
|›dt          ›d�S )uB   é¡µçœ‰ï¼šLogo + å“�ç‰Œå�� + æ ‡ç­¾ + sloganã€‚theme='dark'|'light'r   r,   Ú z lightz<div class="z[" data-bior-brand="1"><div class="bior-header-inner"><div class="bior-logo-chip"><img src="z" alt="z8"></div><div class="bior-brand"><span class="bior-name">z</span><span class="bior-cn">z></span></div><div class="bior-tagwrap"><span class="bior-tag">z!</span><span class="bior-slogan">z</span></div></div></div>)r+   ÚBRAND_ENÚBRAND_CNÚSLOGAN)ÚthemeÚtagÚclss      r*   Úheader_htmlr6   i   sW   € à
 ¨&¢ ˜2˜2°hÑ
?€C€Cð 
ˆˆ�m‰oŒoˆoˆo�x˜x˜x­¨¨µ8°8°8¸S¸S¸SÅ&À&À&ðJð Jó    r/   Tc                 óÄ   — |r3dt           ›dt          ›dt          ›dt          ›dt          ›dt
          ›�}ndt           ›dt          ›�}| rd| z  nd}dt          ›d|›d	|›d	�S )
u0   é¡µè„šè�½æ¬¾ï¼šslogan + å“�ç‰Œ + è�”ç³»æ–¹å¼�ã€‚z<b>u   </b> Â· u    ï½œ ç”µè¯� u    ï½œ z'<div class="bior-footer-extra">%s</div>r/   zM<div class="bior-footer" data-bior-brand="1"><div class="bior-footer-slogan">z$</div><div class="bior-footer-meta">z</div>)r0   r1   ÚTELÚSITEÚMAILÚADDRr2   )ÚextraÚcontactÚmetaÚxss       r*   Úfooter_htmlrA   |   sˆ   € àð 8ð 8å�8�8�X˜X˜X¥s s s­D¨D¨Dµ$°$°$½¸ð>ˆˆð8õ %- H H­h¨hÐ7ˆØ>CÐ	KÐ	2°UÑ	:Ð	:È€B€Bõ 
ˆˆ����r�r�rðð r7   c                 ó0   — t           t          | |¦  «        fS )u@   è¿”å›ž (css, html)ã€‚æ³¨å…¥åˆ° <head> å‰�è¯·è‡ªè¡ŒåŒ… <style>ã€‚)ÚCSSr6   )r3   r4   s     r*   Ú
head_blockrD   Œ   s   € å•˜E 3Ñ'Ô'Ð'Ð'r7   c                 ó
   — d| v S )u½   âš ï¸� å¿…é¡»åŒ¹é…�ã€�å…ƒç´ ã€‘è€Œé�žç±»å��ï¼šCSS é‡Œæœ‰ .bior-header{...}ï¼Œ
       ç”¨ 'bior-header' in html ä¼šåœ¨æ³¨å…¥ CSS å�Žè¯¯åˆ¤ä¸ºã€Œå·²æœ‰é¡µçœ‰ã€�â†’ é¡µçœ‰ HTML æ°¸ä¸�å†™å…¥ã€‚zclass="bior-header© ©Úhtmls    r*   Ú_has_headerrI   ’   s   € ð   4Ð'Ð'r7   c                 ó
   — d| v S )u(   å�Œä¸Šï¼šCSS é‡Œæœ‰ .bior-footer{...}ã€‚zclass="bior-footerrF   rG   s    r*   Ú_has_footerrK   ˜   s   € à 4Ð'Ð'r7   c                 ó   — t           | v S )N)Ú
SLOGAN_KEYrG   s    r*   Ú_has_sloganrN   �   s   € Ý˜ÐÐr7   c                 óÚ  — | }|r2d|vr.dt           z  }d|v r|                     d|dz   d¦  «        }n||z   }t          |¦  «        szt          ||¦  «        }	t	          j        d|t          j        ¦  «        }
|
r@|d|
                     ¦   «         …         dz   |	z   ||
                     ¦   «         d…         z   }n|	dz   |z   }|ret          |¦  «        sVd|v r t	          j	        d	d
t          z  |d¬¦  «        }t          |¦  «        s#d|v r|                     ddt          z  d¦  «        }|rBt          |¦  «        s3t          |¦  «        }d|v r|                     d|dz   d¦  «        }n||z   }|S )u¹   
    å¹‚ç­‰æ³¨å…¥å“�ç‰Œé¡µçœ‰/é¡µè„šã€‚é‡�å¤�è°ƒç”¨ä¸�å� åŠ ã€‚
      theme='dark'  å·¥ä¸šè“�æ¸�å�˜ï¼ˆå¯¹å¤–äº¤ä»˜ä»¶é»˜è®¤ï¼‰
      theme='light' ç™½è‰²é¡¶æ �ï¼ˆå·¥ä½œå�°é¡µé�¢ï¼‰
    r   z
<style>
%s
</style>
z</head>é   z<body[^>]*>Nú
zclass="bior-tagwrap"z%(<span class="bior-tag">[^<]*</span>)z%\1<span class="bior-slogan">%s</span>)Úcountz</body>z)<div class="bior-slogan">%s</div>
</body>z
</body>)rC   ÚreplacerI   r6   ÚreÚsearchÚIÚendrN   Úsubr2   rK   rA   )rH   r3   r4   ÚfooterÚfooter_extraÚ
ensure_cssÚensure_sloganÚoutÚstyleÚhbÚmÚfbs               r*   Úinjectrb   ¡   s¹  € ð €Cð ð �o¨SÐ0Ð0Ø+­cÑ1ˆØ˜ÐÐØ—+’+˜i¨°Ñ):¸AÑ>Ô>ˆCˆCà˜#‘+ˆCõ �sÑÔð "Ý˜ Ñ$Ô$ˆÝŒI�n c­2¬4Ñ0Ô0ˆØð 	"Ø�h�q—u’u‘w”w�h”- $Ñ&¨Ñ+¨c°!·%²%±'´'°(°(¬mÑ;ˆCˆCà�t‘)˜c‘/ˆCð ð c�[¨Ñ-Ô-ð cØ! SÐ(Ð(Ý”&ÐAØAÅFÑJØ Að'ñ 'ô 'ˆCõ ˜3ÑÔð 	c I°Ð$4Ð$4Ø—+’+˜iÐ)UÕX^Ñ)^Ð`aÑbÔbˆCð ð •k #Ñ&Ô&ð Ý˜Ñ&Ô&ˆØ˜ÐÐØ—+’+˜i¨¨kÑ)9¸1Ñ=Ô=ˆCˆCà˜‘(ˆCØ€Jr7   c                 ó„   — d| v t           | v t          | v t          | v d| v d| v t          | v t	          j        d| ¦  «         dœS )u   è¿”å›žè‡ªæ£€æ¸…å�• dictã€‚zdata:image/png;base64r   zbior-footerz'\{\{[A-Z_]+\}\}|\{LOGO_B64\}|\{SLOGAN\})Úlogou   å“�ç‰Œè‹±æ–‡u   å“�ç‰Œä¸­æ–‡Úsloganu   é¡µçœ‰u   é¡µè„šu   è�”ç³»æ–¹å¼�u   ç¦�ç”¨å� ä½�ç¬¦)r0   r1   rM   r9   rT   rU   rG   s    r*   Úverifyrf   Ï   s^   € ð (¨4Ð/Ý  DÐ(Ý  DÐ(Ý Ð$Ø 4Ð'Ø 4Ð'Ý˜t˜Ý!œyÐ)SÐUYÑZÔZÐZð	ð 	ð 	r7   c                 ó¦   — t          j        | dd¬¦  «        5 }t          |                     ¦   «         ¦  «        cd d d ¦  «         S # 1 swxY w Y   d S )Nzutf-8Úignore)ÚencodingÚerrors)r   r   rf   Úread)r   Úfs     r*   Ú
check_filerm   Ý   s�   € Ý	Œ� °Ð	9Ñ	9Ô	9ð  ¸QÝ�a—f’f‘h”hÑÔð ð  ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  ð  ð  s   ˜!AÁA
ÁA
Ú__main__z
--selftestu6   <html><head></head><body><h1>æµ‹è¯•</h1></body></html>)r4   u   â�Œ æ³¨å…¥ä¸�å¹‚ç­‰u   â�Œ è‡ªæ£€æœªè¿‡: %su4   âœ… brand_kit è‡ªæ£€é€šè¿‡ï¼ˆå¹‚ç­‰ + 6 é¡¹é½�å¤‡ï¼‰u*      header é•¿åº¦ %d å­—ç¬¦ï¼ŒCSS %d å­—ç¬¦z   u   âœ…u   â�Œú z--verifyé   c                 ó   — g | ]	\  }}|°|‘Œ
S rF   rF   )Ú.0ÚkÚoks      r*   ú
<listcomp>ru   ñ   s!   € Ð6Ð6Ð6™˜˜B°2Ð6�1Ð6Ð6Ð6r7   u   ç¼º: z, )r,   r-   )r/   T)r,   r-   Tr/   TT)0Ú__doc__r   r   r   rT   Úsysr2   r0   r1   r9   r:   r;   r<   r   Ú
expanduserr   ÚMARKSrM   ÚLOGO_Hr   r+   rC   r6   rA   rD   rI   rK   rN   rb   rf   rm   Ú__name__Úargvr#   ÚaÚbÚvÚallÚvaluesÚprintÚlenÚitemsrs   rt   ÚpÚbadÚbasenameÚjoinrF   r7   r*   ú<module>r‰      se  ððð ð$ €€€Ø 	€	€	€	Ø 	€	€	€	Ø 	€	€	€	Ø 
€
€
€
ð 
3€Ø€Ø€Ø€Ø€Ø€Ø,€àŒ7×ÒÐHÑIÔI€Ø7€Ø!€
ð 
€Ø€ð ð ð ð ð ð,#€ðLJð Jð Jð Jð&ð ð ð ð (ð (ð (ð (ð(ð (ð (ð(ð (ð (ð
ð ð ð NPØ*.ð*ð *ð *ð *ð\ð ð ð ð  ð  ð
 ˆzÒÑØ�s”xÐÐØDˆØˆF�1˜.Ð)Ñ)Ô)ˆØˆF�1˜.Ð)Ñ)Ô)ˆØ�AŠvˆvˆvÐ,‰vŒvˆvØˆF�1‰IŒIˆØˆs�1—8’8‘:”:‰ŒÐ:Ð:Ð 6¸Ñ :Ñ:Ô:ˆØˆÐDÑEÔEÐEØˆÐ:¸c¸cÀ+À+Á-Ä-Ñ>PÔ>PÐRUÐRUÐVYÑRZÔRZÐ=[Ñ[Ñ\Ô\Ð\Ø—W’W‘Y”Yð 	<ð 	<‰EˆAˆrØˆEˆE¨Ð 6  °Ð 6Ð 6¸¸Ð:Ñ;Ô;Ð;Ð;ð	<ð 	<à	�s”xÐ	Ð	Ø”˜!˜"˜"”ð 	Nð 	NˆAØ�
˜1‘”ˆAØ6Ð6 !§'¢'¡)¤)Ð6Ñ6Ô6ˆCØˆE¨SÐ ;  °eÐ ;Ð ;¸R¼W×=MÒ=MÈaÑ=PÔ=PÐ=PÐ=PØ*-Ð K  °7¸T¿YºYÀs¹^¼^Ñ3KÐ KðMñ Nô Nð Nð Nð	Nð 	Nð 	ˆˆg‰Œˆˆˆð' Ðr7   