﻿<configuration>
  <dduetools>
    <builder>
      <components>

        <!-- Create skeleton document -->
        <component type="Microsoft.Ddue.Tools.CopyFromFileComponent" assembly="C:\Program Files\Sandcastle\ProductionTools\BuildComponents\BuildComponents.dll">
          <data file="C:\Program Files\Sandcastle\Presentation\Prototype\transforms\skeleton.xml" />
          <copy source="/*" target="/" />
        </component>

        <!-- Copy in reflection data -->
        <component type="Microsoft.Ddue.Tools.CopyFromIndexComponent" assembly="C:\Program Files\Sandcastle\ProductionTools\BuildComponents\BuildComponents.dll">
          <index name="reflection" value="/reflection/apis/api" key="@id" cache="10">
            <data files="reflection.xml" />
            <data files="C:\Program Files\Sandcastle\Examples\cpref_reflection\*.xml" />
          </index>
          <copy name="reflection" source="*" target="/document/reference" />
        </component>

        <!-- Copy in container data -->
        <component type="Microsoft.Ddue.Tools.CopyFromIndexComponent" assembly="C:\Program Files\Sandcastle\ProductionTools\BuildComponents\BuildComponents.dll">
          <copy name="reflection" key="string(/document/reference/containers/namespace/@api)" source="*[not(local-name()='elements')]" target="/document/reference/containers/namespace" />
        </component>
        <component type="Microsoft.Ddue.Tools.ForEachComponent" assembly="C:\Program Files\Sandcastle\ProductionTools\BuildComponents\BuildComponents.dll">
          <variable expression="/document/reference/containers//type/@api" />
          <components>
            <component type="Microsoft.Ddue.Tools.CopyFromIndexComponent" assembly="C:\Program Files\Sandcastle\ProductionTools\BuildComponents\BuildComponents.dll">
              <copy name="reflection" key="string(/document/reference/containers/type/@api)" source="*[not(local-name()='elements')]" target="/document/reference/containers/type" />
            </component>
          </components>
        </component>

        <!-- Generate syntax -->
        <component type="Microsoft.Ddue.Tools.IfThenComponent" assembly="C:\Program Files\Sandcastle\ProductionTools\BuildComponents\BuildComponents.dll">
          <if condition="not(starts-with($key,'Overload:') or starts-with($key,'R:'))" />
          <then>
            <component type="Microsoft.Ddue.Tools.SyntaxComponent" assembly="C:\Program Files\Sandcastle\ProductionTools\BuildComponents\BuildComponents.dll">
              <syntax input="/document/reference" output="/document/syntax" />
              <generators>
                <generator type="Microsoft.Ddue.Tools.CSharpDeclarationSyntaxGenerator" assembly="C:\Program Files\Sandcastle\ProductionTools\BuildComponents\SyntaxGenerators.dll" />
                <generator type="Microsoft.Ddue.Tools.VisualBasicDeclarationSyntaxGenerator" assembly="C:\Program Files\Sandcastle\ProductionTools\BuildComponents\SyntaxGenerators.dll" />
                <generator type="Microsoft.Ddue.Tools.CPlusPlusDeclarationSyntaxGenerator" assembly="C:\Program Files\Sandcastle\ProductionTools\BuildComponents\SyntaxGenerators.dll" />
              </generators>
            </component>
          </then>
        </component>

        <!-- Copy in comments -->
        <component type="Microsoft.Ddue.Tools.CopyFromIndexComponent" assembly="C:\Program Files\Sandcastle\ProductionTools\BuildComponents\BuildComponents.dll">
          <index name="comments" value="/doc/members/member" key="@name" cache="100">
            <data files="comments\*.xml" />
            <data files="%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\*.xml" />
          </index>
          <copy name="comments" source="*" target="/document/comments" />
        </component>

        <!-- Copy in reflection data and comments for members -->
        <component type="Microsoft.Ddue.Tools.ForEachComponent" assembly="C:\Program Files\Sandcastle\ProductionTools\BuildComponents\BuildComponents.dll">
          <variable expression="/document/reference/elements/element/@api" />
          <components>
            <component type="Microsoft.Ddue.Tools.CopyFromIndexComponent" assembly="C:\Program Files\Sandcastle\ProductionTools\BuildComponents\BuildComponents.dll">
              <copy name="reflection" source="*[not(local-name()='elements')]" target="/document/reference/elements/element[@api=$key]" />
            </component>
            <component type="Microsoft.Ddue.Tools.CopyFromIndexComponent" assembly="C:\Program Files\Sandcastle\ProductionTools\BuildComponents\BuildComponents.dll">
              <copy name="comments" source="summary" target="/document/reference/elements/element[@api=$key]" />
            </component>
          </components>
        </component>

        <!-- transform -->
        <component type="Microsoft.Ddue.Tools.TransformComponent" assembly="C:\Program Files\Sandcastle\ProductionTools\BuildComponents\BuildComponents.dll">
          <transform file="C:\Program Files\Sandcastle\Presentation\Prototype\transforms\main_sandcastle.xsl">
            <argument key="metadata" value="false" />
            <argument key="languages">
              <language label="CSharp" name="CSharp" style="cs" />
              <language label="VisualBasic" name="VisualBasic" style="vb" />
              <language label="ManagedCPlusPlus" name="ManagedCPlusPlus" style="cs" />
            </argument>
          </transform>
        </component>

        <!-- resolve shared content -->
        <component type="Microsoft.Ddue.Tools.SharedContentComponent" assembly="C:\Program Files\Sandcastle\ProductionTools\BuildComponents\BuildComponents.dll">
          <content file="C:\Program Files\Sandcastle\Presentation\Prototype\content\shared_content.xml" />
          <content file="C:\Program Files\Sandcastle\Presentation\Prototype\content\reference_content.xml" />
          <content file="C:\Program Files\Sandcastle\Presentation\Prototype\Content\syntax_content.xml" />
        </component>

        <!-- resolve reference links -->
        <component type="Microsoft.Ddue.Tools.ResolveReferenceLinksComponent" assembly="C:\Program Files\Sandcastle\ProductionTools\BuildComponents\BuildComponents.dll">
          <targets files="reflection.xml" type="local" />
          <targets files="C:\Program Files\Sandcastle\Examples\cpref_reflection\*.xml" type="msdn" />
        </component>

        <!-- save the result -->
        <component type="Microsoft.Ddue.Tools.SaveComponent" assembly="C:\Program Files\Sandcastle\ProductionTools\BuildComponents\BuildComponents.dll">
          <save base ="Output\html" path="concat(/html/head/meta[@name='guid']/@content,'.htm')" indent="false" omit-xml-declaration="true" />
        </component>

      </components>
    </builder>
  </dduetools>
</configuration>