+
    :j                    R   R t ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIHt ]! ]	4      P                  4       P                  t]P                  P                  P                  t]R,          tR R lt]! 4       tR R ltR	t ! R
 R]4      t ! R R]4      tR^RRR^/R R lltR R ltR# )u  Mermaid CLI subprocess ile PNG render.

TürkPatent kuralları:
- Siyah-beyaz, içi boyalı değil, ≥0.5pt çizgi (CSS ile override)
- Metin ≥10pt (themeVariables.fontSize=14px ≈ 10.5pt; yeterli)
- Referans numaraları çizimde kullanıcı tarafından mermaid içinde yazılır

Neden subprocess? mermaid bir Node.js/Chromium paketi; Python için native
port yok. @mermaid-js/mermaid-cli (`mmdc`) en olgun yaklaşım.
)annotationsN)Pathzturkpatent-theme.jsonc                   V ^8  d   QhRR/# )   returnzPath | None )formats   "_/Users/zincirx/Documents/projelerim/patentyazar/backend-python/app/services/mermaid/renderer.py__annotate__r
      s      {     c                 `   \         P                  P                  R4      p V '       d+   \        V 4      P	                  4       '       d   \        V 4      # \
        P                  ! R4      pV'       d   \        V4      # \        R,          R,          R,          pVP	                  4       '       d   V# R# )u  mmdc binary'sini bul.

Sıra:
  1. MMDC_BIN environment variable (explicit override)
  2. shutil.which("mmdc") — sistem PATH (global npm install -g senaryosu)
  3. backend-python/node_modules/.bin/mmdc — local npm install senaryosu

None döner → kurulu değil.
MMDC_BINmmdcnode_modulesz.binN)osenvirongetr   existsshutilwhich_BACKEND_ROOT)env_pathsystem_pathlocals      r	   _resolve_mmdcr      sx     zz~~j)HDN))++H~,,v&KK  N*V3f<E||~~r   c                   V ^8  d   QhRR/# )r   r   z
str | Noner   )r   s   "r	   r
   r
   5   s      j r   c                     \         P                  P                  R4      p V '       d   V # R F&  p\        V4      P	                  4       '       g   K$  Vu # 	  R# )u  Puppeteer için sistem Chrome/Chromium yolunu bul (senkron).

Sıra:
  1. PUPPETEER_EXECUTABLE_PATH environment variable (explicit override)
  2. /usr/bin/google-chrome-stable (apt paketinin kurulu olduğu yer)
  3. /usr/bin/google-chrome
  4. /usr/bin/chromium (apt chromium alternatifi)

None döner → Puppeteer kendi indirdiği Chrome'u kullanır (dev ortamı OK).

Senkron tutulur: birkaç sabit yolu kontrol eden hafif bir işlem;
async render fonksiyonu içinde bloklayan disk I/O yapılmaması için
buraya çıkarılmıştır.
PUPPETEER_EXECUTABLE_PATHN)z/usr/bin/google-chrome-stablez/usr/bin/google-chromez/usr/bin/chromium)r   r   r   r   r   )r   	candidates     r	   _resolve_chrome_pathr   5   sK     zz~~9:H	
 	?!!## r   a]  
.node rect, .node circle, .node ellipse, .node polygon, .node path,
.cluster rect {
  fill: #ffffff !important;
  stroke: #000000 !important;
  stroke-width: 1.5px !important;
}
.edgePath .path, .flowchart-link, .messageLine0, .messageLine1,
.actor, line, path.transition {
  stroke: #000000 !important;
  stroke-width: 1.5px !important;
  fill: none !important;
}
.edgeLabel, .nodeLabel, text, tspan {
  fill: #000000 !important;
  color: #000000 !important;
  font-family: "Times New Roman", serif !important;
}
.arrowheadPath, marker path {
  fill: #000000 !important;
  stroke: #000000 !important;
}
c                      ] tR t^ktRtRtR# )MermaidRenderErroruL   mmdc çalıştı ama render başarısız (geçersiz diyagram syntax'ı vb.).r   N__name__
__module____qualname____firstlineno____doc____static_attributes__r   r   r	   r!   r!   k   s    Vr   r!   c                      ] tR t^otRtRtR# )MermaidNotInstalledErroruH   Node.js / mmdc kurulu değil — backend-python/node_modules bekleniyor.r   Nr"   r   r   r	   r*   r*   o   s    Rr   r*   scalewidthi  timeout_secondsc          
     ,    V ^8  d   QhRRRRRRRRRR/# )	r   sourcestrr+   intr,   r-   r   bytesr   )r   s   "r	   r
   r
   s   sC     f( f(f( f( 	f(
 f( f(r   c                 "   \         e   \         P                  4       '       g   \        R4      h\        P                  4       '       g   \        R\         24      h\        P
                  ! RR7      ;_uu_ 4       p\        V4      pVR,          pVR,          pVR,          pVP                  V R	R
7       VP                  \        R	R
7       \        4       p	RRR./p
V	'       d   WR&   ^ RI
pVR,          pVP                  VP                  V
4      R	R
7       \        \         4      R\        V4      R\        V4      R\        \        4      R\        V4      R\        V4      R\        V4      R\        V4      RRRR.p \        P                  ! \        P                  ! VR\        P                   P"                  R\        P                   P"                  / VR7      G Rj  xL
 p\        P                  ! VP%                  4       VR7      G Rj  xL
 w  ppTP*                  ^ 8w  d@   T;'       g    R P-                  R	R!R"7      p\)        R#TP*                   R$TR%,           24      hTP                  4       '       g   \)        R&4      hTP/                  4       uuRRR4       #  L L  \&         d   p\)        RT R24      ThRp?ii ; i  + '       g   i     R# ; i5i)'u  Mermaid kaynağını TürkPatent-uyumlu siyah-beyaz PNG'e çevirir.

Args:
    source: Mermaid diyagram kaynağı (flowchart, sequenceDiagram, vs.)
    scale: PNG ölçeklendirme faktörü (DPI eşdeğeri). 3 → ~300 DPI.
    width: Piksel genişlik (scale * width = output genişlik).
    timeout_seconds: mmdc çalışma süresi limiti.

Returns:
    PNG bytes.

Raises:
    MermaidNotInstalledError: mmdc bulunamazsa.
    MermaidRenderError: mermaid syntax hatası veya Chromium başlatma hatası.
Nu~   mmdc bulunamadı. Global olarak `npm install -g @mermaid-js/mermaid-cli` veya MMDC_BIN env variable ile explicit yol belirtin.u&   TürkPatent theme config bulunamadı: mermaid_)prefixzdiagram.mmdzdiagram.pngz
patent.csszutf-8)encodingargsz--no-sandboxz--disable-setuid-sandboxexecutablePathzpuppeteer.jsonz-iz-oz-cz-Cz-pz-sz-wz-bwhitez-tdefaultstdoutstderr)timeoutzmmdc u   s içinde tamamlanamadır   replace)errorsz
mmdc exit z: :Ni  Nu8   mmdc başarılı çıkış kodu verdi ama PNG üretmedi.)	_MMDC_BINr   r*   _CONFIG_PATHtempfileTemporaryDirectoryr   
write_text_PATENT_CSSr   jsondumpsr0   asynciowait_forcreate_subprocess_exec
subprocessPIPEcommunicateTimeoutErrorr!   
returncodedecode
read_bytes)r/   r+   r,   r-   tmpdirtmp_path
input_fileoutput_filecss_filechrome_pathpuppeteer_cfg_data_jsonpuppeteer_cfgcmdprocr;   r<   excerrs   &$$$               r	   render_mermaid_to_pngr_   s   s    , 	 0 0 2 2&D
 	
   &)OP\~'^__ 
	$	$J	7	76<-
.l*fw7K': +, ^%?@1
 3>/0 #33  KK*+ 	! 	
 	N
OMJJ'
,	a )).."--22 #--22
 ( D $+#3#3D4D4D4FP_#``NFF ??a==S(((CC$z$//1B"SYK%PQQ!!##$%_``%%'O 
8	7h a 	a$u_,==U%VW]``	a{ 
8	7	7s   "K$K
1K;DK=A!J#J-J#J!J#K.AK:KKJ#!J##K.J>>KKK		Kc                   V ^8  d   QhRR/# )r   r   boolr   )r   s   "r	   r
   r
      s     ] ] ]r   c                     \         RJ;'       d5    \         P                  4       ;'       d    \        P                  ! R4      RJ# )u-   Test + health check için — mmdc kurulu mu?Nnode)r@   r   r   r   r   r   r	   mmdc_availablerd      s5    D \\Y%5%5%7\\FLL<PX\<\\r   )r'   
__future__r   rH   r   r   rB   pathlibr   __file__resolveparent_PACKAGE_ROOTr   rA   r   r@   r   rE   RuntimeErrorr!   r*   r_   rd   r   r   r	   <module>rl      s   	 #  	   X&&(//$$++22662 O	:2W WS| Sf( f( 	f(
 f(R]r   