private static TextFormattingRunProperties GetDefaultFormatting( IClassificationFormatMap classificationFormatMap, IClassificationType defaultClassification) { var defaultFormatting = classificationFormatMap.GetExplicitTextProperties(defaultClassification); // NOTE: Should use the default colors of all formattings if default formatting doesn't have explicitly set values if (defaultFormatting.BackgroundBrushEmpty) { // NOTE: if default background is not set we just leave the empty background => vs will use the transparent background // for this classification if (!classificationFormatMap.DefaultTextProperties.BackgroundBrushEmpty) { defaultFormatting = defaultFormatting.SetBackgroundBrush(classificationFormatMap.DefaultTextProperties.BackgroundBrush); } } // NOTE: Foreground and typeface always are set, just look at // https://docs.microsoft.com/en-us/dotnet/api/microsoft.visualstudio.text.classification.iclassificationformatmap.defaulttextproperties?view=visualstudiosdk-2017#remarks if (defaultFormatting.ForegroundBrushEmpty) { defaultFormatting = defaultFormatting.SetForegroundBrush(classificationFormatMap.DefaultTextProperties.ForegroundBrush); } if (defaultFormatting.TypefaceEmpty) { defaultFormatting = defaultFormatting.SetTypeface(classificationFormatMap.DefaultTextProperties.Typeface); } return(defaultFormatting); }
private void CreateDrawingObjects() { // this gets the color settings configured by the // user in Fonts and Colors (or the default in out // classification type). TextFormattingRunProperties format = formatMap.GetExplicitTextProperties(formatType); this.highlight.BorderBrush = format.ForegroundBrush; switch (settings.CurrentColumnHighlightStyle) { case ColumnStyle.LeftBorder: this.highlight.BorderThickness = new Thickness(settings.HighlightLineWidth, 0, 0, 0); break; case ColumnStyle.RightBorder: this.highlight.BorderThickness = new Thickness(0, 0, settings.HighlightLineWidth, 0); break; default: this.highlight.BorderThickness = new Thickness(settings.HighlightLineWidth); break; } //this.border.BorderThickness = settings.HighlightLineWidth; var fill = new Rectangle(); this.highlight.Child = fill; fill.Fill = format.BackgroundBrush; fill.StrokeThickness = 0; }
private void SetProperties(IClassificationType type, IStyle style, IClassificationFormatMap map) { var props = map.GetExplicitTextProperties(type) .SetTypeface(new Typeface(style.Font)) .SetForeground(style.Foreground) .SetBackground(style.Background) .SetForegroundOpacity(style.Opacity) .SetFontRenderingEmSize(style.Size) .SetItalic(style.Italic) .SetBold(style.Bold); var textDecorations = new TextDecorationCollection(); //? props.TextDecorations.Add(TextDecorations.Underline); if (style.Underline) { textDecorations.Add(TextDecorations.Underline); } //? props.TextDecorations.Add(TextDecorations.Strikethrough); if (style.Strikethrough) { textDecorations.Add(TextDecorations.Strikethrough); } //? remove this line when using TextDecorations.Add() props = props.SetTextDecorations(textDecorations); map.AddExplicitTextProperties(type, props); }
private static void IncreaseServiceFormatPriority(IClassificationFormatMap formatMap, IClassificationTypeRegistryService registry, string formatName, IClassificationType highestPriorityType) { IClassificationType predefinedClassificationType = registry.GetClassificationType(formatName); IClassificationType artificialClassType = registry.CreateTransientClassificationType(predefinedClassificationType); TextFormattingRunProperties properties = formatMap.GetExplicitTextProperties(predefinedClassificationType); formatMap.AddExplicitTextProperties(artificialClassType, properties, highestPriorityType); formatMap.SwapPriorities(artificialClassType, predefinedClassificationType); formatMap.SwapPriorities(highestPriorityType, predefinedClassificationType); }
private void CreateDrawingObjects() { // this gets the color settings configured by the // user in Fonts and Colors (or the default in out // classification type). TextFormattingRunProperties format = formatMap.GetExplicitTextProperties(formatType); this.columnRect.StrokeThickness = settings.HighlightLineWidth; this.columnRect.Stroke = format.ForegroundBrush; this.columnRect.Fill = format.BackgroundBrush; }
public static TextFormattingRunProperties GetOrSaveBackupFormatting(IClassificationType classificationType, bool update) { lock (_syncRoot) { if (update == false && _BackupFormattings.TryGetValue(classificationType, out var r)) { return(r); } else { r = DefaultClassificationFormatMap.GetExplicitTextProperties(classificationType); Debug.WriteLine("Backup format: " + classificationType.Classification + " " + (r.ForegroundBrushEmpty ? "<empty>" : r.ForegroundBrush.ToString())); _BackupFormattings[classificationType] = r; return(r); } } }
void DecorateClassificationTypes() { if (_ClassificationFormatMap.IsInBatchUpdate) { return; } _ClassificationFormatMap.BeginBatchUpdate(); var textProperty = _ClassificationFormatMap.GetTextProperties(_RegService.GetClassificationType("text")); foreach (var item in _ClassificationFormatMap.CurrentPriorityOrder) { if (item == null) { continue; } #if DEBUG Debug.Write(item.Classification); Debug.Write(' '); foreach (var type in item.BaseTypes) { Debug.Write('/'); Debug.Write(type.Classification); } Debug.WriteLine('/'); #endif StyleBase style; if (__Styles.TryGetValue(item.Classification, out style)) { TextFormattingRunProperties initialProperty; if (__InitialProperties.TryGetValue(item.Classification, out initialProperty) == false) { var p = _ClassificationFormatMap.GetExplicitTextProperties(item); if (p == null) { continue; } __InitialProperties[item.Classification] = initialProperty = p; } _ClassificationFormatMap.SetTextProperties(item, SetProperties(initialProperty, style, textProperty.FontRenderingEmSize)); } } _ClassificationFormatMap.EndBatchUpdate(); }
public CodeViewDecorator(IWpfTextView view) { view.Closed += View_Closed; view.VisualElement.IsVisibleChanged += VisualElement_IsVisibleChanged; if (_Initialized == false) { view.VisualElement.IsVisibleChanged += MarkInitialized; } Config.Updated += SettingsUpdated; _ClassificationFormatMap = ServicesHelper.Instance.ClassificationFormatMap.GetClassificationFormatMap(view); _EditorFormatMap = ServicesHelper.Instance.EditorFormatMap.GetEditorFormatMap(view); //_ClassificationFormatMap.ClassificationFormatMappingChanged += FormatUpdated; _RegService = ServicesHelper.Instance.ClassificationTypeRegistry; _TextView = view; _IsViewActive = true; if (_Initialized) { Debug.WriteLine("Decorate known types"); Decorate(FormatStore.ClassificationTypeStore.Keys, true); _EditorFormatMap.FormatMappingChanged += FormatUpdated; } else { _EditorFormatMap.FormatMappingChanged += BackupFormat; _ClassificationFormatMap.BeginBatchUpdate(); foreach (var item in _ClassificationFormatMap.CurrentPriorityOrder) { if (item != null) { _ClassificationFormatMap.SetTextProperties(item, _ClassificationFormatMap.GetExplicitTextProperties(item)); } } _ClassificationFormatMap.EndBatchUpdate(); } }
internal void Initialize(IClassificationTypeRegistryService service, IClassificationFormatMapService ClassificationFormatMapService) { try { if (initialized) { return; } string ffn = _buffer.GetFFN().Result; if (ffn == null) { return; } LanguageServer.IGrammarDescription _grammar_description = LanguageServer.GrammarDescriptionFactory.Create(ffn); if (_grammar_description == null) { return; } Workspaces.Document document = Workspaces.Workspace.Instance.FindDocument(ffn); _lsptype_to_classifiertype = new Dictionary <int, IClassificationType>(); for (int i = 0; i < _grammar_description.Map.Length; ++i) { int key = i; string val = _grammar_description.Map[i]; IClassificationType identiferClassificationType = service.GetClassificationType(val); IClassificationType classificationType = identiferClassificationType == null?service.CreateClassificationType(val, new IClassificationType[] { }) : identiferClassificationType; IClassificationFormatMap classificationFormatMap = ClassificationFormatMapService.GetClassificationFormatMap(category: "text"); Microsoft.VisualStudio.Text.Formatting.TextFormattingRunProperties identifierProperties = classificationFormatMap .GetExplicitTextProperties(classificationType); System.Drawing.Color color = !Themes.IsInvertedTheme() ? _grammar_description.MapColor[key] : _grammar_description.MapInvertedColor[key]; System.Windows.Media.Color newColor = System.Windows.Media.Color.FromArgb(color.A, color.R, color.G, color.B); Microsoft.VisualStudio.Text.Formatting.TextFormattingRunProperties newProperties = identifierProperties.SetForeground(newColor); classificationFormatMap.AddExplicitTextProperties(classificationType, newProperties); } { int key = (int)SymbolKind.Variable; string val = _grammar_description.Map[0]; _lsptype_to_classifiertype[key] = service.GetClassificationType(val); } { int key = (int)SymbolKind.Enum; string val = _grammar_description.Map[1]; _lsptype_to_classifiertype[key] = service.GetClassificationType(val); } initialized = true; } catch (Exception) { //Logger.Log.Notify(exception.StackTrace); } }
internal void Initialize(IClassificationTypeRegistryService service, IClassificationFormatMapService ClassificationFormatMapService) { try { if (initialized) { return; } string ffn = _buffer.GetFFN(); if (ffn == null) { return; } Workspaces.Document document = Workspaces.Workspace.Instance.FindDocument(ffn); LanguageServer.IParserDescription _grammar_description = LanguageServer.ParserDescriptionFactory.Create(document); if (_grammar_description == null) { return; } _to_classifiertype = new Dictionary <int, IClassificationType>(); IClassificationFormatMap classificationFormatMap = ClassificationFormatMapService.GetClassificationFormatMap(category: "text"); // hardwire colors to VS's colors of selected types. System.Collections.ObjectModel.ReadOnlyCollection <IClassificationType> list_of_formats = classificationFormatMap.CurrentPriorityOrder; { int i = (int)LanguageServer.Antlr4ParsingResults.AntlrClassifications.ClassificationNonterminalDef; string val = _grammar_description.Map[i]; IClassificationType identiferClassificationType = service.GetClassificationType(val); IClassificationType classificationType = identiferClassificationType ?? service.CreateClassificationType(val, Array.Empty <IClassificationType>()); IClassificationType t = list_of_formats.Where(f => f != null && f.Classification == Options.Option.GetString("AntlrNonterminalDef")).FirstOrDefault(); if (t != null) { try { Microsoft.VisualStudio.Text.Formatting.TextFormattingRunProperties identifierProperties = classificationFormatMap .GetExplicitTextProperties(t); classificationFormatMap.AddExplicitTextProperties(classificationType, identifierProperties); } #pragma warning disable CS0168 // Variable is declared but never used catch (Exception eeks) { } #pragma warning restore CS0168 // Variable is declared but never used } _to_classifiertype[i] = classificationType; } { int i = (int)LanguageServer.Antlr4ParsingResults.AntlrClassifications.ClassificationNonterminalRef; string val = _grammar_description.Map[i]; IClassificationType identiferClassificationType = service.GetClassificationType(val); IClassificationType classificationType = identiferClassificationType ?? service.CreateClassificationType(val, Array.Empty <IClassificationType>()); IClassificationType t = list_of_formats.Where(f => f != null && f.Classification == Options.Option.GetString("AntlrNonterminalRef")).FirstOrDefault(); if (t != null) { try { Microsoft.VisualStudio.Text.Formatting.TextFormattingRunProperties identifierProperties = classificationFormatMap .GetExplicitTextProperties(t); classificationFormatMap.AddExplicitTextProperties(classificationType, identifierProperties); } #pragma warning disable 0168 catch (Exception eeks) { } #pragma warning restore 0168 } _to_classifiertype[i] = classificationType; } { int i = (int)LanguageServer.Antlr4ParsingResults.AntlrClassifications.ClassificationTerminalDef; string val = _grammar_description.Map[i]; IClassificationType identiferClassificationType = service.GetClassificationType(val); IClassificationType classificationType = identiferClassificationType ?? service.CreateClassificationType(val, Array.Empty <IClassificationType>()); IClassificationType t = list_of_formats.Where(f => f != null && f.Classification == Options.Option.GetString("AntlrTerminalDef")).FirstOrDefault(); if (t != null) { try { Microsoft.VisualStudio.Text.Formatting.TextFormattingRunProperties identifierProperties = classificationFormatMap .GetExplicitTextProperties(t); classificationFormatMap.AddExplicitTextProperties(classificationType, identifierProperties); } #pragma warning disable 0168 catch (Exception eeks) { } #pragma warning restore 0168 } _to_classifiertype[i] = classificationType; } { int i = (int)LanguageServer.Antlr4ParsingResults.AntlrClassifications.ClassificationTerminalRef; string val = _grammar_description.Map[i]; IClassificationType identiferClassificationType = service.GetClassificationType(val); IClassificationType classificationType = identiferClassificationType ?? service.CreateClassificationType(val, Array.Empty <IClassificationType>()); IClassificationType t = list_of_formats.Where(f => f != null && f.Classification == Options.Option.GetString("AntlrTerminalRef")).FirstOrDefault(); if (t != null) { try { Microsoft.VisualStudio.Text.Formatting.TextFormattingRunProperties identifierProperties = classificationFormatMap .GetExplicitTextProperties(t); classificationFormatMap.AddExplicitTextProperties(classificationType, identifierProperties); } #pragma warning disable 0168 catch (Exception eeks) { } #pragma warning restore 0168 } _to_classifiertype[i] = classificationType; } { int i = (int)LanguageServer.Antlr4ParsingResults.AntlrClassifications.ClassificationComment; string val = _grammar_description.Map[i]; IClassificationType identiferClassificationType = service.GetClassificationType(val); IClassificationType classificationType = identiferClassificationType ?? service.CreateClassificationType(val, Array.Empty <IClassificationType>()); IClassificationType t = list_of_formats.Where(f => f != null && f.Classification == Options.Option.GetString("AntlrComment")).FirstOrDefault(); if (t != null) { try { Microsoft.VisualStudio.Text.Formatting.TextFormattingRunProperties identifierProperties = classificationFormatMap .GetExplicitTextProperties(t); classificationFormatMap.AddExplicitTextProperties(classificationType, identifierProperties); } #pragma warning disable 0168 catch (Exception eeks) { } #pragma warning restore 0168 } _to_classifiertype[i] = classificationType; } { int i = (int)LanguageServer.Antlr4ParsingResults.AntlrClassifications.ClassificationKeyword; string val = _grammar_description.Map[i]; IClassificationType identiferClassificationType = service.GetClassificationType(val); IClassificationType classificationType = identiferClassificationType ?? service.CreateClassificationType(val, Array.Empty <IClassificationType>()); IClassificationType t = list_of_formats.Where(f => f != null && f.Classification == Options.Option.GetString("AntlrKeyword")).FirstOrDefault(); if (t != null) { try { Microsoft.VisualStudio.Text.Formatting.TextFormattingRunProperties identifierProperties = classificationFormatMap .GetExplicitTextProperties(t); classificationFormatMap.AddExplicitTextProperties(classificationType, identifierProperties); } #pragma warning disable 0168 catch (Exception eeks) { } #pragma warning restore 0168 } _to_classifiertype[i] = classificationType; } { int i = (int)LanguageServer.Antlr4ParsingResults.AntlrClassifications.ClassificationLiteral; string val = _grammar_description.Map[i]; IClassificationType identiferClassificationType = service.GetClassificationType(val); IClassificationType classificationType = identiferClassificationType ?? service.CreateClassificationType(val, Array.Empty <IClassificationType>()); IClassificationType t = list_of_formats.Where(f => f != null && f.Classification == Options.Option.GetString("AntlrLiteral")).FirstOrDefault(); if (t != null) { try { Microsoft.VisualStudio.Text.Formatting.TextFormattingRunProperties identifierProperties = classificationFormatMap .GetExplicitTextProperties(t); classificationFormatMap.AddExplicitTextProperties(classificationType, identifierProperties); } #pragma warning disable 0168 catch (Exception eeks) { } #pragma warning restore 0168 } _to_classifiertype[i] = classificationType; } { int i = (int)LanguageServer.Antlr4ParsingResults.AntlrClassifications.ClassificationModeDef; string val = _grammar_description.Map[i]; IClassificationType identiferClassificationType = service.GetClassificationType(val); IClassificationType classificationType = identiferClassificationType ?? service.CreateClassificationType(val, Array.Empty <IClassificationType>()); IClassificationType t = list_of_formats.Where(f => f != null && f.Classification == Options.Option.GetString("AntlrModeDef")).FirstOrDefault(); if (t != null) { try { Microsoft.VisualStudio.Text.Formatting.TextFormattingRunProperties identifierProperties = classificationFormatMap .GetExplicitTextProperties(t); classificationFormatMap.AddExplicitTextProperties(classificationType, identifierProperties); } #pragma warning disable 0168 catch (Exception eeks) { } #pragma warning restore 0168 } _to_classifiertype[i] = classificationType; } { int i = (int)LanguageServer.Antlr4ParsingResults.AntlrClassifications.ClassificationModeRef; string val = _grammar_description.Map[i]; IClassificationType identiferClassificationType = service.GetClassificationType(val); IClassificationType classificationType = identiferClassificationType ?? service.CreateClassificationType(val, Array.Empty <IClassificationType>()); IClassificationType t = list_of_formats.Where(f => f != null && f.Classification == Options.Option.GetString("AntlrModeRef")).FirstOrDefault(); if (t != null) { try { Microsoft.VisualStudio.Text.Formatting.TextFormattingRunProperties identifierProperties = classificationFormatMap .GetExplicitTextProperties(t); classificationFormatMap.AddExplicitTextProperties(classificationType, identifierProperties); } #pragma warning disable 0168 catch (Exception eeks) { } #pragma warning restore 0168 } _to_classifiertype[i] = classificationType; } { int i = (int)LanguageServer.Antlr4ParsingResults.AntlrClassifications.ClassificationChannelDef; string val = _grammar_description.Map[i]; IClassificationType identiferClassificationType = service.GetClassificationType(val); IClassificationType classificationType = identiferClassificationType ?? service.CreateClassificationType(val, Array.Empty <IClassificationType>()); IClassificationType t = list_of_formats.Where(f => f != null && f.Classification == Options.Option.GetString("AntlrChannelDef")).FirstOrDefault(); if (t != null) { try { Microsoft.VisualStudio.Text.Formatting.TextFormattingRunProperties identifierProperties = classificationFormatMap .GetExplicitTextProperties(t); classificationFormatMap.AddExplicitTextProperties(classificationType, identifierProperties); } #pragma warning disable 0168 catch (Exception eeks) { } #pragma warning restore 0168 } _to_classifiertype[i] = classificationType; } { int i = (int)LanguageServer.Antlr4ParsingResults.AntlrClassifications.ClassificationChannelRef; string val = _grammar_description.Map[i]; IClassificationType identiferClassificationType = service.GetClassificationType(val); IClassificationType classificationType = identiferClassificationType ?? service.CreateClassificationType(val, Array.Empty <IClassificationType>()); IClassificationType t = list_of_formats.Where(f => f != null && f.Classification == Options.Option.GetString("AntlrChannelRef")).FirstOrDefault(); if (t != null) { try { Microsoft.VisualStudio.Text.Formatting.TextFormattingRunProperties identifierProperties = classificationFormatMap .GetExplicitTextProperties(t); classificationFormatMap.AddExplicitTextProperties(classificationType, identifierProperties); } #pragma warning disable 0168 catch (Exception eeks) { } #pragma warning restore 0168 } _to_classifiertype[i] = classificationType; } { int i = (int)LanguageServer.Antlr4ParsingResults.AntlrClassifications.ClassificationPunctuation; string val = _grammar_description.Map[i]; IClassificationType identiferClassificationType = service.GetClassificationType(val); IClassificationType classificationType = identiferClassificationType ?? service.CreateClassificationType(val, Array.Empty <IClassificationType>()); IClassificationType t = list_of_formats.Where(f => f != null && f.Classification == Options.Option.GetString("AntlrPunctuation")).FirstOrDefault(); if (t != null) { try { Microsoft.VisualStudio.Text.Formatting.TextFormattingRunProperties identifierProperties = classificationFormatMap .GetExplicitTextProperties(t); classificationFormatMap.AddExplicitTextProperties(classificationType, identifierProperties); } #pragma warning disable 0168 catch (Exception eeks) { } #pragma warning restore 0168 } _to_classifiertype[i] = classificationType; } { int i = (int)LanguageServer.Antlr4ParsingResults.AntlrClassifications.ClassificationOperator; string val = _grammar_description.Map[i]; IClassificationType identiferClassificationType = service.GetClassificationType(val); IClassificationType classificationType = identiferClassificationType ?? service.CreateClassificationType(val, Array.Empty <IClassificationType>()); IClassificationType t = list_of_formats.Where(f => f != null && f.Classification == Options.Option.GetString("AntlrOperator")).FirstOrDefault(); if (t != null) { try { Microsoft.VisualStudio.Text.Formatting.TextFormattingRunProperties identifierProperties = classificationFormatMap .GetExplicitTextProperties(t); classificationFormatMap.AddExplicitTextProperties(classificationType, identifierProperties); } #pragma warning disable 0168 catch (Exception eeks) { } #pragma warning restore 0168 } _to_classifiertype[i] = classificationType; } initialized = true; } #pragma warning disable 0168 catch (Exception eeks) { } #pragma warning restore 0168 }
public TextFormattingRunProperties GetExplicitTextProperties(IClassificationType classificationType) => categoryMap.GetExplicitTextProperties(classificationType);