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