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); }
/// <summary> /// Swap priority of items from <paramref name="classificationType"/> to classification: <para/> /// * [...,cur,a1,a2,tar,...] -> [...,a1,a2,tar,cur,...]<para/> /// * [...,tar,a1,a2,cur,...] -> [...,tar,cur,a1,a2,...] /// </summary> private static void SetPriority( IClassificationFormatMap formatMap, IClassificationType classificationType, int classificationPosition) { var index = formatMap.CurrentPriorityOrder.IndexOf(classificationType); if (index < classificationPosition) { while (index < classificationPosition) { formatMap.SwapPriorities(classificationType, formatMap.CurrentPriorityOrder[++index]); } } else { while (classificationPosition < --index) { formatMap.SwapPriorities(formatMap.CurrentPriorityOrder[index], classificationType); } } }
public void SwapPriorities(IClassificationType firstType, IClassificationType secondType) => categoryMap.SwapPriorities(firstType, secondType);