diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StringDataInstance.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StringDataInstance.java index 51e0095fe6..5994f07b63 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StringDataInstance.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StringDataInstance.java @@ -20,6 +20,7 @@ import static ghidra.program.model.data.RenderUnicodeSettingsDefinition.*; import static ghidra.program.model.data.StringLayoutEnum.*; import static ghidra.program.model.data.TranslationSettingsDefinition.*; +import java.lang.Character.UnicodeScript; import java.nio.*; import java.nio.charset.*; import java.util.*; @@ -212,24 +213,37 @@ public class StringDataInstance { public static String makeStringLabel(String prefixStr, String str, DataTypeDisplayOptions options) { boolean needsUnderscore = false; + Set foundScripts = EnumSet.noneOf(UnicodeScript.class); StringBuilder buffer = new StringBuilder(); for (int i = 0, strLength = str.length(); i < strLength && buffer.length() < options.getLabelStringLength();) { int codePoint = str.codePointAt(i); if (StringUtilities.isDisplayable(codePoint) && (codePoint != ' ')) { if (needsUnderscore) { - buffer.append('_'); + if (!buffer.isEmpty()) { + buffer.append('_'); + } needsUnderscore = false; } buffer.appendCodePoint(codePoint); } else { + foundScripts.add(UnicodeScript.of(codePoint)); needsUnderscore = true; // discard character } i += Character.charCount(codePoint); } - return prefixStr + buffer.toString(); + foundScripts.removeAll(Set.of(UnicodeScript.LATIN, UnicodeScript.COMMON)); + String scriptSummary = ""; + if (!foundScripts.isEmpty()) { + List scriptNames = new ArrayList<>(); + foundScripts.forEach(script -> scriptNames.add(script.name())); + Collections.sort(scriptNames); + scriptSummary = String.join("_", scriptNames) + "#"; + } + + return prefixStr + scriptSummary + buffer.toString(); } //----------------------------------------------------------------------------- @@ -948,7 +962,8 @@ public class StringDataInstance { return abbrevPrefixStr; } - String str = getStringValue(); + String str = + showTranslation && translatedValue != null ? translatedValue : getStringValue(); if (str == null) { return defaultStr; }