<?xml version="1.0" encoding="utf-8"?>
<ProjectSchemaDefinitions xmlns="clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:transformCallback="Microsoft.Cpp.Dev10.ConvertPropertyCallback">
  <Rule
    Name="YASM"
    PageTemplate="tool"
    DisplayName="Yasm Assembler"
    Order="200">
      
    <Rule.DataSource>
      <DataSource
        Persistence="ProjectFile"
        ItemType="YASM" />
    </Rule.DataSource>
      
    <Rule.Categories>
        
      <Category
        Name="General">
        <Category.DisplayName>
          <sys:String>General</sys:String>
        </Category.DisplayName>
      </Category>

      <Category
        Name="Symbols">
          <Category.DisplayName>
              <sys:String>Symbols</sys:String>
          </Category.DisplayName>
      </Category>

      <Category
        Name="Files">
          <Category.DisplayName>
              <sys:String>Files</sys:String>
          </Category.DisplayName>
      </Category>
        
      <Category
        Name="Command Line"
        Subtype="CommandLine">
        <Category.DisplayName>
          <sys:String>Command Line</sys:String>
        </Category.DisplayName>
      </Category>
        
    </Rule.Categories>

    <StringListProperty
      Name="Inputs"
      Category="Command Line"
      IsRequired="true"
      Switch=" ">
      <StringListProperty.DataSource>
        <DataSource
          Persistence="ProjectFile"
          ItemType="YASM"
          SourceType="Item" />
      </StringListProperty.DataSource>
    </StringListProperty>
    
    <BoolProperty
      Name="Debug"
      Subcategory="Configuration"
      HelpContext="0"
      DisplayName="Debug Information"
      Description="Generate debugging information"
      Switch="-g cv8" />

    <StringListProperty
      Name="IncludePaths"
      Subcategory="Configuration"
      HelpContext="0"
      DisplayName="Include Paths"
      Description="Set the paths for any additional include files"
      Switch="-i &quot;[value]&quot;" />

    <StringListProperty
      Name="Defines"
      Category="Symbols"
      Subcategory="Pre-Defined Symbols"
      HelpContext="0"
      DisplayName="Defined Symbols"
      Description="Specify pre-defined symbols ('symbol' or 'symbol = value') "
      Switch="-d &quot;[value]&quot;" />
    
    <StringListProperty
      Name="UnDefines"
      Category="Symbols"
      Subcategory="Pre-Defined Symbols"
      HelpContext="0"
      DisplayName="Remove Symbols"
      Description="Remove pre-defined symbols "
      Switch="-u &quot;[value]&quot;" />
    
    <StringProperty
      Name="ObjectFile"
      Subcategory="Output"
      HelpContext="0"
      DisplayName="Object File Name"
      Description="Select the output file name"
      Switch="-o &quot;[value]&quot;" />
    
    <StringProperty
      Name="ListFile"
      Category="Files"
      Subcategory="Output"
      HelpContext="0"
      DisplayName="List File Name"
      Description="Select an output listing by setting its file name"
      Switch="-l &quot;[value]&quot;" />
    
    <StringProperty
      Name="PreIncludeFile"
      Category="Files"
      Subcategory="Configuration"
      HelpContext="0"
      DisplayName="Pre Include File"
      Description="Select a pre-included file by setting its name"
      Switch="-P &quot;[value]&quot;" />
      
    <StringProperty
      Name="MapFile"
      Category="Files"
      Subcategory="Output"
      HelpContext="0"
      DisplayName="Map File Name"
      Description="Select a map output by setting its file name"
      Switch="--mapdir= &quot;[value]&quot;" />

    <StringProperty
      Name="ErrorFile"
      Category="Files"
      Subcategory="Output"
      HelpContext="0"
      DisplayName="Error File Name"
      Description="Send error/warning messages to a file by setting its name"
      Switch="-E &quot;[value]&quot;" />

    <StringProperty
      Name="SymbolPrefix"
      Category="Symbols"
      Subcategory="Symbols"
      HelpContext="0"
      DisplayName="External Symbol Prefix"
      Description="Prepend symbol to all external symbols"
      Switch="--prefix &quot;[value]&quot;" />

    <StringProperty
      Name="SymbolSuffix"
      Category="Symbols"
      Subcategory="Symbols"
      HelpContext="0"
      DisplayName="External Symbol Suffix"
      Description="Append symbol to all external symbols"
      Switch="--suffix &quot;[value]&quot;" />

    <EnumProperty
      Name="PreProc"
      Subcategory="Configuration"
      HelpContext="0"
      DisplayName="Pre-Processor"
      Description="Select the pre-processor ('nasm' or 'raw')">
      <EnumValue
        Name="0"
        DisplayName="Nasm "
        Switch="-rnasm" />
      <EnumValue
        Name="1"
        DisplayName="Raw"
        Switch="-rraw" />
    </EnumProperty>
    
    <EnumProperty
      Name="Parser"
      Subcategory="Configuration"
      HelpContext="0"
      DisplayName="Parser"
      Description="Select the parser for Intel ('nasm') or AT&amp;T ( 'gas') syntax">
      <EnumValue
        Name="0"
        DisplayName="Nasm"
        Switch="-pnasm" />
      <EnumValue
        Name="1"
        DisplayName="Gas"
        Switch="-pgas" />
    </EnumProperty>
    
    <StringProperty
      Name="CommandLineTemplate"
      DisplayName="Command Line"
      Visible="False"
      IncludeInCommandLine="False" />
    
    <DynamicEnumProperty
      Name="YASMBeforeTargets"
      Category="General"
      EnumProvider="Targets"
      IncludeInCommandLine="False">
      <DynamicEnumProperty.DisplayName>
        <sys:String>Execute Before</sys:String>
      </DynamicEnumProperty.DisplayName>
      <DynamicEnumProperty.Description>
        <sys:String>Specifies the targets for the build customization to run before.</sys:String>
      </DynamicEnumProperty.Description>
      <DynamicEnumProperty.ProviderSettings>
        <NameValuePair
          Name="Exclude"
          Value="^YASMBeforeTargets|^Compute" />
      </DynamicEnumProperty.ProviderSettings>
      <DynamicEnumProperty.DataSource>
        <DataSource
          Persistence="ProjectFile"
          HasConfigurationCondition="true" />
      </DynamicEnumProperty.DataSource>
    </DynamicEnumProperty>
    
    <DynamicEnumProperty
      Name="YASMAfterTargets"
      Category="General"
      EnumProvider="Targets"
      IncludeInCommandLine="False">
      <DynamicEnumProperty.DisplayName>
        <sys:String>Execute After</sys:String>
      </DynamicEnumProperty.DisplayName>
      <DynamicEnumProperty.Description>
        <sys:String>Specifies the targets for the build customization to run after.</sys:String>
      </DynamicEnumProperty.Description>
      <DynamicEnumProperty.ProviderSettings>
        <NameValuePair
          Name="Exclude"
          Value="^YASMAfterTargets|^Compute" />
      </DynamicEnumProperty.ProviderSettings>
      <DynamicEnumProperty.DataSource>
        <DataSource
          Persistence="ProjectFile"
          ItemType=""
          HasConfigurationCondition="true" />
      </DynamicEnumProperty.DataSource>
    </DynamicEnumProperty>
    
    <StringListProperty
      Name="Outputs"
      DisplayName="Outputs"
      Visible="False"
      IncludeInCommandLine="False" />
    
    <StringProperty
      Name="ExecutionDescription"
      DisplayName="Execution Description"
      Visible="False"
      IncludeInCommandLine="False" />
    
    <StringListProperty
      Name="AdditionalDependencies"
      DisplayName="Additional Dependencies"
      IncludeInCommandLine="False"
      Visible="true" />
    
    <StringProperty
      Subtype="AdditionalOptions"
      Name="AdditionalOptions"
      Category="Command Line">
      <StringProperty.DisplayName>
        <sys:String>Additional Options</sys:String>
      </StringProperty.DisplayName>
      <StringProperty.Description>
        <sys:String>Additional Options</sys:String>
      </StringProperty.Description>
    </StringProperty>
  </Rule>
  
  <ItemType
    Name="YASM"
    DisplayName="Yasm Assembler" />
  <FileExtension
    Name="*.asm"
    ContentType="YASM" />
  <ContentType
    Name="YASM"
    DisplayName="Yasm Assembler"
    ItemType="YASM" />
</ProjectSchemaDefinitions>