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; }
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); } }
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); }
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(); } } }
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; }
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; } }
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; }
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; } }