private void DoComputeRuns(string key, int edit, string text, ILanguage language) { var runs = new List<StyleRun>(); var sw = language.SafeBoss().Get<IStyleWith>(); DoRegexMatch(text, sw.Language, runs); Log.WriteLine(TraceLevel.Verbose, "Styler", "computed {0} runs for {1} edit {2}", runs.Count, System.IO.Path.GetFileName(key), edit); var data = new StyleRuns(language.SafeBoss(), key, edit, runs.ToArray()); if (language.SafeBoss().Has<IStyler>()) { var post = language.SafeBoss().Get<IStyler>(); post.PostProcess(data); } else { NSApplication.sharedApplication().BeginInvoke( () => Broadcaster.Invoke("computed style runs", data)); } }
private void DoApplyStyles(StyleRuns runs) { var editor = m_controller.Boss.Get<ITextEditor>(); if (Paths.AreEqual(runs.Path, editor.Key)) { m_current.Reset(runs.Edit, runs.Runs); m_current.ApplyStyles(); } }
public void PostProcess(StyleRuns runs) { lock (m_mutex) { Styles styles; if (!m_styles.TryGetValue(runs.Path, out styles)) { styles = new Styles(); m_styles.Add(runs.Path, styles); } styles.RegexStyles = runs; DoTryBroadcast(runs.Path); } }
private void DoProcessStyles(StyleRuns styles) { if (styles.Boss == m_boss) { string text = DoGetText(styles.Path); if (text != null) { var decs = new List<Declaration>(); string indent = string.Empty; foreach (StyleRun run in styles.Runs) { if (run.Type == "Type") { decs.Add(new Declaration( text.Substring(run.Offset, run.Length), new NSRange(run.Offset, run.Length), true, false)); indent = " "; } else if (run.Type == "Member") { decs.Add(new Declaration( indent + text.Substring(run.Offset, run.Length), new NSRange(run.Offset, run.Length), false, false)); } } var data = new Declarations(styles.Path, styles.Edit, decs.ToArray()); Broadcaster.Invoke("computed declarations", data); } } }
private void DoTryBroadcast(string path) { Styles styles = m_styles[path]; if (styles.RegexStyles != null && styles.ParsedStyles != null) { if (styles.RegexStyles.Edit == styles.ParsedStyles.Edit) { var runs = new List<StyleRun>(styles.RegexStyles.Runs.Length + styles.ParsedStyles.Runs.Length); runs.AddRange(styles.RegexStyles.Runs); runs.AddRange(styles.ParsedStyles.Runs); runs.Sort((lhs, rhs) => lhs.Offset.CompareTo(rhs.Offset)); var data = new StyleRuns(styles.RegexStyles.Boss, styles.RegexStyles.Path, styles.RegexStyles.Edit, runs.ToArray()); NSApplication.sharedApplication().BeginInvoke( () => Broadcaster.Invoke("computed style runs", data)); m_styles.Remove(path); } } }