<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="taglib.xsl"?>
<taglib>
	<tlib-version>1.0</tlib-version>
	<short-name>czfv</short-name>
	<uri>czfv</uri>
	<tag>
		<description>Busca un texto utilizando expresiones regulares
		definidas en el atributo "de" y los sustituye por el contenido de un texto definido en el atributo "a".
		"a" puede contener variables con el formato $1, $2, etc. que serán sustituidos
		por los grupos de caracteres encerrados entre parentesis en la expresión de busqueda.
		Veasé el ejemplo</description>
		<name>sustituye</name>
		<tag-class>czfv.Etiquetas.TagSustituye</tag-class>
		<body-content>scriptless</body-content>
		<attribute>
			<description>texto a buscar, es una expresión regular</description>
			<name>de</name>
			<required>true</required>
		</attribute>
		<attribute>
			<description>Texto a cambiar, puede utilizar grupos $1, $2 etc, creados con ( ) en la expresión regular</description>
			<name>a</name>
			<required>false</required>
		</attribute>	
		<example>
			&lt;a:sustituye de="Nivel de tóner (.{3,15})&lt;b&gt;" a="Tóner $1&lt;/b&gt;"&gt;<br/>
			Se busca el texto "Nivel de tóner "de 3 a 15 caracteres cualquiera" seguidos de &lt;b&gt;<br/>
			En este ejemplo se encierra entre paréntesis ".{3,15}" que será asignado a $1<br/>
			Por lo tanto "Nivel de tóner ~55%&lt;b&gt; será sustituido por "Tóner ~55%&lt;b&gt;<br/>
		</example>
	</tag>
	<tag>
		<description>El contenido de "ejecutadetalle" se evalua tantas veces como filas haya en la
		consulta. Se diferencia de "detalle formato='html'" en que en este último solo se "procesa"
		el contenido de la etiqueta una sola vez antes de recorrer las filas.
		"ejecutadetalle" evalua todas las etiquetas interiores, y asigna a variables globales los valores
		de todos los campos, y lo que la diferencia de "detalle" es que se hace por cada una de las filas.
		</description>
		<name>ejecutadetalle</name>
		<tag-class>czfv.Etiquetas.TagDetalleSimple</tag-class>
		<body-content>scriptless</body-content>
		<attribute>
			<description>Identificador de sql que se utiliza se lee en def.</description>
			<name>sqlid</name>
			<required>true</required>                        
		</attribute>
		<attribute>
			<description>Número de filas de la página. 0 todas</description>
			<name>filas</name>
			<required>true</required>
		</attribute>
		<attribute>
			<description>Primera fila del informe</description>
			<name>primeraFila</name>
			<required>false</required>
		</attribute>
		<attribute>
			<description>Página a partir de la cual queremos ver el report. Si primera fila es distinto de 1, ignoramos este parámetro</description>
			<name>pagina</name>
			<required>false</required>
		</attribute>
		<attribute>
			<description>Si queremos usar o no una consulta scroll sensitive</description>
			<name>scrollSensitive</name>
			<required>false</required>
		</attribute>
		<attribute>
			<description>Si queremos obtener o no el total de filas. Por defecto, false. Puede tomar los valores true o false</description>
			<name>calcularTotal</name>
			<required>false</required>
		</attribute>
		<example>
		&lt;a:ejecutadetalle sqlid="consulta"  primeraFila="1" filas="99"&gt;<br/>
	            &lt;a:evalua&gt;<br/>
	                &lt;fila&gt;<br/>
	                    &lt;a:importa&gt;fichero_$(V_COMENTARIO)&lt;/a:importa&gt;<br/>	                	
	                    &lt;NOMBRE&gt;&lt;![CDATA[ $(V_NOMBRE) ]]&gt;&lt;/NOMBRE&gt;<br/>
	                    &lt;IP&gt;$(V_IP)&lt;/IP&gt;<br/>
	                    &lt;TONER&gt;$(toner_1)&lt;/TONER&gt;<br/>
	                    &lt;PAGINAS&gt;$(consumo_1)&lt;/PAGINAS&gt;<br/>
	                &lt;/fila&gt;<br/>
	            &lt;/a:evalua&gt;<br/>
	        &lt;/a:ejecutadetalle&gt;<br/>
		</example>
	</tag>
	<tag>
		<description>Busca un texto utilizando expresiones regulares
		definidas en el atributo "match" y lo almacena en la variable definida en el atributo "variable".
		Además se crean las subvariables variable_1,variable_2,variable_3 que serán sustituidos
		por los grupos de caracteres encerrados entre parentesis en la expresión de busqueda.
		</description>
		<name>regexp</name>
		<tag-class>czfv.Etiquetas.TagRegExp</tag-class>
		<body-content>jsp</body-content>
		<example>Busca una expresion regular en el contenido</example>
		<attribute>
			<description>Expresion a buscar</description>
			<name>match</name>
			<required>true</required>
		</attribute>
		<attribute>
			<description>Variable donde se almacena el contenido de la búsqueda y los campos contenidos entre ( ) parentesis</description>
			<name>variable</name>
			<required>true</required>
		</attribute>
		<example>
            &lt;a:regexp variable="toner"<br/>
                match="&lt;td nowrap&gt;&lt;b&gt;(Tóner .{3,15})&lt;/b&gt;&lt;/td&gt;"&gt;<br/>
                &lt;a:evalua&gt;<br/>
                	Se encontró $(toner) y el nivel de toner es de $(toner_1)<br/>
                &lt;/a:evalua&gt;<br/>
            &lt;/a:regexp&gt;<br/>
		</example>
	</tag>
	<tag>
		<description>
			Cuando utilizamos transformaciones XSLT las hojas de estilo xsl pueden recibir parámetros de forma que
			puedan reutilizarse para muchas aplicaciones diferentes.
			Estos parámetros se definen en las hojas de estilo como 
			&lt;xsl:parameter name="raiz"/&gt; 
			permitiendo usar este parametro en toda la hoja de estilo como $raiz.
			Utilizando la etiqueta "parametros" podemos asignar valores a los parametros usando el formato
				raiz="//sql_empresas"
				...
				pagina="1"
				titulo="Listado de empresas"
			Se usa como si se tratase de una etiqueta "define".							
			Esta etiqueta debe ser HIJA de una etiqueta "transforma" ya que pasa la coleccion de parametros a 
			su etiqueta padre a fin de que la utilice en la transformación.
		</description>
		<name>parametros</name>
		<tag-class>czfv.Etiquetas.TagParametros</tag-class>
		<body-content>jsp</body-content>
		<example>
		   &lt;a:transforma xslt="tablafo.xsl"&gt;<br/>
		        &lt;a:parametros&gt;<br/>
		            titulo="Estado de las Impresoras del Consorcio"<br/>
		            inicio="raiz"<br/>
		        &lt;/a:parametros&gt;<br/>
		        &lt;a:xml&gt;<br/>
		        	&lt;a:detalle sqlid="sql_empresas" formato="xml"/&gt;<br/>
		        &lt;/a:xml&gt;<br/>
	        &lt;/a:transforma&gt; <br/>
		</example>
	</tag>
	<tag>
		<description>
		Importa lee el fichero o la URL contenida en su cuerpo y lo integra en el JSP.
		Si el cuerpo empieza por http:// file:// ftp:// se considera una URL, si no se
		considera un fichero existente en el path del contexto de la aplicación
		</description>
		<name>importa</name>
		<tag-class>czfv.Etiquetas.TagImporta</tag-class>
		<body-content>jsp</body-content>
		<example>
           &lt;a:importa&gt;<br/>
                &lt;a:evalua&gt;<br/>
                    http://$(V_IP)/printer/status<br/>
                &lt;/a:evalua&gt;<br/>
            &lt;/a:importa&gt;<br/>
		</example>
	</tag>
	<tag>
		<description>
		Crea un fichero PDF en un directorio temporal y devuelve una redirección a la URL del mismo.
		En el cuerpo espera encontrar codigo FO.
		</description>
		<name>pdf</name>
		<tag-class>czfv.Etiquetas.TagPdf</tag-class>
		<body-content>jsp</body-content>
		<attribute>
			<description>nombre del fichero pdf de salida</description>
			<name>fichero</name>
			<required>true</required>
		</attribute>
		<example>
		&lt;a:pdf fichero="listado.pdf"&gt;<br/>
		   &lt;a:transforma xslt="tablafo.xsl"&gt;<br/>
		        &lt;a:parametros&gt;<br/>
		            titulo="Estado de las Impresoras del Consorcio"<br/>
		            inicio="raiz"<br/>
		        &lt;/a:parametros&gt;<br/>
		        &lt;a:xml&gt;<br/>
		        	&lt;a:detalle sqlid="sql_empresas" formato="xml"/&gt;<br/>
		        &lt;/a:xml&gt;<br/>
	        &lt;/a:transforma&gt; <br/>
	    &lt;/a:pdf&gt;<br/>
		</example>
	</tag>
	<tag>
		<description>
		Realiza una transformación XSLT utilizando un contenido XML un contenido XSLT y una colección de parametros.
		El XML puede indicarse en una etiqueta interna o como un fichero externo definiendolo en el atributo.
		El XSL puede indicarse en una etiqueta interna o como un fichero externo definiendolo en el atributo.
		Los parametros deben indicarse en una etiqueta interna.
		</description>
		<name>transforma</name>
		<tag-class>czfv.Etiquetas.TagTransforma</tag-class>
		<body-content>jsp</body-content>
		<attribute>
			<description>Url de una página XML</description>
			<name>xml</name>
		</attribute>
		<attribute>
			<description>Url de una página XSLT</description>
			<name>xslt</name>
		</attribute>
		<example>
		   &lt;a:transforma xslt="tablafo.xsl"&gt;<br/>
		        &lt;a:parametros&gt;<br/>
		            titulo="Estado de las Impresoras del Consorcio"<br/>
		            inicio="raiz"<br/>
		        &lt;/a:parametros&gt;<br/>
		        &lt;a:xml&gt;<br/>
		        	&lt;a:detalle sqlid="sql_empresas" formato="xml"/&gt;<br/>
		        &lt;/a:xml&gt;<br/>
	        &lt;/a:transforma&gt; <br/>
		</example>
	</tag>
	<tag>
		<description>
		Contiene un texto XML que será pasado a una etiqueta TRANSFORMA para su transformación posterior.
		Debe ser hija de una etiqueta transforma.
		</description>
		<name>xml</name>
		<tag-class>czfv.Etiquetas.TagXml</tag-class>
		<body-content>jsp</body-content>
		<example>
		   &lt;a:transforma xslt="tablafo.xsl"&gt;<br/>
		        &lt;a:parametros&gt;<br/>
		            titulo="Estado de las Impresoras del Consorcio"<br/>
		            inicio="raiz"<br/>
		        &lt;/a:parametros&gt;<br/>
		        &lt;a:xml&gt;<br/>
		        	&lt;a:detalle sqlid="sql_empresas" formato="xml"/&gt;<br/>
		        &lt;/a:xml&gt;<br/>
	        &lt;/a:transforma&gt; <br/>
		</example>
	</tag>
	<tag>
		<description>
		Contiene un texto XSLT que será pasado a una etiqueta TRANSFORMA para su transformación posterior.
		Debe ser hija de una etiqueta transforma.
		</description>
		<name>xslt</name>
		<tag-class>czfv.Etiquetas.TagXslt</tag-class>
		<body-content>jsp</body-content>
		<example>
		   &lt;a:transforma&gt;<br/>
		        &lt;a:parametros&gt;<br/>
		            titulo="Estado de las Impresoras del Consorcio"<br/>
		            inicio="raiz"<br/>
		        &lt;/a:parametros&gt;<br/>
		        &lt;a:xml&gt;<br/>
		        	&lt;a:detalle sqlid="sql_empresas" formato="xml"/&gt;<br/>
		        &lt;/a:xml&gt;<br/>
		        &lt;a:xslt&gt;<br/>
		        	&lt;a:importa&gt;<br/>
		        		fichero.xsl<br/>
		        	&lt;/a:importa&gt;<br/>
		        &lt;/a:xslt&gt;<br/>
	        &lt;/a:transforma&gt; <br/>
		</example>
	</tag>
	<tag>
		<description>
		Define un string sql que será ejecutado con posterioridad. Es equivalente a la creación
		de una variable global con el nombre indicado en el parámetro "sqlid"
		</description>	
		<name>sql</name>
		<tag-class>czfv.Etiquetas.TagSql</tag-class>
		<body-content>jsp</body-content>
		<attribute>
			<description>Identificador de sql se utiliza para guardar en def.</description>
			<name>sqlid</name>
		</attribute>
		
	</tag>
	<tag>
		<description>Detalle permite dos modos de funcionamiento, con y sin cuerpo.
		Si tiene cuerpo, el "destino" debe especificarse a HTML.
		El contenido del se evalua UNA SOLA VEZ antes de procesar las 
		filas, se almacena en una variable cache y despues se realiza una sustitución de los
		textos $(V_CAMPO) por los valores de cada CAMPO tantes veces como filas hay en la consulta.
		Sin cuerpo se utiliza un transformador, definido por el atributo "destino" que realiza una 
		transformación de las filas utilizando una clase transformadora.
		Los destinos posibles sin cuerpo son:
		"TABOAHTML" es el transformador por defecto, genera una tabla HTML
        "XML" realiza una transformación de las filas a formato XML
        "XSLT" realiza una transformacion XSLT con el formato XML de las filas.
        "HTML" transformador con cuerpo. Evalua el cuerpo de la etiqueta y despues lo repite por cada fila, haciendo macrosustitución
        "PDF" realiza un pdf de una trasformacion XSLT de la que se obtiene FO.
        "IMPRESORA" obtiene un pdf y lo envia por ftp a una impresora que permita FTP y reconozca pdf.
        "EXCEL" obtiene una tabla excel.
        "SVG" obtiene formato SVG con una trasformación XSLT de la que se obtiene FO.
        "JPEG" obtiene formato JPEG con una trasformación XSLT de la que se obtiene FO.
        "PNG" obtiene formato PNG con una trasformación XSLT de la que se obtiene FO.
        "TIF" obtiene formato TIF con una trasformación XSLT de la que se obtiene FO.
		</description>	
		<name>detalle</name>
		<tag-class>czfv.Etiquetas.TagDetalle</tag-class>
		<body-content>jsp</body-content>
		<attribute>
			<description>Identificador de sql que se utiliza se lee en def.</description>
			<name>sqlid</name>
		</attribute>
		<attribute>
			<description>Número de filas de la página. 0 todas</description>
			<name>filas</name>
			<required>true</required>
		</attribute>
		<attribute>
			<description>Primera fila del informe</description>
			<name>primeraFila</name>
			<required>false</required>
		</attribute>
		<attribute>
			<description>Página a partir de la cual queremos ver el report. Si primera fila es distinto de 1, ignoramos este parámetro</description>
			<name>pagina</name>
			<required>false</required>
		</attribute>
		<attribute>
			<description>Si queremos usar o no una consulta scroll sensitive</description>
			<name>scrollSensitive</name>
			<required>false</required>
		</attribute>
		<attribute>
			<description>Si queremos obtener o no el total de filas. Por defecto, false. Puede tomar los valores true o false</description>
			<name>calcularTotal</name>
			<required>false</required>
		</attribute>
		<attribute>
			<description>Formato de salida. </description>
			<name>formato</name>
			<required>false</required>
		</attribute>
		<attribute>
			<description>Fichero XSLT para transformaciones XSLT</description>
			<name>xslt</name>
			<required>false</required>
		</attribute>
		<attribute>
			<description>Nombre de fichero (para imagenes y pdf) o dirección IP para impresoras</description>
			<name>destino</name>
			<required>false</required>
		</attribute>
		<example>		        	
			&lt;a:detalle sqlid="sql_empresas" formato="xml"/&gt;<br/>
		</example>
	</tag>
	<tag>
		<description>
		Ejecuta una sentencia sql que no devuelve filas, es una etiqueta sin cuerpo.
		El sqlid indica la sentencia a ejecutar.
		</description>
		<name>sentencia</name>
		<tag-class>czfv.Etiquetas.TagSentencia</tag-class>
		<body-content>empty</body-content>
		<attribute>
			<description>Identificador de sql se utiliza para guardar en def.</description>
			<name>sqlid</name>
		</attribute>
		<example>		        	
			&lt;a:sentencia sqlid="sql_empresas"/&gt;<br/>
		</example>
	</tag>
	<tag>
		<description>
		Ejecuta un conjunto de sentencias sql que no devuelven filas en modo transacción, es decir
		o se ejecutan todas o no se ejecuta ninguna. Es una etiqueta sin cuerpo.
		El sqlid indica las sentencias a ejecutar, que deben separarse por 3 barras verticalas |||.
		</description>
		<name>transaccion</name>
		<tag-class>czfv.Etiquetas.TagTransaccion</tag-class>
		<body-content>empty</body-content>
		<attribute>
			<description>Identificador de sql se utiliza para guardar en def.</description>
			<name>sqlid</name>
		</attribute>
		<example>		        	
			&lt;a:transaccion sqlid="sql_empresas"/&gt;<br/>
		</example>
	</tag>
	<tag>
		<description>
		Sustituye las variables $(VARIABLE) existentes en el cuerpo de la etiqueta.
		</description>
		<name>evalua</name>
		<tag-class>czfv.Etiquetas.TagEvalua</tag-class>
		<body-content>jsp</body-content>
		<example>
            &lt;a:evalua&gt;<br/>
            	Se encontró $(toner) y el nivel de toner es de $(toner_1)<br/>
            &lt;/a:evalua&gt;<br/>
		</example>
	</tag>
	<tag>
		<description>
			El contenido del cuerpo de la etiqueta se procesa si existe la variable indicada.
			Se entiende que existe si su contenido es diferente a una cadena vacia.
		</description>
		<name>siexiste</name>
		<tag-class>czfv.Etiquetas.TagSiExiste</tag-class>
		<attribute>
			<description>Variable que tenemos que verificar si existe</description>
			<name>variable</name>
			<required>true</required>
		</attribute>
		<body-content>jsp</body-content>
		<example>
            &lt;a:siexiste variable="usuario"&gt;<br/>
            	Bienvenido, es vd un usuario registrado<br/>
            &lt;/a:siexiste&gt;<br/>
		</example>
	</tag>
	<tag>
		<description>
			El contenido del cuerpo de la etiqueta se procesa si NO existe la variable indicada.
			Se entiende que NO existe si su contenido es cadena vacia o no se ha definido.
		</description>
		<name>sinoexiste</name>
		<tag-class>czfv.Etiquetas.TagSiNoExiste</tag-class>
		<attribute>
			<description>Variable que tenemos que verificar si no existe</description>
			<name>variable</name>
			<required>true</required>
		</attribute>
		<body-content>jsp</body-content>
		<example>
            &lt;a:sinoexiste variable="usuario"&gt;<br/>
            	Este sitio solo es para usuarios registrados<br/>
            &lt;/a:sinoexiste&gt;<br/>
		</example>
	</tag>
	<tag>
		<description>
			Obtiene el valor de una variable para poder compararla en etiquetas hijas con
			valores constantes.
			Veanse las etiquetas "si"
		</description>
		<name>comprueba</name>
		<tag-class>czfv.Etiquetas.TagComprueba</tag-class>
		<attribute>
			<description>Variable que tenemos que evaluar (Case)</description>
			<name>variable</name>
		</attribute>
		<body-content>jsp</body-content>
		<example>
            &lt;a:comprueba variable="tipousuario"&gt;<br/>
                &lt;a:si es="invitado"&gt;<br/>
                    Usuario Invitado
            	&lt;/a:si&gt;<br/>
                &lt;a:enotrocaso&gt;<br/>
                    Usuario Registrado
            	&lt;/a:enotrocaso&gt;<br/>
            &lt;/a:comprueba&gt;<br/>
		</example>
      	</tag>
	<tag>
		<description>
		Comprueba si la variable definida en la etiqueta "comprueba" es igual a la constante
		definida en el atributo "es" de esta etiqueta.
		Esta etiqueta es hija de "comprueba".
		</description>
		<name>si</name>
		<tag-class>czfv.Etiquetas.TagSi</tag-class>
		<attribute>
			<description>Valor opcional de la variable a comprobar</description>
			<name>es</name>
		</attribute>
		<body-content>jsp</body-content>
		<example>
            &lt;a:comprueba variable="tipousuario"&gt;<br/>
                &lt;a:si es="invitado"&gt;<br/>
                    Usuario Invitado
            	&lt;/a:si&gt;<br/>
                &lt;a:enotrocaso&gt;<br/>
                    Usuario Registrado
            	&lt;/a:enotrocaso&gt;<br/>
            &lt;/a:comprueba&gt;<br/>
		</example>
	</tag>
	<tag>
		<description>
		Comprueba si la variable definida en la etiqueta "comprueba" 
		es distinta a todas las etiquetas "si" definidas con anterioridad a esta
		etiqueta. 
		Esta etiqueta es hija de "comprueba".
		</description>
		<name>enotrocaso</name>
		<tag-class>czfv.Etiquetas.TagEnOtroCaso</tag-class>
		<body-content>jsp</body-content>
		<example>
            &lt;a:comprueba variable="tipousuario"&gt;<br/>
                &lt;a:si es="invitado"&gt;<br/>
                    Usuario Invitado
            	&lt;/a:si&gt;<br/>
                &lt;a:enotrocaso&gt;<br/>
                    Usuario Registrado
            	&lt;/a:enotrocaso&gt;<br/>
            &lt;/a:comprueba&gt;<br/>
		</example>
	</tag>
	<tag>
		<description>
		Permite definir variables, tiene 2 modos de comportarse, para variables multilinea,
		se necesita una etiqueta por variable, indicando el nombre de la variable en el atributo
		"variable", en este caso el cuerpo INTEGRO se almacena en la variable tenga las lineas que tenga.
		En el modo de una sola linea, no se define el atributo variable, y  cada linea debe tener
		el formato:
			variable="valor"
		pudiendo definirse muchas lineas cada una con una variable.
		</description>
		<name>define</name>
		<tag-class>czfv.Etiquetas.TagDefine</tag-class>
		<attribute>
			<description>Variable opcional para definir variable con muchas lineas</description>
			<name>variable</name>
			<required>false</required>
		</attribute>
		<attribute>
			<description>SI/NO se desean procesar los request</description>
			<name>request</name>
			<required>false</required>
		</attribute>                
		<body-content>jsp</body-content>
		<example>
            &lt;a:define variable="tipousuario"&gt;<br/>
                Invitado
            &lt;/a:define&gt;<br/>
            &lt;a:define&gt;<br/>
                usuario="anonimo"<br/>
                tipousuario="invitado"<br/>
            &lt;/a:define&gt;<br/>
		</example>
	</tag>
	<tag>
		<description>
		Permite definir una variable concatenando de forma condicional una serie de lineas
		que pueden contener variables tipo $(VARIABLE), añadiendo un prefijo y un sufijo a cada 
		linea.
		La linea se concatena si todas las $(VARIABLE) existen y son distintas de cadena vacia, si 
		no se pueden resolver todas se ignora la linea.
		El prefijo se añade solamente la primera vez que una linea es correcta.
		El separador separa las lineas.
		</description>	
		<name>lista</name>
		<tag-class>czfv.Etiquetas.TagLista</tag-class>
		<body-content>jsp</body-content>
		<attribute>
			<description>variable que se utiliza para guardar en def.</description>
			<name>variable</name>
			<required>true</required>
		</attribute>
		<attribute>
			<description>prefijo que se antepone a la lista, por ejemplo where</description>
			<name>prefijo</name>
		</attribute>
		<attribute>
			<description>separador que se utiliza para crear la lista, por ejemplo and</description>
			<name>separador</name>
		</attribute>
		<example>
			&lt;a:lista variable="miwhere" prefijo="WHERE" separador="AND"&gt;<br/>
				$(libreria).$(fichero).localidad='$(localidad)'<br/>
				$(libreria).$(fichero).provincia='$(provincia)'<br/>
			&lt;/a:lista&gt;<br/>
			&lt;a:sql sqlid="consulta"&gt;<br/>
				&lt;a:evalua&gt;<br/>
					select count(*) from $(libreria).$(fichero) $(miwhere)<br/> 
				&lt;/a:evalua&gt;<br/>
			&lt;/a:sql&gt;<br/>			
		</example>
	</tag>
	<tag>
		<description>
		Permite enviar un mensaje de correo electrónico
		</description>
		<name>correo</name>
		<tag-class>czfv.Etiquetas.TagCorreo</tag-class>
		<attribute>
			<description>Email del remitente</description>
			<name>de</name>
			<required>true</required>
		</attribute>
		<attribute>
			<description>Email del destinatario</description>
			<name>a</name>
			<required>true</required>
		</attribute>
		<attribute>
			<description>Email del destinatario como copia</description>
			<name>cc</name>
			<required>false</required>
		</attribute>
		<attribute>
			<description>Asunto del mensaje</description>
			<name>asunto</name>
			<required>false</required>
		</attribute>
		<body-content>jsp</body-content>
		<example>
            &lt;a:correo de="micorreo@ardan.es" a="destinatario@otro.es" asunto="contacto"&gt;<br/>
                cuerpo del mensaje en html
            &lt;/a:correo&gt;<br/>
		</example>
	</tag>
       	<tag>
		<description>
		Desarrolla campos option de forma automatica
		</description>
		<name>opcion</name>
		<tag-class>czfv.Etiquetas.TagOpcion</tag-class>
		<attribute>
			<description>sql a ejecutar para obtener los campos valor y texto</description>
			<name>sqlid</name>
			<required>true</required>
		</attribute>
		<attribute>
			<description>Campo del sql que contiene el value que va en la option</description>
			<name>campovalor</name>
			<required>true</required>
		</attribute>
		<attribute>
			<description>Campo del sql que contiene el texo que va en la opcion</description>
			<name>campotexto</name>
			<required>true</required>
		</attribute>
		<attribute>
			<description>valor  que debe estar seleccionado, puede ser una macro</description>
			<name>seleccionar</name>
			<required>false</required>
		</attribute>
		<body-content>scriptless</body-content>
		<example>
                &lt;a:opcion sqlid="consultatabla" campovalor="id" campotexto="provincia" seleccionar="36"/&gt;<br/>
		</example>
	</tag>                        
	<tag>
		<description>
		Permite implementar un cache para contenidos. Si los contenidos están en el cache
                no se evalua lo que hay entre la etiqueta chache y fin de cache, se envia lo que hay
                pero no se controla si hay cambios, es responsabilidad de la aplicación usar el atributo
                flag para esto, si flag tiene algun contenido se regenera el cache, si no se utiliza su contenido.
		</description>
		<name>cache</name>
		<tag-class>czfv.Etiquetas.TagSalva</tag-class>
		<attribute>
			<description>fichero donde se salva</description>
			<name>fichero</name>
			<required>true</required>
		</attribute>
		<attribute>
			<description>Variable que si esta vacia indica que se use el cache</description>
			<name>flag</name>
			<required>false</required>
		</attribute>
		<body-content>scriptless</body-content>
		<example>
            &lt;a:cache fichero="cache/pagina1.html" flag="$(regenerar)"&gt;<br/>
                cuerpo del mensaje en html
            &lt;/a:cache&gt;<br/>
		</example>
	</tag>
</taglib>

