From 84bc201fddb10a35bc07b84b1bb3013b2c7536d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lera=20Elvo=C3=A9?= Date: Wed, 24 Jul 2024 05:13:17 +0000 Subject: [PATCH] add string formatting nodes (#170) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-on: https://codeberg.org/StreamGraph/StreamGraph/pulls/170 Co-authored-by: Lera ElvoƩ Co-committed-by: Lera ElvoƩ --- classes/deck/nodes/general/format_string.gd | 48 +++++++++++++++++++ classes/deck/nodes/general/template_string.gd | 48 +++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 classes/deck/nodes/general/format_string.gd create mode 100644 classes/deck/nodes/general/template_string.gd diff --git a/classes/deck/nodes/general/format_string.gd b/classes/deck/nodes/general/format_string.gd new file mode 100644 index 0000000..3cbc5fe --- /dev/null +++ b/classes/deck/nodes/general/format_string.gd @@ -0,0 +1,48 @@ +# (c) 2023-present Eroax +# (c) 2023-present Yagich +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) +extends DeckNode + + +func _init() -> void: + name = "String Positional Format" + node_type = "format_string" + description = "Replaces '%s' characters in a string." + + add_input_port( + DeckType.Types.STRING, + "String to format", + "field", + ) + + add_input_port( + DeckType.Types.ARRAY, + "Replacements", + ) + + add_output_port( + DeckType.Types.STRING, + "Result string", + ) + + +func _replace(string: String, replacements: Array) -> String: + return string % replacements + + +func _value_request(on_output_port: int) -> Variant: + var string: String = DeckType.convert_value(await resolve_input_port_value_async(0), DeckType.Types.STRING) + var replacements: Array = DeckType.convert_value(await resolve_input_port_value_async(1), DeckType.Types.ARRAY) + + return _replace(string, replacements) + + +func _receive(on_input_port: int, data: Variant) -> void: + if on_input_port == 0: + var string: String = DeckType.convert_value(data, DeckType.Types.STRING) + var replacements: Array = DeckType.convert_value(await resolve_input_port_value_async(1), DeckType.Types.ARRAY) + send(0, _replace(string, replacements)) + else: + var string: String = DeckType.convert_value(await resolve_input_port_value_async(0), DeckType.Types.STRING) + var replacements: Array = DeckType.convert_value(data, DeckType.Types.ARRAY) + send(0, _replace(string, replacements)) diff --git a/classes/deck/nodes/general/template_string.gd b/classes/deck/nodes/general/template_string.gd new file mode 100644 index 0000000..83341ae --- /dev/null +++ b/classes/deck/nodes/general/template_string.gd @@ -0,0 +1,48 @@ +# (c) 2023-present Eroax +# (c) 2023-present Yagich +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) +extends DeckNode + + +func _init() -> void: + name = "String Template Format" + node_type = "template_string" + description = "Replaces variables in a string." + + add_input_port( + DeckType.Types.STRING, + "String to format", + "field", + ) + + add_input_port( + DeckType.Types.DICTIONARY, + "Replacements", + ) + + add_output_port( + DeckType.Types.STRING, + "Result string", + ) + + +func _replace(string: String, replacements: Dictionary) -> String: + return string.format(replacements) + + +func _value_request(on_output_port: int) -> Variant: + var string: String = DeckType.convert_value(await resolve_input_port_value_async(0), DeckType.Types.STRING) + var replacements: Dictionary = DeckType.convert_value(await resolve_input_port_value_async(1), DeckType.Types.DICTIONARY) + + return _replace(string, replacements) + + +func _receive(on_input_port: int, data: Variant) -> void: + if on_input_port == 0: + var string: String = DeckType.convert_value(data, DeckType.Types.STRING) + var replacements: Dictionary = DeckType.convert_value(await resolve_input_port_value_async(1), DeckType.Types.DICTIONARY) + send(0, _replace(string, replacements)) + else: + var string: String = DeckType.convert_value(await resolve_input_port_value_async(0), DeckType.Types.STRING) + var replacements: Dictionary = DeckType.convert_value(data, DeckType.Types.DICTIONARY) + send(0, _replace(string, replacements))