From 079c049b8e78e7d3892f234a38d8578c3eaec692 Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 28 Jan 2022 11:31:48 +0100 Subject: [PATCH] Stop the tokenizer thread and start it again when setting a grammar --- src/TextMateSharp/Model/TMModel.cs | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/TextMateSharp/Model/TMModel.cs b/src/TextMateSharp/Model/TMModel.cs index 7d52c98..4f275bc 100644 --- a/src/TextMateSharp/Model/TMModel.cs +++ b/src/TextMateSharp/Model/TMModel.cs @@ -272,25 +272,21 @@ public void SetGrammar(IGrammar grammar) { if (!Object.Equals(grammar, this.grammar)) { + Stop(); + this.grammar = grammar; this.tokenizer = new Tokenizer(grammar); lines.ForEach((line) => line.ResetTokenizationState()); lines.Get(0).SetState(tokenizer.GetInitialState()); + + Start(); InvalidateLine(0); } } public void AddModelTokensChangedListener(IModelTokensChangedListener listener) { - if (this.fThread == null || this.fThread.IsStopped) - { - this.fThread = new TokenizerThread("TMModelThread", this); - } - - if (this.fThread.IsStopped) - { - this.fThread.Run(); - } + Start(); if (!listeners.Contains(listener)) { @@ -326,6 +322,19 @@ private void Stop() this.fThread = null; } + private void Start() + { + if (this.fThread == null || this.fThread.IsStopped) + { + this.fThread = new TokenizerThread("TMModelThread", this); + } + + if (this.fThread.IsStopped) + { + this.fThread.Run(); + } + } + private void BuildEventWithCallback(Action callback) { if (this.fThread == null || this.fThread.IsStopped)