<?xml version="1.0"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="text" indent="no"/>
<xsl:strip-space elements="*"/>
<xsl:preserve-space elements="description"/>

<!--

Match top level

  - Start description body

  - Describe each term

  - End description list

-->

<xsl:template match="/">
  <xsl:text>_BEG_DESCRIPTION
</xsl:text>
  <xsl:apply-templates select="keyval"/>
  <xsl:text>_END_DESCRIPTION
</xsl:text>
</xsl:template>


<!-- Describe a boolean term -->
  
<xsl:template match="boolean">

  <xsl:text>_DESCRIBE(["</xsl:text>
  <xsl:value-of select="key"/>
  <xsl:text> true|false"],["</xsl:text><xsl:apply-templates select="description"/><xsl:text>"])
</xsl:text>

</xsl:template>


<!-- Describe a text term -->

<xsl:template match="text">

  <xsl:text>_DESCRIBE(["</xsl:text>
  <xsl:value-of select="key"/>
  <xsl:text> TEXT"],["</xsl:text><xsl:apply-templates select="description"/><xsl:text>"])
</xsl:text>

</xsl:template>


<!-- Describe a integer term -->

<xsl:template match="integer">

  <xsl:text>_DESCRIBE(["</xsl:text>
  <xsl:value-of select="key"/>
  <xsl:text> INTEGER"],["</xsl:text>
  <xsl:apply-templates select="description"/>
  <xsl:text>"])
</xsl:text>

</xsl:template>


<!-- Describe a real term -->

<xsl:template match="real">

  <xsl:text>_DESCRIBE(["</xsl:text>
  <xsl:value-of select="key"/>
  <xsl:text> NUMBER"],["</xsl:text>
  <xsl:apply-templates select="description"/>
  <xsl:text>"])
</xsl:text>

</xsl:template>


<!-- Describe a date term -->

<xsl:template match="date">

  <xsl:text>_DESCRIBE(["</xsl:text>
  <xsl:value-of select="key"/>
  <xsl:text> YYYY-MM-DD [HH:MM:SS[.sssssssss]]"],["</xsl:text>
  <xsl:apply-templates select="description"/>
  <xsl:text>"])
</xsl:text>

</xsl:template>


<!-- Describe a host term -->

<xsl:template match="host">

  <xsl:text>_DESCRIBE(["</xsl:text>
  <xsl:value-of select="key"/>
  <xsl:text> HOSTNAME|IP"],["</xsl:text>
  <xsl:apply-templates select="description"/>
  <xsl:text>"])
</xsl:text>

</xsl:template>


<!-- Describe a file term -->

<xsl:template match="file">

  <xsl:text>_DESCRIBE(["</xsl:text>
  <xsl:value-of select="key"/>
  <xsl:text> FILE"],["</xsl:text>
  <xsl:apply-templates select="description"/>
  <xsl:text>"])
</xsl:text>

</xsl:template>



<!-- Insert decription body of term -->

<xsl:template match="description">

  <xsl:apply-templates/>

</xsl:template>


<!-- Insert literal in description body -->

<xsl:template match="description/literal">

  <xsl:text>_LIT(["</xsl:text>
  <xsl:apply-templates/>
  <xsl:text>"])</xsl:text>

</xsl:template>


<!-- Insert application in description body -->

<xsl:template match="description/application">

  <xsl:text>_PROG(["</xsl:text>
  <xsl:apply-templates/>
  <xsl:text>"])</xsl:text>

</xsl:template>

</xsl:stylesheet>
