Esempio n. 1
0
        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));
            }
        }
Esempio n. 2
0
 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();
     }
 }
Esempio n. 3
0
        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);
            }
        }
Esempio n. 4
0
        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);
                }
            }
        }
Esempio n. 5
0
        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);
                }
            }
        }