55 lines
1.7 KiB
Python
55 lines
1.7 KiB
Python
import re
|
|
|
|
class StringFunction:
|
|
@classmethod
|
|
def INPUT_TYPES(s):
|
|
return {
|
|
"required": {
|
|
"action": (["append", "replace"], {}),
|
|
"tidy_tags": (["yes", "no"], {}),
|
|
"text_a": ("STRING", {"multiline": True}),
|
|
"text_b": ("STRING", {"multiline": True}),
|
|
},
|
|
"optional": {
|
|
"text_c": ("STRING", {"multiline": True})
|
|
}
|
|
}
|
|
|
|
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,)}
|
|
|
|
NODE_CLASS_MAPPINGS = {
|
|
"StringFunction|pysssss": StringFunction,
|
|
}
|
|
|
|
NODE_DISPLAY_NAME_MAPPINGS = {
|
|
"StringFunction|pysssss": "String Function 🐍",
|
|
}
|