<?xml version="1.0" encoding="UTF-8" ?>
<document>
 <properties>
  <title>&lt;${converter.name}&gt;</title>
 </properties>
 <body>
  <section name="Summary">
  <p>
   <b>Tag name:</b> &lt;${converter.name}&gt;
   <br/>
#set ($javadocPath = "../apidocs/" + $converter.getClassName().replace('.', '/') )
   <b>Converter class:</b> <a href="${tagdocUtils.platformAgnosticPath( $javadocPath )}.html">${converter.className}</a>
   <br/>
#if ($converter.tagClass)
#set ($javadocPath = "../apidocs/" + $converter.getTagClass().replace('.', '/') )
   <b>Tag class:</b> <a href="${tagdocUtils.platformAgnosticPath( $javadocPath )}.html">${converter.tagClass}</a>
   <br/>
#end
#if ($faceletTag)
   <b>Facelet Tag Handler:</b> <a href="${tagdocUtils.platformAgnosticPath( $javadocPath )}.html">${faceletTag.className}</a>
   <br/>  
#end
   <b>converter id:</b> ${converter.converterId}
   <br/>
${converter.longDescription}   
  </p>
  </section>
#if ($baseContent)
$baseContent
#end
#set ($propertyList = ${tagdocUtils.getSortedPropertyList($converter)})
#if ($propertyList.size() != 0)  
  <section name="Attributes">
<table>
 <tr>
  <th>Name</th>
  <th>Type</th>
  <th>Supports EL?</th>
  <th>Description</th>
 </tr>
#foreach( $property in $propertyList )
#if (!$property.isTagExcluded())
 <tr>
  <td>$property.jspName</td>
#set ($type = ${tagdocUtils.getDisplayType($converter.className,$property.jspName,$property.className)})
  <td>$type</td>
#if ($property.jspName == "action")
  <td>Yes</td>
#elseif ($property.isMethodBinding() || $property.isMethodExpression())
  <td>Only EL</td>
#elseif ($property.jspName == "binding")
  <td>Only EL</td>
#elseif ($property.isLiteralOnly())
  <td>No</td>
#else
  <td>Yes</td>
#end
#if ($property.longDescription)
  <td>$property.longDescription</td>
#else
  <td></td>
#end
 </tr>
#end
#end
</table>
  </section>
#end
#if ($faceletTag)
#set ($attributeList = ${tagdocUtils.getSortedAttributeList($faceletTag)})
#if ($attributeList.size() != 0)  
  <section name="Facelets Attributes">
<table>
 <tr>
  <th>Name</th>
  <th>Type</th>
  <th>Required</th>
  <th>Description</th>
 </tr>
#foreach( $attribute in $attributeList )
#if (!$attribute.isTagExcluded()&& $attribute.isFaceletsOnly())
 <tr>
  <td>$attribute.name</td>
#set ($type = ${tagdocUtils.getDisplayType($faceletTag.className,$attribute.name,$attribute.className)})
  <td>$type</td>
  <td>$attribute.isRequired()</td>
#if ($attribute.longDescription)
  <td>$attribute.longDescription</td>
#else
  <td></td>
#end
 </tr>
#end
#end
</table>
  </section>
#end
#elseif ($jsf20)
      <section name="Facelets Attributes">
<table>
 <tr>
  <th>Name</th>
  <th>Type</th>
  <th>Required</th>
  <th>Description</th>
 </tr>
 <tr>
  <td>for</td>
  <td>String</td>
  <td>false</td>
  <td></td>
 </tr>
</table>
  </section>
#end
 </body> 
</document>