summaryrefslogtreecommitdiff
path: root/python/pydevSrc/com/jetbrains/python/debugger/PyTypeHandler.java
diff options
context:
space:
mode:
Diffstat (limited to 'python/pydevSrc/com/jetbrains/python/debugger/PyTypeHandler.java')
-rw-r--r--python/pydevSrc/com/jetbrains/python/debugger/PyTypeHandler.java36
1 files changed, 34 insertions, 2 deletions
diff --git a/python/pydevSrc/com/jetbrains/python/debugger/PyTypeHandler.java b/python/pydevSrc/com/jetbrains/python/debugger/PyTypeHandler.java
index c2ee37cae278..f438eee8b2f8 100644
--- a/python/pydevSrc/com/jetbrains/python/debugger/PyTypeHandler.java
+++ b/python/pydevSrc/com/jetbrains/python/debugger/PyTypeHandler.java
@@ -2,9 +2,11 @@
package com.jetbrains.python.debugger;
import com.intellij.openapi.util.text.StringUtil;
+import org.jetbrains.annotations.NotNull;
import java.util.HashMap;
import java.util.Map;
+import java.util.Set;
// todo: extensive types support
@@ -21,15 +23,45 @@ public final class PyTypeHandler {
}
};
+ /**
+ * Like in python3 interpreter:
+ * HEX | DEX | Symbol
+ * \x09 | 9 | \t
+ * \x0a | 10 | \n
+ * \x0d | 13 | \r
+ * Another chars from (0, 32) and (127, 160) is non-printable characters, and we should print their code
+ * */
+ private static boolean isNonPrintable(char c) {
+ return c < 32 && c != 9 && c != 10 && c != 13 || c > 127 && c < 160;
+ }
+
+ private static @NotNull String charToHEX(char c) {
+ return String.format("%02x", (int) c);
+ }
+
+ private static @NotNull String processNonPrintableChars(@NotNull String string) {
+ StringBuilder result = new StringBuilder();
+ for (char c : string.toCharArray()) {
+ if (isNonPrintable(c)) {
+ result.append("\\x");
+ result.append(charToHEX(c));
+ } else {
+ result.append(c);
+ }
+ }
+ return result.toString();
+ }
+
private static final Formatter STR_FORMATTER = new Formatter() {
@Override
public String format(final String value) {
String escapedString = StringUtil.replace(value, "\\", "\\\\");
+
if (value.contains("'")) {
- return "\"" + escapedString + "\"";
+ return "\"" + processNonPrintableChars(escapedString) + "\"";
}
else {
- return "'" + escapedString + '\'';
+ return "'" + processNonPrintableChars(escapedString) + '\'';
}
}
};