public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
			var vm = value as ProcessVM;
			var s = parameter as string;
			if (vm == null || s == null)
				return null;

			var gen = UISyntaxHighlighter.Create(DebuggerSettings.Instance.SyntaxHighlightAttach);
			var printer = new ProcessPrinter(gen.TextOutput, false);
			HorizontalAlignment? horizAlign = null;
			if (StringComparer.OrdinalIgnoreCase.Equals(s, "FullPath"))
				printer.WriteFullPath(vm);
			else if (StringComparer.OrdinalIgnoreCase.Equals(s, "Filename"))
				printer.WriteFilename(vm);
			else if (StringComparer.OrdinalIgnoreCase.Equals(s, "PID")) {
				printer.WritePID(vm);
				horizAlign = HorizontalAlignment.Right;
			}
			else if (StringComparer.OrdinalIgnoreCase.Equals(s, "CLRVersion"))
				printer.WriteCLRVersion(vm);
			else if (StringComparer.OrdinalIgnoreCase.Equals(s, "Machine"))
				printer.WriteMachine(vm);
			else if (StringComparer.OrdinalIgnoreCase.Equals(s, "Title"))
				printer.WriteTitle(vm);
			else
				return null;

			var tb = gen.CreateTextBlock(true);
			if (horizAlign != null)
				tb.HorizontalAlignment = horizAlign.Value;
			return tb;
		}
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var vm = value as ProcessVM;
            var s  = parameter as string;

            if (vm == null || s == null)
            {
                return(null);
            }

            var gen     = ColorizedTextElementProvider.Create(vm.Context.SyntaxHighlight);
            var printer = new ProcessPrinter(gen.Output, false);
            HorizontalAlignment?horizAlign = null;

            if (StringComparer.OrdinalIgnoreCase.Equals(s, "FullPath"))
            {
                printer.WriteFullPath(vm);
            }
            else if (StringComparer.OrdinalIgnoreCase.Equals(s, "Filename"))
            {
                printer.WriteFilename(vm);
            }
            else if (StringComparer.OrdinalIgnoreCase.Equals(s, "PID"))
            {
                printer.WritePID(vm);
                horizAlign = HorizontalAlignment.Right;
            }
            else if (StringComparer.OrdinalIgnoreCase.Equals(s, "CLRVersion"))
            {
                printer.WriteCLRVersion(vm);
            }
            else if (StringComparer.OrdinalIgnoreCase.Equals(s, "Type"))
            {
                printer.WriteType(vm);
            }
            else if (StringComparer.OrdinalIgnoreCase.Equals(s, "Machine"))
            {
                printer.WriteMachine(vm);
            }
            else if (StringComparer.OrdinalIgnoreCase.Equals(s, "Title"))
            {
                printer.WriteTitle(vm);
            }
            else
            {
                return(null);
            }

            var tb = gen.CreateResult(true);

            if (horizAlign != null)
            {
                tb.HorizontalAlignment = horizAlign.Value;
            }
            return(tb);
        }
		public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
			var vm = value as ProcessVM;
			var tag = parameter as string;
			if (vm == null || tag == null)
				return null;

			var writer = Cache.GetWriter();
			try {
				var printer = new ProcessPrinter(writer, false);
				HorizontalAlignment? horizAlign = null;
				if (tag == PredefinedTextClassifierTags.AttachToProcessWindowFullPath)
					printer.WriteFullPath(vm);
				else if (tag == PredefinedTextClassifierTags.AttachToProcessWindowFilename)
					printer.WriteFilename(vm);
				else if (tag == PredefinedTextClassifierTags.AttachToProcessWindowPid) {
					printer.WritePID(vm);
					horizAlign = HorizontalAlignment.Right;
				}
				else if (tag == PredefinedTextClassifierTags.AttachToProcessWindowClrVersion)
					printer.WriteCLRVersion(vm);
				else if (tag == PredefinedTextClassifierTags.AttachToProcessWindowType)
					printer.WriteType(vm);
				else if (tag == PredefinedTextClassifierTags.AttachToProcessWindowMachine)
					printer.WriteMachine(vm);
				else if (tag == PredefinedTextClassifierTags.AttachToProcessWindowTitle)
					printer.WriteTitle(vm);
				else
					return null;

				var context = new TextClassifierContext(writer.Text, tag, vm.Context.SyntaxHighlight, writer.Colors);
				var elem = vm.Context.TextElementProvider.CreateTextElement(vm.Context.ClassificationFormatMap, context, ContentTypes.AttachToProcessWindow, TextElementFlags.FilterOutNewLines | TextElementFlags.CharacterEllipsis);
				if (horizAlign != null)
					elem.HorizontalAlignment = horizAlign.Value;
				return elem;
			}
			finally {
				Cache.FreeWriter(writer);
			}
		}
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var vm  = value as ProcessVM;
            var tag = parameter as string;

            if (vm == null || tag == null)
            {
                return(null);
            }

            var writer = Cache.GetWriter();

            try {
                var printer = new ProcessPrinter(writer, false);
                HorizontalAlignment?horizAlign = null;
                if (tag == PredefinedTextClassifierTags.AttachToProcessWindowFullPath)
                {
                    printer.WriteFullPath(vm);
                }
                else if (tag == PredefinedTextClassifierTags.AttachToProcessWindowFilename)
                {
                    printer.WriteFilename(vm);
                }
                else if (tag == PredefinedTextClassifierTags.AttachToProcessWindowPid)
                {
                    printer.WritePID(vm);
                    horizAlign = HorizontalAlignment.Right;
                }
                else if (tag == PredefinedTextClassifierTags.AttachToProcessWindowClrVersion)
                {
                    printer.WriteCLRVersion(vm);
                }
                else if (tag == PredefinedTextClassifierTags.AttachToProcessWindowType)
                {
                    printer.WriteType(vm);
                }
                else if (tag == PredefinedTextClassifierTags.AttachToProcessWindowMachine)
                {
                    printer.WriteMachine(vm);
                }
                else if (tag == PredefinedTextClassifierTags.AttachToProcessWindowTitle)
                {
                    printer.WriteTitle(vm);
                }
                else
                {
                    return(null);
                }

                var context = new TextClassifierContext(writer.Text, tag, vm.Context.SyntaxHighlight, writer.Colors);
                var elem    = vm.Context.TextElementProvider.CreateTextElement(vm.Context.ClassificationFormatMap, context, ContentTypes.AttachToProcessWindow, TextElementFlags.FilterOutNewLines | TextElementFlags.CharacterEllipsis);
                if (horizAlign != null)
                {
                    elem.HorizontalAlignment = horizAlign.Value;
                }
                return(elem);
            }
            finally {
                Cache.FreeWriter(writer);
            }
        }