| import re
|
|
|
| class StringFunction:
|
| @classmethod
|
| def INPUT_TYPES(s):
|
| return {
|
| "required": {
|
| "action": (["append", "replace"], {}),
|
| "tidy_tags": (["yes", "no"], {}),
|
| },
|
| "optional": {
|
| "text_a": ("STRING", {"multiline": True, "dynamicPrompts": False}),
|
| "text_b": ("STRING", {"multiline": True, "dynamicPrompts": False}),
|
| "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=""):
|
| 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 = re.sub(r"\s{2,}", " ", out)
|
| out = out.replace(" ,", ",")
|
| out = re.sub(r",{2,}", ",", out)
|
| out = out.strip()
|
| return {"ui": {"text": (out,)}, "result": (out,)}
|
|
|
| NODE_CLASS_MAPPINGS = {
|
| "StringFunction|pysssss": StringFunction,
|
| }
|
|
|
| NODE_DISPLAY_NAME_MAPPINGS = {
|
| "StringFunction|pysssss": "String Function 🐍",
|
| }
|
|
|