diff options
Diffstat (limited to 'python/pydevSrc/com/jetbrains/python/debugger/PyTypeHandler.java')
-rw-r--r-- | python/pydevSrc/com/jetbrains/python/debugger/PyTypeHandler.java | 36 |
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) + '\''; } } }; |