internal static string ContextualGenerator(ScintillaControl sci, string fileName, GeneratorJobType job, bool hasGenerator) { SetSrc(sci, ReadAllText(fileName)); SetCurrentFile(fileName); sci.Colourise(0, -1); var options = new List <ICompletionListItem>(); ASGenerator.ContextualGenerator(sci, options); if (hasGenerator) { Assert.IsNotEmpty(options); var item = options.Find(it => ((ASCompletion.Completion.GeneratorItem)it).job == job); Assert.IsNotNull(item); var value = item.Value; } else if (job == (GeneratorJobType)(-1)) { Assert.IsEmpty(options); return(null); } else if (options.Count > 0) { Assert.IsFalse(options.Any(it => ((ASCompletion.Completion.GeneratorItem)it).job == job)); return(null); } return(sci.Text); }
/// <summary> /// Handles the incoming events /// </summary> public void HandleEvent(Object sender, NotifyEvent e, HandlingPriority prority) { ITabbedDocument document = PluginBase.MainForm.CurrentDocument; if (document == null || !document.IsEditable) { return; } switch (e.Type) { case EventType.Keys: { Keys keys = (e as KeyEvent).Value; if (this.IsSupported(document) && keys == (Keys.Control | Keys.Space)) { if (completion != null) { completion.OnComplete(document.SciControl, document.SciControl.CurrentPos); e.Handled = true; } } break; } case EventType.FileSwitch: case EventType.SyntaxChange: case EventType.ApplySettings: { if (document.IsEditable && this.IsSupported(document)) { string ext = Path.GetExtension(document.FileName).ToLower(); features = enabledLanguages.ContainsKey(ext) ? enabledLanguages[ext] : null; if (completion == null) { completion = new Completion(config, settingObject); } completion.OnFileChanged(features); if (features != null && features.Syntax != null) { ScintillaControl sci = document.SciControl; sci.SetProperty(features.Syntax, features != null ? "1" : "0"); sci.Colourise(0, -1); } } break; } case EventType.FileSave: { if (document != null && document.IsEditable && this.IsSupported(document)) { updateFile = document.FileName; updateFeatures = features; updater.Start(); } break; } } }
static string Common(ScintillaControl sci, string sourceText, int ch) { sci.Text = sourceText; sci.Colourise(0, -1); SnippetHelper.PostProcessSnippets(sci, 0); sci.OnSmartIndent(sci, ch); return(sci.Text); }
internal static string Common(ScintillaControl sci, string sourceText, string fileName) { ASContext.Context.CurrentModel.FileName = fileName; SetSrc(sci, sourceText); sci.Colourise(0, -1); // Needed for preprocessor directives... CommandFactoryProvider.GetFactory(sci) .CreateOrganizeImportsCommand() .Execute(); return(sci.Text); }
/// <summary> /// Changes the current document's language /// </summary> public static void ChangeSyntax(String lang, ScintillaControl sci) { sci.StyleClearAll(); sci.StyleResetDefault(); sci.ClearDocumentStyle(); sci.ConfigurationLanguage = lang; sci.Colourise(0, -1); sci.Refresh(); ButtonManager.UpdateFlaggedButtons(); Globals.MainForm.OnSyntaxChange(lang); }
private void OnUpdateCallTip(ScintillaControl sci, int position) { if (ASComplete.HasCalltip()) { int pos = sci.CurrentPos - 1; char c = (char)sci.CharAt(pos); if ((c == ',' || c == '(') && sci.BaseStyleAt(pos) == 0) { sci.Colourise(0, -1); } ASComplete.HandleFunctionCompletion(sci, false, true); } }
internal static string Common(ScintillaControl sci, string sourceText, string fileName) { sci.Text = sourceText; sci.Colourise(0, -1); // Needed for preprocessor directives... SnippetHelper.PostProcessSnippets(sci, 0); var currentModel = ASContext.Context.CurrentModel; new ASFileParser().ParseSrc(currentModel, sci.Text); CommandFactoryProvider.GetFactory(sci) .CreateOrganizeImportsCommand() .Execute(); return(sci.Text); }
public static void ApplySciSettings(ScintillaControl sci, Boolean hardUpdate) { try { sci.CaretPeriod = Globals.Settings.CaretPeriod; sci.CaretWidth = Globals.Settings.CaretWidth; sci.EOLMode = LineEndDetector.DetectNewLineMarker(sci.Text, (Int32)Globals.Settings.EOLMode); sci.IsBraceMatching = Globals.Settings.BraceMatchingEnabled; sci.UseHighlightGuides = !Globals.Settings.HighlightGuide; sci.Indent = Globals.Settings.IndentSize; sci.SmartIndentType = Globals.Settings.SmartIndentType; sci.IsBackSpaceUnIndents = Globals.Settings.BackSpaceUnIndents; sci.IsCaretLineVisible = Globals.Settings.CaretLineVisible; sci.IsIndentationGuides = Globals.Settings.ViewIndentationGuides; sci.IndentView = Globals.Settings.IndentView; sci.IsTabIndents = Globals.Settings.TabIndents; sci.IsUseTabs = Globals.Settings.UseTabs; sci.IsViewEOL = Globals.Settings.ViewEOL; sci.ScrollWidth = Globals.Settings.ScrollWidth; sci.TabWidth = Globals.Settings.TabWidth; sci.ViewWS = Convert.ToInt32(Globals.Settings.ViewWhitespace); sci.WrapMode = Convert.ToInt32(Globals.Settings.WrapText); sci.SetProperty("fold", Convert.ToInt32(Globals.Settings.UseFolding).ToString()); sci.SetProperty("fold.comment", Convert.ToInt32(Globals.Settings.FoldComment).ToString()); sci.SetProperty("fold.compact", Convert.ToInt32(Globals.Settings.FoldCompact).ToString()); sci.SetProperty("fold.preprocessor", Convert.ToInt32(Globals.Settings.FoldPreprocessor).ToString()); sci.SetProperty("fold.at.else", Convert.ToInt32(Globals.Settings.FoldAtElse).ToString()); sci.SetProperty("fold.html", Convert.ToInt32(Globals.Settings.FoldHtml).ToString()); sci.SetProperty("lexer.cpp.track.preprocessor", "0"); sci.SetVirtualSpaceOptions((Int32)Globals.Settings.VirtualSpaceMode); sci.SetFoldFlags((Int32)Globals.Settings.FoldFlags); /** * Set correct line number margin width */ Boolean viewLineNumbers = Globals.Settings.ViewLineNumbers; if (viewLineNumbers) { sci.SetMarginWidthN(1, ScaleHelper.Scale(31)); } else { sci.SetMarginWidthN(1, 0); } /** * Set correct bookmark margin width */ Boolean viewBookmarks = Globals.Settings.ViewBookmarks; if (viewBookmarks) { sci.SetMarginWidthN(0, ScaleHelper.Scale(14)); } else { sci.SetMarginWidthN(0, 0); } /** * Set correct folding margin width */ Boolean useFolding = Globals.Settings.UseFolding; if (!useFolding && !viewBookmarks && !viewLineNumbers) { sci.SetMarginWidthN(2, 0); } else if (useFolding) { sci.SetMarginWidthN(2, ScaleHelper.Scale(15)); } else { sci.SetMarginWidthN(2, ScaleHelper.Scale(2)); } /** * Adjust the print margin */ sci.EdgeColumn = Globals.Settings.PrintMarginColumn; if (sci.EdgeColumn > 0) { sci.EdgeMode = 1; } else { sci.EdgeMode = 0; } /** * Add missing ignored keys */ foreach (Keys keys in ShortcutManager.AllShortcuts) { if (keys != Keys.None && !sci.ContainsIgnoredKeys(keys)) { sci.AddIgnoredKeys(keys); } } if (hardUpdate) { String lang = sci.ConfigurationLanguage; sci.ConfigurationLanguage = lang; } sci.Colourise(0, -1); sci.Refresh(); } catch (Exception ex) { ErrorManager.ShowError(ex); } }
public static void ApplySciSettings(ScintillaControl sci, Boolean hardUpdate) { try { ISettings settings = PluginBase.Settings; sci.CaretPeriod = settings.CaretPeriod; sci.CaretWidth = settings.CaretWidth; sci.EOLMode = LineEndDetector.DetectNewLineMarker(sci.Text, (Int32)settings.EOLMode); sci.IsBraceMatching = settings.BraceMatchingEnabled; sci.UseHighlightGuides = !settings.HighlightGuide; sci.Indent = settings.IndentSize; sci.SmartIndentType = settings.SmartIndentType; sci.IsBackSpaceUnIndents = settings.BackSpaceUnIndents; sci.IsCaretLineVisible = settings.CaretLineVisible; sci.IsIndentationGuides = settings.ViewIndentationGuides; sci.IndentView = settings.IndentView; sci.IsTabIndents = settings.TabIndents; sci.IsUseTabs = settings.UseTabs; sci.IsViewEOL = settings.ViewEOL; sci.ScrollWidth = Math.Max(settings.ScrollWidth, 1); sci.ScrollWidthTracking = settings.ScrollWidth == 0 || settings.ScrollWidth == 3000; sci.TabWidth = settings.TabWidth; sci.ViewWS = Convert.ToInt32(settings.ViewWhitespace); sci.WrapMode = Convert.ToInt32(settings.WrapText); sci.SetProperty("fold", Convert.ToInt32(settings.UseFolding).ToString()); sci.SetProperty("fold.comment", Convert.ToInt32(settings.FoldComment).ToString()); sci.SetProperty("fold.compact", Convert.ToInt32(settings.FoldCompact).ToString()); sci.SetProperty("fold.preprocessor", Convert.ToInt32(settings.FoldPreprocessor).ToString()); sci.SetProperty("fold.at.else", Convert.ToInt32(settings.FoldAtElse).ToString()); sci.SetProperty("fold.html", Convert.ToInt32(settings.FoldHtml).ToString()); sci.SetProperty("lexer.cpp.track.preprocessor", "0"); sci.SetVirtualSpaceOptions((Int32)settings.VirtualSpaceMode); sci.SetFoldFlags((Int32)settings.FoldFlags); /** * Set if themes should colorize the first margin */ Language language = SciConfig.GetLanguage(sci.ConfigurationLanguage); if (language != null && language.editorstyle != null) { Boolean colorizeMarkerBack = language.editorstyle.ColorizeMarkerBack; if (colorizeMarkerBack) { sci.SetMarginTypeN(BookmarksMargin, (Int32)MarginType.Fore); } else { sci.SetMarginTypeN(BookmarksMargin, (Int32)MarginType.Symbol); } } /** * Set correct line number margin width */ Boolean viewLineNumbers = settings.ViewLineNumbers; if (viewLineNumbers) { sci.SetMarginWidthN(LineMargin, ScaleArea(sci, 36)); } else { sci.SetMarginWidthN(LineMargin, 0); } /** * Set correct bookmark margin width */ Boolean viewBookmarks = settings.ViewBookmarks; if (viewBookmarks) { sci.SetMarginWidthN(BookmarksMargin, ScaleArea(sci, 14)); } else { sci.SetMarginWidthN(BookmarksMargin, 0); } /** * Set correct folding margin width */ Boolean useFolding = settings.UseFolding; if (!useFolding && !viewBookmarks && !viewLineNumbers) { sci.SetMarginWidthN(FoldingMargin, 0); } else if (useFolding) { sci.SetMarginWidthN(FoldingMargin, ScaleArea(sci, 15)); } else { sci.SetMarginWidthN(FoldingMargin, ScaleArea(sci, 2)); } sci.SetMarginWidthN(1, 0); //Inheritance Margin (see ASCompletion.PluginMain.Margin) /** * Adjust caret policy based on settings */ if (settings.KeepCaretCentered) { sci.SetXCaretPolicy((Int32)(CaretPolicy.Jumps | CaretPolicy.Even), 30); sci.SetYCaretPolicy((Int32)(CaretPolicy.Jumps | CaretPolicy.Even), 2); } else // Match edge... { sci.SetXCaretPolicy((Int32)CaretPolicy.Even, 0); sci.SetYCaretPolicy((Int32)CaretPolicy.Even, 0); } sci.SetVisiblePolicy((Int32)(CaretPolicy.Strict | CaretPolicy.Even), 0); /** * Set scroll range (if false, over-scroll mode is enabled) */ sci.EndAtLastLine = settings.EndAtLastLine ? 1 : 0; /** * Adjust the print margin */ sci.EdgeColumn = settings.PrintMarginColumn; if (sci.EdgeColumn > 0) { sci.EdgeMode = 1; } else { sci.EdgeMode = 0; } /** * Add missing ignored keys */ foreach (Keys keys in ShortcutManager.AllShortcuts) { if (keys != Keys.None && !sci.ContainsIgnoredKeys(keys)) { sci.AddIgnoredKeys(keys); } } if (hardUpdate) { String lang = sci.ConfigurationLanguage; sci.ConfigurationLanguage = lang; } sci.Colourise(0, -1); sci.Refresh(); } catch (Exception ex) { ErrorManager.ShowError(ex); } }
public void Execute() { Sci = PluginBase.MainForm.CurrentDocument.SciControl; Sci.BeginUndoAction(); try { IASContext context = ASContext.Context; Int32 pos = Sci.CurrentPos; string expression = Sci.SelText.Trim(new char[] { '=', ' ', '\t', '\n', '\r', ';', '.' }); expression = expression.TrimEnd(new char[] { '(', '[', '{', '<' }); expression = expression.TrimStart(new char[] { ')', ']', '}', '>' }); cFile = ASContext.Context.CurrentModel; ASFileParser parser = new ASFileParser(); parser.ParseSrc(cFile, Sci.Text); MemberModel current = cFile.Context.CurrentMember; string characterClass = ScintillaControl.Configuration.GetLanguage(Sci.ConfigurationLanguage).characterclass.Characters; int funcBodyStart = ASGenerator.GetBodyStart(current.LineFrom, current.LineTo, Sci); Sci.SetSel(funcBodyStart, Sci.LineEndPosition(current.LineTo)); string currentMethodBody = Sci.SelText; bool isExprInSingleQuotes = (expression.StartsWith("'") && expression.EndsWith("'")); bool isExprInDoubleQuotes = (expression.StartsWith("\"") && expression.EndsWith("\"")); int stylemask = (1 << Sci.StyleBits) - 1; int lastPos = -1; char prevOrNextChar; Sci.Colourise(0, -1); while (true) { lastPos = currentMethodBody.IndexOf(expression, lastPos + 1); if (lastPos > -1) { if (lastPos > 0) { prevOrNextChar = currentMethodBody[lastPos - 1]; if (characterClass.IndexOf(prevOrNextChar) > -1) { continue; } } if (lastPos + expression.Length < currentMethodBody.Length) { prevOrNextChar = currentMethodBody[lastPos + expression.Length]; if (characterClass.IndexOf(prevOrNextChar) > -1) { continue; } } int style = Sci.StyleAt(funcBodyStart + lastPos) & stylemask; if (ASComplete.IsCommentStyle(style)) { continue; } else if ((isExprInDoubleQuotes && currentMethodBody[lastPos] == '"' && currentMethodBody[lastPos + expression.Length - 1] == '"') || (isExprInSingleQuotes && currentMethodBody[lastPos] == '\'' && currentMethodBody[lastPos + expression.Length - 1] == '\'')) { } else if (!ASComplete.IsTextStyle(style)) { continue; } Sci.SetSel(funcBodyStart + lastPos, funcBodyStart + lastPos + expression.Length); Sci.ReplaceSel(NewName); currentMethodBody = currentMethodBody.Substring(0, lastPos) + NewName + currentMethodBody.Substring(lastPos + expression.Length); lastPos += NewName.Length; } else { break; } } Sci.CurrentPos = funcBodyStart; Sci.SetSel(Sci.CurrentPos, Sci.CurrentPos); string snippet = "var " + NewName + ":$(EntryPoint) = " + expression + ";\n$(Boundary)"; SnippetHelper.InsertSnippetText(Sci, Sci.CurrentPos, snippet); } finally { Sci.EndUndoAction(); } }