<?xml version="1.0" encoding="UTF-8"?>
<!--
ao-taglib - Making JSP be what it should have been all along.
Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026  AO Industries, Inc.
    support@aoindustries.com
    7262 Bull Pen Cir
    Mobile, AL 36695

This file is part of ao-taglib.

ao-taglib is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

ao-taglib is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License
along with ao-taglib.  If not, see <https://www.gnu.org/licenses/>.
-->
<!DOCTYPE taglib [

<!-- Implementation-specific settings -->
<!ENTITY tld "ao-legacy.tld">
<!ENTITY tld_displayName "AO Taglib (Legacy)">
<!ENTITY tld_uri "https://oss.aoapps.com/taglib/legacy">
<!ENTITY tld_description "&lt;em&gt;This is the legacy implementation for compatibility with applications that use JSP scriptlets.&lt;/em&gt;
When JSP scriptlets are not required, please use &lt;a href=&quot;https://oss.aoapps.com/taglib/ao.tld/&quot;&gt;AO Taglib Reference&lt;/a&gt;.">
<!ENTITY package "com.aoapps.taglib.legacy">
<!ENTITY JSP "JSP">
<!ENTITY aoEncodingTld "ao-encoding-legacy.tld">
<!ENTITY nmwEmailTld "nmw-email-legacy.tld">
<!ENTITY nmwPaymentTld "nmw-payment-legacy.tld">

<!-- <common> -->
<!ENTITY IdAttribute_description "The &lt;a href=&quot;https://www.w3schools.com/tags/att_global_id.asp&quot;&gt;id of the element&lt;/a&gt;.">
<!ENTITY IdAttribute "<attribute>
      <description>
        &lt;p&gt;
          &IdAttribute_description;
        &lt;/p&gt;
      </description>
      <name>id</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>">

<!ENTITY IdBufferedAttribute_description "&IdAttribute_description;
          A nested &lt;a href=&quot;https://oss.aoapps.com/taglib/&tld;/tag-id&quot;&gt;<![CDATA[&lt;ao:id&gt;]]>&lt;/a&gt;
          tag will override this value.">
<!ENTITY IdBufferedAttribute "<attribute>
      <description>
        &lt;p&gt;
          &IdBufferedAttribute_description;
        &lt;/p&gt;
      </description>
      <name>id</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>">

<!ENTITY ClassAttribute_description "The &lt;a href=&quot;https://www.w3schools.com/tags/att_global_class.asp&quot;&gt;CSS class for the element&lt;/a&gt;.">
<!ENTITY ClassAttribute "<attribute>
      <description>
        &lt;p&gt;
          &ClassAttribute_description;
        &lt;/p&gt;
      </description>
      <name>class</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>">

<!ENTITY ClassBufferedAttribute_description "&ClassAttribute_description;
          A nested &lt;a href=&quot;https://oss.aoapps.com/taglib/&tld;/tag-class&quot;&gt;<![CDATA[&lt;ao:class&gt;]]>&lt;/a&gt;
          tag will override this value.">
<!ENTITY ClassBufferedAttribute "<attribute>
      <description>
        &lt;p&gt;
          &ClassBufferedAttribute_description;
        &lt;/p&gt;
      </description>
      <name>class</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>">

<!ENTITY DirAttribute_description "The &lt;a href=&quot;https://www.w3schools.com/tags/att_global_dir.asp&quot;&gt;dir of the element&lt;/a&gt;.">
<!ENTITY DirAttribute "<attribute>
      <description>
        &lt;p&gt;
          &DirAttribute_description;
        &lt;/p&gt;
      </description>
      <name>dir</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>">

<!ENTITY DirBufferedAttribute_description "&DirAttribute_description;
          A nested &lt;a href=&quot;https://oss.aoapps.com/taglib/&tld;/tag-dir&quot;&gt;<![CDATA[&lt;ao:dir&gt;]]>&lt;/a&gt;
          tag will override this value.">
<!ENTITY DirBufferedAttribute "<attribute>
      <description>
        &lt;p&gt;
          &DirBufferedAttribute_description;
        &lt;/p&gt;
      </description>
      <name>dir</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>">

<!ENTITY StyleAttribute_description "The &lt;a href=&quot;https://www.w3schools.com/tags/att_global_style.asp&quot;&gt;CSS style for the element&lt;/a&gt;.">
<!ENTITY StyleAttribute "<attribute>
      <description>
        &lt;p&gt;
          &StyleAttribute_description;
        &lt;/p&gt;
      </description>
      <name>style</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>">

<!ENTITY StyleBufferedAttribute_description "&StyleAttribute_description;
          A nested &lt;a href=&quot;https://oss.aoapps.com/taglib/&tld;/tag-style&quot;&gt;<![CDATA[&lt;ao:style&gt;]]>&lt;/a&gt;
          tag will override this value.">
<!ENTITY StyleBufferedAttribute "<attribute>
      <description>
        &lt;p&gt;
          &StyleBufferedAttribute_description;
        &lt;/p&gt;
      </description>
      <name>style</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>">

<!ENTITY GlobalAttributes "&IdAttribute;
    &ClassAttribute;
    &DirAttribute;
    &StyleAttribute;">
<!ENTITY GlobalBufferedAttributes "&IdBufferedAttribute;
    &ClassBufferedAttribute;
    &DirBufferedAttribute;
    &StyleBufferedAttribute;">

<!ENTITY OnblurAttribute "<attribute>
      <description>
        &lt;p&gt;
          A JavaScript &lt;a href=&quot;https://www.w3schools.com/tags/ev_onblur.asp&quot;&gt;onblur&lt;/a&gt; handler.
          A nested &lt;a href=&quot;https://oss.aoapps.com/taglib/&tld;/tag-onblur&quot;&gt;<![CDATA[&lt;ao:onblur&gt;]]>&lt;/a&gt;
          tag will override this value.
        &lt;/p&gt;
      </description>
      <name>onblur</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>">

<!ENTITY OnchangeAttribute "<attribute>
      <description>
        &lt;p&gt;
          A JavaScript &lt;a href=&quot;https://www.w3schools.com/tags/ev_onchange.asp&quot;&gt;onchange&lt;/a&gt; handler.
          A nested &lt;a href=&quot;https://oss.aoapps.com/taglib/&tld;/tag-onchange&quot;&gt;<![CDATA[&lt;ao:onchange&gt;]]>&lt;/a&gt;
          tag will override this value.
        &lt;/p&gt;
      </description>
      <name>onchange</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>">

<!ENTITY OnclickAttribute "<attribute>
      <description>
        &lt;p&gt;
          A JavaScript &lt;a href=&quot;https://www.w3schools.com/tags/ev_onclick.asp&quot;&gt;onclick&lt;/a&gt; handler.
          A nested &lt;a href=&quot;https://oss.aoapps.com/taglib/&tld;/tag-onclick&quot;&gt;<![CDATA[&lt;ao:onclick&gt;]]>&lt;/a&gt;
          tag will override this value.
        &lt;/p&gt;
      </description>
      <name>onclick</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>">

<!ENTITY OnerrorAttribute "<attribute>
      <description>
        &lt;p&gt;
          A JavaScript &lt;a href=&quot;https://www.w3schools.com/jsref/event_onerror.asp&quot;&gt;onerror&lt;/a&gt; handler.
          A nested &lt;a href=&quot;https://oss.aoapps.com/taglib/&tld;/tag-onerror&quot;&gt;<![CDATA[&lt;ao:onerror&gt;]]>&lt;/a&gt;
          tag will override this value.
        &lt;/p&gt;
      </description>
      <name>onerror</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>">

<!ENTITY OnfocusAttribute "<attribute>
      <description>
        &lt;p&gt;
          A JavaScript &lt;a href=&quot;https://www.w3schools.com/tags/ev_onfocus.asp&quot;&gt;onfocus&lt;/a&gt; handler.
          A nested &lt;a href=&quot;https://oss.aoapps.com/taglib/&tld;/tag-onfocus&quot;&gt;<![CDATA[&lt;ao:onfocus&gt;]]>&lt;/a&gt;
          tag will override this value.
        &lt;/p&gt;
      </description>
      <name>onfocus</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>">

<!ENTITY OnkeypressAttribute "<attribute>
      <description>
        &lt;p&gt;
          A JavaScript &lt;a href=&quot;https://www.w3schools.com/tags/ev_onkeypress.asp&quot;&gt;onkeypress&lt;/a&gt; handler.
          A nested &lt;a href=&quot;https://oss.aoapps.com/taglib/&tld;/tag-onkeypress&quot;&gt;<![CDATA[&lt;ao:onkeypress&gt;]]>&lt;/a&gt;
          tag will override this value.
        &lt;/p&gt;
      </description>
      <name>onkeypress</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>">

<!ENTITY OnloadAttribute "<attribute>
      <description>
        &lt;p&gt;
          A JavaScript &lt;a href=&quot;https://www.w3schools.com/jsref/event_onload.asp&quot;&gt;onload&lt;/a&gt; handler.
          A nested &lt;a href=&quot;https://oss.aoapps.com/taglib/&tld;/tag-onload&quot;&gt;<![CDATA[&lt;ao:onload&gt;]]>&lt;/a&gt;
          tag will override this value.
        &lt;/p&gt;
      </description>
      <name>onload</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>">

<!ENTITY OnmouseoutAttribute "<attribute>
      <description>
        &lt;p&gt;
          A JavaScript &lt;a href=&quot;https://www.w3schools.com/tags/ev_onmouseout.asp&quot;&gt;onmouseout&lt;/a&gt; handler.
          A nested &lt;a href=&quot;https://oss.aoapps.com/taglib/&tld;/tag-onmouseout&quot;&gt;<![CDATA[&lt;ao:onmouseout&gt;]]>&lt;/a&gt;
          tag will override this value.
        &lt;/p&gt;
      </description>
      <name>onmouseout</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>">

<!ENTITY OnmouseoverAttribute "<attribute>
      <description>
        &lt;p&gt;
          A JavaScript &lt;a href=&quot;https://www.w3schools.com/tags/ev_onmouseover.asp&quot;&gt;onmouseover&lt;/a&gt; handler.
          A nested &lt;a href=&quot;https://oss.aoapps.com/taglib/&tld;/tag-onmouseover&quot;&gt;<![CDATA[&lt;ao:onmouseover&gt;]]>&lt;/a&gt;
          tag will override this value.
        &lt;/p&gt;
      </description>
      <name>onmouseover</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>">

<!ENTITY OnsubmitAttribute "<attribute>
      <description>
        &lt;p&gt;
          A JavaScript &lt;a href=&quot;https://www.w3schools.com/tags/ev_onsubmit.asp&quot;&gt;onsubmit&lt;/a&gt; handler.
          A nested &lt;a href=&quot;https://oss.aoapps.com/taglib/&tld;/tag-onsubmit&quot;&gt;<![CDATA[&lt;ao:onsubmit&gt;]]>&lt;/a&gt;
          tag will override this value.
        &lt;/p&gt;
      </description>
      <name>onsubmit</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>">

]>
<taglib xmlns="https://jakarta.ee/xml/ns/jakartaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
                      https://jakarta.ee/xml/ns/jakartaee/web-jsptaglibrary_3_1.xsd"
  version="3.1">
  <!-- datePublished="2016-08-07T16:29:54-05:00" -->
  <!-- dateModified="2025-12-30T13:42:11Z" -->
<!-- </common> -->
  <!-- allowRobots="false" -->
<!-- <common> -->
  <description><![CDATA[
    <p>Making JSP be what it should have been all along.</p>
    <p>]]>&tld_description;<![CDATA[</p>
    <p>Both implementations are interoperable and may be used simultaneously under different prefixes.</p>
    <hr />
    <p>
      This taglib is part of an extensible suite of interoperable, context-aware,
      <a href="https://oss.aoapps.com/encoding/">auto-encoding</a> taglibs.
      All auto-encoding tags generate correct output for their context, provide context information for nested
      tags, and validate the output of nested tags.  For example,
      <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-message">&lt;ao:message&gt;</a> within
      <a href="https://oss.aoapps.com/encoding/taglib/]]>&aoEncodingTld;<![CDATA[/tag-psql">&lt;encoding:psql&gt;</a> will write its output
      encoded as <a href="https://oss.aoapps.com/encoding/apidocs/com.aoapps.encoding/com/aoapps/encoding/MediaType.html#PSQL">PSQL</a>.
    </p>
    <p>
      This suite includes, but is not limited to:
    </p>
    <ul>
      <li><a href="https://oss.aoapps.com/encoding/taglib/]]>&aoEncodingTld;<![CDATA[/">AO Encoding Taglib</a></li>
      <li><a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/">AO Taglib</a> (this taglib)</li>
      <li><a href="https://aoindustries.com/aoweb-struts/aoweb-struts-skin.tld/">AOWeb Struts Skin Taglib</a></li>
      <li><a href="https://oss.newmediaworks.com/email-taglib/]]>&nmwEmailTld;<![CDATA[/">NMW Email Taglib</a></li>
      <li><a href="https://oss.newmediaworks.com/payment-taglib/]]>&nmwPaymentTld;<![CDATA[/">NMW Payment Taglib</a></li>
      <!-- TODO: nmw-persistence-taglib once open-source, and many others -->
    </ul>
  ]]></description>
  <display-name>&tld_displayName;</display-name>
  <tlib-version>
    <!-- Release: 10.0.0-POST-SNAPSHOT -->
    10.0.0
  </tlib-version>
  <short-name>ao</short-name>
  <uri>&tld_uri;</uri>
  <!-- TODO: Implement validator(s), such as ao:when directly inside ao:choose and similar -->
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2026-02-05T18:09:30Z" -->
    <description><![CDATA[
      <p class="semanticcms-tag-reference-summary">
        Renders an <a href="https://www.w3schools.com/tags/tag_a.asp">&lt;a&gt;</a> tag.
      </p>
      <p>
        The body is trimmed while written.
      </p>
      <p>
        If the body is empty after being trimmed, then href itself will be written as the body,
        decoded into in a human-readable (but possibly ambiguous) format.
        If the href has a scheme of <code>mailto:</code>, <code>telnet:</code>, or <code>tel:</code>,
        the scheme is stripped and the remainder of the href is displayed.
      </p>
      <p>
        Any attribute that has no namespace and begins with <code>param.</code> is added to the href as a URL parameter.
        The parameter name is the part of the attribute name following <code>param.</code>.
      </p>
      <p>
        When a parameter value is <code>null</code> it is not added.
        When a parameter value is an <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Enum.html">Enum</a>, the
        value is obtained via <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Enum.html#name()">Enum.name()</a>.
        If the value is an
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Iterable.html">Iterable</a>,
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Iterator.html">Iterator</a>,
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Enumeration.html">Enumeration</a>,
        or array, then each non-null element is coerced to
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">String</a> as a separate
        parameter in iteration order.  Otherwise, the value itself is
        coerced to <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">String</a>
        for the parameter value.
      </p>
      <p>
        Nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-param">&lt;ao:param&gt;</a> or
        <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-params">&lt;ao:params&gt;</a> tags will
        add parameters after any provided as attributes.
      </p>
    ]]></description>
    <name>a</name>
    <tag-class>&package;.ATag</tag-class>
    <tei-class>com.aoapps.taglib.ElementTagTEI</tei-class>
    <body-content>&JSP;</body-content>
    &GlobalBufferedAttributes;
    <attribute>
      <description><![CDATA[
        <p class="semanticcms-tag-reference-summary">
          The <a href="https://www.w3schools.com/tags/att_a_href.asp">href for the link</a>.
          The href is modified in several ways to make things much easier to work with.
        </p>
        <p>
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-href">&lt;ao:href&gt;</a>
          tag will override this value.
        </p>
        <p>
          In order to make relative paths predictable, relative paths are interpreted from
          the current JSP page.
        </p>
        <p>
          In order to keep paths app-relative, if starts with a /, the context path will be
          prepended to the path.
        </p>
        <p>
          In order to simplify things behind URL mapping schemes,
          the href is always written starting with '/'.  This avoids any need to include any
          <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-base">&lt;ao:base&gt;</a> tags.
        </p>
        <p>
          URL rewriting is performed as needed via
          <a rel="nofollow" href="https://jakarta.ee/specifications/platform/10/apidocs/jakarta/servlet/http/HttpServletResponse.html#encodeURL(java.lang.String)">HttpServletResponse.encodeURL</a>.
        </p>
        <p>
          To support paths in different character sets, a Unicode to ASCII URI encoding is performed
          on every character that is not defined in <a href="https://datatracker.ietf.org/doc/html/rfc3986#section-2.2">RFC 3986: Reserved Characters</a>.
          To avoid ambiguity, any dynamic parameters or anchors in the URL must have been correctly encoded by the caller.
        </p>
        <p>
          Any directly nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-param">&lt;ao:param&gt;</a>
          or <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-params">&lt;ao:params&gt;</a>
          tag will add parameters to the href.
        </p>
      ]]></description>
      <name>href</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          When <code>true</code>, generates an absolute URL for the <a href="https://www.w3schools.com/tags/att_a_href.asp">href for the link</a>.
          Defaults to <code>false</code>.
        </p>
      ]]></description>
      <name>absolute</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          When <code>true</code>, will generate a <a href="https://oss.aoapps.com/servlet-util/apidocs/com.aoapps.servlet.util/com/aoapps/servlet/http/Canonical.html">Canonical URL</a>.
          Canonical URLs should be used where per-user response URL rewriting
          (such as information added when cookies are disabled) should be avoided.
          Defaults to <code>false</code>.
        </p>
      ]]></description>
      <name>canonical</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          If the href represents a local resource, a parameter of "lastModified=#####" may be
          automatically added with the timestamp of the local resource to the nearest second.
          May be one of <code>true</code>, <code>false</code>, or <code>auto</code>.
          Defaults to <code>auto</code>.
        </p>
        <p>
          In auto mode, last modified stamping may be disabled by the client with
          the <code>X-com-aoapps-servlet-lastmodified-enabled: false</code> header.
        </p>
        <p>
          In auto mode, last modified stamping is not performed on
          <a href="https://oss.aoapps.com/servlet-util/apidocs/com.aoapps.servlet.util/com/aoapps/servlet/http/Canonical.html">Canonical URLs</a>.
        </p>
      ]]></description>
      <name>addLastModified</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_a_hreflang.asp">hreflang for the link</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-hreflang">&lt;ao:hreflang&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>hreflang</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_a_rel.asp">rel for the link</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-param">&lt;ao:rel&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>rel</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_a_target.asp">target for the link</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-target">&lt;ao:target&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>target</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_global_title.asp">title text for the element</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-title">&lt;ao:title&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>title</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_a_type.asp">type for the link</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-type">&lt;ao:type&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>type</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    &OnclickAttribute;
    &OnmouseoutAttribute;
    &OnmouseoverAttribute;
    <dynamic-attributes>true</dynamic-attributes>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-09-25T23:27:50-05:00" -->
    <description><![CDATA[
      <p>
        Provides an <a href="https://www.w3schools.com/tags/att_action.asp">action attribute</a> to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/ActionAttribute.html">ActionAttribute</a>
        parent tag.
        The body of this tag, after trimming, is valid <a href="https://datatracker.ietf.org/doc/html/rfc3986">RFC 3986 URI</a>
        or <a href="https://datatracker.ietf.org/doc/html/rfc3987">RFC 3987 IRI</a>.
      </p>
    ]]></description>
    <name>action</name>
    <tag-class>&package;.ActionTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p>
        Provides an <a href="https://www.w3schools.com/tags/att_alt.asp">alt attribute</a> to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/AltAttribute.html">AltAttribute</a>
        parent tag.
      </p>
    ]]></description>
    <name>alt</name>
    <tag-class>&package;.AltTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2019-10-08T21:41:35-05:00" -->
    <!-- dateModified="2026-02-05T18:09:30Z" -->
    <description><![CDATA[
      <p class="semanticcms-tag-reference-summary">
        Renders an <a href="https://www.w3schools.com/tags/tag_area.asp">&lt;area&gt;</a> tag.
      </p>
      <p>
        The body is invoked to support nested tags, but with any output discarded.
      </p>
      <p>
        Any attribute that has no namespace and begins with <code>param.</code> is added to the href as a URL parameter.
        The parameter name is the part of the attribute name following <code>param.</code>.
      </p>
      <p>
        When a parameter value is <code>null</code> it is not added.
        When a parameter value is an <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Enum.html">Enum</a>, the
        value is obtained via <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Enum.html#name()">Enum.name()</a>.
        If the value is an
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Iterable.html">Iterable</a>,
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Iterator.html">Iterator</a>,
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Enumeration.html">Enumeration</a>,
        or array, then each non-null element is coerced to
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">String</a> as a separate
        parameter in iteration order.  Otherwise, the value itself is
        coerced to <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">String</a>
        for the parameter value.
      </p>
      <p>
        Nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-param">&lt;ao:param&gt;</a> or
        <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-params">&lt;ao:params&gt;</a> tags will
        add parameters after any provided as attributes.
      </p>
    ]]></description>
    <name>area</name>
    <tag-class>&package;.AreaTag</tag-class>
    <tei-class>com.aoapps.taglib.AreaTagTEI</tei-class>
    <body-content>&JSP;</body-content>
    &GlobalBufferedAttributes;
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_area_shape.asp">shape of the area</a>.
          Must be one of <code>"default"</code>, <code>"rect"</code>, <code>"circle"</code>, or <code>"poly"</code>.
        </p>
      ]]></description>
      <name>shape</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_area_coords.asp">coordinates of the area</a>.
          Required except when <code>shape</code> is <code>"default"</code>.
        </p>
      ]]></description>
      <name>coords</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p class="semanticcms-tag-reference-summary">
          The <a href="https://www.w3schools.com/tags/att_area_href.asp">href for the area</a>.
          The href is modified in several ways to make things much easier to work with.
        </p>
        <p>
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-href">&lt;ao:href&gt;</a>
          tag will override this value.
        </p>
        <p>
          In order to make relative paths predictable, relative paths are interpreted from
          the current JSP page.
        </p>
        <p>
          In order to keep paths app-relative, if starts with a /, the context path will be
          prepended to the path.
        </p>
        <p>
          In order to simplify things behind URL mapping schemes,
          the href is always written starting with '/'.  This avoids any need to include any
          <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-base">&lt;ao:base&gt;</a> tags.
        </p>
        <p>
          URL rewriting is performed as needed via
          <a rel="nofollow" href="https://jakarta.ee/specifications/platform/10/apidocs/jakarta/servlet/http/HttpServletResponse.html#encodeURL(java.lang.String)">HttpServletResponse.encodeURL</a>.
        </p>
        <p>
          To support paths in different character sets, a Unicode to ASCII URI encoding is performed
          on every character that is not defined in <a href="https://datatracker.ietf.org/doc/html/rfc3986#section-2.2">RFC 3986: Reserved Characters</a>.
          To avoid ambiguity, any dynamic parameters or anchors in the URL must have been correctly encoded by the caller.
        </p>
        <p>
          Any directly nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-param">&lt;ao:param&gt;</a>
          or <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-params">&lt;ao:params&gt;</a>
          tag will add parameters to the href.
        </p>
      ]]></description>
      <name>href</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          When <code>true</code>, generates an absolute URL for the <a href="https://www.w3schools.com/tags/att_area_href.asp">href for the area</a>.
          Defaults to <code>false</code>.
        </p>
      ]]></description>
      <name>absolute</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          When <code>true</code>, will generate a <a href="https://oss.aoapps.com/servlet-util/apidocs/com.aoapps.servlet.util/com/aoapps/servlet/http/Canonical.html">Canonical URL</a>.
          Canonical URLs should be used where per-user response URL rewriting
          (such as information added when cookies are disabled) should be avoided.
          Defaults to <code>false</code>.
        </p>
      ]]></description>
      <name>canonical</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          If the href represents a local resource, a parameter of "lastModified=#####" may be
          automatically added with the timestamp of the local resource to the nearest second.
          May be one of <code>true</code>, <code>false</code>, or <code>auto</code>.
          Defaults to <code>auto</code>.
        </p>
        <p>
          In auto mode, last modified stamping may be disabled by the client with
          the <code>X-com-aoapps-servlet-lastmodified-enabled: false</code> header.
        </p>
        <p>
          In auto mode, last modified stamping is not performed on
          <a href="https://oss.aoapps.com/servlet-util/apidocs/com.aoapps.servlet.util/com/aoapps/servlet/http/Canonical.html">Canonical URLs</a>.
        </p>
      ]]></description>
      <name>addLastModified</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_area_hreflang.asp">hreflang for the area</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-hreflang">&lt;ao:hreflang&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>hreflang</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_area_rel.asp">rel for the area</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-param">&lt;ao:rel&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>rel</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_area_target.asp">target for the area</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-target">&lt;ao:target&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>target</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_area_type.asp">type for the area</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-type">&lt;ao:type&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>type</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_area_alt.asp">alt text for the area</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-alt">&lt;ao:alt&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>alt</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_global_title.asp">title text for the element</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-title">&lt;ao:title&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>title</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    &OnclickAttribute;
    &OnmouseoverAttribute;
    &OnmouseoutAttribute;
    <dynamic-attributes>true</dynamic-attributes>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2023-10-02T00:34:59Z" -->
    <description><![CDATA[
      <p>
        Adds an argument to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/ArgsAttribute.html">ArgsAttribute</a>
        parent tag.
      </p>
    ]]></description>
    <name>arg</name>
    <tag-class>&package;.ArgTag</tag-class>
    <body-content>&JSP;</body-content>
    <attribute>
      <description><![CDATA[
        <p>
          The name of argument tag.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-name">&lt;ao:name&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>name</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The value of the parameter.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-value">&lt;ao:value&gt;</a>
          tag will override this value.
          If neither is provided, the output of the body is used with whitespace trimmed.
        </p>
      ]]></description>
      <name>value</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
  </tag>
  <tag>
    <!-- datePublished="2016-09-25T11:33:29-05:00" -->
    <!-- dateModified="2026-02-05T18:09:30Z" -->
    <description><![CDATA[
      <p>
        Evaluates the test expression, if it is not <code>true</code> throws
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/AssertionError.html">AssertionError</a>
        with the optional message.
      </p>
    ]]></description>
    <name>assert</name>
    <tag-class>com.aoapps.taglib.AssertTag</tag-class>
    <body-content>empty</body-content>
    <attribute>
      <description><![CDATA[
        <p>
          The condition to be evaluated.  This condition is always evaluated
          regardless whether Java assertions are enabled or disabled.
        </p>
      ]]></description>
      <name>test</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The message included in the
          <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/AssertionError.html">AssertionError</a>,
          only evaluated as-needed due to use of deferred expressions.
        </p>
      ]]></description>
      <name>message</name>
      <required>false</required>
      <deferred-value>
        <type>java.lang.String</type>
      </deferred-value>
    </attribute>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2023-10-02T00:34:59Z" -->
    <description><![CDATA[
      <p class="semanticcms-tag-reference-summary">
        Adds a <a href="https://www.w3schools.com/tags/tag_base.asp">&lt;base&gt;</a> tag only when necessary.
      </p>
      <p>
        After forward (or forward fall-back from redirect), relative paths
        might not resolve relative to the current JSP page.  This will be most
        evident when forwarding between different directories.
      </p>
      <p>
        To keep paths relative to the page after a forward, a <a href="https://www.w3schools.com/tags/tag_base.asp">&lt;base&gt;</a> tag is
        written when the path of the current JSP page does not equal the path
        of the original request.
      </p>
      <p>
        A <a href="https://www.w3schools.com/tags/tag_base.asp">&lt;base&gt;</a> tag will affect any anchor links on a page.  For this
        reason, this <a href="https://www.w3schools.com/tags/tag_base.asp">&lt;base&gt;</a> tag primarily exists for when a redirect has to fall-back
        to a forward to a resource in another path.  Properly displaying the main
        contents in this case is considered more important than correctly behaving anchors.
      </p>
    ]]></description>
    <name>base</name>
    <tag-class>&package;.BaseTag</tag-class>
    <tei-class>com.aoapps.taglib.ElementTagTEI</tei-class>
    <body-content>&JSP;</body-content>
    &GlobalBufferedAttributes;
    <dynamic-attributes>true</dynamic-attributes>
  </tag>
  <tag>
    <!-- datePublished="2019-10-20T05:53:01-05:00" -->
    <!-- dateModified="2023-10-02T00:34:59Z" -->
    <description><![CDATA[
      <p class="semanticcms-tag-reference-summary">
        Writes a <a href="https://www.w3schools.com/tags/tag_br.asp">&lt;br&gt;</a>
        tag in the current serialization.
      </p>
    ]]></description>
    <name>br</name>
    <tag-class>&package;.BrTag</tag-class>
    <tei-class>com.aoapps.taglib.ElementTagTEI</tei-class>
    <body-content>&JSP;</body-content>
    &GlobalBufferedAttributes;
    <dynamic-attributes>true</dynamic-attributes>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-03T22:53:21-05:00" -->
    <description><![CDATA[
      <p>
        Sets the bundle used by any nested
        <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-message">&lt;ao:message&gt;</a> tags
        or <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/function-message">functions</a>.
      </p>
    ]]></description>
    <name>bundle</name>
    <tag-class>com.aoapps.taglib.BundleTag</tag-class>
    <body-content>JSP</body-content>
    <attribute>
      <description><![CDATA[
        <p>The base name of resource bundle to access.</p>
      ]]></description>
      <name>basename</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The prefix applied to any nested
          <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-message">&lt;ao:message&gt;</a> tag
          or <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/function-message">function</a> keys.
        </p>
      ]]></description>
      <name>prefix</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p>
        Provides a <a href="https://www.w3schools.com/tags/att_checked.asp">checked attribute</a> to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/CheckedAttribute.html">CheckedAttribute</a>
        parent tag.
        The body, after trimming, must contain either <code>true</code>, <code>false</code>, or be empty.
        If empty, the checked attribute of the parent tag is not overridden.
      </p>
    ]]></description>
    <name>checked</name>
    <tag-class>&package;.CheckedTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-09-25T11:14:02-05:00" -->
    <!-- dateModified="2021-06-03T22:53:21-05:00" -->
    <description><![CDATA[
      <p>
        Like
        <a rel="nofollow" href="https://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/c/choose.html">&lt;c:choose&gt;</a>,
        except uses deferred expressions.
      </p>
    ]]></description>
    <name>choose</name>
    <tag-class>com.aoapps.taglib.ChooseTag</tag-class>
    <body-content>JSP</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p>
        Provides a <a href="https://www.w3schools.com/tags/att_class.asp">class attribute</a> to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/ClassAttribute.html">ClassAttribute</a>
        parent tag.
      </p>
    ]]></description>
    <name>class</name>
    <tag-class>&package;.ClassTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2020-02-11T20:25:52-06:00" -->
    <!-- dateModified="2023-10-02T00:34:59Z" -->
    <description><![CDATA[
      <p class="semanticcms-tag-reference-summary">
        Writes a <a href="https://www.w3schools.com/tags/tag_col.asp">&lt;col&gt;</a>
        tag in the current serialization.
      </p>
    ]]></description>
    <name>col</name>
    <tag-class>&package;.ColTag</tag-class>
    <tei-class>com.aoapps.taglib.ElementTagTEI</tei-class>
    <body-content>&JSP;</body-content>
    &GlobalBufferedAttributes;
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_col_span.asp">span of the element</a>.
        </p>
      ]]></description>
      <name>span</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>int</type>
    </attribute>
    <dynamic-attributes>true</dynamic-attributes>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p>
        Provides a <a href="https://www.w3schools.com/tags/att_content.asp">content attribute</a> to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/ContentAttribute.html">ContentAttribute</a>
        parent tag.
      </p>
    ]]></description>
    <name>content</name>
    <tag-class>&package;.ContentTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2020-07-31T10:11:29-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p>
        Provides a <a href="https://www.w3schools.com/tags/att_global_dir.asp">dir attribute</a> to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/DirAttribute.html">DirAttribute</a>
        parent tag.
      </p>
    ]]></description>
    <name>dir</name>
    <tag-class>&package;.DirTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-03T22:53:21-05:00" -->
    <description><![CDATA[
      <p>
        Disables the resource editor for this request.
      </p>
    ]]></description>
    <name>disableResourceEditor</name>
    <tag-class>com.aoapps.taglib.DisableResourceEditorTag</tag-class>
    <tei-class>com.aoapps.taglib.DisableResourceEditorTagTEI</tei-class>
    <body-content>JSP</body-content>
    <attribute>
      <description><![CDATA[
        <p>
          Specifies the scope over which the in-context resource editor is disabled.
          Defaults to "auto".
        </p>
        <ol>
          <li>
            When "auto" (the default), will be "body" when has tag body or "request" when there is no tag
            body.  This provides compatibility with previous releases that did not support body and always
            disabled for the entire request.
          </li>
          <li>
            When "body", the resource editor is only disabled in the tag body.  The original settings, if
            any, are restored.
          </li>
          <li>
            When "request", the resource editor is left disabled.  The original settings are not restored.
          </li>
        </ol>
      ]]></description>
      <name>scope</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The mode to use when disabling the in-context resource editor.
          Defaults to "disabled".
        </p>
        <ol>
          <li>When "disabled" (the default), the editor is completely disabled, no lookup tracking and no markup.</li>
          <li>When "lookup", lookup tracking is still performed, but no markup is performed.</li>
          <li>When "noscript", both lookup tracking and markup are performed, but without any scripts.</li>
          <li>When "markup", both lookup tracking and full markup are performed.</li>
        </ol>
      ]]></description>
      <name>mode</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p>
        Provides a <a href="https://www.w3schools.com/tags/att_disabled.asp">disabled attribute</a> to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/DisabledAttribute.html">DisabledAttribute</a>
        parent tag.
        The body, after trimming, must contain either <code>true</code>, <code>false</code>, or be empty.
        If empty, the disabled attribute of the parent tag is not overridden.
      </p>
    ]]></description>
    <name>disabled</name>
    <tag-class>&package;.DisabledTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p>
        Provides an <a href="https://www.w3schools.com/tags/att_enctype.asp">enctype attribute</a> to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/EnctypeAttribute.html">EnctypeAttribute</a>
        parent tag.
      </p>
    ]]></description>
    <name>enctype</name>
    <tag-class>&package;.EnctypeTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2026-02-05T18:09:30Z" -->
    <!-- TODO: param.* dynamic attributes should not do automatic multi-parameter.  Make a params.* dynamic attribute for this purpose. -->
    <description><![CDATA[
      <p class="semanticcms-tag-reference-summary">
        Renders a <a href="https://www.w3schools.com/tags/tag_form.asp">&lt;form&gt;</a> tag.
      </p>
      <p>
        Any attribute that has no namespace and begins with <code>param.</code> is added as a hidden form element.
        The parameter name is the part of the attribute name following <code>param.</code>.
      </p>
      <p>
        When a parameter value is <code>null</code> it is not added.
        When a parameter value is an <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Enum.html">Enum</a>, the
        value is obtained via <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Enum.html#name()">Enum.name()</a>.
        If the value is an
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Iterable.html">Iterable</a>,
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Iterator.html">Iterator</a>,
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Enumeration.html">Enumeration</a>,
        or array, then each non-null element is coerced to
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">String</a>
        as a separate parameter in iteration order.  Otherwise, the value itself is
        coerced to <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">String</a>
        for the parameter value.
      </p>
      <p>
        Nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-param">&lt;ao:param&gt;</a>
        or <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-params">&lt;ao:params&gt;</a>
        tags will add parameters after any provided as attributes.
      </p>
    ]]></description>
    <name>form</name>
    <tag-class>&package;.FormTag</tag-class>
    <tei-class>com.aoapps.taglib.FormTagTEI</tei-class>
    <body-content>&JSP;</body-content>
    &GlobalBufferedAttributes;
    <attribute>
      <description><![CDATA[
        <p class="semanticcms-tag-reference-summary">
          The <a href="https://www.w3schools.com/tags/att_form_action.asp">action for the form</a>.
          The action is modified in several ways to make things much easier to work with.
        </p>
        <p>
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-action">&lt;ao:action&gt;</a>
          tag will override this value.
        </p>
        <p>
          In order to make relative paths predictable, relative paths are interpreted from
          the current JSP page.
        </p>
        <p>
          In order to keep paths app-relative, if starts with a /, the context path will be
          prepended to the path.
        </p>
        <p>
          In order to simplify things behind URL mapping schemes,
          the action is always written starting with '/'.  This avoids any need to include any
          <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-base">&lt;ao:base&gt;</a> tags.
        </p>
        <p>
          URL rewriting is performed as needed via
          <a rel="nofollow" href="https://jakarta.ee/specifications/platform/10/apidocs/jakarta/servlet/http/HttpServletResponse.html#encodeURL(java.lang.String)">HttpServletResponse.encodeURL</a>.
        </p>
        <p>
          To support paths in different character sets, a Unicode to ASCII URI encoding is performed
          on every character that is not defined in <a href="https://datatracker.ietf.org/doc/html/rfc3986#section-2.2">RFC 3986: Reserved Characters</a>.
          To avoid ambiguity, any dynamic parameters or anchors in the URL must have been correctly encoded by the caller.
        </p>
        <p>
          Any directly nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-param">&lt;ao:param&gt;</a>
          or <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-params">&lt;ao:params&gt;</a>
          tag will add parameters to the action.
        </p>
        <p>
          Any URL parameters will not be in the action attribute, but instead will be rewritten into hidden form elements.
          This, in conjuction with response URL rewriting, can maintain state even through posts.
        </p>
      ]]></description>
      <name>action</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_form_enctype.asp">enctype for the form</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-enctype">&lt;ao:enctype&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>enctype</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_form_method.asp">method</a> used, must be either post or get.
          Defaults to <code>get</code>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-method">&lt;ao:method&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>method</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_form_target.asp">target for the form</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-target">&lt;ao:target&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>target</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    &OnsubmitAttribute;
    <dynamic-attributes>true</dynamic-attributes>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2026-02-05T18:09:30Z" -->
    <description><![CDATA[
      <div class="semanticcms-tag-reference-summary">
        <p>
          Forwards to another resource.
          Stops processing of the containing JSP page.
          This has three advantages over the standard
          <a rel="nofollow" href="https://docs.oracle.com/cd/A87860_01/doc/java.817/a83726/genlovw3.htm#1008181">&lt;jsp:forward&gt;</a>
          tag:
        </p>
        <ol>
          <li>You may clear parameters such that only those specifically added will be passed on to the next page</li>
          <li>You may have other nested tags used to select and build the set of parameters</li>
          <li>
            You may pass argument objects instead of only
            <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">String</a>
            parameters (see below)
          </li>
        </ol>
      </div>
      <p>
        Does not forward when the <a rel="nofollow" href="https://jakarta.ee/specifications/platform/10/apidocs/jakarta/servlet/ServletResponse.html#isCommitted--">response has already been committed</a>,
        but also does not throw any exception; logs FINE-level notice instead.
      </p>
      <p>
        Any attribute that has no namespace and begins with <code>param.</code> is added to the parameters.
        The parameter name is the part of the attribute name following <code>param.</code>.
      </p>
      <p>
        When a parameter value is <code>null</code> it is not added.
        When a parameter value is an <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Enum.html">Enum</a>, the
        value is obtained via <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Enum.html#name()">Enum.name()</a>.
        If the value is an
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Iterable.html">Iterable</a>,
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Iterator.html">Iterator</a>,
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Enumeration.html">Enumeration</a>,
        or array, then each non-null element is coerced to
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">String</a>
        as a separate parameter in iteration order.  Otherwise, the value itself is
        coerced to <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">String</a>
        for the parameter value.
      </p>
      <p>
        Nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-param">&lt;ao:param&gt;</a>
        or <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-params">&lt;ao:params&gt;</a>
        tags will add parameters after any provided as attributes.
        If parameters are not cleared, nested parameters are added before request parameters.
      </p>
      <p>
        Argument objects are passed to the forwarded page via request-scope <code>arg</code>
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Map.html">Map</a>.
        Any arguments to the current JSP page are not automatically passed-on to the forwarded page 
        (this differs from parameters in this way).
      </p>
      <p>
        Any attribute that has no namespace and begins with <code>arg.</code> is added as an argument.
        The argument name is the part of the attribute name following <code>arg.</code>.
        Because this argument becomes an element in the
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Map.html">Map</a>
        named <code>arg</code> in the forwarded page, the attribute
        name and JSP <a rel="nofollow" href="https://docs.oracle.com/cd/E19226-01/820-7627/gjddd/">Expression Language</a> name will match precisely.
      </p>
      <p>
        Nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-arg">&lt;ao:arg&gt;</a>
        tags may also be used to pass arguments.
      </p>
      <p>
        It is an error for the same argument name to be used twice (including when set as <code>null</code>).
      </p>
    ]]></description>
    <name>forward</name>
    <tag-class>com.aoapps.taglib.ForwardTag</tag-class>
    <body-content>scriptless</body-content>
    <attribute>
      <description><![CDATA[
        <p>
          The page that will be forwarded to.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-page">&lt;ao:page&gt;</a>
          tag will override this value.
          The page is required, must be set in attribute or nested
          <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-page">&lt;ao:page&gt;</a> tag.
        </p>
        <p>
          Security Note: page must be a trusted value since it can access any resource available via
          <a rel="nofollow" href="https://jakarta.ee/specifications/platform/10/apidocs/jakarta/servlet/RequestDispatcher.html">RequestDispatcher</a>.
          It would be incorrect to use a value that can be manipulated by a client in any way.
        </p>
        <p>
          Recommend use of <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-base">&lt;ao:base&gt;</a>
          on target page to have relative paths interpreted from the forwarded-to page.
        </p>
      ]]></description>
      <name>page</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          Optionally clears all parameters that match any of the comma-separated patterns.
          This is so that only those added by nested tags are forwarded.
          As a result, parameters provided by the client will not be able to interfere with forwards that have optional parameters.
          Each pattern in the comma-separated list may be in the following format:
        </p>
        <table class="ao-grid">
          <tbody>
            <tr>
              <td>exact_name</td>
              <td>matches the name exactly</td>
            </tr>
            <tr>
              <td>*</td>
              <td>matches all (clears all parameters)</td>
            </tr>
            <tr>
              <td>*suffix</td>
              <td>matches the name with "endsWith"</td>
            </tr>
            <tr>
              <td>prefix*</td>
              <td>matches the name with "beginsWith"</td>
            </tr>
          </tbody>
        </table>
        <p>
          Defaults to none cleared.
        </p>
      ]]></description>
      <name>clearParams</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <dynamic-attributes>true</dynamic-attributes>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p>
        Provides a <a href="https://www.w3schools.com/tags/att_frame_frameborder.asp">frameborder attribute</a> to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/FrameborderAttribute.html">FrameborderAttribute</a>
        parent tag.
        The body, after trimming, must contain either <code>true</code>, <code>false</code>, or be empty.
        If empty, the frameborder attribute of the parent tag is not overridden.
      </p>
    ]]></description>
    <name>frameborder</name>
    <tag-class>&package;.FrameborderTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2026-02-05T18:09:30Z" -->
    <description><![CDATA[
      <p>
        Gets a detailed report of a
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Throwable.html">Throwable</a>
        as generated by
        <a href="https://oss.aoapps.com/lang/apidocs/com.aoapps.lang/com/aoapps/lang/util/ErrorPrinter.html">ErrorPrinter</a>.
      </p>
      <p>
        The content type of this tag is <code>text/plain</code>.
      </p>
    ]]></description>
    <name>getStackTraces</name>
    <tag-class>com.aoapps.taglib.GetStackTracesTag</tag-class>
    <tei-class>com.aoapps.taglib.GetStackTracesTagTEI</tei-class>
    <body-content>empty</body-content>
    <attribute>
      <description><![CDATA[
        <p>
          Specifies the variable scope searched to retrieve the bean specified
          by name. If not specified, the default rules applied by
          <a rel="nofollow" href="https://jakarta.ee/specifications/platform/10/apidocs/jakarta/servlet/jsp/JspContext.html#findAttribute%28java.lang.String%29">JspContext.findAttribute()</a>
          are applied.
        </p>
      ]]></description>
      <name>scope</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          Specifies the attribute name of the bean whose property is accessed to
          retrieve the value specified by property (if specified). If property is
          not specified, the value of this bean itself will be used.
        </p>
      ]]></description>
      <name>name</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          Specifies the name of the property to be accessed on the bean specified
          by name. This value may be a simple, indexed, or nested property reference
          expression. If not specified, the bean identified by name will itself be
          used.
        </p>
      ]]></description>
      <name>property</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p>
        Provides a <a href="https://www.w3schools.com/tags/att_height.asp">height attribute</a> to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/HeightAttribute.html">HeightAttribute</a>
        parent tag.
      </p>
    ]]></description>
    <name>height</name>
    <tag-class>&package;.HeightTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2019-10-30T20:50:04-05:00" -->
    <!-- dateModified="2023-10-02T00:34:59Z" -->
    <description><![CDATA[
      <p class="semanticcms-tag-reference-summary">
        Writes a <a href="https://www.w3schools.com/tags/tag_hr.asp">&lt;hr&gt;</a>
        tag in the current serialization.
      </p>
    ]]></description>
    <name>hr</name>
    <tag-class>&package;.HrTag</tag-class>
    <tei-class>com.aoapps.taglib.ElementTagTEI</tei-class>
    <body-content>&JSP;</body-content>
    &GlobalBufferedAttributes;
    <dynamic-attributes>true</dynamic-attributes>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2025-12-30T13:42:11Z" -->
    <description><![CDATA[
      <ol>
        <li>Clears the current output buffer (leaving status code and headers)</li>
        <li>Sets the response contentType between html / xhtml based on serialization attribute and request headers</li>
        <li>Writes the <a href="https://www.w3schools.com/tags/tag_doctype.asp">&lt;!DOCTYPE&gt;</a> unless set to "none"</li>
        <li>
          Writes the <a href="https://www.w3schools.com/tags/tag_html.asp">&lt;html&gt;</a> tag,
          including the <a href="https://www.w3schools.com/tags/att_html_xmlns.asp">xmlns</a>,
          <a href="https://www.w3schools.com/tags/att_global_lang.asp">lang</a>,
          and <a href="https://www.w3.org/International/questions/qa-lang-why">xml:lang</a> attributes based on
          the locale of the current response.
        </li>
        <li>
          Establishes a page context for <a href="https://oss.aoapps.com/web-resources/">AO Web Resources</a>,
          if one is not already present on the current request.  This is useful for using
          the <a href="https://oss.aoapps.com/web-resources/taglib/ao-web-resources.tld/">AO Web Resources Taglib</a>
          within the simplified scope of a standalone JSP page.  Any page context established
          by this tag is cleaned-up before the tag exits - the scope is limited to nested tags.
        </li>
      </ol>
    ]]></description>
    <name>html</name>
    <tag-class>&package;.HtmlTag</tag-class>
    <tei-class>com.aoapps.taglib.HtmlTagTEI</tei-class>
    <body-content>&JSP;</body-content>
    &GlobalAttributes;
    <attribute>
      <description><![CDATA[
        <p>
          When <code>SGML</code>, forces the content-type to be <code>text/html</code>.
          When <code>XML</code>, forces the content-type to be <code>application/xhtml+xml</code>.
          When <code>auto</code> (the default), the following steps are performed to resolve the serialization:
        </p>
        <ol>
          <li>Use the serialization active on the current request.</li>
          <li>
            Use the application <a rel="nofollow" href="https://jakarta.ee/specifications/platform/10/apidocs/jakarta/servlet/ServletContext.html#getInitParameter(java.lang.String)">context-param</a>
            <code>com.aoapps.encoding.Serialization.default</code>
            that allows an application to control the selection of HTML versus XHTML.
          </li>
          <li>
            When this context-param is unspecified or <code>auto</code>,
            determine the serialization based on the client's <code>Accept</code> header.
          </li>
        </ol>
        <p>
          This should normally be left with the default value of <code>auto</code>.  This is used
          when the content is known to contain invalid markup that can not be parsed as XML.
        </p>
      ]]></description>
      <name>serialization</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/tag_doctype.asp">&lt;!DOCTYPE&gt;</a> to use,
          must be one of <code>default</code>, <code>HTML5</code>, <code>STRICT</code>, <code>TRANSITIONAL</code>,
          <code>FRAMESET</code>, or <code>NONE</code>.
          Defaults to <code>default</code>.  <code>NONE</code> will suppress the output of a doctype.
        </p>
        <p>
          When <code>default</code> (the default), the following steps are performed to resolve the doctype:
        </p>
        <ol>
          <li>Use the doctype active on the current request.</li>
          <li>
            Use the application <a rel="nofollow" href="https://jakarta.ee/specifications/platform/10/apidocs/jakarta/servlet/ServletContext.html#getInitParameter(java.lang.String)">context-param</a>
            <code>com.aoapps.encoding.Doctype.default</code>
            that allows an application to control the default doctype.
          </li>
          <li>
            When this context-param is unspecified or <code>default</code>,
            defaults to <code>HTML5</code>, which results in a breaking change
            (this tag used to default to <code>STRICT</code>).
          </li>
        </ol>
      ]]></description>
      <name>doctype</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          When <code>true</code>, enables automatic newline (and tab indentation when enabled).
          When <code>false</code>, disables automatic newline and tab indentation.
          When <code>auto</code> (the default), the following steps are performed to resolve the autonli setting:
        </p>
        <ol>
          <li>Use the autonli setting active on the current request.</li>
          <li>
            Use the application <a rel="nofollow" href="https://jakarta.ee/specifications/platform/10/apidocs/jakarta/servlet/ServletContext.html#getInitParameter(java.lang.String)">context-param</a>
            <code>com.aoapps.html.servlet.DocumentEE.autonli</code>
            that allows an application to control the default autonli setting.
          </li>
          <li>
            When this context-param is unspecified or <code>auto</code>,
            defaults to <code>false</code>.
          </li>
        </ol>
      ]]></description>
      <name>autonli</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          When <code>true</code>, enables tab indentation.
          When <code>false</code>, disables tab indentation.
          When <code>auto</code> (the default), the following steps are performed to resolve the indent setting:
        </p>
        <ol>
          <li>Use the indent setting active on the current request.</li>
          <li>
            Use the application <a rel="nofollow" href="https://jakarta.ee/specifications/platform/10/apidocs/jakarta/servlet/ServletContext.html#getInitParameter(java.lang.String)">context-param</a>
            <code>com.aoapps.html.servlet.DocumentEE.indent</code>
            that allows an application to control the default indent setting.
          </li>
          <li>
            When this context-param is unspecified or <code>auto</code>,
            defaults to <code>false</code>.
          </li>
        </ol>
      ]]></description>
      <name>indent</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <dynamic-attributes>true</dynamic-attributes>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-09-25T23:27:50-05:00" -->
    <description><![CDATA[
      <p>
        Provides an <a href="https://www.w3schools.com/tags/att_href.asp">href attribute</a> to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/HrefAttribute.html">HrefAttribute</a>
        parent tag.
        The body of this tag, after trimming, is valid <a href="https://datatracker.ietf.org/doc/html/rfc3986">RFC 3986 URI</a>
        or <a href="https://datatracker.ietf.org/doc/html/rfc3987">RFC 3987 IRI</a>.
      </p>
    ]]></description>
    <name>href</name>
    <tag-class>&package;.HrefTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p>
        Provides an <a href="https://www.w3schools.com/tags/att_hreflang.asp">hreflang attribute</a> to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/HreflangAttribute.html">HreflangAttribute</a>
        parent tag.
      </p>
    ]]></description>
    <name>hreflang</name>
    <tag-class>&package;.HreflangTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p>
        Provides an <a href="https://www.w3schools.com/tags/att_id.asp">id attribute</a> to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/IdAttribute.html">IdAttribute</a>
        parent tag.
      </p>
    ]]></description>
    <name>id</name>
    <tag-class>&package;.IdTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2026-02-05T18:09:30Z" -->
    <description><![CDATA[
      <p class="semanticcms-tag-reference-summary">
        Renders an <a href="https://www.w3schools.com/tags/tag_iframe.asp">&lt;iframe&gt;</a> tag.
      </p>
      <p>
        Any attribute that has no namespace and begins with <code>param.</code> is added to the src as a URL parameter.
        The parameter name is the part of the attribute name following <code>param.</code>.
      </p>
      <p>
        When a parameter value is <code>null</code> it is not added.
        When a parameter value is an <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Enum.html">Enum</a>, the
        value is obtained via <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Enum.html#name()">Enum.name()</a>.
        If the value is an
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Iterable.html">Iterable</a>,
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Iterator.html">Iterator</a>,
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Enumeration.html">Enumeration</a>,
        or array, then each non-null element is coerced to
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">String</a>
        as a separate parameter in iteration order.  Otherwise, the value itself is
        coerced to <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">String</a>
        for the parameter value.
      </p>
      <p>
        Nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-param">&lt;ao:param&gt;</a>
        or <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-params">&lt;ao:params&gt;</a>
        tags will add parameters after any provided as attributes.
      </p>
    ]]></description>
    <name>iframe</name>
    <tag-class>&package;.IframeTag</tag-class>
    <tei-class>com.aoapps.taglib.ElementTagTEI</tei-class>
    <body-content>&JSP;</body-content>
    <attribute>
      <description>
        &lt;p&gt;
          &IdBufferedAttribute_description;
        &lt;/p&gt;
        <![CDATA[<p>
          For maximum HTML/XHTML and HTML 4/5 compatibility, this value is
          written as both <code>id</code> and <code>name</code> attributes.
        </p>]]>
      </description>
      <name>id</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    &ClassBufferedAttribute;
    &DirBufferedAttribute;
    &StyleBufferedAttribute;
    <attribute>
      <description><![CDATA[
        <p class="semanticcms-tag-reference-summary">
          The <a href="https://www.w3schools.com/tags/att_iframe_src.asp">src for the frame</a> content.
          The src is modified in several ways to make things much easier to work with.
        </p>
        <p>
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-src">&lt;ao:src&gt;</a>
          tag will override this value.
        </p>
        <p>
          In order to make relative paths predictable, relative paths are interpreted from
          the current JSP page.
        </p>
        <p>
          In order to keep paths app-relative, if starts with a /, the context path will be
          prepended to the path.
        </p>
        <p>
          In order to simplify things behind URL mapping schemes,
          the src is always written starting with '/'.  This avoids any need to include any
          <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-base">&lt;ao:base&gt;</a> tags.
        </p>
        <p>
          URL rewriting is performed as needed via
          <a rel="nofollow" href="https://jakarta.ee/specifications/platform/10/apidocs/jakarta/servlet/http/HttpServletResponse.html#encodeURL(java.lang.String)">HttpServletResponse.encodeURL</a>.
        </p>
        <p>
          To support paths in different character sets, a Unicode to ASCII URI encoding is performed
          on every character that is not defined in <a href="https://datatracker.ietf.org/doc/html/rfc3986#section-2.2">RFC 3986: Reserved Characters</a>.
          To avoid ambiguity, any dynamic parameters or anchors in the URL must have been correctly encoded by the caller.
        </p>
        <p>
          Any directly nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-param">&lt;ao:param&gt;</a>
          or <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-params">&lt;ao:params&gt;</a>
          tag will add parameters to the src.
        </p>
      ]]></description>
      <name>src</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          When <code>true</code>, generates an absolute URL for the <a href="https://www.w3schools.com/tags/att_iframe_src.asp">src for the frame</a>.
          Defaults to <code>false</code>.
        </p>
      ]]></description>
      <name>absolute</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          When <code>true</code>, will generate a <a href="https://oss.aoapps.com/servlet-util/apidocs/com.aoapps.servlet.util/com/aoapps/servlet/http/Canonical.html">Canonical URL</a>.
          Canonical URLs should be used where per-user response URL rewriting
          (such as information added when cookies are disabled) should be avoided.
          Defaults to <code>false</code>.
        </p>
      ]]></description>
      <name>canonical</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          If the src represents a local resource, a parameter of "lastModified=#####" may be
          automatically added with the timestamp of the local resource to the nearest second.
          May be one of <code>true</code>, <code>false</code>, or <code>auto</code>.
          Defaults to <code>auto</code>.
        </p>
        <p>
          In auto mode, last modified stamping may be disabled by the client with
          the <code>X-com-aoapps-servlet-lastmodified-enabled: false</code> header.
        </p>
        <p>
          In auto mode, last modified stamping is not performed on
          <a href="https://oss.aoapps.com/servlet-util/apidocs/com.aoapps.servlet.util/com/aoapps/servlet/http/Canonical.html">Canonical URLs</a>.
        </p>
      ]]></description>
      <name>addLastModified</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_iframe_width.asp">width for the frame</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-width">&lt;ao:width&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>width</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Integer</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_iframe_height.asp">height for the frame</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-height">&lt;ao:height&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>height</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Integer</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_iframe_frameborder.asp">frameborder attribute</a>.
          Accepts values of <code>true</code> or <code>false</code>.
          A non-empty nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-frameborder">&lt;ao:frameborder&gt;</a>
          tag will override this value.
          Defaults to <code>true</code>.
        </p>
      ]]></description>
      <name>frameborder</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    <dynamic-attributes>true</dynamic-attributes>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2026-02-05T18:09:30Z" -->
    <description><![CDATA[
      <p class="semanticcms-tag-reference-summary">
        Renders an <a href="https://www.w3schools.com/tags/tag_img.asp">&lt;img&gt;</a> tag.
      </p>
      <p>
        The src may be provided in one of three ways, in precedence order:
      </p>
      <ol>
        <li>Direct child <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-src">&lt;ao:src&gt;</a> tag.</li>
        <li>As the src attribute</li>
        <li>
          The body of this tag, after trimming, is valid <a href="https://datatracker.ietf.org/doc/html/rfc3986">RFC 3986 URI</a>
          or <a href="https://datatracker.ietf.org/doc/html/rfc3987">RFC 3987 IRI</a>.
        </li>
      </ol>
      <p>
        Also, when <code>usemap</code> is not set, the alt value is required either as an attribute or a nested
        <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-alt">&lt;ao:alt&gt;</a> tag.
      </p>
      <p>
        Any attribute that has no namespace and begins with <code>param.</code> is added to the src as a URL parameter.
        The parameter name is the part of the attribute name following <code>param.</code>.
      </p>
      <p>
        When a parameter value is <code>null</code> it is not added.
        When a parameter value is an <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Enum.html">Enum</a>, the
        value is obtained via <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Enum.html#name()">Enum.name()</a>.
        If the value is an
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Iterable.html">Iterable</a>,
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Iterator.html">Iterator</a>,
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Enumeration.html">Enumeration</a>,
        or array, then each non-null element is coerced to
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">String</a>
        as a separate parameter in iteration order.  Otherwise, the value itself is
        coerced to <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">String</a>
        for the parameter value.
      </p>
      <p>
        Nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-param">&lt;ao:param&gt;</a>
        or <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-params">&lt;ao:params&gt;</a>
        tags will add parameters after any provided as attributes.
      </p>
    ]]></description>
    <name>img</name>
    <tag-class>&package;.ImgTag</tag-class>
    <tei-class>com.aoapps.taglib.ElementTagTEI</tei-class>
    <body-content>&JSP;</body-content>
    &GlobalBufferedAttributes;
    <attribute>
      <description><![CDATA[
        <p class="semanticcms-tag-reference-summary">
          The <a href="https://www.w3schools.com/tags/att_img_src.asp">src for the image</a>.
          The src is modified in several ways to make things much easier to work with.
        </p>
        <p>
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-src">&lt;ao:src&gt;</a>
          tag will override this value.
        </p>
        <p>
          In order to make relative paths predictable, relative paths are interpreted from
          the current JSP page.
        </p>
        <p>
          In order to keep paths app-relative, if starts with a /, the context path will be
          prepended to the path.
        </p>
        <p>
          In order to simplify things behind URL mapping schemes,
          the src is always written starting with '/'.  This avoids any need to include any
          <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-base">&lt;ao:base&gt;</a> tags.
        </p>
        <p>
          URL rewriting is performed as needed via
          <a rel="nofollow" href="https://jakarta.ee/specifications/platform/10/apidocs/jakarta/servlet/http/HttpServletResponse.html#encodeURL(java.lang.String)">HttpServletResponse.encodeURL</a>.
        </p>
        <p>
          To support paths in different character sets, a Unicode to ASCII URI encoding is performed
          on every character that is not defined in <a href="https://datatracker.ietf.org/doc/html/rfc3986#section-2.2">RFC 3986: Reserved Characters</a>.
          To avoid ambiguity, any dynamic parameters or anchors in the URL must have been correctly encoded by the caller.
        </p>
        <p>
          Any directly nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-param">&lt;ao:param&gt;</a>
          or <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-params">&lt;ao:params&gt;</a>
          tag will add parameters to the src.
        </p>
      ]]></description>
      <name>src</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          When <code>true</code>, generates an absolute URL for the <a href="https://www.w3schools.com/tags/att_img_src.asp">src for the image</a>.
          Defaults to <code>false</code>.
        </p>
      ]]></description>
      <name>absolute</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          When <code>true</code>, will generate a <a href="https://oss.aoapps.com/servlet-util/apidocs/com.aoapps.servlet.util/com/aoapps/servlet/http/Canonical.html">Canonical URL</a>.
          Canonical URLs should be used where per-user response URL rewriting
          (such as information added when cookies are disabled) should be avoided.
          Defaults to <code>false</code>.
        </p>
      ]]></description>
      <name>canonical</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          If the src represents a local resource, a parameter of "lastModified=#####" may be
          automatically added with the timestamp of the local resource to the nearest second.
          May be one of <code>true</code>, <code>false</code>, or <code>auto</code>.
          Defaults to <code>auto</code>.
        </p>
        <p>
          In auto mode, last modified stamping may be disabled by the client with
          the <code>X-com-aoapps-servlet-lastmodified-enabled: false</code> header.
        </p>
        <p>
          In auto mode, last modified stamping is not performed on
          <a href="https://oss.aoapps.com/servlet-util/apidocs/com.aoapps.servlet.util/com/aoapps/servlet/http/Canonical.html">Canonical URLs</a>.
        </p>
      ]]></description>
      <name>addLastModified</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The optional <a href="https://www.w3schools.com/tags/att_img_width.asp">width for the image</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-width">&lt;ao:width&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>width</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Integer</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The optional <a href="https://www.w3schools.com/tags/att_img_height.asp">height for the image</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-height">&lt;ao:height&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>height</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Integer</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_img_alt.asp">alt text for the image</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-alt">&lt;ao:alt&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>alt</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_global_title.asp">title text for the element</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-title">&lt;ao:title&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>title</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          Specifies an image as a <a href="https://www.w3schools.com/tags/att_img_usemap.asp">client-side image-map</a>.
        </p>
        <p>
          The <code>#</code> prefix is optional.
          If not provided, the <code>#</code> will be automatically added.
        </p>
        <p>
          This is expected to be used along with a <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-map">&lt;ao:map&gt;</a> tag.
        </p>
      ]]></description>
      <name>usemap</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          Specifies an image as a <a href="https://www.w3schools.com/tags/att_img_ismap.asp">server-side image-map</a>.
        </p>
      ]]></description>
      <name>ismap</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    &OnclickAttribute;
    &OnerrorAttribute;
    &OnloadAttribute;
    <dynamic-attributes>true</dynamic-attributes>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2026-02-05T18:09:30Z" -->
    <description><![CDATA[
      <div class="semanticcms-tag-reference-summary">
        <p>
          Includes another resource and then continues processing of the current JSP page.
          This has several advantages over the standard
          <a rel="nofollow" href="https://docs.oracle.com/cd/A87860_01/doc/java.817/a83726/genlovw3.htm#1008181">&lt;jsp:include&gt;</a>
          tag:
        </p>
        <ol>
          <li>You may clear parameters such that only those specifically added will be passed on to the included page</li>
          <li>You may have other nested tags used to select and build the set of parameters</li>
          <li>
            You may pass argument objects instead of only
            <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">String</a>
            parameters (see below)
          </li>
          <li>
            You may <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-redirect">send redirects</a> from within the included
            page.
          </li>
          <li>
            You may <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-sendError">send errors</a> from within the included
            page.
          </li>
        </ol>
      </div>
      <p>
        Any attribute that has no namespace and begins with <code>param.</code> is added to the parameters.
        The parameter name is the part of the attribute name following <code>param.</code>.
      </p>
      <p>
        When a parameter value is <code>null</code> it is not added.
        When a parameter value is an <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Enum.html">Enum</a>, the
        value is obtained via <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Enum.html#name()">Enum.name()</a>.
        If the value is an
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Iterable.html">Iterable</a>,
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Iterator.html">Iterator</a>,
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Enumeration.html">Enumeration</a>,
        or array, then each non-null element is coerced to
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">String</a>
        as a separate parameter in iteration order.  Otherwise, the value itself is
        coerced to <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">String</a>
        for the parameter value.
      </p>
      <p>
        Nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-param">&lt;ao:param&gt;</a>
        or <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-params">&lt;ao:params&gt;</a>
        tags will add parameters after any provided as attributes.
        If parameters are not cleared, nested parameters are added before request parameters.
      </p>
      <p>
        Argument objects are passed to the included page via request-scope <code>arg</code>
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Map.html">Map</a>.
        Any arguments to the current JSP page are not automatically passed-on to the included page 
        (this differs from parameters in this way).
        The current JSP page arguments are restored when the include completes.
      </p>
      <p>
        Any attribute that has no namespace and begins with <code>arg.</code> is added as an argument.
        The argument name is the part of the attribute name following <code>arg.</code>.
        Because this argument becomes an element in the
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Map.html">Map</a>
        named <code>arg</code> in the included page, the attribute
        name and JSP <a rel="nofollow" href="https://docs.oracle.com/cd/E19226-01/820-7627/gjddd/">Expression Language</a> name will match precisely.
      </p>
      <p>
        Nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-arg">&lt;ao:arg&gt;</a> tags may also be used to pass arguments.
      </p>
      <p>
        It is an error for the same argument name to be used twice (including when set as <code>null</code>).
      </p>
    ]]></description>
    <name>include</name>
    <tag-class>com.aoapps.taglib.IncludeTag</tag-class>
    <body-content>scriptless</body-content>
    <attribute>
      <description><![CDATA[
        <p>
          The page that will be included.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-page">&lt;ao:page&gt;</a>
          tag will override this value.
          The page is required, must be set in attribute or nested
          <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-page">&lt;ao:page&gt;</a> tag.
        </p>
        <p>
          Security Note: page must be a trusted value since it can access any resource available via
          <a rel="nofollow" href="https://jakarta.ee/specifications/platform/10/apidocs/jakarta/servlet/RequestDispatcher.html">RequestDispatcher</a>.
          It would be incorrect to use a value that can be manipulated by a client in any way.
        </p>
      ]]></description>
      <name>page</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <!-- TODO: Document that uses WildcardPattern matcher, here and elsewhere -->
      <description><![CDATA[
        <p>
          Optionally clears all parameters that match any of the comma-separated patterns.
          This is so that only those added by nested tags are included.
          As a result, parameters provided by the client will not be able to interfere with includes that have optional parameters.
          Each pattern in the comma-separated list may be in the following format:
        </p>
        <table class="ao-grid">
          <tbody>
            <tr>
              <td>exact_name</td>
              <td>matches the name exactly</td>
            </tr>
            <tr>
              <td>*</td>
              <td>matches all (clears all parameters)</td>
            </tr>
            <tr>
              <td>*suffix</td>
              <td>matches the name with "endsWith"</td>
            </tr>
            <tr>
              <td>prefix*</td>
              <td>matches the name with "beginsWith"</td>
            </tr>
          </tbody>
        </table>
        <p>
          Defaults to none cleared.
        </p>
      ]]></description>
      <name>clearParams</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <dynamic-attributes>true</dynamic-attributes>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2026-02-05T18:09:30Z" -->
    <description><![CDATA[
      <p class="semanticcms-tag-reference-summary">
        Renders an <a href="https://www.w3schools.com/tags/tag_input.asp">&lt;input&gt;</a> tag.
      </p>
      <p>
        The value may be provided in one of three ways, in precedence order:
      </p>
      <ol>
        <li>Direct child <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-value">&lt;ao:value&gt;</a> tag.</li>
        <li>As the value attribute</li>
        <li>Contents of tag body, trimmed.</li>
      </ol>
      <p>
        For <code>type="image"</code>, the src may be provided in one of two ways, in precedence order:
      </p>
      <ol>
        <li>Direct child <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-src">&lt;ao:src&gt;</a> tag.</li>
        <li>As the src attribute</li>
      </ol>
      <p>
        Any attribute that has no namespace and begins with <code>param.</code> is added to the src as a URL parameter.
        The parameter name is the part of the attribute name following <code>param.</code>.
      </p>
      <p>
        When a parameter value is <code>null</code> it is not added.
        When a parameter value is an <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Enum.html">Enum</a>, the
        value is obtained via <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Enum.html#name()">Enum.name()</a>.
        If the value is an
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Iterable.html">Iterable</a>,
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Iterator.html">Iterator</a>,
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Enumeration.html">Enumeration</a>,
        or array, then each non-null element is coerced to
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">String</a>
        as a separate parameter in iteration order.  Otherwise, the value itself is
        coerced to <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">String</a>
        for the parameter value.
      </p>
      <p>
        Nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-param">&lt;ao:param&gt;</a>
        or <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-params">&lt;ao:params&gt;</a>
        tags will add parameters after any provided as attributes.
      </p>
    ]]></description>
    <name>input</name>
    <tag-class>&package;.InputTag</tag-class>
    <tei-class>com.aoapps.taglib.InputTagTEI</tei-class>
    <body-content>&JSP;</body-content>
    &GlobalBufferedAttributes;
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_input_alt.asp">alt text for the input</a>
          (only for <code>type="image"</code>).
          Required when <code>type</code> is <code>"image"</code>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-alt">&lt;ao:alt&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>alt</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          Turns on or off the <a href="https://www.w3schools.com/tags/att_input_autocomplete.asp">autocomplete for this input element</a>.
          Accepts values of <code>true</code> or <code>false</code> (not "on" or "off" due to
          this being a boolean type).
          If autocomplete is <code>false</code>, will add the attribute as <code>autocomplete="off"</code>,
          otherwise the attribute is not added.
          Defaults to <code>true</code> with no attribute added.
        </p>
      ]]></description>
      <name>autocomplete</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_input_checked.asp">checked attribute</a>.
          Accepts values of <code>true</code> or <code>false</code>.
          A non-empty nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-checked">&lt;ao:checked&gt;</a>
          tag will override this value.
          If checked is <code>true</code>, will add the attribute as <code>checked="checked"</code>,
          otherwise the attribute is not added.
        </p>
      ]]></description>
      <name>checked</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_input_disabled.asp">disabled attribute</a>.
          Accepts values of <code>true</code> or <code>false</code>.
          A non-empty nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-disabled">&lt;ao:disabled&gt;</a>
          tag will override this value.
          If disabled is <code>true</code>, will add the attribute as <code>disabled="disabled"</code>,
          otherwise the attribute is not added.
        </p>
      ]]></description>
      <name>disabled</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The optional <a href="https://www.w3schools.com/tags/att_input_height.asp">height for the image</a>,
          (only for <code>type="image"</code>).
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-height">&lt;ao:height&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>height</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Integer</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_input_maxlength.asp">maxlength of the input element</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-maxlength">&lt;ao:maxlength&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>maxlength</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Integer</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_input_name.asp">name of the input element</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-name">&lt;ao:name&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>name</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_input_readonly.asp">readonly attribute</a>.
          Accepts values of <code>true</code> or <code>false</code>.
          A non-empty nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-readonly">&lt;ao:readonly&gt;</a>
          tag will override this value.
          If readonly is <code>true</code>, will add the attribute as <code>readonly="readonly"</code>,
          otherwise the attribute is not added.
        </p>
      ]]></description>
      <name>readonly</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_input_size.asp">size of the input element</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-size">&lt;ao:size&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>size</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Integer</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p class="semanticcms-tag-reference-summary">
          The <a href="https://www.w3schools.com/tags/att_input_src.asp">src for the image</a>
          (only for <code>type="image"</code>).
          The src is modified in several ways to make things much easier to work with.
        </p>
        <p>
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-src">&lt;ao:src&gt;</a>
          tag will override this value.
        </p>
        <p>
          In order to make relative paths predictable, relative paths are interpreted from
          the current JSP page.
        </p>
        <p>
          In order to keep paths app-relative, if starts with a /, the context path will be
          prepended to the path.
        </p>
        <p>
          In order to simplify things behind URL mapping schemes,
          the src is always written starting with '/'.  This avoids any need to include any
          <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-base">&lt;ao:base&gt;</a> tags.
        </p>
        <p>
          URL rewriting is performed as needed via
          <a rel="nofollow" href="https://jakarta.ee/specifications/platform/10/apidocs/jakarta/servlet/http/HttpServletResponse.html#encodeURL(java.lang.String)">HttpServletResponse.encodeURL</a>.
        </p>
        <p>
          To support paths in different character sets, a Unicode to ASCII URI encoding is performed
          on every character that is not defined in <a href="https://datatracker.ietf.org/doc/html/rfc3986#section-2.2">RFC 3986: Reserved Characters</a>.
          To avoid ambiguity, any dynamic parameters or anchors in the URL must have been correctly encoded by the caller.
        </p>
        <p>
          Any directly nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-param">&lt;ao:param&gt;</a>
          or <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-params">&lt;ao:params&gt;</a>
          tag will add parameters to the src.
        </p>
      ]]></description>
      <name>src</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          When <code>true</code>, generates an absolute URL for the <a href="https://www.w3schools.com/tags/att_input_src.asp">src for the image</a>,
          (only for <code>type="image"</code>).
          Defaults to <code>false</code>.
        </p>
      ]]></description>
      <name>absolute</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          When <code>true</code>, will generate a <a href="https://oss.aoapps.com/servlet-util/apidocs/com.aoapps.servlet.util/com/aoapps/servlet/http/Canonical.html">Canonical URL</a>.
          Canonical URLs should be used where per-user response URL rewriting
          (such as information added when cookies are disabled) should be avoided.
          Defaults to <code>false</code>.
        </p>
      ]]></description>
      <name>canonical</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          If the src represents a local resource, a parameter of "lastModified=#####" may be
          automatically added with the timestamp of the local resource to the nearest second.
          May be one of <code>true</code>, <code>false</code>, or <code>auto</code>.
          Defaults to <code>auto</code>.
        </p>
        <p>
          In auto mode, last modified stamping may be disabled by the client with
          the <code>X-com-aoapps-servlet-lastmodified-enabled: false</code> header.
        </p>
        <p>
          In auto mode, last modified stamping is not performed on
          <a href="https://oss.aoapps.com/servlet-util/apidocs/com.aoapps.servlet.util/com/aoapps/servlet/http/Canonical.html">Canonical URLs</a>.
        </p>
      ]]></description>
      <name>addLastModified</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The optional tabindex value.  Defaults to <code>0</code>.
          If value is <code>&gt;= 1</code>, will add <a href="https://www.w3schools.com/tags/att_global_tabindex.asp">tabindex attribute</a>.
          A non-empty nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-tabindex">&lt;ao:tabindex&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>tabindex</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>int</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_global_title.asp">title text for the element</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-title">&lt;ao:title&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>title</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_input_type.asp">type of input element</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-type">&lt;ao:type&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>type</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The optional <a href="https://www.w3schools.com/tags/att_input_width.asp">width for the image</a>,
          (only for <code>type="image"</code>).
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-width">&lt;ao:width&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>width</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Integer</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_input_value.asp">value of the input element</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-value">&lt;ao:value&gt;</a>
          tag will override this value.
          If neither is provided, the output of the body is used with whitespace trimmed.
        </p>
      ]]></description>
      <name>value</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    &OnblurAttribute;
    &OnchangeAttribute;
    &OnclickAttribute;
    &OnerrorAttribute;
    &OnfocusAttribute;
    &OnkeypressAttribute;
    &OnloadAttribute;
    <dynamic-attributes>true</dynamic-attributes>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2026-02-05T18:09:30Z" -->
    <description><![CDATA[
      <p class="semanticcms-tag-reference-summary">
        If contained within any
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/LinksAttribute.html">LinksAttribute</a>
        parent, adds the link data to the parent tag.
        Otherwise, renders a <a href="https://www.w3schools.com/tags/tag_link.asp">&lt;link&gt;</a> tag.
      </p>
      <p>
        Any attribute that has no namespace and begins with <code>param.</code> is added to the href as a URL parameter.
        The parameter name is the part of the attribute name following <code>param.</code>.
      </p>
      <p>
        When a parameter value is <code>null</code> it is not added.
        When a parameter value is an <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Enum.html">Enum</a>, the
        value is obtained via <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Enum.html#name()">Enum.name()</a>.
        If the value is an
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Iterable.html">Iterable</a>,
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Iterator.html">Iterator</a>,
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Enumeration.html">Enumeration</a>,
        or array, then each non-null element is coerced to
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">String</a>
        as a separate parameter in iteration order.  Otherwise, the value itself is
        coerced to <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">String</a>
        for the parameter value.
      </p>
      <p>
        Nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-param">&lt;ao:param&gt;</a>
        or <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-params">&lt;ao:params&gt;</a>
        tags will add parameters after any provided as attributes.
      </p>
    ]]></description>
    <name>link</name>
    <tag-class>&package;.LinkTag</tag-class>
    <tei-class>com.aoapps.taglib.ElementTagTEI</tei-class>
    <body-content>&JSP;</body-content>
    &GlobalBufferedAttributes;
    <attribute>
      <description><![CDATA[
        <p>
          An optional link to copy all the attributes from, as captured by a
          <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/LinksAttribute.html">LinksAttribute</a>
          parent tag.
        </p>
      ]]></description>
      <name>link</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>com.aoapps.taglib.Link</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          When <code>true</code>, surrounds the element with <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/noscript">&lt;noscript&gt;</a>.
          Defaults to <code>false</code>.
        </p>
      ]]></description>
      <name>noscript</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p class="semanticcms-tag-reference-summary">
          The <a href="https://www.w3schools.com/tags/att_link_href.asp">href for the link</a>.
          The href is modified in several ways to make things much easier to work with.
        </p>
        <p>
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-href">&lt;ao:href&gt;</a>
          tag will override this value.
        </p>
        <p>
          In order to make relative paths predictable, relative paths are interpreted from
          the current JSP page.
        </p>
        <p>
          In order to keep paths app-relative, if starts with a /, the context path will be
          prepended to the path.
        </p>
        <p>
          In order to simplify things behind URL mapping schemes,
          the href is always written starting with '/'.  This avoids any need to include any
          <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-base">&lt;ao:base&gt;</a> tags.
        </p>
        <p>
          URL rewriting is performed as needed via
          <a rel="nofollow" href="https://jakarta.ee/specifications/platform/10/apidocs/jakarta/servlet/http/HttpServletResponse.html#encodeURL(java.lang.String)">HttpServletResponse.encodeURL</a>.
        </p>
        <p>
          To support paths in different character sets, a Unicode to ASCII URI encoding is performed
          on every character that is not defined in <a href="https://datatracker.ietf.org/doc/html/rfc3986#section-2.2">RFC 3986: Reserved Characters</a>.
          To avoid ambiguity, any dynamic parameters or anchors in the URL must have been correctly encoded by the caller.
        </p>
        <p>
          Any directly nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-param">&lt;ao:param&gt;</a>
          or <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-params">&lt;ao:params&gt;</a>
          tag will add parameters to the href.
        </p>
      ]]></description>
      <name>href</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          When <code>true</code>, generates an absolute URL for the <a href="https://www.w3schools.com/tags/att_link_href.asp">href for the link</a>.
          Defaults to <code>false</code>.
        </p>
      ]]></description>
      <name>absolute</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          When <code>true</code>, will generate a <a href="https://oss.aoapps.com/servlet-util/apidocs/com.aoapps.servlet.util/com/aoapps/servlet/http/Canonical.html">Canonical URL</a>.
          Canonical URLs should be used where per-user response URL rewriting
          (such as information added when cookies are disabled) should be avoided.
          Defaults to <code>false</code>.
        </p>
      ]]></description>
      <name>canonical</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          If the href represents a local resource, a parameter of "lastModified=#####" may be
          automatically added with the timestamp of the local resource to the nearest second.
          May be one of <code>true</code>, <code>false</code>, or <code>auto</code>.
          Defaults to <code>auto</code>.
        </p>
        <p>
          In auto mode, last modified stamping may be disabled by the client with
          the <code>X-com-aoapps-servlet-lastmodified-enabled: false</code> header.
        </p>
        <p>
          In auto mode, last modified stamping is not performed on
          <a href="https://oss.aoapps.com/servlet-util/apidocs/com.aoapps.servlet.util/com/aoapps/servlet/http/Canonical.html">Canonical URLs</a>.
        </p>
      ]]></description>
      <name>addLastModified</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_link_hreflang.asp">hreflang for the link</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-hreflang">&lt;ao:hreflang&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>hreflang</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_link_rel.asp">rel for the link</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-rel">&lt;ao:rel&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>rel</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_link_type.asp">type for the link</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-type">&lt;ao:type&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>type</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_link_media.asp">media type for the link</a>.
        </p>
      ]]></description>
      <name>media</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_global_title.asp">title for the link</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-title">&lt;ao:title&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>title</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    &OnerrorAttribute;
    &OnloadAttribute;
    <dynamic-attributes>true</dynamic-attributes>
  </tag>
  <tag>
    <!-- datePublished="2019-10-08T21:41:35-05:00" -->
    <!-- dateModified="2023-10-02T00:34:59Z" -->
    <description><![CDATA[
      <p class="semanticcms-tag-reference-summary">
        Renders a <a href="https://www.w3schools.com/tags/tag_map.asp">&lt;map&gt;</a> tag.
      </p>
      <p>
        This is expected to be used along with nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-area">&lt;ao:area&gt;</a> tags.
      </p>
    ]]></description>
    <name>map</name>
    <tag-class>&package;.MapTag</tag-class>
    <tei-class>com.aoapps.taglib.ElementTagTEI</tei-class>
    <body-content>&JSP;</body-content>
    <attribute>
      <description><![CDATA[
        <p>
          The required <a href="https://www.w3schools.com/tags/att_map_name.asp">id (and name) of the map</a>.
          Must be provided as either this attribute or a nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-id">&lt;ao:id&gt;</a> tag.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-id">&lt;ao:id&gt;</a>
          tag will override this value.
        </p>
        <p>
          For maximum HTML/XHTML and HTML 4/5 compatibility, this value is
          written as both <code>id</code> and <code>name</code> attributes.
        </p>
        <p>
          The <code>id</code> of this map should be used as the <code>usemap</code> attribute
          of an <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-area">&lt;ao:img&gt;</a> tag.
        </p>
      ]]></description>
      <name>id</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    &ClassBufferedAttribute;
    &DirBufferedAttribute;
    &StyleBufferedAttribute;
    <dynamic-attributes>true</dynamic-attributes>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p>
        Provides a <a href="https://www.w3schools.com/tags/att_maxlength.asp">maxlength attribute</a> to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/MaxlengthAttribute.html">MaxlengthAttribute</a>
        parent tag.
        The body is trimmed.  If empty is sets the maxlength to <code>null</code>.  Otherwise
        it must be a valid integer.
      </p>
    ]]></description>
    <name>maxlength</name>
    <tag-class>&package;.MaxlengthTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2023-10-02T00:34:59Z" -->
    <description><![CDATA[
      <p class="semanticcms-tag-reference-summary">
        Writes a value from the current localization bundle given its key.
        Writes the value with proper escaping based on the context of the tag.
      </p>
      <p>
        Any number of "arg###" attributes may be provided, where ### is the substitution
        parameter index, starting at zero.
        For example, there could be <code>arg0="First" arg1="Second"</code> for two arguments.
        They will be passed-on to the message format.
      </p>
      <p>
        Additionally, message substitution arguments may be provided by
        nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-messageArg">&lt;ao:messageArg&gt;</a>
        tags.
      </p>
      <p>
        These additional arguments will first fill-in any gap in the numeric ranges
        provided by "arg###" attributes.  Because the first argument is zero, if
        <code>arg1="Second" arg2="Third"</code>, then the first nested
        <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-messageArg">&lt;ao:messageArg&gt;</a>
        would be applied filling the spot of <code>arg0</code>.
      </p>
      <p>
        Once all gaps are filled, these additional arguments will be added after
        all provided as "arg###" attritutes.
      </p>
      <p>
        This tag must be nested inside a <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-bundle">&lt;ao:bundle&gt;</a> tag.
      </p>
      <p>
        The content type depends on the value provided to the type attribute, and defaults to <code>text/plain</code>.
        The content is checked for well-formedness based on its type:
      </p>
      <ul>
        <li><code>css</code> or <code>text/css</code> - must be well-formed CSS content. (Note: Currently only checks character values.)</li>
        <li><code>javascript</code>, <code>application/javascript</code>, or <code>text/javascript</code> - no validation</li>
        <li><code>json</code> or <code>application/json</code> - no validation</li>
        <li><code>ld_json</code> or <code>application/ld+json</code> - no validation</li>
        <li><code>text</code> or <code>text/plain</code> - no validation</li>
        <li><code>url</code> or <code>text/url</code> - must be a valid URL</li>
        <li><code>xhtml</code> or <code>application/xhtml+xml</code> - must be well-formed XHTML content. (Note: Currently only checks character values.)</li>
        <li><code>xhtml_attribute</code> or <code>application/xhtml+xml+attribute</code> - must be a valid XHTML attribute.</li>
        <li><code>mysql</code> or <code>text/x+mysql</code> - must be valid MySQL command "mysql" input</li>
        <li><code>psql</code> or <code>text/x+psql</code> - must be valid PostgreSQL command "psql" input</li>
        <li><code>sh</code> or <code>text/x+sh</code> - must be valid shell script</li>
      </ul>
    ]]></description>
    <name>message</name>
    <tag-class>&package;.MessageTag</tag-class>
    <tei-class>com.aoapps.taglib.MessageTagTEI</tei-class>
    <body-content>&JSP;</body-content>
    <attribute>
      <description><![CDATA[
        <p>
          The base name of resource bundle to access.
          When not provided, uses the currently active <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-bundle">&lt;ao:bundle&gt;</a>.
        </p>
      ]]></description>
      <name>bundle</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The key to lookup in the bundle.  This key is appended to any prefix specified in the bundle.
        </p>
      ]]></description>
      <name>key</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The argument that will replace <code>{0}</code> in the message format.
        </p>
        <p>
          Any number of arguments may be provided as attributes.  The first four
          are added to TLD to help JSP code assist.
        </p>
      ]]></description>
      <name>arg0</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The argument that will replace <code>{1}</code> in the message format.
        </p>
        <p>
          Any number of arguments may be provided as attributes.  The first four
          are added to TLD to help JSP code assist.
        </p>
      ]]></description>
      <name>arg1</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The argument that will replace <code>{2}</code> in the message format.
        </p>
        <p>
          Any number of arguments may be provided as attributes.  The first four
          are added to TLD to help JSP code assist.
        </p>
      ]]></description>
      <name>arg2</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The argument that will replace <code>{3}</code> in the message format.
        </p>
        <p>
          Any number of arguments may be provided as attributes.  The first four
          are added to TLD to help JSP code assist.
        </p>
      ]]></description>
      <name>arg3</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          Specifies the type of content contained in the value.
          Defaults to <code>text/plain</code>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-type">&lt;ao:type&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>type</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <dynamic-attributes>true</dynamic-attributes>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p>
        Adds a message argument to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/MessageArgsAttribute.html">MessageArgsAttribute</a>
        parent tag.
      </p>
    ]]></description>
    <name>messageArg</name>
    <tag-class>&package;.MessageArgTag</tag-class>
    <body-content>&JSP;</body-content>
    <attribute>
      <description><![CDATA[
        <p>
          The value of the parameter.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-value">&lt;ao:value&gt;</a>
          tag will override this value.
          If neither is provided, the output of the body is used with whitespace trimmed.
        </p>
      ]]></description>
      <name>value</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2026-02-05T18:09:30Z" -->
    <description><![CDATA[
      <p class="semanticcms-tag-reference-summary">
        If contained within any
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/MetasAttribute.html">MetasAttribute</a>
        parent, adds the meta data to the parent tag.
        Otherwise, renders a <a href="https://www.w3schools.com/tags/tag_meta.asp">&lt;meta&gt;</a> tag.
      </p>
      <p>
        The content may be provided in one of three ways, in precedence order:
      </p>
      <ol>
        <li>Direct child <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-content">&lt;ao:content&gt;</a> tag.</li>
        <li>As the content attribute</li>
        <li>Contents of tag body, trimmed.</li>
      </ol>
    ]]></description>
    <name>meta</name>
    <tag-class>&package;.MetaTag</tag-class>
    <tei-class>com.aoapps.taglib.ElementTagTEI</tei-class>
    <body-content>&JSP;</body-content>
    &GlobalBufferedAttributes;
    <attribute>
      <description><![CDATA[
        <p>
          An optional meta to copy all the attributes from, as captured by a
          <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/MetasAttribute.html">MetasAttribute</a>
          parent tag.
        </p>
      ]]></description>
      <name>meta</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>com.aoapps.taglib.Meta</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          When <code>true</code>, surrounds the element with <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/noscript">&lt;noscript&gt;</a>.
          Defaults to <code>false</code>.
        </p>
      ]]></description>
      <name>noscript</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_meta_name.asp">name of the meta element</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-name">&lt;ao:name&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>name</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_meta_http_equiv.asp">http-equiv of the meta element</a>.
        </p>
      ]]></description>
      <name>httpEquiv</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3.org/TR/microdata/#names:-the-itemprop-attribute">itemprop</a> used for <a href="https://www.w3.org/TR/microdata/">semantic microdata</a>.
        </p>
      ]]></description>
      <name>itemprop</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_meta_charset.asp">charset of the meta element</a>.
          Supports <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/charset/Charset.html">java.nio.charset.Charset</a>.
          Any other object is coerced to string.
        </p>
      ]]></description>
      <name>charset</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_meta_content.asp">content of the meta data</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-value">&lt;ao:content&gt;</a>
          tag will override this value.
          If neither is provided, the output of the body is used with whitespace trimmed.
        </p>
      ]]></description>
      <name>content</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <dynamic-attributes>true</dynamic-attributes>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p>
        Provides a <a href="https://www.w3schools.com/tags/att_method.asp">method attribute</a> to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/MethodAttribute.html">MethodAttribute</a>
        parent tag.
      </p>
    ]]></description>
    <name>method</name>
    <tag-class>&package;.MethodTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p>
        Provides a <a href="https://www.w3schools.com/tags/att_name.asp">name attribute</a> to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/NameAttribute.html">NameAttribute</a>
        parent tag.
      </p>
    ]]></description>
    <name>name</name>
    <tag-class>&package;.NameTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p>
        Provides an <a href="https://www.w3schools.com/tags/ev_onblur.asp">onblur</a> script to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/OnblurAttribute.html">OnblurAttribute</a>
        parent tag.
      </p>
    ]]></description>
    <name>onblur</name>
    <tag-class>&package;.OnblurTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p>
        Provides an <a href="https://www.w3schools.com/tags/ev_onchange.asp">onchange</a> script to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/OnchangeAttribute.html">OnchangeAttribute</a>
        parent tag.
      </p>
    ]]></description>
    <name>onchange</name>
    <tag-class>&package;.OnchangeTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p>
        Provides an <a href="https://www.w3schools.com/tags/ev_onclick.asp">onclick</a> script to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/OnclickAttribute.html">OnclickAttribute</a>
        parent tag.
      </p>
    ]]></description>
    <name>onclick</name>
    <tag-class>&package;.OnclickTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2023-10-05T23:33:39Z" -->
    <description><![CDATA[
      <p>
        Provides an <a href="https://www.w3schools.com/tags/ev_onerror.asp">onerror</a> script to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/OnerrorAttribute.html">OnerrorAttribute</a>
        parent tag.
      </p>
    ]]></description>
    <name>onerror</name>
    <tag-class>&package;.OnerrorTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p>
        Provides an <a href="https://www.w3schools.com/tags/ev_onfocus.asp">onfocus</a> script to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/OnfocusAttribute.html">OnfocusAttribute</a>
        parent tag.
      </p>
    ]]></description>
    <name>onfocus</name>
    <tag-class>&package;.OnfocusTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p>
        Provides an <a href="https://www.w3schools.com/tags/ev_onkeypress.asp">onkeypress</a> script to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/OnkeypressAttribute.html">OnkeypressAttribute</a>
        parent tag.
      </p>
    ]]></description>
    <name>onkeypress</name>
    <tag-class>&package;.OnkeypressTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p>
        Provides an <a href="https://www.w3schools.com/tags/ev_onload.asp">onload</a> script to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/OnloadAttribute.html">OnloadAttribute</a>
        parent tag.
      </p>
    ]]></description>
    <name>onload</name>
    <tag-class>&package;.OnloadTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p>
        Provides an <a href="https://www.w3schools.com/tags/ev_onmouseout.asp">onmouseout</a> script to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/OnmouseoutAttribute.html">OnmouseoutAttribute</a>
        parent tag.
      </p>
    ]]></description>
    <name>onmouseout</name>
    <tag-class>&package;.OnmouseoutTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p>
        Provides an <a href="https://www.w3schools.com/tags/ev_onmouseover.asp">onmouseover</a> script to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/OnmouseoverAttribute.html">OnmouseoverAttribute</a>
        parent tag.
      </p>
    ]]></description>
    <name>onmouseover</name>
    <tag-class>&package;.OnmouseoverTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p>
        Provides an <a href="https://www.w3schools.com/tags/ev_onsubmit.asp">onsubmit</a> script to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/OnsubmitAttribute.html">OnsubmitAttribute</a>
        parent tag.
      </p>
    ]]></description>
    <name>onsubmit</name>
    <tag-class>&package;.OnsubmitTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2023-10-02T00:34:59Z" -->
    <description><![CDATA[
      <p>
        Renders an <a href="https://www.w3schools.com/tags/tag_option.asp">&lt;option&gt;</a> tag.
      </p>
    ]]></description>
    <name>option</name>
    <tag-class>&package;.OptionTag</tag-class>
    <tei-class>com.aoapps.taglib.ElementTagTEI</tei-class>
    <body-content>&JSP;</body-content>
    &GlobalBufferedAttributes;
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_option_disabled.asp">disabled attribute</a>.
          Accepts values of <code>true</code> or <code>false</code>.
          A non-empty nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-disabled">&lt;ao:disabled&gt;</a>
          tag will override this value.
          If disabled is <code>true</code>, will add the attribute as <code>disabled="disabled"</code>,
          otherwise the attribute is not added.
        </p>
      ]]></description>
      <name>disabled</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_option_selected.asp">selected attribute</a>.
          Accepts values of <code>true</code> or <code>false</code>.
          A non-empty nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-selected">&lt;ao:selected&gt;</a>
          tag will override this value.
          If selected is <code>true</code>, will add the attribute as <code>selected="selected"</code>,
          otherwise the attribute is not added.
        </p>
      ]]></description>
      <name>selected</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_option_value.asp">value of the option</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-value">&lt;ao:value&gt;</a>
          tag will override this value.
          If neither is provided, the output of the body is used with whitespace trimmed.
        </p>
      ]]></description>
      <name>value</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <dynamic-attributes>true</dynamic-attributes>
  </tag>
  <tag>
    <!-- datePublished="2016-09-25T11:14:02-05:00" -->
    <!-- dateModified="2021-06-03T22:53:21-05:00" -->
    <description><![CDATA[
      <p>
        Like
        <a rel="nofollow" href="https://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/c/otherwise.html">&lt;c:otherwise&gt;</a>,
        except uses deferred expressions.
      </p>
    ]]></description>
    <name>otherwise</name>
    <tag-class>com.aoapps.taglib.OtherwiseTag</tag-class>
    <body-content>JSP</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2023-10-02T00:34:59Z" -->
    <description><![CDATA[
      <p class="semanticcms-tag-reference-summary">
        Writes the value with proper escaping based on the context of the tag.
        Supports data types beyond
        <a rel="nofollow" href="https://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/c/out.html">&lt;c:out&gt;</a>.
      </p>
      <p>
        In addition to the usual set of coercions expected for
        <a rel="nofollow" href="https://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/c/out.html">&lt;c:out&gt;</a>,
        also supports writing <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/org/w3c/dom/Node.html">XML nodes</a>
        such as for HTML snippets.
      </p>
      <p>
        The content type depends on the value provided to the type attribute, and defaults to <code>text/plain</code>.
        The content is checked for well-formedness based on its type:
      </p>
      <ul>
        <li><code>css</code> or <code>text/css</code> - must be well-formed CSS content. (Note: Currently only checks character values.)</li>
        <li><code>javascript</code>, <code>application/javascript</code>, or <code>text/javascript</code> - no validation</li>
        <li><code>json</code> or <code>application/json</code> - no validation</li>
        <li><code>ld_json</code> or <code>application/ld+json</code> - no validation</li>
        <li><code>text</code> or <code>text/plain</code> - no validation</li>
        <li><code>url</code> or <code>text/url</code> - must be a valid URL</li>
        <li><code>xhtml</code> or <code>application/xhtml+xml</code> - must be well-formed XHTML content. (Note: Currently only checks character values.)</li>
        <li><code>xhtml_attribute</code> or <code>application/xhtml+xml+attribute</code> - must be a valid XHTML attribute.</li>
        <li><code>mysql</code> or <code>text/x+mysql</code> - must be valid MySQL command "mysql" input</li>
        <li><code>psql</code> or <code>text/x+psql</code> - must be valid PostgreSQL command "psql" input</li>
        <li><code>sh</code> or <code>text/x+sh</code> - must be valid shell script</li>
      </ul>
      <p>
        This is compatible with <a href="https://oss.aoapps.com/encoding/taglib/]]>&aoEncodingTld;<![CDATA[/tag-out">&lt;encoding:out&gt;</a>,
        with the addition of allowing nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-value">&lt;ao:value&gt;</a> and
        <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-type">&lt;ao:type&gt;</a> tags.
      </p>
    ]]></description>
    <name>out</name>
    <tag-class>&package;.OutTag</tag-class>
    <tei-class>com.aoapps.encoding.taglib.OutTagTEI</tei-class>
    <body-content>&JSP;</body-content>
    <attribute>
      <description><![CDATA[
        <p>
          The value to be written.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-value">&lt;ao:value&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>value</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
      <!-- TODO: This, and look at other things done deferred-value in jstl
      <deferred-value>
        <type>java.lang.Object</type>
      </deferred-value>
      -->
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The default value if the resulting value is <code>null</code>.
        </p>
      ]]></description>
      <name>default</name>
      <required>false</required>
      <deferred-value>
        <type>java.lang.Object</type>
      </deferred-value>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          Specifies the type of content contained in the value.
          Defaults to <code>text/plain</code>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-type">&lt;ao:type&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>type</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p>
        Provides a page to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/PageAttribute.html">PageAttribute</a>
        parent tag.
      </p>
    ]]></description>
    <name>page</name>
    <tag-class>&package;.PageTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2026-02-05T18:09:30Z" -->
    <description><![CDATA[
      <p>
        Adds a parameter to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/ParamsAttribute.html">ParamsAttribute</a>
        parent tag.
      </p>
    ]]></description>
    <name>param</name>
    <tag-class>&package;.ParamTag</tag-class>
    <body-content>&JSP;</body-content>
    <attribute>
      <description><![CDATA[
        <p>
          The name of parameter tag.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-name">&lt;ao:name&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>name</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The value of the parameter.
          When a parameter value is an <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Enum.html">Enum</a>, the
          value is obtained via <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Enum.html#name()">Enum.name()</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-value">&lt;ao:value&gt;</a>
          tag will override this value.
          If neither is provided, the output of the body is used with whitespace trimmed.
        </p>
      ]]></description>
      <name>value</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2026-02-05T18:09:30Z" -->
    <description><![CDATA[
      <p>
        Adds multiple parameters to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/ParamsAttribute.html">ParamsAttribute</a>
        parent tag.
      </p>
    ]]></description>
    <name>params</name>
    <tag-class>&package;.ParamsTag</tag-class>
    <body-content>&JSP;</body-content>
    <attribute>
      <description><![CDATA[
        <p>
          The name of parameter to add.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-name">&lt;ao:name&gt;</a>
          tag will override this value.
        </p>
        <p>
          When provided, the values may not contain a
          <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Map.html">Map</a>
          or <a href="https://oss.aoapps.com/net-types/apidocs/com.aoapps.net.types/com/aoapps/net/URIParameters.html">URIParameters</a>.
          When provided, the exclude attribute may not be provided.
        </p>
      ]]></description>
      <name>name</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          Optionally excludes all elements of a
          <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Map.html">Map</a>
          or <a href="https://oss.aoapps.com/net-types/apidocs/com.aoapps.net.types/com/aoapps/net/URIParameters.html">URIParameters</a>
          that match any of the comma-separated patterns.
          May not be used in conjunction with the name attribute.
        </p>
        <p>
          Each pattern in the comma-separated list may be in the following format:
        </p>
        <table class="ao-grid">
          <tbody>
            <tr>
              <td>exact_name</td>
              <td>matches the name exactly</td>
            </tr>
            <tr>
              <td>*</td>
              <td>matches all (clears all parameters)</td>
            </tr>
            <tr>
              <td>*suffix</td>
              <td>matches the name with "endsWith"</td>
            </tr>
            <tr>
              <td>prefix*</td>
              <td>matches the name with "beginsWith"</td>
            </tr>
          </tbody>
        </table>
        <p>
          Defaults to none excluded.
        </p>
      ]]></description>
      <name>exclude</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The values of the parameters.
        </p>
        <p>
          When name is provided, supports
          <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Iterable.html">Iterable</a>,
          <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Iterator.html">Iterator</a>,
          <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Enumeration.html">Enumeration</a>,
          or array values.
        </p>
        <p>
          When name is not provided, requires
          <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Map.html">Map</a>
          or <a href="https://oss.aoapps.com/net-types/apidocs/com.aoapps.net.types/com/aoapps/net/URIParameters.html">URIParameters</a>,
          where the parameter name is the map key coerced to <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">String</a>
          and the value (or set of values) is the map value.  Each of the entry values may be
          <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Iterable.html">Iterable</a>,
          <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Iterator.html">Iterator</a>,
          <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Enumeration.html">Enumeration</a>,
          array, or single value.
        </p>
        <p>
          When obtaining values from a
          <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Map.html">Map</a>
          or <a href="https://oss.aoapps.com/net-types/apidocs/com.aoapps.net.types/com/aoapps/net/URIParameters.html">URIParameters</a>,
          parameters may be excluded with the "exclude" attribute.
        </p>
        <p>
          Parameters are never added with <code>null</code> values.
          When a parameter value is an <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Enum.html">Enum</a>, the
          value is obtained via <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Enum.html#name()">Enum.name()</a>.
        </p>
      ]]></description>
      <name>values</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p class="semanticcms-tag-reference-summary">
        Provides a <a href="https://www.w3schools.com/tags/att_readonly.asp">readonly attribute</a> to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/ReadonlyAttribute.html">ReadonlyAttribute</a>
        parent tag.
      </p>
      <p>
        The body, after trimming, must contain either <code>true</code>, <code>false</code>, or be empty.
        If empty, the readonly attribute of the parent tag is not overridden.
      </p>
    ]]></description>
    <name>readonly</name>
    <tag-class>&package;.ReadonlyTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2026-02-05T18:09:30Z" -->
    <description><![CDATA[
      <div class="semanticcms-tag-reference-summary">
        <p>
          Redirects the browser to another location.
          Stops processing of the containing JSP page.
        </p>
        <p>
          Does not send redirect when the <a rel="nofollow" href="https://jakarta.ee/specifications/platform/10/apidocs/jakarta/servlet/ServletResponse.html#isCommitted--">response has already been committed</a>,
          but also does not throw any exception; logs FINE-level notice instead.
        </p>
        <p>
          <strong>Important:</strong>
          Redirects inside of standard
          <a rel="nofollow" href="https://docs.oracle.com/cd/A87860_01/doc/java.817/a83726/genlovw3.htm#1008181">&lt;jsp:include&gt;</a>
          tags will be silently lost.
          Use <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-include">&lt;ao:include&gt;</a>
          instead of <a rel="nofollow" href="https://docs.oracle.com/cd/A87860_01/doc/java.817/a83726/genlovw3.htm#1008181">&lt;jsp:include&gt;</a>
          to support redirects inside of includes.
        </p>
      </div>
      <p>
        Any attribute that has no namespace and begins with <code>param.</code> is added to the href as a URL parameter.
        The parameter name is the part of the attribute name following <code>param.</code>.
      </p>
      <p>
        When a parameter value is <code>null</code> it is not added.
        When a parameter value is an <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Enum.html">Enum</a>, the
        value is obtained via <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Enum.html#name()">Enum.name()</a>.
        If the value is an
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Iterable.html">Iterable</a>,
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Iterator.html">Iterator</a>,
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Enumeration.html">Enumeration</a>,
        or array, then each non-null element is coerced to
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">String</a>
        as a separate parameter in iteration order.  Otherwise, the value itself is
        coerced to <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">String</a>
        for the parameter value.
      </p>
      <p>
        Nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-param">&lt;ao:param&gt;</a>
        or <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-params">&lt;ao:params&gt;</a>
        tags will add parameters after any provided as attributes.
      </p>
      <p>
        Due to browser and server URL length limitations for GET requests, it is recommended to not
        exceed about 2000 characters for URLs, including all parameters.
        See <a href="https://www.boutell.com/newfaq/misc/urllength.html">WWW FAQs: What is the maximum length of a URL?</a>
      </p>
      <p>
        When redirecting to a resource within the application, such as for a 303 redirect-after-post response,
        it is recommended to provide the "page" attribute to allow automatic fallback to forward instead of redirect.
        With this redirect/forward combination, users will have the benefits of redirect-after-post while the
        system gracefully falls back to request forwarding when the GET request length limit is exceeded.
      </p>
    ]]></description>
    <name>redirect</name>
    <tag-class>com.aoapps.taglib.RedirectTag</tag-class>
    <tei-class>com.aoapps.taglib.RedirectTagTEI</tei-class>
    <body-content>scriptless</body-content>
    <attribute>
      <description><![CDATA[
        <p>
          The status code of redirect performed.  Is one of:
        </p>
        <ul>
          <li><code>moved_permanently</code> or <code>301</code></li>
          <li><code>moved_temporarily</code> or <code>302</code></li>
          <li><code>see_other</code> or <code>303</code> - Hint: Used for redirect-after-post</li>
        </ul>
        <p>
          Because the redirect type has important consequences on search engines and browser caches, the decision should be made for
          each redirect.  Thus, this attribute is required.
        </p>
      ]]></description>
      <name>statusCode</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p class="semanticcms-tag-reference-summary">
          The destination for the redirect.  This should only be provided when
          either redirecting to an external resource or when the default obtained
          from "page" is inappropriate.
          The href is modified in several ways to make things much easier to work with.
        </p>
        <p>
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-href">&lt;ao:href&gt;</a>
          tag will override this value.
        </p>
        <p>
          When not provided as attribute or a nested tag, defaults to the value for "page".
          This should be a reasonable default except for unusual circumstances.
        </p>
        <p>
          In order to make relative paths predictable, relative paths are interpreted from
          the current JSP page.
        </p>
        <p>
          In order to keep paths app-relative, if starts with a /, the context path will be
          prepended to the path.
        </p>
        <p>
          In order to simplify things behind URL mapping schemes,
          the href is always written starting with '/'.  This avoids any need to include any
          <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-base">&lt;ao:base&gt;</a> tags.
        </p>
        <p>
          URL rewriting is performed as needed via
          <a rel="nofollow" href="https://jakarta.ee/specifications/platform/10/apidocs/jakarta/servlet/http/HttpServletResponse.html#encodeURL(java.lang.String)">HttpServletResponse.encodeURL</a>.
        </p>
        <p>
          To support paths in different character sets, a Unicode to ASCII URI encoding is performed
          on every character that is not defined in <a href="https://datatracker.ietf.org/doc/html/rfc3986#section-2.2">RFC 3986: Reserved Characters</a>.
          To avoid ambiguity, any dynamic parameters or anchors in the URL must have been correctly encoded by the caller.
        </p>
        <p>
          Any directly nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-param">&lt;ao:param&gt;</a>
          or <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-params">&lt;ao:params&gt;</a>
          tag will add parameters to the href.
        </p>
      ]]></description>
      <name>href</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          When <code>true</code>, generates an absolute URL for the Location of the redirect.
          Defaults to <code>true</code> for compatibility with the requirements prior to
          <a href="https://datatracker.ietf.org/doc/html/rfc7231#section-7.1.2">RFC 7231: 7.1.2. Location</a>.
        </p>
      ]]></description>
      <name>absolute</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          When <code>true</code>, will generate a <a href="https://oss.aoapps.com/servlet-util/apidocs/com.aoapps.servlet.util/com/aoapps/servlet/http/Canonical.html">Canonical URL</a>.
          Canonical URLs should be used where per-user response URL rewriting
          (such as information added when cookies are disabled) should be avoided.
          Defaults to <code>false</code>.
        </p>
      ]]></description>
      <name>canonical</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          If the href represents a local resource, a parameter of "lastModified=#####" may be
          automatically added with the timestamp of the local resource to the nearest second.
          May be one of <code>true</code>, <code>false</code>, or <code>auto</code>.
          Defaults to <code>auto</code>.
        </p>
        <p>
          In auto mode, last modified stamping may be disabled by the client with
          the <code>X-com-aoapps-servlet-lastmodified-enabled: false</code> header.
        </p>
        <p>
          In auto mode, last modified stamping is not performed on
          <a href="https://oss.aoapps.com/servlet-util/apidocs/com.aoapps.servlet.util/com/aoapps/servlet/http/Canonical.html">Canonical URLs</a>.
        </p>
      ]]></description>
      <name>addLastModified</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The page that will be forwarded to when the GET request URL length is exceeded.
          It is recommended to provide the page for any redirect within a web application,
          such as 303 redirect-after-post.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-page">&lt;ao:page&gt;</a>
          tag will override this value.
        </p>
        <p>
          When forward is performed instead of redirect, the original request parameters are hidden.
          Only the parameters provided in the redirect are passed-on to the target page.
          Also, any arguments to the current JSP page are not passed-on (see
          <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-include">&lt;ao:include&gt;</a>).
        </p>
        <p>
          Security Note: page must be a trusted value since it can access any resource available via
          <a rel="nofollow" href="https://jakarta.ee/specifications/platform/10/apidocs/jakarta/servlet/RequestDispatcher.html">RequestDispatcher</a>.
          It would be incorrect to use a value that can be manipulated by a client in any way.
        </p>
        <p>
          Recommend use of <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-include">&lt;ao:base&gt;</a>
          on target page to have relative paths interpreted from the forwarded-to page.
        </p>
        <p>
          When the redirect type is <code>302</code> or <code>303</code>,
          the <code>cache-control: no-cache</code> header is set on the
          response to try to best emulate the caching effects the
          corresponding redirect.
        </p>
      ]]></description>
      <name>page</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <dynamic-attributes>true</dynamic-attributes>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p>
        Provides a <a href="https://www.w3schools.com/tags/att_rel.asp">rel attribute</a> to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/RelAttribute.html">RelAttribute</a>
        parent tag.
      </p>
    ]]></description>
    <name>rel</name>
    <tag-class>&package;.RelTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-03T22:53:21-05:00" -->
    <description><![CDATA[
      <p>
        Allows editing of the website resource bundles through the website itself.
      </p>
    ]]></description>
    <name>resourceEditor</name>
    <tag-class>com.aoapps.taglib.ResourceEditorTag</tag-class>
    <body-content>empty</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2026-02-05T18:09:30Z" -->
    <description><![CDATA[
      <p class="semanticcms-tag-reference-summary">
        Manually establishes a <a href="https://www.w3schools.com/tags/tag_script.asp">script context</a> when automatic detection is not possible.
        The body of this tag contains a script.
      </p>
      <p>
        The script should not be encoded as if in HTML/XML, it must have single
        "&amp;" instead of "&amp;amp;".  The script may contain any characters
        valid in that language, including &lt;, &gt;, &amp;, \u0000 (<code>null</code>), or
        any other values.
      </p>
      <p>
        The script will be properly encoded for the content of this tag.  Thus, you
        may have a script of arbitrary complexity containing arbitrary data within
        an XHTML onclick attribute, the tags will make sure everything is properly
        encoded.
      </p>
      <p>
        The content type of this tag is equal to the type set in the type attribute.
      </p>
      <p>
        Any attribute that has no namespace and begins with <code>param.</code> is added to the src as a URL parameter.
        The parameter name is the part of the attribute name following <code>param.</code>.
      </p>
      <p>
        When a parameter value is <code>null</code> it is not added.
        When a parameter value is an <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Enum.html">Enum</a>, the
        value is obtained via <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Enum.html#name()">Enum.name()</a>.
        If the value is an
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Iterable.html">Iterable</a>,
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Iterator.html">Iterator</a>,
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Enumeration.html">Enumeration</a>,
        or array, then each non-null element is coerced to
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">String</a>
        as a separate parameter in iteration order.  Otherwise, the value itself is
        coerced to <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">String</a>
        for the parameter value.
      </p>
      <p>
        Nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-param">&lt;ao:param&gt;</a>
        or <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-params">&lt;ao:params&gt;</a>
        tags will add parameters after any provided as attributes.
      </p>
      <p>
        For simpler scenarios, the following tags are simplier alternatives:
      </p>
      <ul>
        <li><a href="https://oss.aoapps.com/encoding/taglib/]]>&aoEncodingTld;<![CDATA[/tag-javascript">&lt;encoding:javascript&gt;</a></li>
        <li><a href="https://oss.aoapps.com/encoding/taglib/]]>&aoEncodingTld;<![CDATA[/tag-json">&lt;encoding:json&gt;</a></li>
        <li><a href="https://oss.aoapps.com/encoding/taglib/]]>&aoEncodingTld;<![CDATA[/tag-ldJson">&lt;encoding:ldJson&gt;</a></li>
      </ul>
    ]]></description>
    <name>script</name>
    <tag-class>&package;.ScriptTag</tag-class>
    <tei-class>com.aoapps.taglib.ScriptTagTEI</tei-class>
    <body-content>&JSP;</body-content>
    &GlobalBufferedAttributes;
    <attribute>
      <description><![CDATA[
        <p>
          Specifies the <a href="https://www.w3schools.com/tags/att_script_type.asp">type of script</a>.
          The default is <code>application/javascript</code>, also allows <code>text/javascript</code>
          <code>application/json</code> and <code>application/ld+json</code>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-type">&lt;ao:type&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>type</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p class="semanticcms-tag-reference-summary">
          The <a href="https://www.w3schools.com/tags/att_script_src.asp">src for the script</a>.
          The src is modified in several ways to make things much easier to work with.
        </p>
        <p>
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-src">&lt;ao:src&gt;</a>
          tag will override this value.
        </p>
        <p>
          In order to make relative paths predictable, relative paths are interpreted from
          the current JSP page.
        </p>
        <p>
          In order to keep paths app-relative, if starts with a /, the context path will be
          prepended to the path.
        </p>
        <p>
          In order to simplify things behind URL mapping schemes,
          the src is always written starting with '/'.  This avoids any need to include any
          <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-base">&lt;ao:base&gt;</a> tags.
        </p>
        <p>
          URL rewriting is performed as needed via
          <a rel="nofollow" href="https://jakarta.ee/specifications/platform/10/apidocs/jakarta/servlet/http/HttpServletResponse.html#encodeURL(java.lang.String)">HttpServletResponse.encodeURL</a>.
        </p>
        <p>
          To support paths in different character sets, a Unicode to ASCII URI encoding is performed
          on every character that is not defined in <a href="https://datatracker.ietf.org/doc/html/rfc3986#section-2.2">RFC 3986: Reserved Characters</a>.
          To avoid ambiguity, any dynamic parameters or anchors in the URL must have been correctly encoded by the caller.
        </p>
        <p>
          Any directly nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-param">&lt;ao:param&gt;</a>
          or <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-params">&lt;ao:params&gt;</a>
          tag will add parameters to the src.
        </p>
      ]]></description>
      <name>src</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          When <code>true</code>, generates an absolute URL for the <a href="https://www.w3schools.com/tags/att_script_src.asp">src for the script</a>.
          Defaults to <code>false</code>.
        </p>
      ]]></description>
      <name>absolute</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          When <code>true</code>, will generate a <a href="https://oss.aoapps.com/servlet-util/apidocs/com.aoapps.servlet.util/com/aoapps/servlet/http/Canonical.html">Canonical URL</a>.
          Canonical URLs should be used where per-user response URL rewriting
          (such as information added when cookies are disabled) should be avoided.
          Defaults to <code>false</code>.
        </p>
      ]]></description>
      <name>canonical</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          If the src represents a local resource, a parameter of "lastModified=#####" may be
          automatically added with the timestamp of the local resource to the nearest second.
          May be one of <code>true</code>, <code>false</code>, or <code>auto</code>.
          Defaults to <code>auto</code>.
        </p>
        <p>
          In auto mode, last modified stamping may be disabled by the client with
          the <code>X-com-aoapps-servlet-lastmodified-enabled: false</code> header.
        </p>
        <p>
          In auto mode, last modified stamping is not performed on
          <a href="https://oss.aoapps.com/servlet-util/apidocs/com.aoapps.servlet.util/com/aoapps/servlet/http/Canonical.html">Canonical URLs</a>.
        </p>
      ]]></description>
      <name>addLastModified</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          When <code>true</code>, loads the script asynchronously.
          Defaults to <code>false</code>.
        </p>
      ]]></description>
      <name>async</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          When <code>true</code>, loads the script deferred.
          Defaults to <code>false</code>.
        </p>
      ]]></description>
      <name>defer</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    &OnerrorAttribute;
    &OnloadAttribute;
    <dynamic-attributes>true</dynamic-attributes>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2023-10-02T00:34:59Z" -->
    <description><![CDATA[
      <p>
        Renders a <a href="https://www.w3schools.com/tags/tag_select.asp">&lt;select&gt;</a> tag.
      </p>
    ]]></description>
    <name>select</name>
    <tag-class>&package;.SelectTag</tag-class>
    <tei-class>com.aoapps.taglib.ElementTagTEI</tei-class>
    <body-content>&JSP;</body-content>
    &GlobalBufferedAttributes;
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_select_disabled.asp">disabled attribute</a>.
          Accepts values of <code>true</code> or <code>false</code>.
          A non-empty nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-disabled">&lt;ao:disabled&gt;</a>
          tag will override this value.
          If disabled is <code>true</code>, will add the attribute as <code>disabled="disabled"</code>,
          otherwise the attribute is not added.
        </p>
      ]]></description>
      <name>disabled</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_select_name.asp">name of the select element</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-name">&lt;ao:name&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>name</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_select_size.asp">size of the select element</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-size">&lt;ao:size&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>size</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Integer</type>
    </attribute>
    &OnblurAttribute;
    &OnchangeAttribute;
    &OnfocusAttribute;
    &OnkeypressAttribute;
    <dynamic-attributes>true</dynamic-attributes>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p class="semanticcms-tag-reference-summary">
        Provides a <a href="https://www.w3schools.com/tags/att_selected.asp">selected attribute</a> to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/SelectedAttribute.html">SelectedAttribute</a>
        parent tag.
      </p>
      <p>
        The body, after trimming, must contain either <code>true</code>, <code>false</code>, or be empty.
        If empty, the selected attribute of the parent tag is not overridden.
      </p>
    ]]></description>
    <name>selected</name>
    <tag-class>&package;.SelectedTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2025-12-30T13:42:11Z" -->
    <description><![CDATA[
      <p>
        Returns an error status.
        Stops processing of the containing JSP page.
        Results in error handler processing.
      </p>
      <p>
        Does not send error when the <a rel="nofollow" href="https://jakarta.ee/specifications/platform/10/apidocs/jakarta/servlet/ServletResponse.html#isCommitted--">response has already been committed</a>,
        but also does not throw any exception; logs FINE-level notice instead.
      </p>
      <p>
        <strong>Important:</strong>
        Errors sent inside of standard
        <a rel="nofollow" href="https://docs.oracle.com/cd/A87860_01/doc/java.817/a83726/genlovw3.htm#1008181">&lt;jsp:include&gt;</a>
        tags will be silently lost.
        Use <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-include">&lt;ao:include&gt;</a>
        instead of
        <a rel="nofollow" href="https://docs.oracle.com/cd/A87860_01/doc/java.817/a83726/genlovw3.htm#1008181">&lt;jsp:include&gt;</a>
        to support
        <a rel="nofollow" href="https://jakarta.ee/specifications/platform/10/apidocs/jakarta/servlet/http/HttpServletResponse.html#sendError(int)">sendError</a>
        inside of includes.
      </p>
    ]]></description>
    <name>sendError</name>
    <tag-class>&package;.SendErrorTag</tag-class>
    <body-content>&JSP;</body-content>
    <attribute>
      <description><![CDATA[
        <p>
          The status code for
          <a rel="nofollow" href="https://jakarta.ee/specifications/platform/10/apidocs/jakarta/servlet/http/HttpServletResponse.html#sendError(int)">response.sendError</a>.
        </p>
      ]]></description>
      <name>status</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
      <type>int</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The optional message to be sent.  If not set as an attribute, the message will be taken from the body, trimmed.
        </p>
      ]]></description>
      <name>message</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p>
        Provides a <a href="https://www.w3schools.com/tags/att_size.asp">size attribute</a> to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/SizeAttribute.html">SizeAttribute</a>
        parent tag.
      </p>
    ]]></description>
    <name>size</name>
    <tag-class>&package;.SizeTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-09-25T23:27:50-05:00" -->
    <description><![CDATA[
      <p>
        Provides a <a href="https://www.w3schools.com/tags/att_src.asp">src attribute</a> to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/SrcAttribute.html">SrcAttribute</a>
        parent tag.
        The body of this tag, after trimming, is valid <a href="https://datatracker.ietf.org/doc/html/rfc3986">RFC 3986 URI</a>
        or <a href="https://datatracker.ietf.org/doc/html/rfc3987">RFC 3987 IRI</a>.
      </p>
    ]]></description>
    <name>src</name>
    <tag-class>&package;.SrcTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2024-09-14T01:35:44Z" -->
    <description><![CDATA[
      <p>
        Provides a <a href="https://www.w3schools.com/tags/att_style.asp">style attribute</a> to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/StyleAttribute.html">StyleAttribute</a>
        parent tag, if present, otherwise manually establishes a <a href="https://www.w3schools.com/tags/tag_style.asp">style context</a>.
        The body of this tag contains a CSS.
      </p>
    ]]></description>
    <name>style</name>
    <tag-class>&package;.StyleTag</tag-class>
    <body-content>&JSP;</body-content>
    <attribute>
      <description><![CDATA[
        <p>
          Forces the creation of a manual <a href="https://www.w3schools.com/tags/tag_style.asp">style context</a>
          even when within a <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/StyleAttribute.html">StyleAttribute</a>
          parent tag.
        </p>
        <p>
          At this time, the <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-html">&lt;ao:html&gt;</a> tag does
          not implement <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/StyleAttribute.html">StyleAttribute</a>,
          so this should not be required when the style is within the <code>&lt;head&gt;</code>.  However,
          inlining a stylesheet within some other tags, such as <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-form">&lt;ao:form&gt;</a>,
          will require <code>forceElement="true"</code>.
        </p>
      ]]></description>
      <name>forceElement</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          When <code>true</code>, surrounds the element with <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/noscript">&lt;noscript&gt;</a>.
          Defaults to <code>false</code>.
        </p>
      ]]></description>
      <name>noscript</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p class="semanticcms-tag-reference-summary">
        Provides a <a href="https://www.w3schools.com/tags/att_tabindex.asp">tabindex attribute</a> to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/TabindexAttribute.html">TabindexAttribute</a>
        parent tag.
      </p>
      <p>
        The body, after trimming, must contain an integer or be empty.
        If empty, the tabindex attribute of the parent tag is not overridden.
      </p>
    ]]></description>
    <name>tabindex</name>
    <tag-class>&package;.TabindexTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p>
        Provides a <a href="https://www.w3schools.com/tags/att_target.asp">target attribute</a> to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/TargetAttribute.html">TargetAttribute</a>
        parent tag.
      </p>
    ]]></description>
    <name>target</name>
    <tag-class>&package;.TargetTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2023-10-02T00:34:59Z" -->
    <description><![CDATA[
      <p class="semanticcms-tag-reference-summary">
        Renders a <a href="https://www.w3schools.com/tags/tag_textarea.asp">&lt;textarea&gt;</a> tag.
      </p>
      <p>
        The value may be provided in one of three ways, in precedence order:
      </p>
      <ol>
        <li>Direct child <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-value">&lt;ao:value&gt;</a> tag.</li>
        <li>As the value attribute</li>
        <li>Contents of tag body.</li>
      </ol>
    ]]></description>
    <name>textarea</name>
    <tag-class>&package;.TextareaTag</tag-class>
    <body-content>&JSP;</body-content>
    &GlobalBufferedAttributes;
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_textarea_cols.asp">number of columns</a> for the textarea element.
        </p>
      ]]></description>
      <name>cols</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>int</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_textarea_disabled.asp">disabled attribute</a>.
          Accepts values of <code>true</code> or <code>false</code>.
          A non-empty nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-disabled">&lt;ao:disabled&gt;</a>
          tag will override this value.
          If disabled is <code>true</code>, will add the attribute as <code>disabled="disabled"</code>,
          otherwise the attribute is not added.
        </p>
      ]]></description>
      <name>disabled</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_textarea_name.asp">name of the textarea element</a>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-name">&lt;ao:name&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>name</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_textarea_readonly.asp">readonly attribute</a>.
          Accepts values of <code>true</code> or <code>false</code>.
          A non-empty nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-readonly">&lt;ao:readonly&gt;</a>
          tag will override this value.
          If readonly is <code>true</code>, will add the attribute as <code>readonly="readonly"</code>,
          otherwise the attribute is not added.
        </p>
      ]]></description>
      <name>readonly</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The <a href="https://www.w3schools.com/tags/att_textarea_rows.asp">number of rows</a> for the textarea element.
        </p>
      ]]></description>
      <name>rows</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>int</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          The value of the textarea.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-value">&lt;ao:value&gt;</a>
          tag will override this value.
          If neither is provided, the output of the body is used.
        </p>
      ]]></description>
      <name>value</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    &OnchangeAttribute;
    <dynamic-attributes>true</dynamic-attributes>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p>
        Provides a <a href="https://www.w3schools.com/tags/att_title.asp">title attribute</a> to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/TitleAttribute.html">TitleAttribute</a>
        parent tag.
      </p>
    ]]></description>
    <name>title</name>
    <tag-class>&package;.TitleTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p>
        Provides a <a href="https://www.w3schools.com/tags/att_type.asp">type attribute</a> to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/TypeAttribute.html">TypeAttribute</a>
        parent tag.
      </p>
    ]]></description>
    <name>type</name>
    <tag-class>&package;.TypeTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2026-02-05T18:09:30Z" -->
    <description><![CDATA[
      <p class="semanticcms-tag-reference-summary">
        Manually establishes a URL context when automatic detection is not possible.
        The body of this tag, after trimming, is valid <a href="https://datatracker.ietf.org/doc/html/rfc3986">RFC 3986 URI</a>
        or <a href="https://datatracker.ietf.org/doc/html/rfc3987">RFC 3987 IRI</a>.
        The URL is modified in several ways to make things much easier to work with.
      </p>
      <p>
        Before the first ? symbol, may contain characters in any language.  This
        is more flexible than a strict URL format, these characters will be
        automatically encoded based on context.
      </p>
      <p>
        After the first ?, however, the parameters must be properly URL encoded
        and contain only valid characters.  It should not be escaped for (X)HTML,
        meaning that parameter separators should be "&amp;" instead of "&amp;amp;".
        The proper escaping/encoding will be performed based on the context of
        this tag.
      </p>
      <p>
        In order to make relative paths predictable, relative paths are interpreted from
        the current JSP page.
      </p>
      <p>
        In order to keep paths app-relative, if starts with a /, the context path will be
        prepended to the path.
      </p>
      <p>
        In order to simplify things behind URL mapping schemes,
        the href is always written starting with '/'.  This avoids any need to include any
        <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-base">&lt;ao:base&gt;</a> tags.
      </p>
      <p>
        Depending on context, the URL will be passed through
        <a rel="nofollow" href="https://jakarta.ee/specifications/platform/10/apidocs/jakarta/servlet/http/HttpServletResponse.html#encodeURL(java.lang.String)">HttpServletResponse.encodeURL</a>
        to add any URL-based session state.  Session state will never be added to external links.
      </p>
      <p>
        To support paths in different character sets, a Unicode to ASCII URI encoding is performed
        on every character that is not defined in <a href="https://datatracker.ietf.org/doc/html/rfc3986#section-2.2">RFC 3986: Reserved Characters</a>.
        To avoid ambiguity, any dynamic parameters or anchors in the URL must have been correctly encoded by the caller.
      </p>
      <p>
        Any attribute that has no namespace and begins with <code>param.</code> is added to the URL as a parameter.
        The parameter name is the part of the attribute name following <code>param.</code>.
      </p>
      <p>
        When a parameter value is <code>null</code> it is not added.
        When a parameter value is an <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Enum.html">Enum</a>, the
        value is obtained via <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Enum.html#name()">Enum.name()</a>.
        If the value is an
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Iterable.html">Iterable</a>,
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Iterator.html">Iterator</a>,
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Enumeration.html">Enumeration</a>,
        or array, then each non-null element is coerced to
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">String</a> as a separate
        parameter in iteration order.  Otherwise, the value itself is
        coerced to <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">String</a>
        for the parameter value.
      </p>
      <p>
        Nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-param">&lt;ao:param&gt;</a> or
        <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-params">&lt;ao:params&gt;</a> tags will
        add parameters after any provided as attributes.
      </p>
      <p>
        When in a CSS context, such as nested within <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-style">&lt;ao:style&gt;</a>,
        the URL is surrounded by <code>url("…")</code> and fully encoded as a <a href="https://www.w3.org/TR/CSS2/syndata.html#uri">CSS URL</a>.
      </p>
      <p>
        The content type of this tag is <code>text/url</code>.
      </p>
      <p>
        To establish a URL context less URL manipulation, see also
        <a href="https://oss.aoapps.com/encoding/taglib/]]>&aoEncodingTld;<![CDATA[/tag-url">&lt;encoding:url&gt;</a>.
      </p>
    ]]></description>
    <name>url</name>
    <tag-class>&package;.UrlTag</tag-class>
    <body-content>&JSP;</body-content>
    <attribute>
      <description><![CDATA[
        <p>
          When <code>true</code>, generates an absolute URL.
          Defaults to <code>false</code>.
        </p>
      ]]></description>
      <name>absolute</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          When <code>true</code>, will generate a <a href="https://oss.aoapps.com/servlet-util/apidocs/com.aoapps.servlet.util/com/aoapps/servlet/http/Canonical.html">Canonical URL</a>.
          Canonical URLs should be used where per-user response URL rewriting
          (such as information added when cookies are disabled) should be avoided.
          Defaults to <code>false</code>.
        </p>
      ]]></description>
      <name>canonical</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>boolean</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          If the URL represents a local resource, a parameter of "lastModified=#####" may be
          automatically added with the timestamp of the local resource to the nearest second.
          May be one of <code>true</code>, <code>false</code>, or <code>auto</code>.
          Defaults to <code>auto</code>.
        </p>
        <p>
          In auto mode, last modified stamping may be disabled by the client with
          the <code>X-com-aoapps-servlet-lastmodified-enabled: false</code> header.
        </p>
        <p>
          In auto mode, last modified stamping is not performed on
          <a href="https://oss.aoapps.com/servlet-util/apidocs/com.aoapps.servlet.util/com/aoapps/servlet/http/Canonical.html">Canonical URLs</a>.
        </p>
      ]]></description>
      <name>addLastModified</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <dynamic-attributes>true</dynamic-attributes>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p>
        Provides a <a href="https://www.w3schools.com/tags/att_value.asp">value attribute</a> to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/ValueAttribute.html">ValueAttribute</a>
        parent tag.
      </p>
    ]]></description>
    <name>value</name>
    <tag-class>&package;.ValueTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-09-25T11:14:02-05:00" -->
    <!-- dateModified="2021-06-03T22:53:21-05:00" -->
    <description><![CDATA[
      <p>
        Like
        <a rel="nofollow" href="https://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/c/when.html">&lt;c:when&gt;</a>,
        except uses deferred expressions.
      </p>
    ]]></description>
    <name>when</name>
    <tag-class>com.aoapps.taglib.WhenTag</tag-class>
    <body-content>JSP</body-content>
    <attribute>
      <description><![CDATA[
        <p>
          The condition to be evaluated, only evaluated as-needed due to
          use of deferred expressions.
        </p>
      ]]></description>
      <name>test</name>
      <required>true</required>
      <deferred-value>
        <type>java.lang.Boolean</type>
      </deferred-value>
    </attribute>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p>
        Provides a <a href="https://www.w3schools.com/tags/att_width.asp">width attribute</a> to its
        <a href="https://oss.aoapps.com/taglib/apidocs/com.aoapps.taglib/com/aoapps/taglib/WidthAttribute.html">WidthAttribute</a>
        parent tag.
      </p>
    ]]></description>
    <name>width</name>
    <tag-class>&package;.WidthTag</tag-class>
    <body-content>&JSP;</body-content>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-03T22:53:21-05:00" -->
    <description><![CDATA[
      <p>
        Word wraps the textual content.
      </p>
    ]]></description>
    <name>wordWrap</name>
    <tag-class>&package;.WordWrapTag</tag-class>
    <body-content>&JSP;</body-content>
    <attribute>
      <description><![CDATA[
        <p>
          The width to wrap to.
          Defaults to <code>79</code>.
        </p>
      ]]></description>
      <name>width</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>int</type>
    </attribute>
  </tag>
  <tag>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2026-02-05T18:09:30Z" -->
    <description><![CDATA[
      <p class="semanticcms-tag-reference-summary">
        Writes the bean contents.  Supports data types beyond
        <a rel="nofollow" href="https://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/c/out.html">&lt;c:out&gt;</a>
        and <a href="https://people.apache.org/~germuska/struts-taglib/docs/tlddoc/bean/write.html">&lt;bean:write&gt;</a>,
        such as <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/org/w3c/dom/Node.html">XML nodes</a>
        for HTML snippets.
      </p>
      <p>
        If the bean is <code>null</code> then nothing is displayed.
        This is generally for compatibility with Struts 1.X and predates
        <a href="https://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/">JSTL</a>
        and <a rel="nofollow" href="https://docs.oracle.com/cd/E19226-01/820-7627/gjddd/">Expression Language</a>.
        <a rel="nofollow" href="https://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/">JSTL</a>,
        <a rel="nofollow" href="https://docs.oracle.com/cd/E19226-01/820-7627/gjddd/">Expression Language</a>,
        and other tags should generally be preferred.
      </p>
      <p>
        The method attribute provides the name of the method that will be used to get the display value.
        If not provided, it will default to <code><a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#toString%28%29">toString</a></code>.
        This method searches for the method of the given name with no parameters.  It is an error if the method is
        not found.
      </p>
      <p>
        The content type depends on the value provided to the type attribute, and defaults to <code>text/plain</code>.
        The content is checked for well-formedness based on its type:
      </p>
      <ul>
        <li><code>css</code> or <code>text/css</code> - must be well-formed CSS content. (Note: Currently only checks character values.)</li>
        <li><code>javascript</code>, <code>application/javascript</code>, or <code>text/javascript</code> - no validation</li>
        <li><code>json</code> or <code>application/json</code> - no validation</li>
        <li><code>ld_json</code> or <code>application/ld+json</code> - no validation</li>
        <li><code>text</code> or <code>text/plain</code> - no validation</li>
        <li><code>url</code> or <code>text/url</code> - must be a valid URL</li>
        <li><code>xhtml</code> or <code>application/xhtml+xml</code> - must be well-formed XHTML content. (Note: Currently only checks character values.)</li>
        <li><code>xhtml_attribute</code> or <code>application/xhtml+xml+attribute</code> - must be a valid XHTML attribute.</li>
        <li><code>mysql</code> or <code>text/x+mysql</code> - must be valid MySQL command "mysql" input</li>
        <li><code>psql</code> or <code>text/x+psql</code> - must be valid PostgreSQL command "psql" input</li>
        <li><code>sh</code> or <code>text/x+sh</code> - must be valid shell script</li>
      </ul>
    ]]></description>
    <name>write</name>
    <tag-class>&package;.WriteTag</tag-class>
    <tei-class>com.aoapps.taglib.WriteTagTEI</tei-class>
    <body-content>&JSP;</body-content>
    <attribute>
      <description><![CDATA[
        <p>
          Specifies the variable scope searched to retrieve the bean specified
          by name. If not specified, the default rules applied by
          <a rel="nofollow" href="https://jakarta.ee/specifications/platform/10/apidocs/jakarta/servlet/jsp/JspContext.html#findAttribute%28java.lang.String%29">JspContext.findAttribute()</a>
          are applied.
        </p>
      ]]></description>
      <name>scope</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          Specifies the attribute name of the bean whose property is accessed to
          retrieve the value specified by property (if specified). If property is
          not specified, the value of this bean itself will be used.
        </p>
        <p>
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-name">&lt;ao:name&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>name</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          Specifies the name of the property to be accessed on the bean specified
          by name. This value may be a simple, indexed, or nested property reference
          expression. If not specified, the bean identified by name will itself be
          used.
        </p>
      ]]></description>
      <name>property</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          Specifies the method that will be used to convert the object to a
          <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">String</a>.
          This defaults to
          <code><a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#toString%28%29">toString</a></code>.
        </p>
      ]]></description>
      <name>method</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description><![CDATA[
        <p>
          Specifies the type of content contained in the bean.
          Defaults to <code>text/plain</code>.
          A nested <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-type">&lt;ao:type&gt;</a>
          tag will override this value.
        </p>
      ]]></description>
      <name>type</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
  </tag>
  <function>
    <!-- datePublished="2016-10-26T03:33:31-05:00" -->
    <!-- dateModified="2021-06-03T22:53:21-05:00" -->
    <description><![CDATA[
      <p>
        Gets the lastModified timestamp in milliseconds since Epoch or <code>0</code> when not known.
      </p>
    ]]></description>
    <name>getLastModified</name>
    <function-class>com.aoapps.taglib.Functions</function-class>
    <function-signature>long getLastModified(java.lang.String)</function-signature>
    <example><![CDATA[<code>${ao:getLastModified('../path-to-page.jsp')}</code>]]></example>
  </function>
  <function>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-03T22:53:21-05:00" -->
    <description><![CDATA[
      <p>
        If the URL represents a local resource, a parameter of "lastModified=#####" will be
        automatically added with the timestamp of the local resource to the nearest second.
      </p>
    ]]></description>
    <name>addLastModified</name>
    <function-class>com.aoapps.taglib.Functions</function-class>
    <function-signature>java.lang.String addLastModified(java.lang.String)</function-signature>
    <example><![CDATA[<code>${ao:addLastModified('../path-to-page.jsp')}</code>]]></example>
  </function>
  <function>
    <!-- datePublished="2019-10-02T02:16:44-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p class="semanticcms-tag-reference-summary">
        <a href="https://oss.aoapps.com/net-types/apidocs/com.aoapps.net.types/com/aoapps/net/URIEncoder.html#encodeURIComponent(java.lang.String)">Encodes a value</a>
        for use in a URI path component, query string, or fragment.
      </p>
      <p>
        Encodes characters in the <a href="https://www.w3.org/TR/html40/appendix/notes.html#non-ascii-chars">recommended <code>UTF-8</code> encoding</a>.
      </p>
    ]]></description>
    <name>encodeURIComponent</name>
    <function-class>com.aoapps.net.URIEncoder</function-class>
    <function-signature>java.lang.String encodeURIComponent(java.lang.String)</function-signature>
    <example><![CDATA[<code>${ao:encodeURIComponent(value)}</code>]]></example>
  </function>
  <function>
    <!-- datePublished="2019-10-02T02:16:44-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p class="semanticcms-tag-reference-summary">
        <a href="https://oss.aoapps.com/net-types/apidocs/com.aoapps.net.types/com/aoapps/net/URIDecoder.html#decodeURIComponent(java.lang.String)">Decodes a value</a>
        from use as a URI path component, query string, or fragment.
      </p>
      <p>
        Decodes characters in the <a href="https://www.w3.org/TR/html40/appendix/notes.html#non-ascii-chars">recommended <code>UTF-8</code> encoding</a>.
      </p>
    ]]></description>
    <name>decodeURIComponent</name>
    <function-class>com.aoapps.net.URIDecoder</function-class>
    <function-signature>java.lang.String decodeURIComponent(java.lang.String)</function-signature>
    <example><![CDATA[<code>${ao:decodeURIComponent(value)}</code>]]></example>
  </function>
  <function>
    <!-- datePublished="2019-08-13T18:02:13-05:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p class="semanticcms-tag-reference-summary">
        <a href="https://oss.aoapps.com/net-types/apidocs/com.aoapps.net.types/com/aoapps/net/URIEncoder.html#encodeURI(java.lang.String)">Encodes a URI to ASCII format</a>.
      </p>
      <p>
        Encodes characters in the <a href="https://www.w3.org/TR/html40/appendix/notes.html#non-ascii-chars">recommended <code>UTF-8</code> encoding</a>.
      </p>
    ]]></description>
    <name>encodeURI</name>
    <function-class>com.aoapps.net.URIEncoder</function-class>
    <function-signature>java.lang.String encodeURI(java.lang.String)</function-signature>
    <example><![CDATA[<code>${ao:encodeURI(value)}</code>]]></example>
  </function>
  <function>
    <!-- datePublished="2019-08-13T18:02:13-05:00" -->
    <!-- dateModified="2021-09-25T23:27:50-05:00" -->
    <description><![CDATA[
      <p class="semanticcms-tag-reference-summary">
        <a href="https://oss.aoapps.com/net-types/apidocs/com.aoapps.net.types/com/aoapps/net/URIDecoder.html#decodeURI(java.lang.String)">Decodes a URI to Unicode format</a>.
      </p>
      <p>
        Characters that would decode to <a href="https://datatracker.ietf.org/doc/html/rfc3986#section-2.2">a reserved character</a> are left percent-encoded to avoid ambiguity.
      </p>
      <p>
        Decodes characters in the <a href="https://www.w3.org/TR/html40/appendix/notes.html#non-ascii-chars">recommended <code>UTF-8</code> encoding</a>.
      </p>
    ]]></description>
    <name>decodeURI</name>
    <function-class>com.aoapps.net.URIDecoder</function-class>
    <function-signature>java.lang.String decodeURI(java.lang.String)</function-signature>
    <example><![CDATA[<code>${ao:decodeURI(value)}</code>]]></example>
  </function>
  <function>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2025-12-30T13:42:11Z" -->
    <description><![CDATA[
      <p class="semanticcms-tag-reference-summary">
        Rewrites a URL to maintain session state or otherwise alter the URL mapping.
      </p>
      <p>
        <a href="https://oss.aoapps.com/net-types/apidocs/com.aoapps.net.types/com/aoapps/net/URIEncoder.html#encodeURI(java.lang.String)">Encodes the URI to ASCII format</a>
        then passes through <a rel="nofollow" href="https://jakarta.ee/specifications/platform/10/apidocs/jakarta/servlet/http/HttpServletResponse.html#encodeURL(java.lang.String)">HttpServletResponse.encodeURL</a>.
      </p>
      <p>
        Encodes characters in the <a href="https://www.w3.org/TR/html40/appendix/notes.html#non-ascii-chars">recommended <code>UTF-8</code> encoding</a>.
      </p>
    ]]></description>
    <name>encodeURL</name>
    <function-class>com.aoapps.taglib.Functions</function-class>
    <function-signature>java.lang.String encodeURL(java.lang.String)</function-signature>
    <example><![CDATA[<code>${ao:encodeURL('../path-to-page.jsp')}</code>]]></example>
  </function>
  <function>
    <!-- datePublished="2020-08-21T00:43:37-05:00" -->
    <!-- dateModified="2021-06-03T22:53:21-05:00" -->
    <description><![CDATA[
      <p>
        Resolves a possibly page-relative path to a context-absolute path.
      </p>
      <p>
        <var>path</var>: The absolute URL, context-absolute path, or page-relative path.
      </p>
    ]]></description>
    <name>getAbsolutePath</name>
    <function-class>com.aoapps.taglib.Functions</function-class>
    <function-signature>java.lang.String getAbsolutePath(java.lang.String)</function-signature>
    <example><![CDATA[<code>${ao:getAbsolutePath('../path-to-page.jsp')}</code>]]></example>
  </function>
  <function>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2025-12-30T13:42:11Z" -->
    <description><![CDATA[
      <p>
        Gets an absolute URL for the given path.  This includes
        protocol, port, context path, and path.
      </p>
      <p>
        <var>path</var>: The path appended to the URL verbatim.  To support page-relative paths, first use
        <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/function-getAbsolutePath">${ao:getAbsolutePath()}</a>.
      </p>
      <p>
        No <a rel="nofollow" href="https://jakarta.ee/specifications/platform/10/apidocs/jakarta/servlet/http/HttpServletResponse.html#encodeURL(java.lang.String)">URL rewriting</a> is performed.
        Please additionally use <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/function-encodeURL">${ao:encodeURL()}</a>, as-needed.
      </p>
    ]]></description>
    <name>getAbsoluteURL</name>
    <function-class>com.aoapps.taglib.Functions</function-class>
    <function-signature>java.lang.String getAbsoluteURL(java.lang.String)</function-signature>
    <example><![CDATA[<code>${ao:getAbsoluteURL('/path-to-page.jsp')}</code>]]></example>
  </function>
  <function>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-03T22:53:21-05:00" -->
    <description><![CDATA[
      <p>
        Gets a time span display for a given number of milliseconds or
        <code>null</code> for <code>null</code> milliseconds.
      </p>
    ]]></description>
    <name>getDecimalTimeLength</name>
    <function-class>com.aoapps.taglib.Functions</function-class>
    <function-signature>java.lang.String getDecimalTimeLength(java.lang.Long)</function-signature>
    <example><![CDATA[<code>${ao:getDecimalTimeLength(timeSpan)}</code>]]></example>
  </function>
  <function>
    <!-- datePublished="2020-12-06T14:08:58-06:00" -->
    <!-- dateModified="2021-06-16T12:55:45-05:00" -->
    <description><![CDATA[
      <p class="semanticcms-tag-reference-summary">
        Gets the version of a Maven project given its groupId and artifactId.
      </p>
      <p>
        Searches in the following order:
      </p>
      <ol>
        <li>
          <p>
            Look for a web resource <code>META-INF/maven/<var>groupId</var>/<var>artifactId</var>/pom.properties</code>,
            relative to the given <var>lib</var> directory (which itself is interpreted relative to the current
            page.
          </p>
          <p>
            This is for dependencies that have been
            <a href="https://maven.apache.org/plugins/maven-war-plugin/overlays.html">expanded into the project as overlays</a>.
          </p>
        </li>
        <li>
          <p>
            Next searches the application classpath via
            <a href="https://oss.aoapps.com/lang/apidocs/com.aoapps.lang/com/aoapps/lang/Projects.html#getVersion(java.lang.String,java.lang.String)">Projects.getVersion(String groupId, String artifactId)</a>.
          </p>
          <p>
            This is for dependencies that have been included as dependencies, most likely in the
            <code>WEB-INF/lib</code> folder.
          </p>
        </li>
        <li>
          <p>
            Finally, if not found, returns the provided default value.  This default value will typically be
            set via a build-time filter, such as <code>10.0.0-POST-SNAPSHOT</code>.
          </p>
          <p>
            This is to fallback to build-time dependencies when no runtime version information can be found.
          </p>
        </li>
      </ol>
    ]]></description>
    <name>getProjectVersion</name>
    <function-class>com.aoapps.taglib.Functions</function-class>
    <function-signature>java.lang.String getProjectVersion(java.lang.String,java.lang.String,java.lang.String,java.lang.String)</function-signature>
    <example><![CDATA[<code>${ao:getProjectVersion(lib, groupId, artifactId, def)}</code>]]></example>
  </function>
  <function>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-03T22:53:21-05:00" -->
    <description><![CDATA[
      <p>
        Determines if the current request has been forwarded by a
        <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-forward">&lt;ao:forward&gt;</a> or
        <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-redirect">&lt;ao:redirect&gt;</a> tag.
      </p>
    ]]></description>
    <name>isForwarded</name>
    <function-class>com.aoapps.taglib.Functions</function-class>
    <function-signature>boolean isForwarded()</function-signature>
    <example><![CDATA[<code>${ao:isForwarded()}</code>]]></example>
  </function>
  <function>
    <!-- datePublished="2020-12-03T20:49:12-06:00" -->
    <!-- dateModified="2025-12-30T13:42:11Z" -->
    <description><![CDATA[
      <p>
        Determines if <a rel="nofollow" href="https://jakarta.ee/specifications/platform/10/apidocs/jakarta/servlet/ServletResponse.html#getLocale()">the response locale</a>
        is <a href="https://oss.aoapps.com/lang/apidocs/com.aoapps.lang/com/aoapps/lang/i18n/Locales.html#isRightToLeft(java.util.Locale)">a right-to-left language</a>.
      </p>
    ]]></description>
    <name>isRtl</name>
    <function-class>com.aoapps.taglib.Functions</function-class>
    <function-signature>boolean isRtl()</function-signature>
    <example><![CDATA[<code>${ao:isRtl()}</code>]]></example>
  </function>
  <function>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2026-02-05T18:09:30Z" -->
    <description><![CDATA[
      <p>
        Joins elements of any
        <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Iterable.html">Iterable</a>
        into a <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">String</a>.
      </p>
    ]]></description>
    <name>join</name>
    <function-class>com.aoapps.taglib.Functions</function-class>
    <function-signature>java.lang.String join(java.lang.Iterable,java.lang.String)</function-signature>
    <!-- functionSignature="java.lang.String join(java.lang.Iterable<?>,java.lang.String)" -->
    <example><![CDATA[<code>${ao:join(iterable, separator)}</code>]]></example>
  </function>
  <function>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2021-06-03T22:53:21-05:00" -->
    <description><![CDATA[
      <p>
        Gets a value from the current localization bundle given its key.
        No parameters may be provided.
        Must be nested inside a <a href="https://oss.aoapps.com/taglib/]]>&tld;<![CDATA[/tag-bundle">&lt;ao:bundle&gt;</a>
        tag.
      </p>
    ]]></description>
    <name>message</name>
    <function-class>com.aoapps.taglib.Functions</function-class>
    <function-signature>java.lang.String message(java.lang.String)</function-signature>
    <example><![CDATA[<code>${ao:message(key)}</code>]]></example>
  </function>
  <function>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2026-02-05T18:09:30Z" -->
    <description><![CDATA[
      <p>
        Word wraps a <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">String</a>.
      </p>
    ]]></description>
    <name>wordWrap</name>
    <function-class>com.aoapps.lang.Strings</function-class>
    <function-signature>java.lang.String wordWrap(java.lang.String,int)</function-signature>
    <example><![CDATA[<code>${ao:wordWrap(text, width)}</code>]]></example>
  </function>
  <function>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2026-02-05T18:09:30Z" -->
    <description><![CDATA[
      <p>
        Calls <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Math.html#ceil%28double%29">java.lang.Math.ceil(double)</a>.
      </p>
    ]]></description>
    <name>ceil</name>
    <function-class>java.lang.Math</function-class>
    <function-signature>double ceil(double)</function-signature>
    <example><![CDATA[<code>${ao:ceil(a)}</code>]]></example>
  </function>
  <function>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2026-02-05T18:09:30Z" -->
    <description><![CDATA[
      <p>
        Calls <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Math.html#floor%28double%29">java.lang.Math.floor(double)</a>.
      </p>
    ]]></description>
    <name>floor</name>
    <function-class>java.lang.Math</function-class>
    <function-signature>double floor(double)</function-signature>
    <example><![CDATA[<code>${ao:floor(a)}</code>]]></example>
  </function>
  <function>
    <!-- datePublished="2016-08-07T16:29:54-05:00" -->
    <!-- dateModified="2026-02-05T18:09:30Z" -->
    <description><![CDATA[
      <p>
        Calls <a rel="nofollow" href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Math.html#round%28double%29">java.lang.Math.round(double)</a>.
      </p>
    ]]></description>
    <name>round</name>
    <function-class>java.lang.Math</function-class>
    <function-signature>long round(double)</function-signature>
    <example><![CDATA[<code>${ao:round(a)}</code>]]></example>
  </function>
  <function>
    <!-- datePublished="2020-06-16T10:46:34-05:00" -->
    <!-- dateModified="2025-12-30T13:42:11Z" -->
    <description><![CDATA[
      <p class="semanticcms-tag-reference-summary">
        Checks if a resource exists in the web application.
      </p>
      <p>
        The path must begin with a slash (/), since it is passed unaltered to
        <a rel="nofollow" href="https://jakarta.ee/specifications/platform/10/apidocs/jakarta/servlet/ServletContext.html#getResource(java.lang.String)">ServletContext.getResource(…)</a>
      </p>
      <p>
        This is useful to dynamically determine if a JSP page exists before
        forwarding or including the resource.
      </p>
    ]]></description>
    <name>resourceExists</name>
    <function-class>com.aoapps.taglib.Functions</function-class>
    <function-signature>boolean resourceExists(java.lang.String)</function-signature>
    <example><![CDATA[<code>${ao:resourceExists(path)}</code>]]></example>
  </function>
</taglib>
<!-- </common> -->
