Skip to content

Commit 6bb13f0

Browse files
committed
more stable to_titlecase impl
because german 'ß' because 'ss' so old code breaks on the len change
1 parent 3e48212 commit 6bb13f0

File tree

1 file changed

+14
-13
lines changed

1 file changed

+14
-13
lines changed

src/main/java/com/denizenscript/denizencore/objects/core/ElementTag.java

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.text.Normalizer;
2020
import java.util.Arrays;
2121
import java.util.Base64;
22+
import java.util.List;
2223
import java.util.regex.Matcher;
2324
import java.util.regex.Pattern;
2425

@@ -1437,26 +1438,26 @@ else if (elem.equals("false")) {
14371438
// @returns ElementTag
14381439
// @group element manipulation
14391440
// @description
1440-
// Returns The Value Of An ElementTag In Title Case.
1441+
// Returns The Value Of An ElementTag In Title Case (The First Letter Of Each Word Is Capitalized, Based On Spaces).
14411442
// -->
14421443
tagProcessor.registerStaticTag(ElementTag.class, "to_titlecase", (attribute, object) -> {
1443-
if (object.element.length() == 0) {
1444+
if (object.element.isEmpty()) {
14441445
return new ElementTag("");
14451446
}
1446-
StringBuilder TitleCase = new StringBuilder(object.element.length());
1447+
StringBuilder titleCase = new StringBuilder(object.element.length());
14471448
// Intentionally do not use CoreUtilities here as users may expect multi-language compat.
1448-
String Upper = object.element.toUpperCase();
1449-
String Lower = object.element.toLowerCase();
1450-
TitleCase.append(Upper.charAt(0));
1451-
for (int i = 1; i < object.element.length(); i++) {
1452-
if (object.element.charAt(i - 1) == ' ') {
1453-
TitleCase.append(Upper.charAt(i));
1454-
}
1455-
else {
1456-
TitleCase.append(Lower.charAt(i));
1449+
List<String> words = CoreUtilities.split(object.element, ' ');
1450+
for (int i = 0; i < words.size(); i++) {
1451+
String word = words.get(i);
1452+
if (!word.isEmpty()) {
1453+
titleCase.append(Character.toUpperCase(word.charAt(0)));
1454+
titleCase.append(word.substring(1).toLowerCase());
1455+
if (i < words.size() - 1) {
1456+
titleCase.append(" ");
1457+
}
14571458
}
14581459
}
1459-
return new ElementTag(TitleCase.toString());
1460+
return new ElementTag(titleCase.toString());
14601461
}, "totitlecase");
14611462

14621463
// <--[tag]

0 commit comments

Comments
 (0)