
    ^(j<                     |   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y)"    N)override)ComfyExtensionioc                       e Zd Zedej
                  fd       Zedej                  j                  de	dej                  fd       Zy)StringFormatreturnc                    t         j                  j                  t         j                  j	                  d      t        t        j                        d      }t        j                  dddddgd	t         j                  j	                  d
|      t         j                  j	                  ddd      gt         j                  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     C/Users/danicosta/Desktop/Flux2/ComfyUI/comfy_extras/nodes_string.pydefine_schemazStringFormat.define_schema
   s    ;;,,**""7+v--. - 

 yy"&$h/v!!(X!>		
ETJ
 		  "
 	
    r   r   c                 L    t        j                   |j                  di |      S )N )r   
NodeOutputr   )r&   r   r   s      r(   executezStringFormat.execute    s!     }}_X__6v677r*   N)__name__
__module____qualname__classmethodr   r#   r)   r   Typestrr-   r.   r,   r*   r(   r   r   	   sY    
bii 
 
* 8[[%%8148	8 8r*   r   c                   ,    e Zd Zed        Zed        Zy)StringConcatenatec                 8   t        j                  dg dddt         j                  j                  dd      t         j                  j                  dd      t         j                  j                  d	d
d      gt         j                  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|    yy' X+		
d;		
d;		ubI 		  "
 	
r*   c                 N    t        j                  |j                  ||f            S N)r   r-   join)r&   r9   r;   r<   s       r(   r.   zStringConcatenate.execute9   s    }}Y^^Xx,@ABBr*   Nr/   r0   r1   r2   r)   r.   r,   r*   r(   r6   r6   '   s*    
 
  C Cr*   r6   c                   ,    e Zd Zed        Zed        Zy)StringSubstringc                 .   t        j                  dg dddt         j                  j                  dd      t         j                  j                  d      t         j                  j                  d	      gt         j                  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?   so    yy%H$		D9W%U# 		  "
 	
r*   c                 2    t        j                  |||       S rB   )r   r-   )r&   r   rJ   rK   s       r(   r.   zStringSubstring.executeP   s    }}VE#.//r*   NrD   r,   r*   r(   rF   rF   >   s(    
 
  0 0r*   rF   c                   ,    e Zd Zed        Zed        Zy)StringLengthc           
          t        j                  dg dddt         j                  j                  dd      gt         j                  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   sQ    yy"L&		D9 84
 	
r*   c                 >    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   s(    
 
 * *r*   rP   c                   ,    e Zd Zed        Zed        Zy)CaseConverterc                     t        j                  dg dddt         j                  j                  dd      t         j                  j                  dg d	
      gt         j                  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   sd    yy#b,		D9v/ef
 		  "
 	
r*   c                     |dk(  r |j                          }nG|dk(  r |j                         }n0|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{   sm    ;!V\\^F[ !V\\^F\!&V&&(F\!!V\\^FF}}V$$r*   NrD   r,   r*   r(   rW   rW   j   s(    
 
 % %r*   rW   c                   ,    e Zd Zed        Zed        Zy)
StringTrimc                     t        j                  dg dddt         j                  j                  dd      t         j                  j                  dg d	
      gt         j                  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   sd    yy e$		D9v/HI
 		  "
 	
r*   c                     |dk(  r |j                          }n0|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   sR    6>!V\\^FV^"V]]_FW_"V]]_FF}}V$$r*   NrD   r,   r*   r(   rk   rk      s(    
 
 
% 
%r*   rk   c                   ,    e Zd Zed        Zed        Zy)StringReplacec                 6   t        j                  dg dddt         j                  j                  dd      t         j                  j                  dd      t         j                  j                  d	d      gt         j                  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   sw    yy#U'		D9		$7			T: 		  "
 	
r*   c                 N    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      s(    
 
  < <r*   rv   c                   ,    e Zd Zed        Zed        Zy)StringContainsc                 <   t        j                  dg dddt         j                  j                  dd      t         j                  j                  dd      t         j                  j                  d	dd
      gt         j                  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    yy$K(		D9		t<

  !14$ O 

!!z!:
 	
r*   c                 |    |r||v }n!|j                          |j                          v }t        j                  |      S rB   )rf   r   r-   )r&   r   rH   r   r   s        r(   r.   zStringContains.execute   s7     F*H (LFLLN:H}}X&&r*   NrD   r,   r*   r(   r}   r}      s(    
 
  ' 'r*   r}   c                   ,    e Zd Zed        Zed        Zy)StringComparec                 |   t        j                  dg dddt         j                  j                  dd      t         j                  j                  dd      t         j                  j                  d	g d
      t         j
                  j                  ddd      gt         j
                  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    yy#a'		
d;		
d;v/TU

  !14$ O	 

!!#
 	
r*   c                 0   |r|}|}n |j                         }|j                         }|dk(  rt        j                  ||k(        S |dk(  r$t        j                  |j                  |            S |dk(  r$t        j                  |j	                  |            S y )Nr   r   r   )rf   r   r-   
startswithendswith)r&   r9   r;   r\   r   abs          r(   r.   zStringCompare.execute   s    AA A A7?==a((]"==a11[ ==A// !r*   NrD   r,   r*   r(   r   r      s(    
 
" 0 0r*   r   c                   ,    e Zd Zed        Zed        Zy)
RegexMatchc                    t        j                  dg dddt         j                  j                  dd      t         j                  j                  dd      t         j                  j                  d	dd
      t         j                  j                  ddd
      t         j                  j                  ddd
      gt         j                  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    yy e%		D9		4@

  !3TD Q

  ed K

  54 H 

!!y!9
 	
r*   c                    d}|r|t         j                  z  }|r|t         j                  z  }|r|t         j                  z  }	 t        j                  |||      }|d u}t        j                  |      S # t         j
                  $ r d}Y ,w xY w)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RYYE	IImVU;E$&F
 }}V$$ xx 	F	s   A3 3B
BNrD   r,   r*   r(   r   r     s(    
 
$ % %r*   r   c                   ,    e Zd Zed        Zed        Zy)RegexExtractc                 F   t        j                  dg dddt         j                  j                  dd      t         j                  j                  dd      t         j                  j                  d	g d
      t         j
                  j                  ddd      t         j
                  j                  ddd      t         j
                  j                  ddd      t         j                  j                  ddddd      gt         j                  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    yy"e'		D9		4@v/jk

  !3TD Q

  ed K

  54 H]A1#PTU 		  "
 	
r*   c                    d}d}	|r|	t         j                  z  }	|r|	t         j                  z  }	|r|	t         j                  z  }		 |dk(  r0t        j                  |||	      }
|
r|
j                  d      }nCd}n?|dk(  rdt        j                  |||	      }|rHt        |d   t              r#|j                  |D cg c]  }|d   	 c}      }n|j                  |      }nd}n|dk(  rJt        j                  |||	      }
|
r.t        |
j                               |k\  r|
j                  |      }nd}n|dk(  rt        j                  |||	      }g }|D ]P  }
|
j                         st        |
j                               |k\  s1|j                  |
j                  |             R |j                  |      }nd}t        j                   |      S c c}w # t         j                  $ r d}Y 1w xY w)N
r   r   r=   r   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   mresultss                  r(   r.   zRegexExtract.execute@  s   R]]"ER\\!ERYYE$	}$		-?"[[^FF&**]FEB!'!*e4!/!4!4G5LGqadG5L!M!/!4!4W!=F&		-?S0K?"[[5FF%++mVUC$E||~#elln*=*Lu{{;'?@ % (,,W5
 }}V$$5 6M. xx 	F	s2   A5G :GBG &G 6G G G+*G+NrD   r,   r*   r(   r   r   *  s(    
 
( 1% 1%r*   r   c                   .    e Zd Zed        Zedd       Zy)RegexReplacec                 P   t        j                  dg ddddt         j                  j                  dd      t         j                  j                  d	d      t         j                  j                  d
d      t         j                  j                  dddd      t         j                  j                  dddd      t         j                  j                  ddddd      t         j
                  j                  ddddddd      gt         j                  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    yy"X/E		D9		4@			T:

  !3TD[_ `

  edUY Z

  54RV  ag   hWaQC$Y]  hL  M 		  "
 	
r*   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  s_    R]]"ER\\!ERYYEwe5Q}}V$$r*   N)TFFr   rD   r,   r*   r(   r   r   u  s(    
 
* 
% 
%r*   r   c                   ,    e Zd Zed        Zed        Zy)JsonExtractStringc                     t        j                  dddg dt         j                  j                  dd      t         j                  j                  dd	      gt         j                  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  sc    yy'1\		>		7
 		  "
 	
r*   c                 \   	 t        j                  |      }t        |t              r>||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$%#+S	===,,}}SZ00==$$$$i0 	%==$$	%s   AA: A: %A: :.B+*B+NrD   r,   r*   r(   r   r     s(    
 
 % %r*   r   c                   B    e Zd Zedeeej                        fd       Zy)StringExtensionr   c                    K   t         t        t        t        t        t
        t        t        t        t        t        t        t        gS wrB   )r   r6   rF   rP   rW   rk   rv   r}   r   r   r   r   r   )selfs    r(   get_node_listzStringExtension.get_node_list  s9      
 	
s   AAN)	r/   r0   r1   r   r!   typer   	ComfyNoder   r,   r*   r(   r   r     s)    
T$r||*<%= 
 
r*   r   r   c                     K   t               S wrB   )r   r,   r*   r(   comfy_entrypointr     s     s   )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   	   & /82<< 8<C C.0bll 0.*2<< **%BLL %B% %><BLL <.'R\\ '8!0BLL !0H&% &%RH%2<< H%V"%2<< "%J% %B
n 
& r*   