+
    .zjj                        R t ^ RIHt ^ RIt^ RIHt ^ RIHt ^ RIH	t	 ^ RI
Ht ^ RIHt ^ RIHtHt ^ R	IHt ^ R
IHtHtHt  ! R R]4      tRR R lltR R ltR R ltRR R lltR# )uM  Figures DOCX builder — çizim sayfası kuralları (TR / EP / US).

reference-scripts/build_turkpatent_figures_docx.py'den adapte edildi.

Çizim sayfası farkları (tarifname/istem/özet'ten):
- Kenarlar: Üst 25 / Sol 25 / Sağ 15 / Alt 10 mm — TPMK kılavuzu,
  Rule 46(1) EPC ve 37 CFR 1.84(g) bu değerlerde birleşiyor
- Satır numarası YOK
- Sayfa numarası `N/toplam` formatında (Word PAGE field + literal "/<total>")
- Her şekil ayrı sayfada; etiket ofisin dilinde ("Şekil N" / "Figure N")

Sayfa BOYUTU ofise göre değişir: TR/EP A4, US letter (37 CFR 1.52(a)(1)(ii)).
)annotationsN)	TypedDict)Document)WD_ALIGN_PARAGRAPH)OxmlElement)qn)MmPt)Image)Jurisdiction
OfficeSpecget_office_specc                  ,    ] tR t^t$ R]R&   R]R&   RtR# )FigureInputbytes	png_bytesz
str | Nonetitle N)__name__
__module____qualname____firstlineno____annotations____static_attributes__r       [/Users/zincirx/Documents/projelerim/patentyazar/backend-python/app/services/docx/figures.pyr   r      s    r   r   c                    V ^8  d   QhRRRR/# )   speczOfficeSpec | NonereturnNoner   )formats   "r   __annotate__r"   #   s     
$ 
$,= 
$ 
$r   c                   T;'       g    \        \        P                  4      pVP                  p\	        VP
                  4      V n        \	        VP                  4      V n        \	        VP                  4      V n
        \	        VP                  4      V n        \	        VP                  4      V n        \	        VP                  4      V n        \	        ^
4      V n        \	        ^4      V n        R# )
   N)r   r   TRfigure_marginsr   page_height_mmpage_heightpage_width_mm
page_widthtop
top_marginleftleft_marginrightright_marginbottombottom_marginheader_distancefooter_distance)sectionr   ms   && r   _set_figure_page_marginsr7   #   s    33?<??3DAT001GD../GAEEGQVV*Gagg;GqxxLG fG eGr   c                    V ^8  d   QhRRRR/# )r   total_pagesintr   r    r   )r!   s   "r   r"   r"   0   s      S T r   c                   V P                   ^ ,          p\        P                  Vn        VP	                  4       pRVP
                  n        \        ^4      VP
                  n        \        R4      pVP                  \        R4      R4       \        R4      pVP                  \        R4      R4       RVn        \        R4      pVP                  \        R4      R	4       VP                  P                  V4       VP                  P                  V4       VP                  P                  V4       VP	                  R
V 24      pRVP
                  n        \        ^4      VP
                  n        R# )uB   Alt ortalanmış 'PAGE/N' — PAGE dinamik field, N literal sabit.Times New Romanz	w:fldCharzw:fldCharTypebeginzw:instrTextz	xml:spacepreservePAGEend/N)
paragraphsr   CENTER	alignmentadd_runfontnamer	   sizer   setr   text_rappend)footerr9   prunr=   instrr@   run2s   &&      r   _add_page_number_n_of_totalrR   0   s   !A$++AK
))+C%CHHMrFCHHM $E	IIb!7+&E	IIboz*EJ
k
"CGGB'FFMM%FFMM%FFMM# 99q&'D&DIINVDIINr   c               (    V ^8  d   QhRRRRRRRR/# )r   r   r   max_width_mmfloatmax_height_mmr   ztuple[float, float]r   )r!   s   "r   r"   r"   K   s0        	r   c                &   \         P                  ! \        P                  ! V 4      4      ;_uu_ 4       pVP                  w  rERRR4       X^ 8:  g   X^ 8:  d   W3# WE,          pTpWv,          pW8  d   TpW,          pWx3#   + '       g   i     LF; i)uE   En-boy oranını koruyarak sayfaya sığan en büyük boyutu hesapla.N)r
   openioBytesIOrH   )	r   rT   rV   impx_wpx_hratiow_mmh_mms	   &&&      r   _compute_image_size_mmra   K   sz     
BJJy)	*	*bWW
 
+qyDAI**KED<D|: 
+	*s   B  B	c               (    V ^8  d   QhRRRRRRRR/# )	r   r   strfigureszlist[FigureInput]jurisdictionzJurisdiction | str | Noner   r   r   )r!   s   "r   r"   r"   ^   s6     J JJJ ,J 	Jr   c                ~   V'       g   \        R4      h\        V4      p\        4       pVP                  R,          pRVP                  n        \        ^4      VP                  n        VP                  ^ ,          p\        Wc4       \        VP                  \        V4      4       ^pVP                  VP                  P                  ,
          VP                  P                   ,
          pVP"                  VP                  P$                  ,
          VP                  P&                  ,
          V,
          p	\)        V^R7       EF  w  rV
^8  d   VP+                  4        \-        VR,          W4      w  rVP/                  4       p\0        P2                  Vn        VP7                  4       pVP9                  \:        P<                  ! VR,          4      \?        V4      R7       VP/                  4       p\0        P2                  Vn        VP7                  VP@                   RV
 24      pRVn!        RVP                  n        \        ^4      VP                  n        \        ^4      VPD                  n#        VPI                  R	4      ;'       g    R
PK                  4       pV'       g   EKc  VP/                  4       p\0        P2                  Vn        VP7                  V4      pRVP                  n        \        ^4      VP                  n        EK  	  T p\:        P<                  ! 4       pVPM                  V4       VPO                  4       # )u'  Resimler.docx — her şekil ayrı sayfada, 'Şekil N' etiketli.

Args:
    title: Patent başlığı (ilk sayfada merkezli gösterilebilir ama
        TPMK formatı gerekmez; boş bırakılabilir).
    figures: [{"png_bytes": b"...", "title": "Sistem mimarisi"}, ...]

Returns:
    DOCX bytes.
zFigures list cannot be empty.Normalr<   )startr   )width Tr    )(
ValueErrorr   r   stylesrF   rG   r	   rH   sectionsr7   rR   rM   lenr)   r&   r-   r/   r'   r+   r1   	enumerateadd_page_breakra   add_paragraphr   rC   rD   rE   add_picturerY   rZ   r   figure_caption_prefixboldparagraph_formatspace_beforegetstripsavegetvalue)r   rd   re   r   docstyler5   _CAPTION_RESERVE_MMmax_w_mmmax_h_mmifigr_   _rN   rO   captioncr	fig_titlesubsrbuffers   &&&                   r   build_figures_docxr   ^   sw    899<(D
*C JJx E'EJJOfEJJO ll1oGW+G= !!D$7$7$<$<<t?R?R?X?XXH



!
!	"



$
$	% 	  G1--q5 ([)98N (//iik

3{#34BtHE ##%.55__ : :;1QC@A("v021  -WWW%++224	9##%C.55CMY'B,BGGLb6BGGL7 .: 	AZZ\FHHV??r   )N)__doc__
__future__r   rY   typingr   docxr   docx.enum.textr   	docx.oxmlr   docx.oxml.nsr   docx.sharedr   r	   PILr
   app.services.docx.office_specr   r   r   r   r7   rR   ra   r   r   r   r   <module>r      sT    # 	   - !    S S) 

$6&J Jr   