| 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 🐍", |
| } |
|
|