コード例 #1
0
        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);
        }
コード例 #2
0
        /// <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;
            }
            }
        }
コード例 #3
0
 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);
 }
コード例 #4
0
 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);
 }
コード例 #5
0
 /// <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);
 }
コード例 #6
0
ファイル: PluginMain.cs プロジェクト: ouro-ltd/flashdevelop
 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);
     }
 }
コード例 #7
0
            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);
            }
コード例 #8
0
        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);
            }
        }
コード例 #9
0
        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);
            }
        }
コード例 #10
0
        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();
            }
        }