GT-3624 - Datatypes Provider - fixed preview window issues: odd font

size for structures; Copy of preview text was missing newlines; enum
rendering of negative values used too many digits
This commit is contained in:
dragonmacher 2020-08-03 18:16:09 -04:00
parent 3be8657ff3
commit 2e6e3d1a96
4 changed files with 25 additions and 24 deletions

View file

@ -530,9 +530,6 @@ public class DataTypesProvider extends ComponentProviderAdapter {
String toolTipText = ToolTipUtils.getToolTipText(dataType);
String updated = HTMLUtilities.convertLinkPlaceholdersToHyperlinks(toolTipText);
// Make the text a bit bigger, for readability
updated = HTMLUtilities.setFontSize(updated, 16);
previewPane.setText(updated);
previewPane.setCaretPosition(0);
}

View file

@ -62,10 +62,19 @@ public class EnumDataTypeHTMLRepresentation extends HTMLDataTypeRepresentation {
long[] values = enumDataType.getValues();
Arrays.sort(values);
int n = enumDataType.getLength();
List<ValidatableLine> list = new ArrayList<>(values.length);
for (long value : values) {
String name = enumDataType.getName(value);
list.add(new TextLine(name + " = 0x" + Long.toHexString(value)));
String hexString = Long.toHexString(value);
if (value < 0) {
// Long will print leading FF for 8 bytes, regardless of enum size. Keep only
// n bytes worth of text. For example, when n is 2, turn FFFFFFFFFFFFFF12 into FF12
int length = hexString.length();
hexString = hexString.substring(length - (n * 2));
}
list.add(new TextLine(name + " = 0x" + hexString));
}
return list;
@ -88,8 +97,14 @@ public class EnumDataTypeHTMLRepresentation extends HTMLDataTypeRepresentation {
// "<TT> displayName { "
String encodedDisplayName = HTMLUtilities.friendlyEncodeHTML(displayName.getText());
String displayNameText = wrapStringInColor(encodedDisplayName, displayName.getTextColor());
buffy.append(TT_OPEN).append(displayNameText).append(TT_CLOSE).append(HTML_SPACE).append(
"{").append(HTML_SPACE).append(BR);
buffy.append(TT_OPEN)
.append(displayNameText)
.append(TT_CLOSE)
.append(HTML_SPACE)
.append(
"{")
.append(HTML_SPACE)
.append(BR);
int length = bodyLines.size();
for (int i = 0; i < length; i++) {

View file

@ -332,9 +332,9 @@ public class GraphExportTest extends AbstractGhidraHeadedIntegrationTest {
}
private void printLines(List<String> lines) {
Msg.out("\n" + testName.getMethodName());
Msg.debug(this, "\n" + testName.getMethodName());
for (String line : lines) {
Msg.out("\"" + line + "\",");
Msg.debug(this, "\"" + line + "\",");
}
}

View file

@ -17,7 +17,6 @@ package ghidra.util;
import java.awt.*;
import java.util.List;
import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@ -797,21 +796,11 @@ public class HTMLUtilities {
// formatting tags (like <B>, <FONT>, etc). So, just normalize the text, not
// preserving any of the line breaks.
//
String condensed = condense(updated);
return condensed;
}
private static String condense(String text) {
// replace newlines, as they are sometimes inserted where two words were expected to
// contain no whitespace
String updated = text.replaceAll("\\n", "");
StringTokenizer tokenizer = new StringTokenizer(updated);
StringBuilder buffy = new StringBuilder();
while (tokenizer.hasMoreTokens()) {
buffy.append(tokenizer.nextToken()).append(" ");
}
return buffy.toString().trim();
// Note: Calling this method here causes unwanted removal of newlines. If the original
// need for this call is found, this can be revisited.
// (see history for condense() code)
// String condensed = condense(updated);
return updated;
}
/**