Пример #1
0
        public TextBlock Create(ImmutableArray <TaggedText> taggedParts)
        {
            var context = TaggedTextClassifierContext.Create(taggedParts);

            return(TextBlockFactory.Create(context.Text, classificationFormatMap.DefaultTextProperties,
                                           classifier.GetTags(context).Select(a => new TextRunPropertiesAndSpan(a.Span, classificationFormatMap.GetTextProperties(a.ClassificationType))), TextBlockFactory.Flags.DisableSetTextBlockFontFamily));
        }
Пример #2
0
        public UIElement Create()
        {
            var text       = sb.ToString();
            var propsSpans = CreateTextRunPropertiesAndSpans();

            return(TextBlockFactory.Create(text, classificationFormatMap.DefaultTextProperties, propsSpans, TextBlockFactory.Flags.DisableSetTextBlockFontFamily | TextBlockFactory.Flags.DisableFontSize));
        }
Пример #3
0
		object CreateSignatureObject() {
			if (session.IsDismissed)
				return null;

			var signature = session.SelectedSignature;
			if (signature == null)
				return null;

			bool prettyPrintedContent = false;
			var text = signature.Content;
			if (text == null) {
				prettyPrintedContent = true;
				text = signature.PrettyPrintedContent;
			}
			if (text == null)
				return null;
			signatureTextBuffer.Properties[SignatureHelpConstants.UsePrettyPrintedContentBufferKey] = prettyPrintedContent;
			signatureTextBuffer.Replace(new Span(0, signatureTextBuffer.CurrentSnapshot.Length), text);
			var oldContentType = signatureTextBuffer.ContentType;
			var atSpan = signature.ApplicableToSpan;
			Debug.Assert(atSpan != null);
			if (atSpan != null) {
				var span = atSpan.GetStartPoint(atSpan.TextBuffer.CurrentSnapshot);
				signatureTextBuffer.ChangeContentType(GetSigHelpContentType(span.Snapshot.ContentType), null);
			}
			if (signatureClassifier == null || oldContentType != signatureTextBuffer.ContentType) {
				UnregisterSignatureClassifierEvents();
				signatureClassifier = classifierAggregatorService.GetClassifier(signatureTextBuffer);
				RegisterSignatureClassifierEvents();
			}

			var classificationSpans = signatureClassifier.GetClassificationSpans(new SnapshotSpan(signatureTextBuffer.CurrentSnapshot, 0, signatureTextBuffer.CurrentSnapshot.Length));
			var propsSpans = classificationSpans.Select(a => new TextRunPropertiesAndSpan(a.Span.Span, classificationFormatMap.GetTextProperties(a.ClassificationType)));
			return TextBlockFactory.Create(text, classificationFormatMap.DefaultTextProperties, propsSpans, TextBlockFactory.Flags.DisableSetTextBlockFontFamily | TextBlockFactory.Flags.DisableFontSize);
		}
Пример #4
0
        TextBlock TryCreateObject(StringBuilder sb, ImmutableArray <TaggedText> taggedParts, IClassificationFormatMap classificationFormatMap, IThemeClassificationTypeService themeClassificationTypeService)
        {
            if (taggedParts.IsDefaultOrEmpty)
            {
                return(null);
            }
            var text       = ToString(sb, taggedParts);
            var propsSpans = CreateTextRunPropertiesAndSpans(taggedParts, classificationFormatMap, themeClassificationTypeService);

            return(TextBlockFactory.Create(text, classificationFormatMap.DefaultTextProperties, propsSpans, TextBlockFactory.Flags.DisableSetTextBlockFontFamily | TextBlockFactory.Flags.DisableFontSize));
        }
Пример #5
0
		object CreateSignatureCountObject() {
			if (session.IsDismissed)
				return null;

			int sigIndex = session.Signatures.IndexOf(currentSignature);
			// Can happen if the session removes a sig
			if (sigIndex < 0)
				return null;
			var text = string.Format(dnSpy_Resources.SignatureHelp_Signature_N_of_TotalCount, sigIndex + 1, session.Signatures.Count);

			var propsSpans = Array.Empty<TextRunPropertiesAndSpan>();
			return TextBlockFactory.Create(text, classificationFormatMap.DefaultTextProperties, propsSpans, TextBlockFactory.Flags.DisableSetTextBlockFontFamily | TextBlockFactory.Flags.DisableFontSize);
		}
Пример #6
0
		object CreateUIObject(string text, IContentType contentType, SignatureHelpClassifierContext context) {
			otherTextBuffer.Properties[SignatureHelpConstants.SignatureHelpClassifierContextBufferKey] = context;
			otherTextBuffer.Replace(new Span(0, otherTextBuffer.CurrentSnapshot.Length), text);

			var oldContentType = otherTextBuffer.ContentType;
			otherTextBuffer.ChangeContentType(contentType, null);
			if (otherClassifier == null || oldContentType != contentType) {
				(otherClassifier as IDisposable)?.Dispose();
				otherClassifier = classifierAggregatorService.GetClassifier(otherTextBuffer);
			}

			var classificationSpans = otherClassifier.GetClassificationSpans(new SnapshotSpan(otherTextBuffer.CurrentSnapshot, 0, otherTextBuffer.CurrentSnapshot.Length));
			var propsSpans = classificationSpans.Select(a => new TextRunPropertiesAndSpan(a.Span.Span, classificationFormatMap.GetTextProperties(a.ClassificationType)));
			var result = TextBlockFactory.Create(text, classificationFormatMap.DefaultTextProperties, propsSpans, TextBlockFactory.Flags.DisableSetTextBlockFontFamily | TextBlockFactory.Flags.DisableFontSize);
			otherTextBuffer.Properties.RemoveProperty(SignatureHelpConstants.SignatureHelpClassifierContextBufferKey);
			return result;
		}
Пример #7
0
        public FrameworkElement Create(CompletionSet completionSet, Completion completion, CompletionClassifierKind kind)
        {
            if (completionSet == null)
            {
                throw new ArgumentNullException(nameof(completionSet));
            }
            if (completion == null)
            {
                throw new ArgumentNullException(nameof(completion));
            }
            Debug.Assert(completionSet.Completions.Contains(completion));

            CompletionClassifierContext context;
            string defaultContentType;

            switch (kind)
            {
            case CompletionClassifierKind.DisplayText:
                var inputText = completionSet.ApplicableTo.GetText(completionSet.ApplicableTo.TextBuffer.CurrentSnapshot);
                context            = new CompletionDisplayTextClassifierContext(completionSet, completion, completion.DisplayText, inputText);
                defaultContentType = ContentTypes.CompletionDisplayText;
                break;

            case CompletionClassifierKind.Suffix:
                var suffix = (completion as Completion4)?.Suffix ?? string.Empty;
                context            = new CompletionSuffixClassifierContext(completionSet, completion, suffix);
                defaultContentType = ContentTypes.CompletionSuffix;
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(kind));
            }

            var contentType = (completionSet as ICompletionSetContentTypeProvider)?.GetContentType(contentTypeRegistryService, kind);

            if (contentType == null)
            {
                contentType = contentTypeRegistryService.GetContentType(defaultContentType);
            }
            var classifier = GetTextClassifier(contentType);

            return(TextBlockFactory.Create(context.Text, classificationFormatMap.DefaultTextProperties,
                                           classifier.GetTags(context).Select(a => new TextRunPropertiesAndSpan(a.Span, classificationFormatMap.GetTextProperties(a.ClassificationType))), TextBlockFactory.Flags.DisableSetTextBlockFontFamily | TextBlockFactory.Flags.DisableFontSize));
        }
        public FrameworkElement Create(CompletionCollection collection, Completion completion)
        {
            if (collection == null)
            {
                throw new ArgumentNullException(nameof(collection));
            }
            if (completion == null)
            {
                throw new ArgumentNullException(nameof(completion));
            }
            Debug.Assert(collection.FilteredCollection.Contains(completion));

            var classifier = GetCompletionClassifier(collection);
            var inputText  = collection.ApplicableTo.GetText(collection.ApplicableTo.TextBuffer.CurrentSnapshot);
            var context    = new CompletionClassifierContext(collection, completion, completion.DisplayText, inputText);

            return(TextBlockFactory.Create(context.DisplayText, classificationFormatMap.DefaultTextProperties,
                                           classifier.GetTags(context).Select(a => new TextRunPropertiesAndSpan(a.Span, classificationFormatMap.GetTextProperties(a.ClassificationType))), TextBlockFactory.Flags.DisableSetTextBlockFontFamily | TextBlockFactory.Flags.DisableFontSize));
        }
Пример #9
0
        public static FrameworkElement Create(IClassificationFormatMap classificationFormatMap, string text, IList <TextClassificationTag> tags, TextElementFlags flags)
        {
            bool useFastTextBlock  = (flags & (TextElementFlags.TrimmingMask | TextElementFlags.WrapMask | TextElementFlags.FilterOutNewLines)) == (TextElementFlags.NoTrimming | TextElementFlags.NoWrap | TextElementFlags.FilterOutNewLines);
            bool filterOutNewLines = (flags & TextElementFlags.FilterOutNewLines) != 0;

            if (tags.Count != 0)
            {
                if (useFastTextBlock)
                {
                    return(new FastTextBlock((flags & TextElementFlags.NewFormatter) != 0, new TextSrc {
                        text = ToString(WpfUnicodeUtils.ReplaceBadChars(text), filterOutNewLines),
                        classificationFormatMap = classificationFormatMap,
                        tagsList = tags.ToArray(),
                    }));
                }

                var propsSpans = tags.Select(a => new TextRunPropertiesAndSpan(a.Span, classificationFormatMap.GetTextProperties(a.ClassificationType)));
                var textBlock  = TextBlockFactory.Create(text, classificationFormatMap.DefaultTextProperties, propsSpans, TextBlockFactory.Flags.DisableSetTextBlockFontFamily | TextBlockFactory.Flags.DisableFontSize | (filterOutNewLines ? TextBlockFactory.Flags.FilterOutNewlines : 0));
                textBlock.TextTrimming = GetTextTrimming(flags);
                textBlock.TextWrapping = GetTextWrapping(flags);
                return(textBlock);
            }

            FrameworkElement fwElem;

            if (useFastTextBlock)
            {
                fwElem = new FastTextBlock((flags & TextElementFlags.NewFormatter) != 0)
                {
                    Text = ToString(WpfUnicodeUtils.ReplaceBadChars(text), filterOutNewLines)
                };
            }
            else
            {
                fwElem = new TextBlock {
                    Text         = ToString(WpfUnicodeUtils.ReplaceBadChars(text), filterOutNewLines),
                    TextTrimming = GetTextTrimming(flags),
                    TextWrapping = GetTextWrapping(flags),
                };
            }
            return(InitializeDefault(classificationFormatMap, fwElem));
        }
Пример #10
0
        public static FrameworkElement Create(IClassificationFormatMap classificationFormatMap, string text, List <TextClassificationTag> tagsList, bool useNewFormatter, bool useEllipsis = false, bool filterOutNewLines = true, TextWrapping textWrapping = TextWrapping.NoWrap)
        {
            if (tagsList.Count != 0)
            {
                if (!useEllipsis && filterOutNewLines)
                {
                    return(new FastTextBlock(useNewFormatter, new TextSrc {
                        text = ToString(text, filterOutNewLines),
                        classificationFormatMap = classificationFormatMap,
                        tagsList = tagsList.ToArray(),
                    }));
                }

                var propsSpans = tagsList.Select(a => new TextRunPropertiesAndSpan(a.Span, classificationFormatMap.GetTextProperties(a.ClassificationType)));
                return(TextBlockFactory.Create(text, classificationFormatMap.DefaultTextProperties, propsSpans, TextBlockFactory.Flags.DisableSetTextBlockFontFamily | TextBlockFactory.Flags.DisableFontSize));
            }

            FrameworkElement fwElem;

            if (!useEllipsis && filterOutNewLines)
            {
                fwElem = new FastTextBlock(useNewFormatter)
                {
                    Text = ToString(text, filterOutNewLines)
                };
            }
            else
            {
                fwElem = new TextBlock {
                    Text         = ToString(text, filterOutNewLines),
                    TextTrimming = TextTrimming.CharacterEllipsis,
                    TextWrapping = textWrapping,
                };
            }
            return(InitializeDefault(classificationFormatMap, fwElem));
        }