
    +j<                     ~   S SK r S SKrS SKrS SKJr  S SKJrJr   " S S\R                  5      r	 " S S\R                  5      r
 " S S	\R                  5      r " S
 S\R                  5      r " S S\R                  5      r " S S\R                  5      r " S S\R                  5      r " S S\R                  5      r " S S\R                  5      r " S S\R                  5      r " S S\R                  5      r " S S\R                  5      r " S S\R                  5      r " S S\5      rS \4S! jrg)"    N)override)ComfyExtensionioc                       \ rS rSr\S\R                  4S j5       r\S\R                  R                  S\
S\R                  4S j5       rSrg)	StringFormat	   returnc                    [         R                  R                  [         R                  R	                  S5      [        [        R                  5      SS9n[         R                  " SSSSS/S	[         R                  R	                  S
US9[         R                  R	                  SSSS9/[         R                  R                  5       /S9$ )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_schemaStringFormat.define_schema
   s    ;;,,**""7+v--. - 

 yy"&$h/v!!(X!>		
ETJ
 		  "
 	
    r   r   c                 N    [         R                  " UR                  " S0 UD65      $ )N )r   
NodeOutputr   )r'   r   r   s      r)   executeStringFormat.execute    s     }}X__6v677r,   r.   N)__name__
__module____qualname____firstlineno__classmethodr   r$   r*   r   Typestrr/   r0   __static_attributes__r.   r,   r)   r   r   	   sY    
bii 
 
* 8[[%%8148	8 8r,   r   c                   4    \ rS rSr\S 5       r\S 5       rSrg)StringConcatenate'   c                 "   [         R                  " S/ SQSS[         R                  R                  SSS9[         R                  R                  SSS9[         R                  R                  S	S
SS9/[         R                  R	                  5       /S9$ )Nr;   )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*   StringConcatenate.define_schema(   s|    yy' X+		
d;		
d;		ubI 		  "
 	
r,   c                 N    [         R                  " UR                  X45      5      $ N)r   r/   join)r'   r?   rA   rB   s       r)   r0   StringConcatenate.execute9   s    }}Y^^X,@ABBr,   r.   Nr2   r3   r4   r5   r6   r*   r0   r9   r.   r,   r)   r;   r;   '   s*    
 
  C Cr,   r;   c                   4    \ rS rSr\S 5       r\S 5       rSrg)StringSubstring>   c                 $   [         R                  " S/ SQSS[         R                  R                  SSS9[         R                  R                  S5      [         R                  R                  S	5      /[         R                  R                  5       /S
9$ )NrN   )	substringzextract textztext portion	Substringr   r   Tr@   startendrD   r   r$   r%   r!   Intr&   rF   s    r)   r*   StringSubstring.define_schema?   so    yy%H$		D9W%U# 		  "
 	
r,   c                 2    [         R                  " XU 5      $ rI   )r   r/   )r'   r   rS   rT   s       r)   r0   StringSubstring.executeP   s    }}V#.//r,   r.   NrL   r.   r,   r)   rN   rN   >   s(    
 
  0 0r,   rN   c                   4    \ rS rSr\S 5       r\S 5       rSrg)StringLengthU   c                     [         R                  " S/ SQSS[         R                  R                  SSS9/[         R                  R                  SS	9/S
9$ )Nr[   )zcharacter countz	text sizezstring lengthzText Lengthr   r   Tr@   lengthr   rD   rU   rF   s    r)   r*   StringLength.define_schemaV   sQ    yy"L&		D9 84
 	
r,   c                 @    [         R                  " [        U5      5      $ rI   )r   r/   len)r'   r   s     r)   r0   StringLength.executee   s    }}S[))r,   r.   NrL   r.   r,   r)   r[   r[   U   s(    
 
 * *r,   r[   c                   4    \ rS rSr\S 5       r\S 5       rSrg)CaseConverterj   c                     [         R                  " S/ SQSS[         R                  R                  SSS9[         R                  R                  S/ S	QS
9/[         R                  R                  5       /S9$ )Nre   )zcase converterz	text case	uppercase	lowercase
capitalizezConvert Text Caser   r   Tr@   mode)	UPPERCASEri   
Capitalize
Title CaseoptionsrD   r   r$   r%   r!   Combor&   rF   s    r)   r*   CaseConverter.define_schemak   sd    yy#b,		D9v/ef
 		  "
 	
r,   c                     US:X  a  UR                   " 5       nOJUS:X  a  UR                  " 5       nO2US:X  a  UR                  " 5       nOUS:X  a  UR                  " 5       nOUn[        R
                  " U5      $ )Nrl   ri   rm   rn   )upperlowerrj   titler   r/   r'   r   rk   results       r)   r0   CaseConverter.execute{   se    ;\\^F[ \\^F\!&&(F\!\\^FF}}V$$r,   r.   NrL   r.   r,   r)   re   re   j   s(    
 
 % %r,   re   c                   4    \ rS rSr\S 5       r\S 5       rSrg)
StringTrim   c                     [         R                  " S/ SQSS[         R                  R                  SSS9[         R                  R                  S/ S	QS
9/[         R                  R                  5       /S9$ )Nr|   )trimzclean whitespacezremove whitespacezremove spacesstripz	Trim Textr   r   Tr@   rk   )BothLeftRightro   rD   rq   rF   s    r)   r*   StringTrim.define_schema   sd    yy e$		D9v/HI
 		  "
 	
r,   c                     US:X  a  UR                   " 5       nO2US:X  a  UR                  " 5       nOUS:X  a  UR                  " 5       nOUn[        R                  " U5      $ )Nr   r   r   )r   lstriprstripr   r/   rx   s       r)   r0   StringTrim.execute   sL    6>\\^FV^]]_FW_]]_FF}}V$$r,   r.   NrL   r.   r,   r)   r|   r|      s(    
 
 
% 
%r,   r|   c                   4    \ rS rSr\S 5       r\S 5       rSrg)StringReplace   c                     [         R                  " S/ SQSS[         R                  R                  SSS9[         R                  R                  SSS9[         R                  R                  S	SS9/[         R                  R	                  5       /S
9$ )Nr   )replacezfind and replace
substitutez	swap textzReplace Textr   r   Tr@   findr   rD   rE   rF   s    r)   r*   StringReplace.define_schema   sw    yy#U'		D9		$7			T: 		  "
 	
r,   c                 N    [         R                  " UR                  " X#5      5      $ rI   )r   r/   r   )r'   r   r   r   s       r)   r0   StringReplace.execute   s    }}V^^D:;;r,   r.   NrL   r.   r,   r)   r   r      s(    
 
  < <r,   r   c                   4    \ rS rSr\S 5       r\S 5       rSrg)StringContains   c                     [         R                  " S/ SQSS[         R                  R                  SSS9[         R                  R                  SSS9[         R                  R                  S	SSS
9/[         R                  R                  SS9/S9$ )Nr   )containsztext includeszstring includeszContains Textr   r   Tr@   rQ   case_sensitiver   advancedr   r_   rD   r   r$   r%   r!   Booleanr&   rF   s    r)   r*   StringContains.define_schema   s    yy$K(		D9		t<

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

!!z!:
 	
r,   c                     U(       a  X!;   nO"UR                  5       UR                   " 5       ;   n[        R                  " U5      $ rI   )rv   r   r/   )r'   r   rQ   r   r   s        r)   r0   StringContains.execute   s3     *H (FLLN:H}}X&&r,   r.   NrL   r.   r,   r)   r   r      s(    
 
  ' 'r,   r   c                   4    \ rS rSr\S 5       r\S 5       rSrg)StringCompare   c                 `   [         R                  " S/ SQSS[         R                  R                  SSS9[         R                  R                  SSS9[         R                  R                  S	/ S
QS9[         R
                  R                  SSSS9/[         R
                  R                  5       /S9$ )Nr   )comparez
text matchzstring equalszstarts withz	ends withzCompare Textr   r?   Tr@   rA   rk   )Starts With	Ends WithEqualro   r   r   rD   )r   r$   r%   r!   rr   r   r&   rF   s    r)   r*   StringCompare.define_schema   s    yy#a'		
d;		
d;v/TU

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

!!#
 	
r,   c                 D   U(       a  UnUnO UR                  5       nUR                  5       nUS:X  a  [        R                  " XV:H  5      $ US:X  a%  [        R                  " UR                  U5      5      $ US:X  a%  [        R                  " UR	                  U5      5      $ g )Nr   r   r   )rv   r   r/   
startswithendswith)r'   r?   rA   rk   r   abs          r)   r0   StringCompare.execute   s    AA A A7?==((]"==a11[ ==A// !r,   r.   NrL   r.   r,   r)   r   r      s(    
 
" 0 0r,   r   c                   4    \ rS rSr\S 5       r\S 5       rSrg)
RegexMatchi  c                    [         R                  " S/ SQSS[         R                  R                  SSS9[         R                  R                  SSS9[         R                  R                  S	SSS
9[         R                  R                  SSSS
9[         R                  R                  SSSS
9/[         R                  R                  SS9/S9$ )Nr   )zregex matchregexzpattern matchztext containszstring matchz
Match Textr   r   Tr@   regex_patterncase_insensitiver   r   Fdotallmatchesr_   rD   r   rF   s    r)   r*   RegexMatch.define_schema  s    yy e%		D9		4@

  !3TD Q

  ed K

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

!!y!9
 	
r,   c                 >   SnU(       a  U[         R                  -  nU(       a  U[         R                  -  nU(       a  U[         R                  -  n [         R                  " X!U5      nUS Ln[        R                  " U5      $ ! [         R
                   a    Sn N.f = f)Nr   F)re
IGNORECASE	MULTILINEDOTALLsearcherrorr   r/   )	r'   r   r   r   r   r   flagsmatchry   s	            r)   r0   RegexMatch.execute  s    R]]"ER\\!ERYYE	IImU;E$&F
 }}V$$ xx 	F	s   B BBr.   NrL   r.   r,   r)   r   r     s(    
 
$ % %r,   r   c                   4    \ rS rSr\S 5       r\S 5       rSrg)RegexExtracti*  c                    [         R                  " S/ SQSS[         R                  R                  SSS9[         R                  R                  SSS9[         R                  R                  S	/ S
QS9[         R
                  R                  SSSS9[         R
                  R                  SSSS9[         R
                  R                  SSSS9[         R                  R                  SSSSSS9/[         R                  R                  5       /S9$ )Nr   )zregex extractr   zpattern extractztext parserz
parse textzExtract Textr   r   Tr@   r   rk   )First MatchAll MatchesFirst Group
All Groupsro   r   r   r   Fr   group_index   r   d   )r   r   maxr   rD   )r   r$   r%   r!   rr   r   rV   r&   rF   s    r)   r*   RegexExtract.define_schema+  s    yy"e'		D9		4@v/jk

  !3TD Q

  ed K

  54 H]A1#PTU 		  "
 	
r,   c                 J   SnSn	U(       a  U	[         R                  -  n	U(       a  U	[         R                  -  n	U(       a  U	[         R                  -  n	 US:X  a5  [         R                  " X!U	5      n
U
(       a  U
R                  S5      nGOcSnGO_US:X  ap  [         R                  " X!U	5      nU(       aO  [        US   [        5      (       a%  UR                  U Vs/ s H  oS   PM	     sn5      nOUR                  U5      nOSnOUS:X  aP  [         R                  " X!U	5      n
U
(       a/  [        U
R                  5       5      U:  a  U
R                  U5      nOSnOUS:X  a  [         R                  " X!U	5      n/ nU HY  n
U
R                  5       (       d  M  [        U
R                  5       5      U:  d  M9  UR                  U
R                  U5      5        M[     UR                  U5      nOSn [        R                   " U5      $ s  snf ! [         R                   a    Sn N3f = f)N
r   r   rC   r   r   r   )r   r   r   r   r   groupfindall
isinstancetuplerJ   rb   groupsfinditerappendr   r   r/   )r'   r   r   rk   r   r   r   r   join_delimiterr   r   ry   r   mresultss                  r)   r0   RegexExtract.execute@  s   R]]"ER\\!ERYYE$	}$		-?"[[^FF&**]EB!'!*e44!/!4!4G5LGqdG5L!M!/!4!4W!=F&		-?S0K?"[[5FF%++mUC$E||~~#elln*=*Lu{{;'?@ % (,,W5
 }}V$$5 6M. xx 	F	sb   5H	 H	 AH	 H(H	 0H	 H	 AH	 H	 7H	 H	 55H	 +H	 H	 	H"!H"r.   NrL   r.   r,   r)   r   r   *  s(    
 
( 1% 1%r,   r   c                   8    \ rS rSr\S 5       r\SS j5       rSrg)RegexReplaceiu  c                 "   [         R                  " S/ SQSSS[         R                  R                  SSS9[         R                  R                  S	SS9[         R                  R                  S
SS9[         R                  R                  SSSSS9[         R                  R                  SSSSS9[         R                  R                  SSSSSS9[         R
                  R                  SSSSSSSS9/[         R                  R                  5       /S9$ )Nr   )zregex replacer   zpattern replacesubstitutionzReplace Text (Regex)r   z+Find and replace text using regex patterns.r   Tr@   r   r   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   rV   r&   rF   s    r)   r*   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                     SnU(       a  U[         R                  -  nU(       a  U[         R                  -  nU(       a  U[         R                  -  n[         R                  " X#XUS9n	[
        R                  " U	5      $ )Nr   )r   r   )r   r   r   r   subr   r/   )
r'   r   r   r   r   r   r   r   r   ry   s
             r)   r0   RegexReplace.execute  s[    R]]"ER\\!ERYYE5Q}}V$$r,   r.   N)TFFr   rL   r.   r,   r)   r   r   u  s(    
 
* 
% 
%r,   r   c                   4    \ rS rSr\S 5       r\S 5       rSrg)JsonExtractStringi  c                     [         R                  " SSS/ SQ[         R                  R                  SSS9[         R                  R                  SS	S9/[         R                  R	                  5       /S
9$ )Nr   zExtract Text from JSONr   )jsonzextract jsonz
parse jsonz
json valuez	read jsonjson_stringTr@   keyF)r   r   r   r   r   r   rE   rF   s    r)   r*   JsonExtractString.define_schema  sc    yy'1\		>		7
 		  "
 	
r,   c                 t    [         R                  " U5      n[        U[        5      (       aA  X#;   a<  X2   nUc  [        R
                  " S5      $ [        R
                  " [        U5      5      $ [        R
                  " S5      $ ! [         R                  [        4 a    [        R
                  " S5      s $ f = f)NrC   )	r   loadsr   dictr   r/   r8   JSONDecodeError	TypeError)r'   r   r   datar   s        r)   r0   JsonExtractString.execute  s    	%::k*D$%%#+	===,,}}SZ00==$$$$i0 	%==$$	%s   AB B .B 0B76B7r.   NrL   r.   r,   r)   r   r     s(    
 
 % %r,   r   c                   L    \ rS rSr\S\\\R                        4S j5       r	Sr
g)StringExtensioni  r	   c                    #    [         [        [        [        [        [
        [        [        [        [        [        [        [        /$ 7frI   )r   r;   rN   r[   re   r|   r   r   r   r   r   r   r   )selfs    r)   get_node_listStringExtension.get_node_list  s8      
 	
s   AAr.   N)r2   r3   r4   r5   r   r"   typer   	ComfyNoder   r9   r.   r,   r)   r   r     s)    
T$r||*<%= 
 
r,   r   r	   c                     #    [        5       $ 7frI   )r   r.   r,   r)   comfy_entrypointr     s     s   )r   r   r   typing_extensionsr   comfy_api.latestr   r   r   r   r;   rN   r[   re   r|   r   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,   