Files
2026-11-01 23:39:55 +02:00

51 lines
1.6 KiB
C#

using TextMateSharp.Grammars;
using Unity.CodeEditor;
using Unity.CodeEditor.Rendering;
using Unity.CodeEditor.TextMate;
using UnityEditor;
using XDiffGui.Options;
namespace Unity.PlasticSCM.Editor.Diff.SyntaxHighlight
{
internal static class TextMateExtensions
{
internal static void SetLanguage(
this TextMate.Installation textMateInstallation,
XDiffGui.Options.Language language)
{
RegistryOptions registryOptions = (RegistryOptions)textMateInstallation.RegistryOptions;
if (IsMinifiedDocument(textMateInstallation.EditorModel))
{
textMateInstallation.SetGrammar(null);
return;
}
string languageId = TextMateLanguageId.Get(language);
textMateInstallation.SetGrammar(
registryOptions.GetScopeByLanguageId(languageId));
}
internal static TextMate.Installation InstallTextMate(this TextEditor editor)
{
ThemeName defaultTheme = EditorGUIUtility.isProSkin ?
ThemeName.DarkPlus : ThemeName.LightPlus;
return editor.InstallTextMate(
new RegistryOptions(defaultTheme),
false);
}
static bool IsMinifiedDocument(TextEditorModel textEditorModel)
{
if (textEditorModel == null)
return false;
// we consider a document minified if it has only one line and it's longer than 3000 characters
return textEditorModel.GetNumberOfLines() == 1 &&
textEditorModel.GetLineLength(0) > VisualLine.LENGTH_LIMIT;
}
}
}