VisitGlossaryDocumentEnd

DocumentVisitor.VisitGlossaryDocumentEnd method

Called when enumeration of a glossary document has ended.

public virtual VisitorAction VisitGlossaryDocumentEnd(GlossaryDocument glossary)
ParameterTypeDescription
glossaryGlossaryDocumentThe object that is being visited.

Return Value

A VisitorAction value that specifies how to continue the enumeration.

Remarks

Note: A glossary document node and its children are not visited when you execute a Visitor over a Document. If you want to execute a Visitor over a glossary document, you need to call Accept.

Examples

Shows ways of accessing building blocks in a glossary document.

Document doc = new Document();
GlossaryDocument glossaryDoc = new GlossaryDocument();

BuildingBlock child1 = new BuildingBlock(glossaryDoc) { Name = "Block 1" };
glossaryDoc.AppendChild(child1);
BuildingBlock child2 = new BuildingBlock(glossaryDoc) { Name = "Block 2" };
glossaryDoc.AppendChild(child2);
BuildingBlock child3 = new BuildingBlock(glossaryDoc) { Name = "Block 3" };
glossaryDoc.AppendChild(child3);
BuildingBlock child4 = new BuildingBlock(glossaryDoc) { Name = "Block 4" };
glossaryDoc.AppendChild(child4);
BuildingBlock child5 = new BuildingBlock(glossaryDoc) { Name = "Block 5" };
glossaryDoc.AppendChild(child5);

Assert.That(glossaryDoc.BuildingBlocks.Count, Is.EqualTo(5));

doc.GlossaryDocument = glossaryDoc;

// There are various ways of accessing building blocks.
// 1 -  Get the first/last building blocks in the collection:
Assert.That(glossaryDoc.FirstBuildingBlock.Name, Is.EqualTo("Block 1"));
Assert.That(glossaryDoc.LastBuildingBlock.Name, Is.EqualTo("Block 5"));

// 2 -  Get a building block by index:
Assert.That(glossaryDoc.BuildingBlocks[1].Name, Is.EqualTo("Block 2"));
Assert.That(glossaryDoc.BuildingBlocks.ToArray()[2].Name, Is.EqualTo("Block 3"));

// 3 -  Get the first building block that matches a gallery, name and category:
Assert.That(glossaryDoc.GetBuildingBlock(BuildingBlockGallery.All, "(Empty Category)", "Block 4").Name, Is.EqualTo("Block 4"));

// We will do that using a custom visitor,
// which will give every BuildingBlock in the GlossaryDocument a unique GUID
GlossaryDocVisitor visitor = new GlossaryDocVisitor();
// Visit start/end of the Glossary document.
glossaryDoc.Accept(visitor);
// Visit only start of the Glossary document.
glossaryDoc.AcceptStart(visitor);
// Visit only end of the Glossary document.
glossaryDoc.AcceptEnd(visitor);
Console.WriteLine(visitor.GetText());

// In Microsoft Word, we can access the building blocks via "Insert" -> "Quick Parts" -> "Building Blocks Organizer".
doc.Save(ArtifactsDir + "BuildingBlocks.GlossaryDocument.dotx");

Shows ways of accessing building blocks in a glossary document (GlossaryDocVisitor).

/// <summary>
/// Gives each building block in a visited glossary document a unique GUID.
/// Stores the GUID-building block pairs in a dictionary.
/// </summary>
public class GlossaryDocVisitor : DocumentVisitor
{
    public GlossaryDocVisitor()
    {
        mBlocksByGuid = new Dictionary<Guid, BuildingBlock>();
        mBuilder = new StringBuilder();
    }

    public string GetText()
    {
        return mBuilder.ToString();
    }

    public Dictionary<Guid, BuildingBlock> GetDictionary()
    {
        return mBlocksByGuid;
    }

    public override VisitorAction VisitGlossaryDocumentStart(GlossaryDocument glossary)
    {
        mBuilder.AppendLine("Glossary document found!");
        return VisitorAction.Continue;
    }

    public override VisitorAction VisitGlossaryDocumentEnd(GlossaryDocument glossary)
    {
        mBuilder.AppendLine("Reached end of glossary!");
        mBuilder.AppendLine("BuildingBlocks found: " + mBlocksByGuid.Count);
        return VisitorAction.Continue;
    }

    public override VisitorAction VisitBuildingBlockStart(BuildingBlock block)
    {
        block.Guid = Guid.NewGuid();
        mBlocksByGuid.Add(block.Guid, block);
        return VisitorAction.Continue;
    }

    public override VisitorAction VisitBuildingBlockEnd(BuildingBlock block)
    {
        mBuilder.AppendLine("\tVisited block \"" + block.Name + "\"");
        mBuilder.AppendLine("\t Type: " + block.Type);
        mBuilder.AppendLine("\t Gallery: " + block.Gallery);
        mBuilder.AppendLine("\t Behavior: " + block.Behavior);
        mBuilder.AppendLine("\t Description: " + block.Description);

        return VisitorAction.Continue;
    }

    private readonly Dictionary<Guid, BuildingBlock> mBlocksByGuid;
    private readonly StringBuilder mBuilder;
}

See Also