Пример #1
0
        public override bool OnCompletionInsert(ScintillaNet.ScintillaControl sci, int position, string text, char trigger)
        {
            if (text == "Vector")
            {
                string insert = null;
                string line   = sci.GetLine(sci.LineFromPosition(position));
                Match  m      = Regex.Match(line, @"\svar\s+(?<varname>.+)\s*:\s*Vector\.<(?<indextype>.+)(?=(>\s*=))");
                if (m.Success)
                {
                    insert = String.Format(".<{0}>", m.Groups["indextype"].Value);
                }
                else
                {
                    m = Regex.Match(line, @"\s*=\s*new");
                    if (m.Success)
                    {
                        ASResult result = ASComplete.GetExpressionType(sci, sci.PositionFromLine(sci.LineFromPosition(position)) + m.Index);
                        if (result != null && !result.IsNull() && result.Member != null && result.Member.Type != null)
                        {
                            m = Regex.Match(result.Member.Type, @"(?<=<).+(?=>)");
                            if (m.Success)
                            {
                                insert = String.Format(".<{0}>", m.Value);
                            }
                        }
                    }
                    if (insert == null)
                    {
                        if (trigger == '.' || trigger == '(')
                        {
                            return(true);
                        }
                        insert = ".<>";
                        sci.InsertText(position + text.Length, insert);
                        sci.CurrentPos = position + text.Length + 2;
                        sci.SetSel(sci.CurrentPos, sci.CurrentPos);
                        ASComplete.HandleAllClassesCompletion(sci, "", false, true);
                        return(true);
                    }
                }
                if (insert == null)
                {
                    return(false);
                }
                if (trigger == '.')
                {
                    sci.InsertText(position + text.Length, insert.Substring(1));
                    sci.CurrentPos = position + text.Length;
                }
                else
                {
                    sci.InsertText(position + text.Length, insert);
                    sci.CurrentPos = position + text.Length + insert.Length;
                }
                sci.SetSel(sci.CurrentPos, sci.CurrentPos);
                return(true);
            }

            return(false);
        }
Пример #2
0
        private static List <ICompletionListItem> GetAutoCompletionValuesFromType(string type)
        {
            if (type == "Boolean")
            {
                return(new List <ICompletionListItem>()
                {
                    new HtmlAttributeItem("true"),
                    new HtmlAttributeItem("false")
                });
            }
            else if (type == "Class")
            {
                ASComplete.HandleAllClassesCompletion(PluginBase.MainForm.CurrentDocument.SciControl, tokenContext,
                                                      true, false);
            }
            else if (type == "Function")
            {
                ClassModel tmpClass = mxmlContext.model.GetPublicClass();
                Visibility acc      = Visibility.Default | Visibility.Internal | Visibility.Private | Visibility.Protected | Visibility.Public;

                tmpClass.ResolveExtends();

                List <ICompletionListItem> result = null;
                var validTypes = new Dictionary <string, bool>();
                while (tmpClass != null && !tmpClass.IsVoid())
                {
                    foreach (MemberModel member in tmpClass.Members)
                    {
                        if ((member.Flags & FlagType.Function) > 0 && (member.Access & acc) > 0)
                        {
                            if (result == null)
                            {
                                result = new List <ICompletionListItem>();
                            }
                            result.Add(new MemberItem(member));
                        }
                    }

                    tmpClass = tmpClass.Extends;
                    if (tmpClass != null && tmpClass.InFile.Package == "" && tmpClass.Name == "Object")
                    {
                        break;
                    }
                    // members visibility
                    // TODO: Take into account namespaces!
                    acc = Visibility.Protected | Visibility.Public;
                }

                return(result);
            }
            return(null);
        }
Пример #3
0
 private static List <ICompletionListItem> GetAutoCompletionValuesFromType(string type)
 {
     if (type == "Boolean")
     {
         return(new List <ICompletionListItem>()
         {
             new HtmlAttributeItem("true"),
             new HtmlAttributeItem("false")
         });
     }
     else if (type == "Class")
     {
         ASComplete.HandleAllClassesCompletion(PluginBase.MainForm.CurrentDocument.SciControl, tokenContext,
                                               true, false);
     }
     return(null);
 }