
    +j<                     P   d dl Z d dlZd dlZd dlmZ d dlmZmZ  G d dej                  Z	 G d dej                  Z
 G d d	ej                  Z G d
 dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d de          Zd efd!ZdS )"    N)override)ComfyExtensionioc                   v    e Zd Zedej        fd            Zedej        j        de	dej
        fd            ZdS )StringFormatreturnc                    t           j                            t           j                            d          t          t          j                  d          }t          j        dddddgd	t           j                            d
|          t           j	                            ddd          gt           j	        
                                g          S )Nvaluer   )inputnamesminr   zFormat Texttextstringformatz\Same as Python's string format method. Supports all of Python's format options and features.values)templatef_stringz{a}T)default	multiline)node_iddisplay_namecategorysearch_aliasesdescriptioninputsoutputs)r   AutogrowTemplateNamesAnyTypeInputlistr   ascii_lowercaseSchemaStringOutput)clsautogrows     9/home/wildlama/comfy/ComfyUI/comfy_extras/nodes_string.pydefine_schemazStringFormat.define_schema
   s    ;,,*""7++v-.. - 
 

 y"&$h/v!!(X!>>	
ETJJ
 	  ""
 
 
 	
    r   r   c                 @    t          j         |j        di |          S )N )r   
NodeOutputr   )r&   r   r   s      r(   executezStringFormat.execute    s&     }_X_66v66777r*   N)__name__
__module____qualname__classmethodr   r#   r)   r   Typestrr-   r.   r,   r*   r(   r   r   	   sz        
bi 
 
 
 [
* 8[%8148	8 8 8 [8 8 8r*   r   c                   :    e Zd Zed             Zed             ZdS )StringConcatenatec                 6   t          j        dg dddt           j                            dd          t           j                            dd          t           j                            d	d
d          gt           j                                        g          S )Nr6   )concatenateztext concatz	join textz
merge textzcombine stringszstring concatzappend textzcombine textzConcatenate Textr   string_aTr   string_b	delimiterF )r   r   r   r   r   r   r   r   r   r#   r$   r    r%   r&   s    r(   r)   zStringConcatenate.define_schema(   s    y' X  X  X+	
d;;	
d;;	ubII 	  ""
 
 
 	
r*   c                 T    t          j        |                    ||f                    S N)r   r-   join)r&   r9   r;   r<   s       r(   r.   zStringConcatenate.execute9   s#    }Y^^Xx,@AABBBr*   Nr/   r0   r1   r2   r)   r.   r,   r*   r(   r6   r6   '   sM        
 
 [
  C C [C C Cr*   r6   c                   :    e Zd Zed             Zed             ZdS )StringSubstringc                 ,   t          j        dg dddt           j                            dd          t           j                            d          t           j                            d	          gt           j                                        g
          S )NrF   )	substringzextract textztext portion	Substringr   r   Tr:   startendr>   r   r#   r$   r    Intr%   r@   s    r(   r)   zStringSubstring.define_schema?   s    y%HHH$	D99W%%U## 	  ""
 
 
 	
r*   c                 :    t          j        |||                   S rB   )r   r-   )r&   r   rJ   rK   s       r(   r.   zStringSubstring.executeP   s    }VE#I.///r*   NrD   r,   r*   r(   rF   rF   >   sH        
 
 [
  0 0 [0 0 0r*   rF   c                   :    e Zd Zed             Zed             ZdS )StringLengthc           
          t          j        dg dddt           j                            dd          gt           j                            d	          g
          S )NrP   )zcharacter countz	text sizezstring lengthzText Lengthr   r   Tr:   lengthr   r>   rL   r@   s    r(   r)   zStringLength.define_schemaV   sa    y"LLL&	D99 844
 
 
 	
r*   c                 D    t          j        t          |                    S rB   )r   r-   len)r&   r   s     r(   r.   zStringLength.executee   s    }S[[)))r*   NrD   r,   r*   r(   rP   rP   U   sH        
 
 [
 * * [* * *r*   rP   c                   :    e Zd Zed             Zed             ZdS )CaseConverterc                     t          j        dg dddt           j                            dd          t           j                            dg d	
          gt           j                                        g          S )NrW   )zcase converterz	text case	uppercase	lowercase
capitalizezConvert Text Caser   r   Tr:   mode)	UPPERCASErZ   
Capitalize
Title Caseoptionsr>   r   r#   r$   r    Combor%   r@   s    r(   r)   zCaseConverter.define_schemak   s{    y#bbb,	D99v/e/e/eff
 	  ""
 
 
 	
r*   c                     |dk    r |j                     }nD|dk    r |j                    }n.|dk    r |j                    }n|dk    r |j                    }n|}t	          j        |          S )Nr]   rZ   r^   r_   )upperlowerr[   titler   r-   r&   r   r\   results       r(   r.   zCaseConverter.execute{   s    ;!V\^^FF[  !V\^^FF\!!&V&((FF\!!!V\^^FFF}V$$$r*   NrD   r,   r*   r(   rW   rW   j   sH        
 
 [
 % % [% % %r*   rW   c                   :    e Zd Zed             Zed             ZdS )
StringTrimc                     t          j        dg dddt           j                            dd          t           j                            dg d	
          gt           j                                        g          S )Nrk   )trimzclean whitespacezremove whitespacezremove spacesstripz	Trim Textr   r   Tr:   r\   )BothLeftRightr`   r>   rb   r@   s    r(   r)   zStringTrim.define_schema   s{    y eee$	D99v/H/H/HII
 	  ""
 
 
 	
r*   c                     |dk    r |j                     }n.|dk    r |j                    }n|dk    r |j                    }n|}t          j        |          S )Nro   rp   rq   )rn   lstriprstripr   r-   rh   s       r(   r.   zStringTrim.execute   s_    6>>!V\^^FFV^^"V]__FFW__"V]__FFF}V$$$r*   NrD   r,   r*   r(   rk   rk      sH        
 
 [
 
% 
% [
% 
% 
%r*   rk   c                   :    e Zd Zed             Zed             ZdS )StringReplacec                 4   t          j        dg dddt           j                            dd          t           j                            dd          t           j                            d	d          gt           j                                        g
          S )Nrv   )replacezfind and replace
substitutez	swap textzReplace Textr   r   Tr:   findrx   r>   r?   r@   s    r(   r)   zStringReplace.define_schema   s    y#UUU'	D99	$77		T:: 	  ""
 
 
 	
r*   c                 H    t          j         |j        ||                    S rB   )r   r-   rx   )r&   r   rz   rx   s       r(   r.   zStringReplace.execute   s     }^V^D'::;;;r*   NrD   r,   r*   r(   rv   rv      sH        
 
 [
  < < [< < <r*   rv   c                   :    e Zd Zed             Zed             ZdS )StringContainsc                 :   t          j        dg dddt           j                            dd          t           j                            dd          t           j                            d	dd
          gt           j                            d          g          S )Nr}   )containsztext includeszstring includeszContains Textr   r   Tr:   rH   case_sensitiver   advancedr   rS   r>   r   r#   r$   r    Booleanr%   r@   s    r(   r)   zStringContains.define_schema   s    y$KKK(	D99	t<<
  !14$ OO 
!!z!::
 
 
 	
r*   c                 ~    |r||v }n#|                                  |j                     v }t          j        |          S rB   )rf   r   r-   )r&   r   rH   r   r   s        r(   r.   zStringContains.execute   sB     	; F*HH ((LFLNN:H}X&&&r*   NrD   r,   r*   r(   r}   r}      sH        
 
 [
  ' ' [' ' 'r*   r}   c                   :    e Zd Zed             Zed             ZdS )StringComparec                 z   t          j        dg dddt           j                            dd          t           j                            dd          t           j                            d	g d
          t           j                            ddd          gt           j                                        g          S )Nr   )comparez
text matchzstring equalszstarts withz	ends withzCompare Textr   r9   Tr:   r;   r\   )Starts With	Ends WithEqualr`   r   r   r>   )r   r#   r$   r    rc   r   r%   r@   s    r(   r)   zStringCompare.define_schema   s    y#aaa'	
d;;	
d;;v/T/T/TUU
  !14$ OO	 
!!##
 
 
 	
r*   c                 T   |r|}|}n(|                                 }|                                 }|dk    rt          j        ||k              S |dk    r't          j        |                    |                    S |dk    r't          j        |                    |                    S d S )Nr   r   r   )rf   r   r-   
startswithendswith)r&   r9   r;   r\   r   abs          r(   r.   zStringCompare.execute   s     	!AAA  A  A7??=a(((]""=a111[  =A/// ! r*   NrD   r,   r*   r(   r   r      sH        
 
 [
" 0 0 [0 0 0r*   r   c                   :    e Zd Zed             Zed             ZdS )
RegexMatchc                    t          j        dg dddt           j                            dd          t           j                            dd          t           j                            d	dd
          t           j                            ddd
          t           j                            ddd
          gt           j                            d          g          S )Nr   )zregex matchregexzpattern matchztext containszstring matchz
Match Textr   r   Tr:   regex_patterncase_insensitiver   r   FdotallmatchesrS   r>   r   r@   s    r(   r)   zRegexMatch.define_schema  s    y eee%	D99	4@@
  !3TD QQ
  ed KK
  54 HH 
!!y!99
 
 
 	
r*   c                     d}|r|t           j        z  }|r|t           j        z  }|r|t           j        z  }	 t          j        |||          }|d u}n# t           j        $ r d}Y nw xY wt          j        |          S )Nr   F)re
IGNORECASE	MULTILINEDOTALLsearcherrorr   r-   )	r&   r   r   r   r   r   flagsmatchri   s	            r(   r.   zRegexMatch.execute  s     	#R]"E 	"R\!E 	RYE	ImVU;;E$&FFx 	 	 	FFF	 }V$$$s   A A&%A&NrD   r,   r*   r(   r   r     sH        
 
 [
$ % % [% % %r*   r   c                   :    e Zd Zed             Zed             ZdS )RegexExtractc                 D   t          j        dg dddt           j                            dd          t           j                            dd          t           j                            d	g d
          t           j                            ddd          t           j                            ddd          t           j                            ddd          t           j                            ddddd          gt           j                                        g          S )Nr   )zregex extractr   zpattern extractztext parserz
parse textzExtract Textr   r   Tr:   r   r\   )First MatchAll MatchesFirst Group
All Groupsr`   r   r   r   Fr   group_index   r   d   )r   r   maxr   r>   )r   r#   r$   r    rc   r   rM   r%   r@   s    r(   r)   zRegexExtract.define_schema+  s    y"eee'	D99	4@@v/j/j/jkk
  !3TD QQ
  ed KK
  54 HH]A1#PTUU 	  ""
 
 
 	
r*   c                    d}d}	|r|	t           j        z  }	|r|	t           j        z  }	|r|	t           j        z  }		 |dk    r3t          j        |||	          }
|
r|
                    d          }nod}nk|dk    rmt          j        |||	          }|rRt          |d         t                    r!|	                    d |D                       }n|	                    |          }nd}n|dk    rVt          j        |||	          }
|
r;t          |
                                          |k    r|
                    |          }nd}n|dk    rt          j        |||	          }g }|D ]c}
|
                                rMt          |
                                          |k    r(|                    |
                    |                     d|	                    |          }nd}n# t           j        $ r d}Y nw xY wt          j        |          S )	N
r   r   r=   r   c                     g | ]
}|d          S )r   r,   ).0ms     r(   
<listcomp>z(RegexExtract.execute.<locals>.<listcomp>X  s    5L5L5Lqad5L5L5Lr*   r   r   )r   r   r   r   r   groupfindall
isinstancetuplerC   rU   groupsfinditerappendr   r   r-   )r&   r   r   r\   r   r   r   r   join_delimiterr   r   ri   r   resultss                 r(   r.   zRegexExtract.execute@  s2    	#R]"E 	"R\!E 	RYE$	}$$	-??  "[[^^FFFF&&*]FEBB  !'!*e44 >!/!4!45L5LG5L5L5L!M!M!/!4!4W!=!=FF&&	-??  S00K??"[[55FFFF%%+mVUCC$ A AE||~~ A#ellnn*=*=*L*Lu{{;'?'?@@@',,W55x 	 	 	FFF	 }V$$$s   F$G G21G2NrD   r,   r*   r(   r   r   *  sH        
 
 [
( 1% 1% [1% 1% 1%r*   r   c                   <    e Zd Zed             Zedd            ZdS )RegexReplacec                 N   t          j        dg ddddt           j                            dd          t           j                            d	d          t           j                            d
d          t           j                            dddd          t           j                            dddd          t           j                            ddddd          t           j                            ddddddd          gt           j                                        g          S )Nr   )zregex replacer   zpattern replacesubstitutionzReplace Text (Regex)r   z+Find and replace text using regex patterns.r   Tr:   r   rx   r   )r   optionalr   r   Fr   zWhen enabled, the dot (.) character will match any character including newline characters. When disabled, dots won't match newlines.)r   r   r   tooltipcountr   r   zMaximum number of replacements to make. Set to 0 to replace all occurrences (default). Set to 1 to replace only the first match, 2 for the first two matches, etc.)r   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r#   r$   r    r   rM   r%   r@   s    r(   r)   zRegexReplace.define_schemav  s   y"XXX/E	D99	4@@		T::
  !3TD[_ ``
  edUY ZZ
  54RV  ag   h  hWaQC$Y]  hL  M  M 	  ""
 
 
 	
r*   TFr   c                     d}|r|t           j        z  }|r|t           j        z  }|r|t           j        z  }t          j        |||||          }	t          j        |	          S )Nr   )r   r   )r   r   r   r   subr   r-   )
r&   r   r   rx   r   r   r   r   r   ri   s
             r(   r.   zRegexReplace.execute  sm     	#R]"E 	"R\!E 	RYEwe5QQQ}V$$$r*   N)TFFr   rD   r,   r*   r(   r   r   u  sM        
 
 [
* 
% 
% 
% [
% 
% 
%r*   r   c                   :    e Zd Zed             Zed             ZdS )JsonExtractStringc                     t          j        dddg dt           j                            dd          t           j                            dd	          gt           j                                        g
          S )Nr   zExtract Text from JSONr   )jsonzextract jsonz
parse jsonz
json valuez	read jsonjson_stringTr:   keyF)r   r   r   r   r   r   r?   r@   s    r(   r)   zJsonExtractString.define_schema  st    y'1\\\	>>	77
 	  ""
 
 
 	
r*   c                 d   	 t          j        |          }t          |t                    rC||v r?||         }|t	          j        d          S t	          j        t          |                    S t	          j        d          S # t           j        t          f$ r t	          j        d          cY S w xY w)Nr=   )	r   loadsr   dictr   r-   r4   JSONDecodeError	TypeError)r&   r   r   datar
   s        r(   r.   zJsonExtractString.execute  s    	%:k**D$%% 1#++S	==,,,}SZZ000=$$$$i0 	% 	% 	%=$$$$$	%s   A
B  B .B *B/.B/NrD   r,   r*   r(   r   r     sH        
 
 [
 % % [% % %r*   r   c                   L    e Zd Zedeeej                          fd            ZdS )StringExtensionr   c                    K   t           t          t          t          t          t
          t          t          t          t          t          t          t          gS rB   )r   r6   rF   rP   rW   rk   rv   r}   r   r   r   r   r   )selfs    r(   get_node_listzStringExtension.get_node_list  s9       
 	
r*   N)	r/   r0   r1   r   r!   typer   	ComfyNoder   r,   r*   r(   r   r     sE        
T$r|*<%= 
 
 
 X
 
 
r*   r   r   c                  "   K   t                      S rB   )r   r,   r*   r(   comfy_entrypointr     s      r*   )r   r   r   typing_extensionsr   comfy_api.latestr   r   r   r   r6   rF   rP   rW   rk   rv   r}   r   r   r   r   r   r   r   r,   r*   r(   <module>r      s   				   & & & & & & / / / / / / / /8 8 8 8 82< 8 8 8<C C C C C C C C.0 0 0 0 0bl 0 0 0.* * * * *2< * * **% % % % %BL % % %B% % % % % % % %>< < < < <BL < < <.' ' ' ' 'R\ ' ' '8!0 !0 !0 !0 !0BL !0 !0 !0H&% &% &% &% &% &% &% &%RH% H% H% H% H%2< H% H% H%V"% "% "% "% "%2< "% "% "%J% % % % % % % %B
 
 
 
 
n 
 
 
&      r*   