示例#1
0
        public IEnumerable <IntelliSenseItem> Generate(TextDocument document, Caret caret)
        {
            IEnumerable <string> docIdents = null;
            string curWord     = null;
            int    caretOffset = 0;

            Application.Current.Dispatcher.Invoke(() =>
            {
                caretOffset = caret.Offset;
                curWord     = document.GetWordAround(caret.Offset - 1);
                docIdents   = document.GetAllSqfIdents().ToList();
            });
            var sqfDefs = from def in ConfigHost.Instance.SqfDefinitions where def.Kind != RealVirtuality.SQF.SqfDefinition.EKind.Type && def.Name.StartsWith(curWord) orderby def.Name select def;

            docIdents = (from str in docIdents where str.StartsWith(curWord) && !sqfDefs.Any((def) => def.Name.Equals(str, StringComparison.InvariantCultureIgnoreCase)) orderby str select str).Distinct();


            foreach (var it in docIdents)
            {
                yield return(new IntelliSenseItem((td) => td.Insert(caretOffset, it.Remove(0, curWord.Length)), it)
                {
                    ImageSource = @"/ArmA.Studio;component/Resources/Pictograms/Field/Field_16x.png"
                });
            }
            var l = new List <string>(sqfDefs.Count());

            foreach (var it in sqfDefs)
            {
                if (l.Contains(it.Name))
                {
                    continue;
                }
                yield return(new IntelliSenseItem((td) => td.Insert(caretOffset, it.Name.Remove(0, curWord.Length)), it.Name)
                {
                    Description = it.Description
                });

                l.Add(it.Name);
            }
        }