static public bool HandleKeys(ScintillaControl sci, Keys key)
        {
            int index;
            switch (key)
            {
                case Keys.Back:
                    if (!UITools.CallTip.CallTipActive) sci.DeleteBack();
                    if (word.Length > MinWordLength)
                    {
                        word = word.Substring(0, word.Length-1);
                        currentPos = sci.CurrentPos;
                        lastIndex = 0;
                        FindWordStartingWith(word);
                    }
                    else CompletionList.Hide((char)8);
                    return true;
                    
                case Keys.Enter:
                    if (noAutoInsert || !ReplaceText(sci, '\n'))
                    {
                        CompletionList.Hide();
                        return false;
                    }
                    return true;

                case Keys.Tab:
                    if (!ReplaceText(sci, '\t'))
                    {
                        CompletionList.Hide();
                        return false;
                    }
                    return true;
                    
                case Keys.Space:
                    if (noAutoInsert) CompletionList.Hide();
                    return false;

                case Keys.Up:
                    noAutoInsert = false;
                    // the list was hidden and it should not appear
                    if (!completionList.Visible)
                    {
                        CompletionList.Hide();
                        if (key == Keys.Up) sci.LineUp(); 
                        else sci.CharLeft();
                        return false;
                    }
                    // go up the list
                    if (completionList.SelectedIndex > 0)
                    {
                        RefreshTip();
                        index = completionList.SelectedIndex-1;
                        completionList.SelectedIndex = index;
                    }
                    // wrap
                    else if (PluginBase.MainForm.Settings.WrapList)
                    {
                        RefreshTip();
                        index = completionList.Items.Count-1;
                        completionList.SelectedIndex = index;
                    }
                    break;

                case Keys.Down:
                    noAutoInsert = false;
                    // the list was hidden and it should not appear
                    if (!completionList.Visible)
                    {
                        CompletionList.Hide();
                        if (key == Keys.Down) sci.LineDown(); 
                        else sci.CharRight();
                        return false;
                    }
                    // go down the list
                    if (completionList.SelectedIndex < completionList.Items.Count-1)
                    {
                        RefreshTip();
                        index = completionList.SelectedIndex+1;
                        completionList.SelectedIndex = index;
                    }
                    // wrap
                    else if (PluginBase.MainForm.Settings.WrapList)
                    {
                        RefreshTip();
                        index = 0;
                        completionList.SelectedIndex = index;
                    }
                    break;

                case Keys.PageUp:
                    noAutoInsert = false;
                    // the list was hidden and it should not appear
                    if (!completionList.Visible)
                    {
                        CompletionList.Hide();
                        sci.PageUp();
                        return false;
                    }
                    // go up the list
                    if (completionList.SelectedIndex > 0)
                    {
                        RefreshTip();
                        index = completionList.SelectedIndex-completionList.Height/completionList.ItemHeight;
                        if (index < 0) index = 0;
                        completionList.SelectedIndex = index;
                    }
                    break;

                case Keys.PageDown:
                    noAutoInsert = false;
                    // the list was hidden and it should not appear
                    if (!completionList.Visible)
                    {
                        CompletionList.Hide();
                        sci.PageDown();
                        return false;
                    }
                    // go down the list
                    if (completionList.SelectedIndex < completionList.Items.Count-1)
                    {
                        RefreshTip();
                        index = completionList.SelectedIndex+completionList.Height/completionList.ItemHeight;
                        if (index > completionList.Items.Count-1) index = completionList.Items.Count-1;
                        completionList.SelectedIndex = index;
                    }
                    break;
                
                case (Keys.Control | Keys.Space):
                    break;
                
                case Keys.Left:
                    sci.CharLeft();
                    CompletionList.Hide();
                    break;

                case Keys.Right:
                    sci.CharRight();
                    CompletionList.Hide();
                    break;

                default:
                    CompletionList.Hide();
                    return false;
            }
            return true;
        }
예제 #2
0
        unsafe void SciControl_CharAdded(ScintillaControl sender, int ch)
        {
            if (ch == bracketOpen)
               {
               insert = arrBracketClose;

               }
               else if (ch == quote)
               {

               insert = arrQuote;
               }
               else if (ch == squareBracketOpen)
               {

               insert = arrSquareBracketClose;

               }
               else if (ch == bracketClose)
               {
               if (sender.CharAt(sender.CurrentPos) == bracketClose)
               {
                   // temporary disable
                   sender.ModEventMask ^= (Int32)ScintillaNet.Enums.ModificationFlags.BeforeDelete;
                   sender.CharRight();
                   sender.DeleteBack();
                   sender.ModEventMask ^= (Int32)ScintillaNet.Enums.ModificationFlags.BeforeDelete;
                   return;
               }
               return;
               }
               else if (ch == squareBracketClose)
               {
               if (sender.CharAt(sender.CurrentPos) == squareBracketClose)
               {
                   // temporary disable
                   sender.ModEventMask ^= (Int32)ScintillaNet.Enums.ModificationFlags.BeforeDelete;
                   sender.CharRight();
                   sender.DeleteBack();
                   sender.ModEventMask ^= (Int32)ScintillaNet.Enums.ModificationFlags.BeforeDelete;
                   return;
               }
               return;
               }
               else
               {
               return;
               }

               int pos = sender.CurrentPos;
               uint actPos = (uint)pos;

               char character;
               do
               {
               character =(char) sender.CharAt(pos);
               if (character == '\n') break;
               if (!Char.IsWhiteSpace(character)) break;
               pos++;

               } while (true);

             //  if (Char.IsLetterOrDigit(character) || character == ch || character == insert[0]) return;
               if (Char.IsLetterOrDigit(character) || character == ch ) return;

               int stylemask = (1 << sender.StyleBits) - 1;

               bool isTextStyle = ASComplete.IsTextStyle(sender.StyleAt(sender.CurrentPos) & stylemask);
               int style = sender.StyleAt(sender.CurrentPos - 1) & stylemask;

               if (ch == quote)
               {
               if (!isTextStyle)
               {

                   fixed (byte* b = System.Text.Encoding.GetEncoding(sender.CodePage).GetBytes(insert))
                   {
                       sender.SPerform(2003, actPos, (uint)b);
                   }

               }

               return;
               }

               if (!ASComplete.IsTextStyle(style) && !isTextStyle)
               {

               return;
               }

               fixed (byte* b = System.Text.Encoding.GetEncoding(sender.CodePage).GetBytes(insert))
               {
               sender.SPerform(2003, actPos, (uint)b);
               }
        }
예제 #3
0
        internal void OnCharAdded(ScintillaControl sci, int position, int value)
        {
            if (!enabled) return;

            bool autoInsert = false;

            char c = (char)value;
            if (wordChars.IndexOf(c) < 0)
            {
                if (c == ':')
                {
                    if (lastColonInsert == position - 1)
                    {
                        sci.DeleteBack();
                        lastColonInsert = -1;
                        return;
                    }
                }
                else if (c == ';')
                {
                    char c2 = (char)sci.CharAt(position);
                    if (c2 == ';')
                    {
                        sci.DeleteBack();
                        sci.SetSel(position, position);
                        return;
                    }
                }
                else if (c == '\n' && !settings.DisableAutoCloseBraces)
                {
                    int line = sci.LineFromPosition(position);
                    string text = sci.GetLine(line - 1).TrimEnd();
                    if (text.EndsWith("{")) AutoCloseBrace(sci, line);
                }
                else if (c == '\t') // TODO get tab notification!
                {
                    position--;
                    autoInsert = true;
                }
                else return;
            }

            var context = GetContext(sci, position);
            var mode = CompleteMode.None;

            if (context.InComments) return;
            else if (context.InBlock)
            {
                if (context.Word == "-") mode = CompleteMode.Prefix;
                else if (context.Word.Length >= 2 || (char)value == '-')
                    mode = CompleteMode.Attribute;
            }
            else if (context.InValue)
            {
                if (features.Mode != "CSS" && c == features.Trigger)
                {
                    context.Word = context.Word.Substring(1);
                    context.Position++;
                    mode = CompleteMode.Variable;
                }
                else if (context.Word.Length == 1 && "abcdefghijklmnopqrstuvwxyz".IndexOf(context.Word[0]) >= 0)
                    mode = CompleteMode.Value;
            }
            else if (c == ':' && !context.IsVar) mode = CompleteMode.Pseudo;

            HandleCompletion(mode, context, autoInsert, true);
        }
예제 #4
0
        void CompletionList_OnInsert(ScintillaControl sender, int position, string text, char trigger, ICompletionListItem item)
        {
            if (trigger == '(' || trigger == '.') return;
            if (!(item is MemberItem)) return; // Generate Event
              //      if (item is EventItem) return;
             currentData = (DataEvent)currentNotifyEvent;
             Hashtable table = currentData.Data as Hashtable;
             if (table==null) return;

            ASResult res = (table)["context"] as ASResult;

            if (res == null) return;

            MemberModel member = res.Member;
            int posAdd = 0;

                    if (member != null)
                    {
                        if ((member.Flags & FlagType.Function) == 0) { return; }

                            int pos = sender.CurrentPos;
                            int insertPos = pos;
                            if (((member.Flags & FlagType.Constructor) > 0))
                            {

                                if (!thereIsNewWord(sender))
                                {
                                    sender.GotoPos(pos);
                                    return;
                                }
                            }

                          //  sender.ReplaceSel
                                bool hasParameters = false;

                                char lastChar=' ';
                                posAdd = SearchNextNewLineWithoutChar(sender, position, text, ref lastChar);

                                if (lastChar == '(')
                                {
                                    return;
                                }

                            // Search if is a parameter of a function
                                if (lastChar == ',' || lastChar == ')')
                                {
                                    if (IsFunctionParameter(sender, position - 1))
                                    {
                                        return;
                                    };
                                }

                                sender.BeginUndoAction();

                                if (posAdd > 0)
                                {
                                    sender.InsertText(pos, "();");
                                    posAdd = 1;

                                }
                                else
                                    sender.InsertText(pos, "()");

                                pos++;

                                if (!(trigger == '[' || trigger == '"'))
                                {
                                    if (member.Parameters != null)
                                    {
                                        if (member.Parameters.Count == 0)
                                        {
                                            pos += 1 + posAdd;

                                        }
                                        else
                                        {
                                            hasParameters = true;
                                        }

                                    }
                                    else
                                    {
                                        pos += 1 + posAdd;
                                    }

                                }

                                sender.GotoPos(pos);

                                if (hasParameters)
                                {
                                    if (abbreviations != null &&  member.Parameters[0].Value == null && member.Parameters[0].Name != "...rest")
                                    {

                                       // string str = res.Member.ToString();
                                        TextParameters tp = new TextParameters(res.Member);

                                        if (member.Name.EndsWith("EventListener"))
                                        {
                                            if (text.EndsWith("Event"))
                                            {
                                                sender.GotoPos(insertPos+2);
                                                sender.DeleteBack();
                                                sender.DeleteBack();
                                                sender.EndUndoAction();
                                                return;
                                            }
                                            abbreviations.CreateParameters(member.Parameters, true,tp);

                                        }
                                        else
                                            abbreviations.CreateParameters(member.Parameters, false,tp);

                                        sender.EndUndoAction();
                                        return;
                                    }

                                    ASComplete.HandleFunctionCompletion(sender, true);
                                }

                                sender.EndUndoAction();

                    }
                    else if (res.Type != null)
                    {

                        int pos2 = sender.CurrentPos;

                        bool hasParameters = false;
                        MemberModel mlConstructor = null;

                        if (!thereIsNewWord(sender)) { sender.GotoPos(pos2); return; }

                            char lastChar=' ';
                            posAdd = SearchNextNewLineWithoutChar(sender, pos2, "",ref lastChar);

                            if (lastChar == '(') { sender.GotoPos(pos2); return; }

                            if (res.Type.Members.Count > 0)
                            {

                                foreach (MemberModel ml in res.Type.Members)
                                {
                                    if ((ml.Flags & FlagType.Constructor)>0)
                                    {
                                        if (ml.Parameters!=null && ml.Parameters.Count > 0)
                                        {
                                            mlConstructor = ml;
                                            hasParameters = true;
                                        }
                                        break;
                                    }
                                }

                            }

                            if(posAdd>0)
                                sender.InsertText(pos2, "();");
                            else
                            sender.InsertText(pos2, "()");

                            if (trigger == '[' || trigger == '"' || hasParameters)
                              pos2++;
                            else
                            pos2 += 2 + posAdd;

                        sender.GotoPos(pos2);
                        if (hasParameters)
                        {
                            sender.BeginUndoAction();
                            if (abbreviations != null && mlConstructor.Parameters[0].Value == null && mlConstructor.Parameters[0].Name != "...rest")
                            {
                                TextParameters tp = new TextParameters(mlConstructor);

                               abbreviations.CreateParameters(mlConstructor.Parameters, false, tp);
                            }
                            else
                                ASComplete.HandleFunctionCompletion(sender, true);
                            sender.EndUndoAction();
                        }

                    }
        }
예제 #5
0
 public void RemoveBracket(ScintillaControl sci)
 {
     // temporary deactive
        sci.ModEventMask ^= (Int32)ScintillaNet.Enums.ModificationFlags.BeforeDelete;
        sci.CharRight();
        sci.DeleteBack();
        sci.ModEventMask |= (Int32)ScintillaNet.Enums.ModificationFlags.BeforeDelete;
 }
예제 #6
0
        public bool HandleKeys(ScintillaControl sci, Keys key)
        {
            switch (key)
            {
                case Keys.Multiply:
                case Keys.Subtract:
                case Keys.Divide:
                case Keys.Decimal:
                case Keys.Add:
                    return false;

                case Keys.Up:
                    if (!CompletionList.Active) sci.LineUp();
                    return false;
                case Keys.Down:
                    if (!CompletionList.Active) sci.LineDown();
                    return false;
                case Keys.Up | Keys.Shift:
                    sci.LineUpExtend();
                    return false;
                case Keys.Down | Keys.Shift:
                    sci.LineDownExtend();
                    return false;
                case Keys.Left | Keys.Shift:
                    sci.CharLeftExtend();
                    return false;
                case Keys.Right | Keys.Shift:
                    sci.CharRightExtend();
                    return false;

                case Keys.Right:
                    if (!CompletionList.Active)
                    {
                        sci.CharRight();
                        currentPos = sci.CurrentPos;
                        if (sci.LineFromPosition(sci.CurrentPos) != currentLine) Hide();
                        else if (OnUpdateCallTip != null) OnUpdateCallTip(sci, currentPos);
                    }
                    return true;

                case Keys.Left:
                    if (!CompletionList.Active)
                    {
                        sci.CharLeft();
                        currentPos = sci.CurrentPos;
                        if (currentPos < startPos) Hide();
                        else
                        {
                            if (sci.LineFromPosition(sci.CurrentPos) != currentLine) Hide();
                            else if (OnUpdateCallTip != null) OnUpdateCallTip(sci, currentPos);
                        }
                    }
                    return true;

                case Keys.Back:
                    sci.DeleteBack();
                    currentPos = sci.CurrentPos;
					if (currentPos + deltaPos < startPos) Hide();
                    else if (OnUpdateCallTip != null) OnUpdateCallTip(sci, currentPos);
                    return true;

                case Keys.Tab:
                case Keys.Space:
                    return false;

                default:
                    if (!CompletionList.Active) Hide();
                    return false;
            }
        }
예제 #7
0
		static public bool HandleKeys(ScintillaControl sci, Keys key)
		{
			int index;
			switch (key)
			{
				case Keys.Back:
					sci.DeleteBack();
					if (word.Length > 0)
					{
						word = word.Substring(0, word.Length-1);
						currentPos = sci.CurrentPos;
						lastIndex = 0;
						FindWordStartingWith(word);
					}
					else CompletionList.Hide();
					return true;
					
				case Keys.Enter:
				case Keys.Tab:
					ReplaceText(sci);
					return true;
					
				case Keys.Space:
					return false;
					
				case Keys.Up:	
				case Keys.Left:
					// the list was hidden and it should not appear
					if (!completionList.Visible)
					{
						CompletionList.Hide();
						if (key == Keys.Up) sci.LineUp(); 
						else sci.CharLeft();
						return false;
					}
					// go up the list
					else if (completionList.SelectedIndex > 0)
					{
						index = completionList.SelectedIndex-1;
						completionList.SelectedIndex = index;
					}
					// wrap
					else if (wrapList)
					{
						index = completionList.Items.Count-1;
						completionList.SelectedIndex = index;
					}
					break;
					
				case Keys.Down:	
				case Keys.Right:
					// the list was hidden and it should not appear
					if (!completionList.Visible)
					{
						CompletionList.Hide();
						if (key == Keys.Down) sci.LineDown(); 
						else sci.CharRight();
						return false;
					}
					// go down the list
					else if (completionList.SelectedIndex < completionList.Items.Count-1)
					{
						index = completionList.SelectedIndex+1;
						completionList.SelectedIndex = index;
					}
					// wrap
					else if (wrapList)
					{
						index = 0;
						completionList.SelectedIndex = index;
					}
					break;
					
				case Keys.PageUp:
					// the list was hidden and it should not appear
					if (!completionList.Visible)
					{
						CompletionList.Hide();
						sci.PageUp();
						return false;
					}
					// go up the list
					else if (completionList.SelectedIndex > 0)
					{
						index = completionList.SelectedIndex-completionList.Height/completionList.ItemHeight;
						if (index < 0) index = 0;
						completionList.SelectedIndex = index;
					}
					break;
					
				case Keys.PageDown:
					// the list was hidden and it should not appear
					if (!completionList.Visible)
					{
						CompletionList.Hide();
						sci.PageDown();
						return false;
					}
					// go down the list
					else if (completionList.SelectedIndex < completionList.Items.Count-1)
					{
						index = completionList.SelectedIndex+completionList.Height/completionList.ItemHeight;
						if (index > completionList.Items.Count-1) index = completionList.Items.Count-1;
						completionList.SelectedIndex = index;
					}
					break;
				
				case (Keys.Control | Keys.Space):
					break;
					
				default:
					CompletionList.Hide();
					return false;
			}
			return true;
		}
예제 #8
0
		static public bool HandleKeys(ScintillaControl sci, Keys key)
		{
			switch (key)
			{
				case Keys.Multiply:
				case Keys.Subtract:
				case Keys.Divide:
				case Keys.Decimal:
				case Keys.Add:
					return false;
					
				case Keys.Right:
					sci.CharRight();
					currentPos = sci.CurrentPos;
					if (sci.LineFromPosition(sci.CurrentPos) != currentLine) Hide();
					else if (OnUpdateCallTip != null) OnUpdateCallTip(sci, currentPos);
					return true;
					
				case Keys.Left:
					sci.CharLeft();
					currentPos = sci.CurrentPos;
					if (currentPos < startPos) Hide();
					else 
					{
						if (sci.LineFromPosition(sci.CurrentPos) != currentLine) Hide();
						else if (OnUpdateCallTip != null) OnUpdateCallTip(sci, currentPos);
					}
					return true;
				
				case Keys.Back:
					sci.DeleteBack();
					currentPos = sci.CurrentPos;
					if (currentPos < startPos) Hide();
					else if (OnUpdateCallTip != null) OnUpdateCallTip(sci, currentPos);
					return true;
				
				case Keys.Tab:
				case Keys.Space:
					return false;
				
				default:
					InfoTip.Hide();
					return false;
			}			
		}