
    Sh$                         d dl Z d dlmZ d dlmZmZmZmZmZm	Z	 d dl
mc mZ ddlmZ ddlmZmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZ ddlmZ dZdZ  G d de          Z! G d de          Z"dS )    N)Enum)OptionalTextIOAnyDictListUnion   )
FormatBase   )etree_iter_child_nodes!etree_register_namespace_overrideetree_append_child_nodes)SSAEvent)SSAStyle)
parse_tags)ms_to_times	make_time)SSAFilez{http://www.w3.org/ns/ttml}z#{http://www.w3.org/ns/ttml#styling}c                       e Zd ZdZdZdS )TimeContainerparseqN)__name__
__module____qualname__PARSEQ     Z/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/pysubs2/formats/ttml.pyr   r      s        
C
CCCr    r   c                      e Zd ZdZededefd            Zededefd            Ze	dede
e         fd            Ze	d	d
dedededdf
d            Ze	d	d
dej        ddfd            Ze	d	d
dej        deddfd            Ze	d	d
dej        deddfd            Ze	dedej        ddfd            Ze	d	d
dedededdf
d            Ze	d dede
e         deeef         fd            Ze	dej        deddfd            ZdS )!
TTMLFormatz@Timed Text Markup Language (TTML) subtitle format implementationmsreturnc                 \    | dk     rd} t          |           \  }}}} |dd|dd|dd| dS )zConvert ms to 'HH:MM:SS.mmm'r   02d:.03d)r   )r$   hmss       r!   ms_to_timestampzTTMLFormat.ms_to_timestamp   sU     66B!"oo1a222!222!222"2222r    exprc                     t          j        d|           }||                    d                                          r"t	          |                    d                    n!t          |                    d                    }|                    d          }t          di ||iS t          j        d|           }|t	          |                    d                    }t	          |                    d                    }|                    d                                          r"t	          |                    d                    n!t          |                    d                    }t          |||          S t          d|            )	Nz(\d+(?:\.\d+)?)(h|m|s|ms)r
   r   z"(\d{2,}):(\d{2}):(\d{2}(?:\.\d+)?)   )r+   r,   r-   zUnsupported time expression: r   )re	fullmatchgroup	isnumericintfloatr   NotImplementedError)r/   r,   countmetrichoursminutessecondss          r!   timestamp_to_mszTTMLFormat.timestamp_to_ms#   s?    L5t<<='(wwqzz';';'='=TC

OOO5QRCTCTEWWQZZF///// L>EE=

OOE!''!**ooG)*)=)=)?)?Vc!''!**oooU177ST::EVEVGu7;;;;!"H$"H"HIIIr    textc                     d|v rdS dS )z5See :meth:`pysubs2.formats.FormatBase.guess_format()`http://www.w3.org/ns/ttmlttmlNr   )clsr?   s     r!   guess_formatzTTMLFormat.guess_format6   s     '$..6tr    subsr   fpformat_kwargsNc                     t          j        |          }|                                }|                    t           d          }|dS |                     ||           dS )z
        Rudimentary TTML parser. No formatting/styling apart from newlines is supported.
        Frame-based time expressions are not supported.

        bodyN)ETparsegetrootfindTT_NS_parse_body)rC   rE   rF   rG   rH   treeroot	body_elems           r!   	from_filezTTMLFormat.from_file>   sZ     x||||~~IInnn--	Fi(((((r    rS   c                 ^   |                      |j                            dd                    }t          |j                            dd                    }|t          j        k    rt          d          |                    t           d          D ]}|                     |||           d S )Nbegin0stimeContainerr   %Only 'par' timeContainer is supporteddiv)	r>   attribgetr   r   r8   iterfindrO   
_parse_div)rC   rE   rS   begin_mstime_containerdiv_elems         r!   rP   zTTMLFormat._parse_bodyN   s    &&y'7';';GT'J'JKK&y'7';';OU'S'STT]...%&MNNN!**e===99 	5 	5HNN484444	5 	5r    ra   parent_begin_msc                 d   |                      |j                            dd                    |z   }t          |j                            dd                    }|t          j        k    rt          d          |                    t           d          D ]}|                     |||           d S )NrV   rW   rX   r   rY   p)	r>   r[   r\   r   r   r8   r]   rO   _parse_p)rC   rE   ra   rb   r_   r`   p_elems          r!   r^   zTTMLFormat._parse_divX   s    &&x':':7D'I'IJJ_\&x':':?E'R'RSS]...%&MNNN''544 	1 	1FLLvx0000	1 	1r    rf   c                 B   |                      |j                            dd                    |z   }d|j        v r$||                      |j        d                   z   }n#|                      |j        d                   |z   }t          |j                            dd                    }|t          j        k    rt          d          t          ||          }|j                            |           t          |          D ]}t          |t                    r7|xj        |                                                    d	d
          z  c_        N|j        t            dk    r|xj        dz  c_        r|j        t            dk    r|                     ||           d S )NrV   rW   durationendrX   r   rY   )startri   
 br\Nspan)r>   r[   r\   r   r   r8   r   eventsappendr   
isinstancestrr?   stripreplacetagrO   _parse_span)	rC   rE   rf   rb   r_   end_msr`   eventnodes	            r!   re   zTTMLFormat._parse_pb   s   &&v}'8'8$'G'GHH?Z&& 3 3FM*4M N NNFF((u)=>>PF&v}'8'8%'P'PQQ]...%&MNNNxV4445!!!*622 	1 	1D$$$ 1

djjll224===


8%|||++JJ%'JJJXE//OOE4000	1 	1r    ry   	span_elemc                 \   t          |          D ]}t          |t                    r7|xj        |                                                    dd          z  c_        N|j        t           dk    r|xj        dz  c_        r|j        t           dk    r|                     ||           d S )Nrk   rl   rm   rn   ro   )	r   rr   rs   r?   rt   ru   rv   rO   rw   )rC   ry   r{   rz   s       r!   rw   zTTMLFormat._parse_spany   s    *955 	1 	1D$$$ 1

djjll224===


8%|||++JJ%'JJJXE//OOE4000	1 	1r    c                 z   t          j        t           d          }t          j        |t           d          }t          j        |t           d          }t          j        |t           d          }t          j        |t           d          }	|j                                        D ]<\  }
}d|
i|                     |          }t          j        |	t           d|           =|                                D ]}|j                            |j	        t          j                  }t          |                     |j                            t          |                     |j                            |j	        d}t          j        |t           d	|          }t!          |j        ||j        d
          }t%          |          dk    rQ|d         \  }}|j                            |                     ||                     |                     ||           !|D ]h\  }}|                     ||          }|r5t          j        |t           d|          }|                     ||           R|                     ||           it-                      5  t          j        dd           t          j        dd           t          j        dd           t          j        |           t          j        |                              d          }t7          ||           ddd           dS # 1 swxY w Y   dS )z
        TTML writer. Has partial support for styles and override tags.

        Supported styling:
            - bold
            - italic
            - font name
            - primary color
            - underline
            - strikeout
        ttheadrJ   rZ   stylingidstyle)rV   ri   r   rd   T)skip_empty_fragmentsr
   r   ro    rA   ttmz"http://www.w3.org/ns/ttml#metadatattsz!http://www.w3.org/ns/ttml#stylingzutf-8)fileN)rK   ElementrO   
SubElementstylesitemsssastyle_to_ttsget_text_eventsr\   r   r   DEFAULT_STYLErs   r.   rj   ri   r   r?   lenr[   update_append_textr   register_namespaceindenttostringdecodeprint)rC   rE   rF   rG   rH   tt_elem	head_elemrS   ra   styling_elemnamer   attrsry   event_stylerf   runsfragmentstyr{   
output_xmls                        r!   to_filezTTMLFormat.to_file   sW    *\\\**M'e>>>::	M'e>>>::	=uMMM::}Y50A0A0ABB;,,.. 	@ 	@KD%d%%e,,E M,5????))++ 	; 	;E+//%+x7MNNKS00==>>3..uy99:: E
 ]8[[[%@@Fej+t{Y]^^^D4yyA~~ $Q#$$S%8%8k%J%JKKK  2222%) ; ;MHc//[AAE ;$&M&U...%$P$P	((H====((::::; /00 	' 	'!"&ABBB!%)MNNN!%)LMMMIgW--44W==J*2&&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   BL00L47L4r   
base_stylec                    i }g }|j         r(||j         |j         k    r|                    d           n%|j         s||j         r|                    d           |j        r(||j        |j        k    r|                    d           n%|j        s||j        r|                    d           |r d                    |          |t           d<   ||j        |j        k    r|j        |t           d<   ||j        |j        k    r|j        rd	nd
|t           d<   ||j        |j        k    r|j        rdnd
|t           d<   ||j        |j        k    r%d	                    |j                  |t           d<   |S )z
        Convert `SSAStyle` (or its difference to base style) into dictionary of XML attributes

        Reference: https://www.w3.org/TR/ttml1/#styling-attribute-vocabulary
        N	underlinenoUnderlinelineThroughnoLineThroughrl   textDecoration
fontFamilyboldnormal
fontWeightitalic	fontStylez#{0.r:02X}{0.g:02X}{0.b:02X}color)
r   rq   	strikeoutjoinTTS_NSfontnamer   r   primarycolorformat)rC   r   r   r   decorationss        r!   r   zTTMLFormat.ssastyle_to_tts   s    ? 	.
 2j6Jeo6]6]{++++ 	.Z%;
@T%;}---? 	0
 2j6Jeo6]6]}---- 	0Z%;
@T%;/// 	E/2xx/D/DEV+++,%.J4G"G"G+0>EV'''(EJ!>!>5:Z+M66XEV'''(!2el!B!B6;l*P((EV&&&'!8E<N!N!N&D&K&KEL^&_&_EV"""#r    elemc                 >   |                     dd          }t          j        d|          }g }t          |          D ]O\  }}|dk    r/|                    t          j        t           d                     |                    |           Pt          ||           d S )Nz\hrl   z\\[Nn]r   rm   )	ru   r2   split	enumeraterq   rK   r   rO   r   )rC   r   r?   chunksnodesichunks          r!   r   zTTMLFormat._append_text   s    ||E3'')T**.0!&)) 	  	 HAu1uuRZ555666LL u-----r    )N)r   r   r   __doc__staticmethodr6   rs   r.   r>   classmethodr   rD   r   r   rT   rK   r   rP   r^   re   r   rw   r   r   r   r   r   r   r    r!   r#   r#      s       JJ3C 3C 3 3 3 \3 Jc Jc J J J \J$      [ )Y )F )S )C )TX ) ) ) [) 5y 5RZ 5D 5 5 5 [5 1i 12: 1PS 1X\ 1 1 1 [1 1I 1rz 1C 1TX 1 1 1 [1, 1 1RZ 1D 1 1 1 [1 8'9 8'& 8'3 8'# 8'RV 8' 8' 8' [8't  H (8:L X\]`be]eXf    [@ 	.
 	.# 	.$ 	. 	. 	. [	. 	. 	.r    r#   )#r2   enumr   typingr   r   r   r   r   r	   xml.etree.ElementTreeetreeElementTreerK   baser   commonr   r   r   ssaeventr   ssastyler   
substationr   timer   r   ssafiler   rO   r   r   r#   r   r    r!   <module>r      so   				       ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; " " " " " " " " "       h h h h h h h h h h             " " " " " " ) ) ) ) ) ) ) )       	&	.    D   
R. R. R. R. R. R. R. R. R. R.r    