public void RemovesEditableRange() { //ExStart //ExFor:EditableRange.Remove //ExSummary:Shows how to remove an editable range from a document. Document doc = new Document(MyDir + "Document.docx"); DocumentBuilder builder = new DocumentBuilder(doc); // Create an EditableRange so we can remove it. Does not have to be well-formed EditableRangeStart edRange1Start = builder.StartEditableRange(); EditableRange editableRange1 = edRange1Start.EditableRange; builder.Writeln("Paragraph inside editable range"); EditableRangeEnd edRange1End = builder.EndEditableRange(); Assert.AreEqual(1, doc.GetChildNodes(NodeType.EditableRangeStart, true).Count); //ExSkip Assert.AreEqual(1, doc.GetChildNodes(NodeType.EditableRangeEnd, true).Count); //ExSkip Assert.AreEqual(0, edRange1Start.EditableRange.Id); //ExSkip Assert.AreEqual("", edRange1Start.EditableRange.SingleUser); //ExSkip // Remove the range that was just made editableRange1.Remove(); //ExEnd Assert.AreEqual(0, doc.GetChildNodes(NodeType.EditableRangeStart, true).Count); Assert.AreEqual(0, doc.GetChildNodes(NodeType.EditableRangeEnd, true).Count); }
public void UnrestrictedEditableRegions() { //ExStart:UnrestrictedEditableRegions // Upload a document and make it as read-only. Document doc = new Document(MyDir + "Document.docx"); DocumentBuilder builder = new DocumentBuilder(doc); doc.Protect(ProtectionType.ReadOnly, "MyPassword"); builder.Writeln("Hello world! Since we have set the document's protection level to read-only, " + "we cannot edit this paragraph without the password."); // Start an editable range. EditableRangeStart edRangeStart = builder.StartEditableRange(); // An EditableRange object is created for the EditableRangeStart that we just made. EditableRange editableRange = edRangeStart.EditableRange; // Put something inside the editable range. builder.Writeln("Paragraph inside first editable range"); // An editable range is well-formed if it has a start and an end. EditableRangeEnd edRangeEnd = builder.EndEditableRange(); builder.Writeln("This paragraph is outside any editable ranges, and cannot be edited."); doc.Save(ArtifactsDir + "DocumentProtection.UnrestrictedEditableRegions.docx"); //ExEnd:UnrestrictedEditableRegions }
/// <summary> /// Called when the visiting of a EditableRange node is ended. /// </summary> public override VisitorAction VisitEditableRangeEnd(EditableRangeEnd editableRangeEnd) { mDocTraversalDepth--; IndentAndAppendLine("[EditableRange end]"); mVisitorIsInsideEditableRange = false; return(VisitorAction.Continue); }
/// <summary> /// Called when an EditableRangeEnd node is encountered in the document. /// </summary> public override VisitorAction VisitEditableRangeEnd(EditableRangeEnd editableRangeEnd) { mBuilder.AppendLine(" -- End of editable range --\n"); mInsideEditableRange = false; return(VisitorAction.Continue); }
/// <summary> /// Called when an EditableRangeEnd node is encountered in the document. /// </summary> public override VisitorAction VisitEditableRangeEnd(EditableRangeEnd editableRangeEnd) { mBuilder.AppendLine(" -- End of editable range -- "); mInsideEditableRange = false; // Let the visitor continue visiting other nodes return VisitorAction.Continue; }
public void RemovesEditableRange() { //ExStart //ExFor:EditableRange.Remove //ExSummary:Shows how to remove an editable range from a document. Document doc = new Document(MyDir + "Document.doc"); DocumentBuilder builder = new DocumentBuilder(doc); // Create an EditableRange so we can remove it. Does not have to be well-formed. EditableRangeStart edRange1Start = builder.StartEditableRange(); EditableRange editableRange1 = edRange1Start.EditableRange; builder.Writeln("Paragraph inside editable range"); EditableRangeEnd edRange1End = builder.EndEditableRange(); // Remove the range that was just made. editableRange1.Remove(); //ExEnd }
public void CreateEditableRanges() { //ExStart //ExFor:DocumentBuilder.StartEditableRange //ExFor:DocumentBuilder.EndEditableRange //ExFor:DocumentBuilder.EndEditableRange(EditableRangeStart) //ExSummary:Shows how to start and end an editable range. Document doc = new Document(MyDir + "Document.doc"); DocumentBuilder builder = new DocumentBuilder(doc); // Start an editable range. EditableRangeStart edRange1Start = builder.StartEditableRange(); // An EditableRange object is created for the EditableRangeStart that we just made. EditableRange editableRange1 = edRange1Start.EditableRange; // Put something inside the editable range. builder.Writeln("Paragraph inside first editable range"); // An editable range is well-formed if it has a start and an end. // Multiple editable ranges can be nested and overlapping. EditableRangeEnd edRange1End = builder.EndEditableRange(); // Both the start and end automatically belong to editableRange1. Console.WriteLine(editableRange1.EditableRangeStart.Equals(edRange1Start)); // True Console.WriteLine(editableRange1.EditableRangeEnd.Equals(edRange1End)); // True // Explicitly state which EditableRangeStart a new EditableRangeEnd should be paired with. EditableRangeStart edRange2Start = builder.StartEditableRange(); builder.Writeln("Paragraph inside second editable range"); EditableRange editableRange2 = edRange2Start.EditableRange; EditableRangeEnd edRange2End = builder.EndEditableRange(edRange2Start); // Both the start and end automatically belong to editableRange2. Console.WriteLine(editableRange2.EditableRangeStart.Equals(edRange2Start)); // True Console.WriteLine(editableRange2.EditableRangeEnd.Equals(edRange2End)); // True //ExEnd }
[Test] //ExSkip public void CreateEditableRanges() { Document doc = new Document(MyDir + "Document.doc"); DocumentBuilder builder = new DocumentBuilder(doc); // Start an editable range EditableRangeStart edRange1Start = builder.StartEditableRange(); // An EditableRange object is created for the EditableRangeStart that we just made EditableRange editableRange1 = edRange1Start.EditableRange; // Put something inside the editable range builder.Writeln("Paragraph inside first editable range"); // An editable range is well-formed if it has a start and an end // Multiple editable ranges can be nested and overlapping EditableRangeEnd edRange1End = builder.EndEditableRange(); // Explicitly state which EditableRangeStart a new EditableRangeEnd should be paired with EditableRangeStart edRange2Start = builder.StartEditableRange(); builder.Writeln("Paragraph inside second editable range"); EditableRange editableRange2 = edRange2Start.EditableRange; EditableRangeEnd edRange2End = builder.EndEditableRange(edRange2Start); // Editable range starts and ends have their own respective node types Assert.AreEqual(NodeType.EditableRangeStart, edRange1Start.NodeType); Assert.AreEqual(NodeType.EditableRangeEnd, edRange1End.NodeType); // Editable range IDs are unique and set automatically Assert.AreEqual(0, editableRange1.Id); Assert.AreEqual(1, editableRange2.Id); // Editable range starts and ends always belong to a range Assert.AreEqual(edRange1Start, editableRange1.EditableRangeStart); Assert.AreEqual(edRange1End, editableRange1.EditableRangeEnd); // They also inherit the ID of the entire editable range that they belong to Assert.AreEqual(editableRange1.Id, edRange1Start.Id); Assert.AreEqual(editableRange1.Id, edRange1End.Id); Assert.AreEqual(editableRange2.Id, edRange2Start.EditableRange.Id); Assert.AreEqual(editableRange2.Id, edRange2End.EditableRangeStart.EditableRange.Id); // If the editable range was found in a document, it will probably have something in the single user property // But if we make one programmatically, the property is null by default Assert.AreEqual(null, editableRange1.SingleUser); // We have to set it ourselves if we want the ranges to belong to somebody editableRange1.SingleUser = "******"; editableRange2.SingleUser = "******"; // Initialize a custom visitor for editable ranges that will print their contents EditableRangeInfoPrinter editableRangeReader = new EditableRangeInfoPrinter(); // Both the start and end of an editable range can accept visitors, but not the editable range itself edRange1Start.Accept(editableRangeReader); edRange2End.Accept(editableRangeReader); // Or, if we want to go over all the editable ranges in a document, we can get the document to accept the visitor editableRangeReader.Reset(); doc.Accept(editableRangeReader); Console.WriteLine(editableRangeReader.ToText()); }
public void CreateAndRemove() { //ExStart //ExFor:DocumentBuilder.StartEditableRange //ExFor:DocumentBuilder.EndEditableRange //ExFor:EditableRange //ExFor:EditableRange.EditableRangeEnd //ExFor:EditableRange.EditableRangeStart //ExFor:EditableRange.Id //ExFor:EditableRange.Remove //ExFor:EditableRangeEnd.EditableRangeStart //ExFor:EditableRangeEnd.Id //ExFor:EditableRangeEnd.NodeType //ExFor:EditableRangeStart.EditableRange //ExFor:EditableRangeStart.Id //ExFor:EditableRangeStart.NodeType //ExSummary:Shows how to work with an editable range. Document doc = new Document(); doc.Protect(ProtectionType.ReadOnly, "MyPassword"); DocumentBuilder builder = new DocumentBuilder(doc); builder.Writeln("Hello world! Since we have set the document's protection level to read-only," + " we cannot edit this paragraph without the password."); // Editable ranges allow us to leave parts of protected documents open for editing. EditableRangeStart editableRangeStart = builder.StartEditableRange(); builder.Writeln("This paragraph is inside an editable range, and can be edited."); EditableRangeEnd editableRangeEnd = builder.EndEditableRange(); // A well-formed editable range has a start node, and end node. // These nodes have matching IDs and encompass editable nodes. EditableRange editableRange = editableRangeStart.EditableRange; Assert.AreEqual(editableRangeStart.Id, editableRange.Id); Assert.AreEqual(editableRangeEnd.Id, editableRange.Id); // Different parts of the editable range link to each other. Assert.AreEqual(editableRangeStart.Id, editableRange.EditableRangeStart.Id); Assert.AreEqual(editableRangeStart.Id, editableRangeEnd.EditableRangeStart.Id); Assert.AreEqual(editableRange.Id, editableRangeStart.EditableRange.Id); Assert.AreEqual(editableRangeEnd.Id, editableRange.EditableRangeEnd.Id); // We can access the node types of each part like this. The editable range itself is not a node, // but an entity which consists of a start, an end, and their enclosed contents. Assert.AreEqual(NodeType.EditableRangeStart, editableRangeStart.NodeType); Assert.AreEqual(NodeType.EditableRangeEnd, editableRangeEnd.NodeType); builder.Writeln("This paragraph is outside the editable range, and cannot be edited."); doc.Save(ArtifactsDir + "EditableRange.CreateAndRemove.docx"); // Remove an editable range. All the nodes that were inside the range will remain intact. editableRange.Remove(); //ExEnd Assert.AreEqual("Hello world! Since we have set the document's protection level to read-only, we cannot edit this paragraph without the password.\r" + "This paragraph is inside an editable range, and can be edited.\r" + "This paragraph is outside the editable range, and cannot be edited.", doc.GetText().Trim()); Assert.AreEqual(0, doc.GetChildNodes(NodeType.EditableRangeStart, true).Count); doc = new Document(ArtifactsDir + "EditableRange.CreateAndRemove.docx"); Assert.AreEqual(ProtectionType.ReadOnly, doc.ProtectionType); Assert.AreEqual("Hello world! Since we have set the document's protection level to read-only, we cannot edit this paragraph without the password.\r" + "This paragraph is inside an editable range, and can be edited.\r" + "This paragraph is outside the editable range, and cannot be edited.", doc.GetText().Trim()); editableRange = ((EditableRangeStart)doc.GetChild(NodeType.EditableRangeStart, 0, true)).EditableRange; TestUtil.VerifyEditableRange(0, string.Empty, EditorType.Unspecified, editableRange); }