Exemple #1
0
        // Search and replace procedure name in script text
        internal static string RenameProcedure(Procedure proc, IDocument document, TabInfo cTab, List <TabInfo> tabs = null)
        {
            string newName = proc.name;

            // form ini
            if (!ProcForm.CreateRenameForm(ref newName, "Procedure") || newName == proc.name)
            {
                return(null);
            }

            if (cTab.parseInfo.CheckExistsName(newName, NameType.Proc))
            {
                MessageBox.Show("The procedure/variable or declared macro with this name already exists.", "Unable to rename");
                return(null);
            }

            bool extFile = false;

            if (tabs != null && proc.filename != cTab.filename.ToLowerInvariant())   // не совсем понятно, при каких условиях это верно
            {
                switch (MessageBox.Show("Also renaming the procedure in a file: " + proc.filename.ToUpper() + " ?", "Procedure rename", MessageBoxButtons.YesNoCancel))
                {
                case DialogResult.Cancel:
                    return(null);

                case DialogResult.Yes:
                    extFile = true;
                    break;
                }
            }
            int differ = newName.Length - proc.name.Length;

            Regex s_regex;

            if (proc.References().Length == 0)
            {
                s_regex = new Regex(@"(\bprocedure\s|\bcall\s|[=,(]\s*)\s*" + proc.Name + @"\b", // осуществить поиск всех процедур совпадающих по имени
                                    RegexOptions.Multiline | RegexOptions.IgnoreCase);
                Utilities.ReplaceIDocumentText(s_regex, document, newName, differ);
            }
            else
            {
                s_regex = new Regex(@"\b" + proc.Name + @"\b", RegexOptions.Multiline | RegexOptions.IgnoreCase);
                Utilities.ReplaceByReferences(s_regex, document, proc, newName, differ); // rename by reference
            }

            // rename in other file/tab
            if (extFile)
            {
                string text = File.ReadAllText(proc.fstart);
                Utilities.ReplaceSpecialText(s_regex, ref text, newName, differ);
                File.WriteAllText(proc.fstart, text);

                TabInfo tab = TextEditor.CheckTabs(tabs, proc.fstart);
                if (tab != null)
                {
                    Utilities.ReplaceIDocumentText(s_regex, tab.textEditor.Document, newName, differ);
                    tab.FileTime = File.GetLastWriteTime(proc.fstart);
                }
            }
            TextEditor.currentHighlightProc = null;
            return(newName);
        }
Exemple #2
0
        internal static void Rename(IParserInfo item, IDocument document, TabInfo cTab, List <TabInfo> tabs)
        {
            string newName;

            switch ((NameType)item.Type())
            {
            case NameType.LVar:     // local procedure variable
                Variable lvar = (Variable)item;
                newName = lvar.name;
                if (!ProcForm.CreateRenameForm(ref newName, "Local Variable") || newName == lvar.name)
                {
                    return;
                }
                if (cTab.parseInfo.CheckExistsName(newName, NameType.LVar, lvar.fdeclared, lvar.d.declared))
                {
                    MessageBox.Show("The local variable this name already exists.", "Unable to rename");
                    return;
                }
                RenameVariable(lvar, newName, RegexOptions.IgnoreCase, document);     // rename only via references
                break;

            case NameType.GVar:     // script variable
                Variable gvar = (Variable)item;
                newName = gvar.name;
                if (!ProcForm.CreateRenameForm(ref newName, "Script Variable") || newName == gvar.name)
                {
                    return;
                }
                if (cTab.parseInfo.CheckExistsName(newName, NameType.GVar))
                {
                    MessageBox.Show("The variable/procedure or declared macro this name already exists.", "Unable to rename");
                    return;
                }
                RenameVariable(gvar, newName, RegexOptions.IgnoreCase, document);     // rename only via references
                break;

            case NameType.Proc:
                RenameProcedure((Procedure)item, document, cTab, tabs);
                return;

            case NameType.Macro:
                Macro macros = (Macro)item;

                bool isGlobal = ProgramInfo.macrosGlobal.ContainsKey(macros.token);
                newName = macros.token;

                if (!ProcForm.CreateRenameForm(ref newName, (isGlobal) ? "Global Macro" : "Local Macro") || newName == macros.token)
                {
                    return;
                }

                if (cTab.parseInfo.CheckExistsName(newName, NameType.Macro))
                {
                    MessageBox.Show("The variable/procedure or declared macro this name already exists.", "Unable to rename");
                    return;
                }
                int diff = newName.Length - macros.token.Length;

                // Для глобальных требуется переименовать все макросы во всех открытых вкладках и во всех файлах проекта/мода
                if (isGlobal)
                {
                    RenameGlobalMacros(macros, newName, cTab, tabs, diff);
                    // обновить макросы
                    GetMacros.GetGlobalMacros(Settings.pathHeadersFiles);
                    return;
                }
                RenameMacros(macros.token, newName, RegexOptions.None, document);
                if (diff != 0)
                {
                    DefineMacroAdjustSpaces(macros, document, diff);
                }
                break;
            }
        }