### Godot version

v4.2.dev4.official [549fcce5f]

### System information

Ubuntu 20.04 LTS

### Issue description

See title.

### Steps to reproduce

1. Create a new project
2. Create a csv file that includes the following
```
key,ar
key,placeholder
```
3. Add the generated `.translation` file to Project -> Project Settings... -> Localization
4. In Project -> Project Settings... -> Internationalization -> Locale, set `Test` to `ar`
5. Add a `LineEdit` node and type `-=[]{}`
6. Run the project, and notice that the text is on the right side, but the symbols are incorrectly in LTR (`-=[]{}`).  Correct output is `{}[]=-`
7. Back in the editor, add a single Arabic letter (any will do), and notice that `LineEdit` immediately (and correctly) flips the symbols, and the newly-added Arabic letter, to RTL.

**Notes**
- Identical behavior is seen with `TextEdit`.
- The purpose of steps 2-4 are to simulate an Arabic environment when the project is run, despite `OS.get_locale() == "en"` (or your system's current language).

### Minimal reproduction project

[rtlsymbols.zip](https://github.com/godotengine/godot/files/12525509/rtlsymbols.zip)
sd->js_ops_valid = true;
	}
	sd->sort_valid = false;
	sd->glyphs_logical.clear();
	Glyph *sd_glyphs = sd->glyphs.ptrw();
	int sd_size = sd->glyphs.size();
	if (!sd->jstops.is_empty()) {
		for (int i = 0; i < sd_size; i++) {
			if (sd_glyphs[i].count > 0) {
				char32_t c = sd->text[sd_glyphs[i].start - sd->start];
				if (c == 0x0640 && sd_glyphs[i].start == sd_glyphs[i].end - 1) {
					sd_glyphs[i].flags |= GRAPHEME_IS_ELONGATION;
				}
				if (sd->jstops.has(sd_glyphs[i].start)) {
					if (c == 0xfffc) {
						continue;
					}
					if (sd->jstops[sd_glyphs[i].start]) {
						if (c != 0x0640) {
							if (sd_glyphs[i].font_rid != RID()) {
								Glyph gl = _shape_single_glyph(sd, 0x0640, HB_SCRIPT_ARABIC, HB_DIRECTION_RTL, sd->glyphs[i].font_rid, sd->glyphs[i].font_size);
								if ((sd_glyphs[i].flags & GRAPHEME_IS_VALID) == GRAPHEME_IS_VALID) {
#if HB_VERSION_ATLEAST(5, 1, 0)
									if ((i > 0) && ((sd_glyphs[i - 1].flags & GRAPHEME_IS_SAFE_TO_INSERT_TATWEEL) != GRAPHEME_IS_SAFE_TO_INSERT_TATWEEL)) {
										continue;
									}
#endif
									gl.start = sd_glyphs[i].start;
									gl.end = sd_glyphs[i].end;
									gl.repeat = 0;