public void AddRegisterDirective(WebFormsPageInfo.RegisterDirective directive, TextEditor editor, bool preserveCaretPosition) { if (doc == null) { return; } var node = GetRegisterInsertionPointNode(); if (node == null) { return; } doc.Info.RegisteredTags.Add(directive); var line = Math.Max(node.Region.EndLine, node.Region.BeginLine); var pos = editor.LocationToOffset(line, editor.GetLine(line - 1).Length); if (pos < 0) { return; } using (var undo = editor.OpenUndoGroup()) { var oldCaret = editor.CaretOffset; var text = editor.FormatString(pos, editor.EolMarker + directive); var inserted = text.Length; editor.InsertText(pos, text); if (preserveCaretPosition) { editor.CaretOffset = (pos < oldCaret)? oldCaret + inserted : oldCaret; } } }
/// <summary> /// Gets a tag prefix, also returning the directive that would have to be added if necessary. /// </summary> public string GetTagPrefixWithNewDirective(INamedTypeSymbol control, string assemblyName, string desiredPrefix, out WebFormsPageInfo.RegisterDirective directiveNeededToAdd) { directiveNeededToAdd = null; string existingPrefix = GetTagPrefix(control); if (existingPrefix != null) { return(existingPrefix); } //TODO: detect control name conflicts string prefix = desiredPrefix; if (desiredPrefix == null) { prefix = GetPrefix(control); } var an = SystemAssemblyService.ParseAssemblyName(assemblyName); directiveNeededToAdd = new WebFormsPageInfo.AssemblyRegisterDirective(prefix, control.ContainingNamespace.GetFullName(), an.Name); return(prefix); }