Files
2024-06-29 18:50:22 +08:00

97 lines
3.1 KiB
Markdown

---
tags:
- String
- Text
---
# String Function 🐍
## Documentation
- Class name: `StringFunction|pysssss`
- Category: `utils`
- Output node: `True`
The String Function node provides utilities for manipulating strings, including appending, replacing, and optionally tidying tags within given text inputs. It abstracts complex string operations into a simple interface, catering to a variety of text processing needs.
## Input types
### Required
- **`action`**
- Specifies the string manipulation action to perform, such as appending or replacing content in the text inputs.
- Comfy dtype: `COMBO[STRING]`
- Python dtype: `Tuple[List[str], Dict]`
- **`tidy_tags`**
- Determines whether to clean up HTML tags in the text inputs, offering options to either tidy them or leave them as is.
- Comfy dtype: `COMBO[STRING]`
- Python dtype: `Tuple[List[str], Dict]`
- **`text_a`**
- The primary text input for manipulation.
- Comfy dtype: `STRING`
- Python dtype: `str`
- **`text_b`**
- The secondary text input for manipulation, used in conjunction with 'text_a'.
- Comfy dtype: `STRING`
- Python dtype: `str`
### Optional
- **`text_c`**
- An optional third text input for manipulation.
- Comfy dtype: `STRING`
- Python dtype: `str`
## Output types
- **`string`**
- Comfy dtype: `STRING`
- The result of the string manipulation, returned as a single string.
- Python dtype: `str`
## Usage tips
- Infra type: `CPU`
- Common nodes:
- [CLIPTextEncode](../../Comfy/Nodes/CLIPTextEncode.md)
## Source code
```python
class StringFunction:
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"action": (["append", "replace"], {}),
"tidy_tags": (["yes", "no"], {}),
"text_a": ("STRING", {"multiline": True, "dynamicPrompts": False}),
"text_b": ("STRING", {"multiline": True, "dynamicPrompts": False}),
},
"optional": {
"text_c": ("STRING", {"multiline": True, "dynamicPrompts": False})
}
}
RETURN_TYPES = ("STRING",)
FUNCTION = "exec"
CATEGORY = "utils"
OUTPUT_NODE = True
def exec(self, action, tidy_tags, text_a, text_b, text_c=""):
# Converted inputs are sent as the string of 'undefined' if not connected
if text_a == "undefined":
text_a = ""
if text_b == "undefined":
text_b = ""
if text_c == "undefined":
text_c = ""
tidy_tags = tidy_tags == "yes"
out = ""
if action == "append":
out = (", " if tidy_tags else "").join(filter(None, [text_a, text_b, text_c]))
else:
if text_c is None:
text_c = ""
if text_b.startswith("/") and text_b.endswith("/"):
regex = text_b[1:-1]
out = re.sub(regex, text_c, text_a)
else:
out = text_a.replace(text_b, text_c)
if tidy_tags:
out = out.replace(" ", " ").replace(" ,", ",").replace(",,", ",").replace(",,", ",")
return {"ui": {"text": (out,)}, "result": (out,)}
```