<configuration>
  <dduetools>
    <builder>
      <components>

        <!-- Create skeleton document -->
        <component type="Microsoft.Ddue.Tools.CopyFromFileComponent" assembly="..\..\ProductionTools\BuildComponents\BuildComponents.dll">
	  <data file="..\..\Presentation\transforms\skeleton.xml" />
	  <copy source="/*" target="/" />
	</component>

        <!-- Copy in reflection data -->
	<component type="Microsoft.Ddue.Tools.CopyFromIndexComponent" assembly="..\..\ProductionTools\BuildComponents\BuildComponents.dll">
          <index name="reflection" value="/reflection/apis/api" key="@id" cache="10">
            <data files="reflection.xml" />
            <data files="..\Cpref_reflection\*.xml" />
          </index>
          <copy name="reflection" source="*" target="/document/reference" />
	</component>

	<!-- Copy in container data -->
	<component type="Microsoft.Ddue.Tools.CopyFromIndexComponent" assembly="..\..\ProductionTools\BuildComponents\BuildComponents.dll">
          <copy name="reflection" key="string(/document/reference/containers/container/@namespace)" source="*[not(local-name()='elements')]" target="/document/reference/containers/container[@namespace]" />
	</component>
	<component type="Microsoft.Ddue.Tools.CopyFromIndexComponent" assembly="..\..\ProductionTools\BuildComponents\BuildComponents.dll">
          <copy name="reflection" key="string(/document/reference/containers/container/@type)" source="*[not(local-name()='elements')]" target="/document/reference/containers/container[@type]" />
	</component>
	
	<!-- Generate syntax -->
	<component type="Microsoft.Ddue.Tools.IfThenComponent" assembly="..\..\ProductionTools\BuildComponents\BuildComponents.dll">
	  <if condition="not(starts-with($key,'Overload:') or starts-with($key,'R:'))" />
          <then>
	  <component type="Microsoft.Ddue.Tools.SyntaxComponent" assembly="..\..\ProductionTools\BuildComponents\BuildComponents.dll">
	    <syntax input="/document/reference" output="/document/syntax" />
	    <generators>
              <generator type="Microsoft.Ddue.Tools.CSharpDeclarationSyntaxGenerator" assembly="..\..\ProductionTools\BuildComponents\SyntaxGenerators.dll" />
              <generator type="Microsoft.Ddue.Tools.VisualBasicDeclarationSyntaxGenerator" assembly="..\..\ProductionTools\BuildComponents\SyntaxGenerators.dll" />
              <generator type="Microsoft.Ddue.Tools.CPlusPlusDeclarationSyntaxGenerator" assembly="..\..\ProductionTools\BuildComponents\SyntaxGenerators.dll" />
            </generators>
          </component>
          </then>
	</component>

	<!-- Copy in comments -->
	<component type="Microsoft.Ddue.Tools.CopyFromIndexComponent" assembly="..\..\ProductionTools\BuildComponents\BuildComponents.dll">
          <index name="comments" value="/doc/members/member" key="@name" cache="100">
            <data files="*.xml" />
            <data files="C:\WINDOWS\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="..\..\ProductionTools\BuildComponents\BuildComponents.dll">
          <variable expression="/document/reference/elements/element/@api" />
          <components>
            <component type="Microsoft.Ddue.Tools.CopyFromIndexComponent" assembly="..\..\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="..\..\ProductionTools\BuildComponents\BuildComponents.dll">
              <copy name="comments" source="summary" target="/document/reference/elements/element[@api=$key]" />
            </component>
          </components>
        </component>

	<!-- save the xml result -->
        <component type="Microsoft.Ddue.Tools.SaveComponent" assembly="..\..\ProductionTools\BuildComponents\BuildComponents.dll">
          <save path="concat('Output\xml\',/document/reference/file/@name,'.xml')" indent="false" omit-xml-declaration="true" />
        </component>

<!-- transform -->
        <component type="Microsoft.Ddue.Tools.TransformComponent" assembly="..\..\ProductionTools\BuildComponents\BuildComponents.dll">
          <transform file="..\..\Presentation\transforms\main_sandcastle.xsl" />
        </component>

	<!-- resolve shared content -->
        <component type="Microsoft.Ddue.Tools.SharedContentComponent" assembly="..\..\ProductionTools\BuildComponents\BuildComponents.dll">
          <content file="..\..\Presentation\content\shared_content.xml" />
          <content file="..\..\Presentation\content\reference_content.xml" />
	</component>

	<!-- resolve reference links -->
	<component type="Microsoft.Ddue.Tools.ResolveReferenceLinksComponent" assembly="..\..\ProductionTools\BuildComponents\BuildComponents.dll">
	  <targets files="reflection.xml" type="local" />
	  <targets files="reflection.xml" type="none" />
               <targets files="..\Cpref_reflection\*.xml" type="msdn" />
	</component>

	<!-- save the HTM result -->
        <component type="Microsoft.Ddue.Tools.SaveComponent" assembly="..\..\ProductionTools\BuildComponents\BuildComponents.dll">
          <save path="concat('Output\html\',/html/head/meta[@name='guid']/@content,'.htm')" indent="false" omit-xml-declaration="true" />
        </component>

      </components>
    </builder>
  </dduetools>
</configuration>
