void ReplaceRow(KeyValuePair<string, bool?> control, ref Wd.Range range)
        {
            var bookmark = "EditDetails_" + control.Key.Replace(' ', '_');
            var controls = Doc.ContentControls(x => x.Title == control.Key);

            if (control.Value == null)
            {
                if (ControlsFound(controls))
                    range.Rows[1].Delete();
                range.InsertFile_Safe1(Doc.Template().FullName, bookmark);
            }
            else if (control.Value == true)
                if (!(ControlsFound(controls)))
                    range.InsertFile_Safe1(Doc.Template().FullName, bookmark);

            if (range.Information[Wd.WdInformation.wdWithInTable])
                range = range.Rows[1].Range.CollapseEnd();
        }
        void ReplaceControl(KeyValuePair<string, bool?> control, ref Wd.Range range)
        {
            var bookmark = "EditDetails_" + control.Key.Replace(' ', '_');
            var controls = Doc.ContentControls(x => x.Title == control.Key);

            if (control.Value == null)
            {
                if (ControlsFound(controls))
                    controls.DeleteRowsOrParagraphs();
                range = range.InsertFile_Safe1(Doc.Template().FullName, bookmark).CollapseStart();
            }
            else if (control.Value == true)
            {
                if (ControlsFound(controls))
                    range = controls[0].CollapsePastRowOrParagraph(Wd.WdCollapseDirection.wdCollapseStart);
                else
                    range = range.InsertFile_Safe1(Doc.Template().FullName, bookmark).CollapseStart();
            }
            else if (control.Value == false && controls.Count != 0)
                range = controls[0].CollapsePastRowOrParagraph(Wd.WdCollapseDirection.wdCollapseStart);

            Doc.Bookmarks.DeleteIfExists(bookmark);
        }
        void ReplaceControl(ControlFragment fragment, ref Wd.Range range)
        {
            var bookmark = "EditDetails_" + fragment.Title.Replace(' ', '_');
            var controls = Doc.ContentControls(x => x.Title == fragment.Title ||
                (fragment.AdditionalControlsTitles != null && Array.IndexOf(fragment.AdditionalControlsTitles, x.Title) >= 0));

            if (fragment.Replace == null)
            {
                if (ControlsFound(controls))
                    controls.DelteRowOrParagraph();
                range = range.InsertFile_Safe1(Doc.Template().FullName, bookmark).CollapseEnd();
            }
            else if (fragment.Replace == true)
            {
                if (ControlsFound(controls))
                    range = controls[0].CollapsePastRowOrParagraph(Wd.WdCollapseDirection.wdCollapseEnd);
                else
                    range = range.InsertFile_Safe1(Doc.Template().FullName, bookmark).CollapseEnd();
            }
            else if (fragment.Replace == false && controls.Count != 0)
                range = controls[0].CollapsePastRowOrParagraph(Wd.WdCollapseDirection.wdCollapseEnd);

            Doc.Bookmarks.DeleteIfExists(bookmark);
        }
        public static void InsertOrRemove(this string[] controlTags, ref Wd.Range range, bool KeepControls, Wd.WdCollapseDirection CollapseDirection = Wd.WdCollapseDirection.wdCollapseEnd)
        {
            Wd.Document doc = range.Document;
            var bookmark = "EditDetails_" + controlTags.First().Replace(' ', '_');

            if (!doc.ContentControls().AllExist(controlTags))
            {
                doc.ContentControls(x => StringArray.Contains(controlTags, x.Tag)).DelteRowOrParagraph();
                if (KeepControls)
                {
                    range = range.InsertFile_Safe1(doc.Template().FullName, bookmark);
                    range.Collapse(CollapseDirection);
                }
            }

            if (KeepControls)
            {
                range = doc.ContentControls(x => x.Tag == controlTags.First()).First().CollapsePastRowOrParagraph(CollapseDirection);
                doc.ContentControls(x => StringArray.Contains(controlTags, x.Tag) && x.ShowingPlaceholderText).DeleteWithTrailingWhiteSpaceOrParagraphIfEmpty();
            }
            else
                doc.ContentControls(x => StringArray.Contains(controlTags, x.Tag)).DelteRowOrParagraph();

            range.Document.Bookmarks.DeleteIfExists(bookmark);
        }
 public static Wd.Range InsertOrRemove(this IList<Wd.ContentControl> controls, ref Wd.Range range, bool KeepControl, string ControlTag, Wd.WdCollapseDirection CollapseDirection = Wd.WdCollapseDirection.wdCollapseEnd)
 {
     var bookmark = "EditDetails_" + ControlTag.Replace(' ', '_');
     if (controls.Count == 0 && KeepControl)
     {
         range = range.InsertFile_Safe1(range.Document.Template().FullName, bookmark);
         range.Collapse(CollapseDirection);
     }
     foreach (Wd.ContentControl control in controls)
         if (KeepControl)
             range = control.CollapsePastRowOrParagraph(CollapseDirection);
         else
             control.DelteRowOrParagraphOrRepeater();
     range.Document.Bookmarks.DeleteIfExists(bookmark);
     return range;
 }