protected virtual void WriteSyntaxGenerators(XmlWriter xmlWriter, bool includeUsage)
        {
            BuildSettings settings = _context.Settings;

            if (settings == null)
            {
                return;
            }

            BuildSyntaxType syntaxType = _group.SyntaxType;

            if (syntaxType == BuildSyntaxType.None)
            {
                return;
            }

            string syntaxComponents = null;

            if (_context.IsDirectSandcastle &&
                (!String.IsNullOrEmpty(_sandcastleAssistDir) &&
                 Directory.Exists(_sandcastleAssistDir)))
            {
                syntaxComponents = Path.Combine(_sandcastleAssistDir,
                                                "Sandcastle.BuildAssembler.dll");
            }
            else
            {
                syntaxComponents = Path.Combine(_sandcastleDir,
                                                @"ProductionTools\SyntaxComponents.dll");
            }

            //<generator type="Microsoft.Ddue.Tools.VisualBasicDeclarationSyntaxGenerator"
            //   assembly="%DXROOT%\ProductionTools\SyntaxComponents.dll" />
            //<generator type="Microsoft.Ddue.Tools.CSharpDeclarationSyntaxGenerator"
            //   assembly="%DXROOT%\ProductionTools\SyntaxComponents.dll" />
            //<generator type="Microsoft.Ddue.Tools.CPlusPlusDeclarationSyntaxGenerator"
            //   assembly="%DXROOT%\ProductionTools\SyntaxComponents.dll" />
            //<generator type="Microsoft.Ddue.Tools.JSharpDeclarationSyntaxGenerator"
            //   assembly="%DXROOT%\ProductionTools\SyntaxComponents.dll" />
            //<generator type="Microsoft.Ddue.Tools.ScriptSharpDeclarationSyntaxGenerator"
            //   assembly="%DXROOT%\ProductionTools\SyntaxComponents.dll" />
            //<generator type="Microsoft.Ddue.Tools.XamlUsageSyntaxGenerator"
            //   assembly="%DXROOT%\ProductionTools\SyntaxComponents.dll">
            //     <filter files="%DXROOT%\Presentation\Shared\configuration\xamlSyntax.config" />
            // </generator>
            if ((syntaxType & BuildSyntaxType.CSharp) != 0)
            {
                xmlWriter.WriteStartElement("generator");    // start - generator
                xmlWriter.WriteAttributeString("type",
                                               "Microsoft.Ddue.Tools.CSharpDeclarationSyntaxGenerator");
                xmlWriter.WriteAttributeString("assembly", syntaxComponents);
                xmlWriter.WriteEndElement();                // end - generator
            }
            if ((syntaxType & BuildSyntaxType.VisualBasic) != 0)
            {
                xmlWriter.WriteStartElement("generator");    // start - generator
                xmlWriter.WriteAttributeString("type",
                                               "Microsoft.Ddue.Tools.VisualBasicDeclarationSyntaxGenerator");
                xmlWriter.WriteAttributeString("assembly", syntaxComponents);
                xmlWriter.WriteEndElement();                // end - generator
            }
            if (includeUsage)
            {
                xmlWriter.WriteStartElement("generator");    // start - generator
                xmlWriter.WriteAttributeString("type",
                                               "Microsoft.Ddue.Tools.VisualBasicUsageSyntaxGenerator");
                xmlWriter.WriteAttributeString("assembly", syntaxComponents);
                xmlWriter.WriteEndElement();                // end - generator
            }
            if ((syntaxType & BuildSyntaxType.CPlusPlus) != 0)
            {
                xmlWriter.WriteStartElement("generator");    // start - generator
                xmlWriter.WriteAttributeString("type",
                                               "Microsoft.Ddue.Tools.CPlusPlusDeclarationSyntaxGenerator");
                xmlWriter.WriteAttributeString("assembly", syntaxComponents);
                xmlWriter.WriteEndElement();                // end - generator
            }
            if ((syntaxType & BuildSyntaxType.JSharp) != 0)
            {
                xmlWriter.WriteStartElement("generator");    // start - generator
                xmlWriter.WriteAttributeString("type",
                                               "Microsoft.Ddue.Tools.JSharpDeclarationSyntaxGenerator");
                xmlWriter.WriteAttributeString("assembly", syntaxComponents);
                xmlWriter.WriteEndElement();                // end - generator
            }
            if ((syntaxType & BuildSyntaxType.JScript) != 0)
            {
                xmlWriter.WriteStartElement("generator");    // start - generator
                xmlWriter.WriteAttributeString("type",
                                               "Microsoft.Ddue.Tools.JScriptDeclarationSyntaxGenerator");
                xmlWriter.WriteAttributeString("assembly", syntaxComponents);
                xmlWriter.WriteEndElement();                // end - generator
            }
            if ((syntaxType & BuildSyntaxType.JavaScript) != 0)
            {
                xmlWriter.WriteStartElement("generator");    // start - generator
                xmlWriter.WriteAttributeString("type",
                                               "Microsoft.Ddue.Tools.ScriptSharpDeclarationSyntaxGenerator");
                xmlWriter.WriteAttributeString("assembly", syntaxComponents);
                xmlWriter.WriteEndElement();                // end - generator
            }
            if ((syntaxType & BuildSyntaxType.Xaml) != 0)
            {
                xmlWriter.WriteStartElement("generator");    // start - generator
                xmlWriter.WriteAttributeString("type",
                                               "Microsoft.Ddue.Tools.XamlUsageSyntaxGenerator");
                xmlWriter.WriteAttributeString("assembly", syntaxComponents);

                xmlWriter.WriteStartElement("filter");   // start - filter
                xmlWriter.WriteAttributeString("files", Path.Combine(_sandcastleDir,
                                                                     @"Presentation\Shared\configuration\xamlSyntax.config"));
                xmlWriter.WriteEndElement();             // end - filter

                // If the group XAML configuration is created, we use it...
                BuildGroupContext groupContext = _context.GroupContexts[_group.Id];
                if (groupContext == null)
                {
                    throw new BuildException(
                              "The group context is not provided, and it is required by the build system.");
                }
                string xamlConfig = groupContext["$XamlSyntaxFile"];

                if (!String.IsNullOrEmpty(xamlConfig))
                {
                    if (!Path.IsPathRooted(xamlConfig))
                    {
                        xamlConfig = Path.Combine(_context.WorkingDirectory,
                                                  xamlConfig);
                    }

                    if (File.Exists(xamlConfig))
                    {
                        xmlWriter.WriteStartElement("filter");   // start - filter
                        xmlWriter.WriteAttributeString("files", xamlConfig);
                        xmlWriter.WriteEndElement();             // end - filter
                    }
                }

                xmlWriter.WriteEndElement();                // end - generator
            }
        }
        protected virtual void WriteSyntaxTypes(XmlWriter xmlWriter, bool includeUsage)
        {
            BuildSettings settings = _context.Settings;

            if (settings == null)
            {
                return;
            }

            BuildSyntaxType syntaxType = _group.SyntaxType;

            if (syntaxType == BuildSyntaxType.None)
            {
                return;
            }

            // <language label="VisualBasic" name="VisualBasic" style="vb" />
            // <language label="CSharp" name="CSharp" style="cs" />
            // <language label="ManagedCPlusPlus" name="ManagedCPlusPlus" style="cpp" />
            // <language label="JSharp" name="JSharp" style="cs" />
            // <language label="JScript" name="JScript" style="cs" />
            if ((syntaxType & BuildSyntaxType.CSharp) != 0)
            {
                xmlWriter.WriteStartElement("language");    // start - language
                xmlWriter.WriteAttributeString("label", "CSharp");
                xmlWriter.WriteAttributeString("name", "CSharp");
                xmlWriter.WriteAttributeString("style", "cs");
                xmlWriter.WriteEndElement();                // end - language
            }
            if ((syntaxType & BuildSyntaxType.VisualBasic) != 0)
            {
                xmlWriter.WriteStartElement("language");    // start - language
                xmlWriter.WriteAttributeString("label", "VisualBasic");
                xmlWriter.WriteAttributeString("name", "VisualBasic");
                xmlWriter.WriteAttributeString("style", "vb");
                xmlWriter.WriteEndElement();                // end - language
            }
            if (includeUsage)
            {
                xmlWriter.WriteStartElement("language");    // start - language
                xmlWriter.WriteAttributeString("label", "VisualBasicUsage");
                xmlWriter.WriteAttributeString("name", "VisualBasicUsage");
                xmlWriter.WriteAttributeString("style", "vb");
                xmlWriter.WriteEndElement();                // end - language
            }
            if ((syntaxType & BuildSyntaxType.CPlusPlus) != 0)
            {
                xmlWriter.WriteStartElement("language");    // start - language
                xmlWriter.WriteAttributeString("label", "ManagedCPlusPlus");
                xmlWriter.WriteAttributeString("name", "ManagedCPlusPlus");
                xmlWriter.WriteAttributeString("style", "cpp");
                xmlWriter.WriteEndElement();                // end - language
            }
            if ((syntaxType & BuildSyntaxType.JSharp) != 0)
            {
                xmlWriter.WriteStartElement("language");    // start - language
                xmlWriter.WriteAttributeString("label", "JSharp");
                xmlWriter.WriteAttributeString("name", "JSharp");
                xmlWriter.WriteAttributeString("style", "cs");
                xmlWriter.WriteEndElement();                // end - language
            }
            if ((syntaxType & BuildSyntaxType.JScript) != 0)
            {
                xmlWriter.WriteStartElement("language");    // start - language
                xmlWriter.WriteAttributeString("label", "JScript");
                xmlWriter.WriteAttributeString("name", "JScript");
                xmlWriter.WriteAttributeString("style", "cs");
                xmlWriter.WriteEndElement();                // end - language
            }
            if ((syntaxType & BuildSyntaxType.JavaScript) != 0)
            {
                xmlWriter.WriteStartElement("language");    // start - language
                xmlWriter.WriteAttributeString("label", "JavaScript");
                xmlWriter.WriteAttributeString("name", "JavaScript");
                xmlWriter.WriteAttributeString("style", "cs");
                xmlWriter.WriteEndElement();                // end - language
            }
            if ((syntaxType & BuildSyntaxType.Xaml) != 0)
            {
                xmlWriter.WriteStartElement("language");    // start - language
                xmlWriter.WriteAttributeString("label", "XAML");
                xmlWriter.WriteAttributeString("name", "XAML");
                xmlWriter.WriteAttributeString("style", "cs");
                xmlWriter.WriteEndElement();                // end - language
            }
        }