support inverse ANSI command (IDEA-149450)
[idea/community.git] / platform / platform-api / src / com / intellij / execution / process / ColoredOutputTypeRegistry.java
index 77e31436930063f94933847aa069567a236d248c..b6e9db8024e69b41e89710107ea7c56c20953774 100644 (file)
@@ -100,6 +100,7 @@ public class ColoredOutputTypeRegistry {
     if (attribute.equals("0")) {
       return ProcessOutputTypes.STDOUT;
     }
+    boolean inverse = false;
     TextAttributes attrs = new TextAttributes();
     final String[] strings = attribute.split(";");
     for (String string : strings) {
@@ -116,6 +117,9 @@ public class ColoredOutputTypeRegistry {
       else if (value == 4) {
         attrs.setEffectType(EffectType.LINE_UNDERSCORE);
       }
+      else if (value == 7) {
+        inverse = true;
+      }
       else if (value == 22) {
         attrs.setFontType(Font.PLAIN);
       }
@@ -156,6 +160,19 @@ public class ColoredOutputTypeRegistry {
       }
       attrs.setEffectColor(foregroundColor);
     }
+    if (inverse) {
+      Color foregroundColor = attrs.getForegroundColor();
+      if (foregroundColor == null) {
+        foregroundColor = getDefaultForegroundColor();
+      }
+      Color backgroundColor = attrs.getBackgroundColor();
+      if (backgroundColor == null) {
+        backgroundColor = getDefaultBackgroundColor();
+      }
+      attrs.setForegroundColor(backgroundColor);
+      attrs.setEffectColor(backgroundColor);
+      attrs.setBackgroundColor(foregroundColor);
+    }
     Key newKey = new Key(completeAttribute);
     ConsoleViewContentType contentType = new ConsoleViewContentType(completeAttribute, attrs);
     ConsoleViewContentType.registerNewConsoleViewType(newKey, contentType);