o
    i5                     @   s  d dl Z d dlmZ d dlmZmZ G dd dejZG dd dejZG dd	 d	ejZ	G d
d dejZ
G dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd deZdefddZdS )    N)override)ComfyExtensionioc                   @   $   e Zd Zedd Zedd ZdS )StringConcatenatec                 C   sN   t jdddg dt jjdddt jjdddt jjd	d
ddgt j gdS )Nr   zText Concatenateutils/string)
Concatenateztext concatz	join textz
merge textzcombine stringsconcatconcatenatezappend textzcombine textstringstring_aT	multilinestring_b	delimiterF )r   default)node_iddisplay_namecategorysearch_aliasesinputsoutputsr   SchemaStringInputOutputcls r    7/mnt/c/Users/fbmor/ComfyUI/comfy_extras/nodes_string.pydefine_schema   s   zStringConcatenate.define_schemac                 C   s   t |||fS N)r   
NodeOutputjoin)r   r   r   r   r    r    r!   execute   s   zStringConcatenate.executeN__name__
__module____qualname__classmethodr"   r&   r    r    r    r!   r      
    
r   c                   @   r   )StringSubstringc              
   C   sD   t jdg dddt jjdddt jdt jd	gt j gd
S )Nr-   )	Substringzextract textztext portionzText Substringr   r   Tr   startendr   r   r   r   r   r   r   r   r   r   Intr   r   r    r    r!   r"      s   

zStringSubstring.define_schemac                 C   s   t ||| S r#   )r   r$   )r   r   r/   r0   r    r    r!   r&   0      zStringSubstring.executeNr'   r    r    r    r!   r-      r,   r-   c                   @   r   )StringLengthc              	   C   s4   t jdg dddt jjdddgt jjdd	gd
S )Nr5   )zcharacter countz	text sizezstring lengthzText Lengthr   r   Tr   lengthr   r1   r2   r   r    r    r!   r"   6   s   zStringLength.define_schemac                 C   s   t t|S r#   )r   r$   len)r   r   r    r    r!   r&   E   s   zStringLength.executeNr'   r    r    r    r!   r5   5   s
    
r5   c                   @   r   )CaseConverterc              
   C   B   t jdg dddt jjdddt jjdg d	d
gt j gdS )Nr9   )zCase Converterz	text case	uppercase	lowercase
capitalizezText Case Converterr   r   Tr   mode)	UPPERCASEr<   
Capitalize
Title Caseoptionsr1   r   r   r   r   Combor   r   r    r    r!   r"   K      zCaseConverter.define_schemac                 C   sV   |dkr	|  }n|dkr| }n|dkr| }n|dkr$| }n|}t|S )Nr?   r<   r@   rA   )upperlowerr=   titler   r$   r   r   r>   resultr    r    r!   r&   [   s   




zCaseConverter.executeNr'   r    r    r    r!   r9   J   
    
r9   c                   @   r   )
StringTrimc              
   C   r:   )NrM   )Trimzclean whitespacezremove whitespacestripz	Text Trimr   r   Tr   r>   )BothLeftRightrB   r1   rD   r   r    r    r!   r"   l   rF   zStringTrim.define_schemac                 C   sD   |dkr	|  }n|dkr| }n|dkr| }n|}t|S )NrP   rQ   rR   )rO   lstriprstripr   r$   rJ   r    r    r!   r&   |   s   



zStringTrim.executeNr'   r    r    r    r!   rM   k   rL   rM   c                   @   r   )StringReplacec                 C   sL   t jdg dddt jjdddt jjdddt jjd	ddgt j gd
S )NrU   )Replacezfind and replace
substitutez	swap textzText Replacer   r   Tr   findreplacer1   r   r   r    r    r!   r"      s   zStringReplace.define_schemac                 C   s   t |||S r#   )r   r$   rY   )r   r   rX   rY   r    r    r!   r&      r4   zStringReplace.executeNr'   r    r    r    r!   rU      r,   rU   c                   @   r   )StringContainsc                 C   sR   t jdg dddt jjdddt jjdddt jjd	ddd
gt jjddgdS )NrZ   )Containsztext includeszstring includeszText Containsr   r   Tr   	substringcase_sensitiver   advancedcontainsr7   r1   r   r   r   r   Booleanr   r   r    r    r!   r"      s   zStringContains.define_schemac                 C   s(   |r||v }n|  |  v }t|S r#   )rH   r   r$   )r   r   r\   r]   r`   r    r    r!   r&      s   

zStringContains.executeNr'   r    r    r    r!   rZ      r,   rZ   c                   @   r   )StringComparec                 C   s`   t jdg dddt jjdddt jjdddt jjd	g d
dt jjddddgt j gdS )Nrc   )Comparez
text matchzstring equalszstarts withz	ends withzText Comparer   r   Tr   r   r>   )Starts With	Ends WithEqualrB   r]   r^   r1   )r   r   r   r   rE   rb   r   r   r    r    r!   r"      s   zStringCompare.define_schemac                 C   sh   |r|}|}n|  }|  }|dkrt||kS |dkr&t||S |dkr2t||S d S )Nrg   re   rf   )rH   r   r$   
startswithendswith)r   r   r   r>   r]   abr    r    r!   r&      s   zStringCompare.executeNr'   r    r    r    r!   rc      s
    
rc   c                   @   r   )
RegexMatchc                 C   sr   t jdg dddt jjdddt jjdddt jjd	ddd
t jjdddd
t jjdddd
gt jjddgdS )Nrl   )zRegex Matchregexzpattern matchztext containszstring matchz
Text Matchr   r   Tr   regex_patterncase_insensitiver^   r   Fdotallmatchesr7   r1   ra   r   r    r    r!   r"      s   zRegexMatch.define_schemac           	      C   sl   d}|r	|t jO }|r|t jO }|r|t jO }zt |||}|d u}W n t jy0   d}Y nw t|S )Nr   F)re
IGNORECASE	MULTILINEDOTALLsearcherrorr   r$   )	r   r   rn   ro   r   rp   flagsmatchrK   r    r    r!   r&      s   



zRegexMatch.executeNr'   r    r    r    r!   rl      s
    
rl   c                   @   r   )RegexExtractc                 C   s   t jdg dddt jjdddt jjdddt jjd	g d
dt jjddddt jjddddt jjddddt jjddddddgt j gdS )Nrz   )zRegex Extractrm   zpattern extractztext parserz
parse textzText Extract Substringr   r   Tr   rn   r>   )First MatchAll MatchesFirst Group
All GroupsrB   ro   r^   r   Frp   group_index   r   d   )r   minmaxr_   r1   )r   r   r   r   rE   rb   r3   r   r   r    r    r!   r"     s    
zRegexExtract.define_schemac                 C   sn  d}d}	|r|	t jO }	|r|	t jO }	|r|	t jO }	z|dkr0t |||	}
|
r-|
d}nwd}nt|dkrXt |||	}|rUt|d trO|	dd |D }nU|	|}nOd}nL|dkrvt |||	}
|
rst
|
 |krs|
|}n1d}n.|d	krt |||	}g }|D ]}
|
 rt
|
 |kr||
| q|	|}nd}W n t jy   d}Y nw t|S )
N
r   r{   r   r|   c                 S   s   g | ]}|d  qS )r   r    ).0mr    r    r!   
<listcomp>8  s    z(RegexExtract.execute.<locals>.<listcomp>r}   r~   )rr   rs   rt   ru   rv   groupfindall
isinstancetupler%   r8   groupsfinditerappendrw   r   r$   )r   r   rn   r>   ro   r   rp   r   join_delimiterrx   ry   rK   rq   resultsr    r    r!   r&      sP   



zRegexExtract.executeNr'   r    r    r    r!   rz   
  s
    
rz   c                   @   s&   e Zd Zedd Zed	ddZdS )
RegexReplacec                 C   s   t jdg ddd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t jjdddddt jjddddddt jjddddddddgt j gdS )Nr   )zRegex Replacerm   zpattern replacezregex replacesubstitutionzText Replace (Regex)r   z+Find and replace text using regex patterns.r   Tr   rn   rY   ro   )r   optionalr_   r   Frp   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   descriptionr   r   )r   r   r   r   rb   r3   r   r   r    r    r!   r"   V  s"   
zRegexReplace.define_schemaTFr   c           
      C   sL   d}|r	|t jO }|r|t jO }|r|t jO }t j|||||d}	t|	S )Nr   )r   rx   )rr   rs   rt   ru   subr   r$   )
r   r   rn   rY   ro   r   rp   r   rx   rK   r    r    r!   r&   l  s   



zRegexReplace.executeN)TFFr   r'   r    r    r    r!   r   U  s
    
r   c                   @   s(   e Zd Zedeeej  fddZdS )StringExtensionreturnc                    s   t ttttttttt	t
gS r#   )r   r-   r5   r9   rM   rU   rZ   rc   rl   rz   r   )selfr    r    r!   get_node_list{  s   zStringExtension.get_node_listN)	r(   r)   r*   r   listtyper   	ComfyNoder   r    r    r    r!   r   z  s    r   r   c                      s   t  S r#   )r   r    r    r    r!   comfy_entrypoint  s   r   )rr   typing_extensionsr   comfy_api.latestr   r   r   r   r-   r5   r9   rM   rU   rZ   rc   rl   rz   r   r   r   r    r    r    r!   <module>   s     !$)K%