diff --git a/gui/regex/README.md b/gui/regex/README.md index c953a8d1..1772dd85 100644 --- a/gui/regex/README.md +++ b/gui/regex/README.md @@ -5,10 +5,10 @@ Can also serve as a playground for regex testing. Language: GDScript -Renderer: GLES 2 +Renderer: Compatibility Check out this demo on the asset library: https://godotengine.org/asset-library/asset/149 ## Screenshots -![Screenshot](screenshots/regex.png) +![Screenshot](screenshots/regex.webp) diff --git a/gui/regex/icon.png b/gui/regex/icon.png index 5327f5e6..49128a60 100644 Binary files a/gui/regex/icon.png and b/gui/regex/icon.png differ diff --git a/gui/regex/icon.png.import b/gui/regex/icon.png.import index 889af9df..6eb5c949 100644 --- a/gui/regex/icon.png.import +++ b/gui/regex/icon.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture2D" -path="res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" +type="CompressedTexture2D" +uid="uid://bogy8x2ym0p20" +path="res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://icon.png" -dest_files=["res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.stex"] +dest_files=["res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex"] [params] compress/mode=0 compress/lossy_quality=0.7 -compress/hdr_mode=0 +compress/hdr_compression=1 compress/bptc_ldr=0 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/gui/regex/project.godot b/gui/regex/project.godot index 40838940..186a4c7c 100644 --- a/gui/regex/project.godot +++ b/gui/regex/project.godot @@ -6,7 +6,7 @@ ; [section] ; section goes between [] ; param=value ; assign values to parameters -config_version=4 +config_version=5 [application] @@ -14,9 +14,16 @@ config/name="RegEx (Regular Expressions)" config/description="A demo showing regex functionality and usage. Can also serve as a playground for regex testing." run/main_scene="res://regex.tscn" +config/features=PackedStringArray("4.0") config/icon="res://icon.png" [display] window/stretch/mode="canvas_items" window/stretch/aspect="expand" + +[rendering] + +renderer/rendering_method="gl_compatibility" +renderer/rendering_method.mobile="gl_compatibility" +environment/defaults/default_clear_color=Color(0.266667, 0.266667, 0.266667, 1) diff --git a/gui/regex/regex.gd b/gui/regex/regex.gd index ed1b6fd2..d25fbdd5 100644 --- a/gui/regex/regex.gd +++ b/gui/regex/regex.gd @@ -3,8 +3,8 @@ extends VBoxContainer var regex = RegEx.new() func _ready(): - $Text.set_text("They asked me \"What's going on \\\"in the manor\\\"?\"") - update_expression($Expression.text) + %Text.set_text("They asked me \"What's going on \\\"in the manor\\\"?\"") + update_expression(%Expression.text) func update_expression(text): @@ -13,12 +13,35 @@ func update_expression(text): func update_text(): - for child in $List.get_children(): + for child in %List.get_children(): child.queue_free() if regex.is_valid(): - var matches = regex.search($Text.get_text()) - if matches != null: - for result in matches.get_strings(): - var label = Label.new() - label.text = result - $List.add_child(label) + $HBoxContainer.modulate = Color.WHITE + var matches = regex.search_all(%Text.get_text()) + if matches.size() >= 1: + # List all matches and their respective captures. + var match_number = 0 + for regex_match in matches: + match_number += 1 + # `match` is a reserved GDScript keyword. + var match_label = Label.new() + match_label.text = "RegEx match #%d:" % match_number + match_label.modulate = Color(0.6, 0.9, 1.0) + %List.add_child(match_label) + + var capture_number = 0 + for result in regex_match.get_strings(): + capture_number += 1 + var capture_label = Label.new() + capture_label.text = " Capture group #%d: %s" % [capture_number, result] + %List.add_child(capture_label) + else: + $HBoxContainer.modulate = Color(1, 0.2, 0.1) + var label = Label.new() + label.text = "Error: Invalid regular expression. Check if the expression is correctly escaped and terminated." + %List.add_child(label) + + +func _on_help_meta_clicked(_meta): + # Workaround for clickable link doing nothing when clicked. + OS.shell_open("https://regexr.com") diff --git a/gui/regex/regex.tscn b/gui/regex/regex.tscn index 3c67900d..0ea0e00e 100644 --- a/gui/regex/regex.tscn +++ b/gui/regex/regex.tscn @@ -1,34 +1,74 @@ -[gd_scene load_steps=2 format=2] +[gd_scene load_steps=2 format=3 uid="uid://cimp70l7c0y2p"] -[ext_resource path="res://regex.gd" type="Script" id=1] +[ext_resource type="Script" path="res://regex.gd" id="1"] [node name="Regex" type="VBoxContainer"] +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 offset_left = 14.0 offset_top = 20.0 offset_right = -14.0 offset_bottom = -20.0 -script = ExtResource( 1 ) -__meta__ = { -"_edit_use_anchors_": false -} +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/separation = 10 +script = ExtResource("1") -[node name="Expression" type="LineEdit" parent="."] -offset_right = 996.0 -offset_bottom = 24.0 +[node name="Help" type="RichTextLabel" parent="."] +modulate = Color(1, 1, 1, 0.752941) +custom_minimum_size = Vector2(0, 50) +layout_mode = 2 +bbcode_enabled = true +text = "Regular expressions (RegEx) can be used for advanced text matching. +You can use [url=https://regexr.com]RegExr[/url] to test regular expressions online and compare results." + +[node name="HBoxContainer" type="HBoxContainer" parent="."] +layout_mode = 2 +theme_override_constants/separation = 10 + +[node name="Label" type="Label" parent="HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 5 +size_flags_stretch_ratio = 0.08 +text = "RegEx" +horizontal_alignment = 2 + +[node name="Expression" type="LineEdit" parent="HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 text = "\"((?:\\\\.|[^\"])*)\"" +placeholder_text = "Regular expression to match against" -[node name="Text" type="TextEdit" parent="."] -offset_top = 28.0 -offset_right = 996.0 -offset_bottom = 328.0 -rect_min_size = Vector2(0, 300) +[node name="HBoxContainer2" type="HBoxContainer" parent="."] +layout_mode = 2 +theme_override_constants/separation = 10 -[node name="List" type="VBoxContainer" parent="."] -offset_top = 332.0 -offset_right = 996.0 -offset_bottom = 332.0 +[node name="Label" type="Label" parent="HBoxContainer2"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 5 +size_flags_stretch_ratio = 0.08 +text = "Text" +horizontal_alignment = 2 -[connection signal="text_changed" from="Expression" to="." method="update_expression"] -[connection signal="text_changed" from="Text" to="." method="update_text"] +[node name="Text" type="TextEdit" parent="HBoxContainer2"] +unique_name_in_owner = true +custom_minimum_size = Vector2(0, 200) +layout_mode = 2 +size_flags_horizontal = 3 +placeholder_text = "Text to search in" + +[node name="ScrollContainer" type="ScrollContainer" parent="."] +layout_mode = 2 +size_flags_vertical = 3 + +[node name="List" type="VBoxContainer" parent="ScrollContainer"] +unique_name_in_owner = true +layout_mode = 2 + +[connection signal="meta_clicked" from="Help" to="." method="_on_help_meta_clicked"] +[connection signal="text_changed" from="HBoxContainer/Expression" to="." method="update_expression"] +[connection signal="text_changed" from="HBoxContainer2/Text" to="." method="update_text"] diff --git a/gui/regex/screenshots/regex.png b/gui/regex/screenshots/regex.png deleted file mode 100644 index 17930bfa..00000000 Binary files a/gui/regex/screenshots/regex.png and /dev/null differ diff --git a/gui/regex/screenshots/regex.webp b/gui/regex/screenshots/regex.webp new file mode 100644 index 00000000..0e81add2 Binary files /dev/null and b/gui/regex/screenshots/regex.webp differ