<?xml version="1.0" encoding="UTF-8"?>
<tsRef>
    <type id="cObj"/>
    <type id="array"/>
    <type id="int"/>
    <type id="intList"/>
    <type id="double"/>
    <type id="boolean"/>
    <type id="string"/>
    <type id="ADMPANEL"/>
    <type id="ARR_languages_strings" name="ARR_languages_strings">
        <property name="default" type="string"/>
        <property name="en" type="string"/>
        <property name="dk" type="string"/>
        <property name="de" type="string"/>
        <property name="no" type="string"/>
        <property name="it" type="string"/>
        <property name="fr" type="string"/>
        <property name="nl" type="string"/>
        <property name="cz" type="string"/>
        <property name="pl" type="string"/>
        <property name="si" type="string"/>
        <property name="fi" type="string"/>
        <property name="tr" type="string"/>
        <property name="se" type="string"/>
        <property name="pt" type="string"/>
        <property name="ru" type="string"/>
        <property name="ro" type="string"/>
        <property name="ch" type="string"/>
        <property name="sk" type="string"/>
        <property name="lt" type="string"/>
        <property name="is" type="string"/>
        <property name="hr" type="string"/>
        <property name="hu" type="string"/>
        <property name="gl" type="string"/>
        <property name="th" type="string"/>
        <property name="gr" type="string"/>
        <property name="hk" type="string"/>
        <property name="eu" type="string"/>
        <property name="bg" type="string"/>
        <property name="br" type="string"/>
        <property name="et" type="string"/>
        <property name="ar" type="string"/>
        <property name="he" type="string"/>
        <property name="ua" type="string"/>
        <property name="lv" type="string"/>
        <property name="jp" type="string"/>
        <property name="vn" type="string"/>
        <property name="ca" type="string"/>
        <property name="ba" type="string"/>
        <property name="kr" type="string"/>
        <property name="eo" type="string"/>
        <property name="my" type="string"/>
        <property name="hi" type="string"/>
    </type>
    <type id="CARRAY" extends="stdWrap" name="CARRAY">
        <property name="1" type="cObj">
            <description><![CDATA[This is a numerical "array" of content-objects (cObjects). The order by which you specific the objects is not important as the array will be sorted before it's parsed!

]]></description>
        </property>
        <property name="2" type="cObj">
            <description><![CDATA[This is a numerical "array" of content-objects (cObjects). The order by which you specific the objects is not important as the array will be sorted before it's parsed!

]]></description>
        </property>
        <property name="3" type="cObj">
            <description><![CDATA[This is a numerical "array" of content-objects (cObjects). The order by which you specific the objects is not important as the array will be sorted before it's parsed!

]]></description>
        </property>
        <property name="4" type="cObj">
            <description><![CDATA[This is a numerical "array" of content-objects (cObjects). The order by which you specific the objects is not important as the array will be sorted before it's parsed!

]]></description>
        </property>
    </type>
    <type id="CARRAY+TDParams" extends="CARRAY" name="CARRAY+TDParams">
        <property name="TDParams" type="string">
            <description><![CDATA[<TD>-params
      NOTE: This applies ONLY if "CARRAY +TDParams" is set to be data type
This property is used only in some cases where CARRAY is used. Please look out for a note about that in the various cases.
]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="CASE" extends="cObjArray" name="CASE">
        <property name="default" type="cObj">
            <description><![CDATA[The default object, if not defined, nothing is returned in the default case.
]]></description>
        </property>
        <property name="cache" type="cache">
            <description><![CDATA[
            Stores the rendered content into the caching framework and reads it from there.
            This allows you to reuse this content without prior rendering. The presence of cache.key will trigger this feature.
]]></description>
            <default><![CDATA[0]]></default>
        </property>
        <property name="if" type="if">
            <description><![CDATA[if "if" returns false nothing is returned

]]></description>
        </property>
        <property name="key" type="stdWrap">
            <description><![CDATA[If the value of this key is defined, that object will be returned, otherwise the default-object will be returned.
<pre>key = helloWorld
helloWorld = <a href="/index.php/TSref/TEXT" title="TSref/TEXT">TEXT</a>

helloWorld.value = this item will be returned
</pre>
]]></description>
        </property>
        <property name="setCurrent" type="stdWrap">
            <description><![CDATA[Sets the "current"-value.

]]></description>
        </property>
        <property name="stdWrap" type="stdWrap">
            <description><![CDATA[stdwrap properties, applied on the returned object.
]]></description>
        </property>
    </type>
    <type id="cObjArray">
        <property name="1" type="cObj">
            <description><![CDATA[This is a numerical "array" of content-objects (cObjects).
]]></description>
        </property>
        <property name="2" type="cObj">
            <description><![CDATA[This is a numerical "array" of content-objects (cObjects).
]]></description>
        </property>
        <property name="3" type="cObj">
            <description><![CDATA[This is a numerical "array" of content-objects (cObjects).
]]></description>
        </property>
        <property name="4" type="cObj">
            <description><![CDATA[This is a numerical "array" of content-objects (cObjects).
]]></description>
        </property>
    </type>
    <type id="COBJ_ARRAY" extends="cObjArray">
        <property name="if" type="if">
            <description><![CDATA[if "if" returns false the COA is NOT rendered]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="stdWrap" type="stdWrap">
            <description><![CDATA[
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="wrap" type="stdWrap">
            <description><![CDATA[wrap/stdWrap
]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="COA" extends="COBJ_ARRAY">
        <property name="cache" type="cache">
            <description><![CDATA[
            Stores the rendered content into the caching framework and reads it from there.
            This allows you to reuse this content without prior rendering. The presence of cache.key will trigger this feature.
]]></description>
            <default><![CDATA[0]]></default>
        </property>
  </type>
    <type id="COA_INT" extends="COBJ_ARRAY">
        <property name="cache" type="cache">
            <description><![CDATA[
            Stores the rendered content into the caching framework and reads it from there.
            This allows you to reuse this content without prior rendering. The presence of cache.key will trigger this feature.
]]></description>
            <default><![CDATA[0]]></default>
        </property>
    </type>
    <type id="CONFIG">
        <property name="ATagParams" type="string">
            <description><![CDATA[<A>-params
      Additional parameters to all links in TYPO3 (excluding menu-links)
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="MP_defaults" type="string">
            <description><![CDATA[Allows you to set a list of page id numbers which will always have a certain "&MP=..." parameter added.

Syntax:
[id],[id],... : [MP-var] | [id],[id],... : [MP-var] | ...

Example:
config.MP_defaults = 36,37,48 : 2-207

This will by default add "&MP=2-207" to all links pointing to pages 36,37 and 48]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="MP_disableTypolinkClosestMPvalue" type="boolean">
            <description><![CDATA[If set, the typolink function will not try to find the closest MP value for the id.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="MP_mapRootPoints" type="string">
            <description><![CDATA[list of PIDs/string
      Defines a list of ID numbers from which the MP-vars are automatically calculated for the branch.
The result is used just like MP_defaults are used to find MP-vars if none has been specified.
You can specify "root" as a special keyword in the list of IDs and that will create a map-tree for the whole site (but this may be VERY processing intensive if there are many pages!).
The order of IDs specified may have a significance; Any ID in a branch which is processed already (by a previous ID root point) will not be processed again.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="absRefPrefix" type="string">
            <description><![CDATA[If this value is set, then all relative links in TypoScript are prepended with this string. Used to convert relative paths to absolute paths.

Note: If you're working on a server where you have both internal and external access, you might to yourself a favour and set the absRefPrefix to the url and path of you site, eg. https://www.typo3.org/. If you do not, you risk to render pages to cache from the internal network and thereby prefix image-references and links with a non-accessible path from outside.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="additionalHeaders" type="additionalHeadersArray">
            <description><![CDATA[This property can be used to define additional HTTP headers.

For each numeric index, there are the following sub-properties:

header: The header string.

replace: Optional. If set, previous headers with the same name are replaced with the current one. Default is "1".

httpResponseCode: Optional. HTTP status code as an integer.

Example:

config.additionalHeaders {
   10 {
      # The header string
      header = WWW-Authenticate: Negotiate

      # Do not replace previous headers with the same name.
      replace = 0

      # Force a 401 HTTP response code
      httpResponseCode = 401
   }
   # Always set cache headers to private, overwriting the default TYPO3 Cache-control header
   20.header = Cache-control: Private
}]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="admPanel" type="ADMPANEL">
            <description><![CDATA[boolean / ADMPANEL properties
      If set, the admin panel appears in the bottom of pages.

NOTE: In addition the panel must be enabled for the user as well, using the TSconfig for the user! See adminguide documentation.

SEE: Admin Panel section]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="baseURL" type="string">
            <description><![CDATA[This writes the <base> tag in the header of the document. Set this to the value that is expected to be the URL, and append a "/" to the end of the string.

Example:
config.baseURL = https://typo3.org/sub_dir/]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="cache" type="array">
            <description><![CDATA[The maximum cache lifetime of a page can not only be determined the start and stop times of content elements on the page itself, but also by arbitrary records on any other page. However, the page has to be configured so that TYPO3 knows, which records' start and stop times to include. Otherwise, the cache entry will be used although a start/stop date already passed by.

To include records of type <tablename> on page <pid> into the cache lifetime calculation of page <page-id>, add the following TypoScript:
config.cache.<page-id> = <tablename>:<pid>

Thus, if you want to include the fe_users records on page 2 in the cache lifetime calculation for page 10, add the following TypoScript:
config.cache.10 = fe_users:2

Multiple record sources can be added as comma-separated list, e.g.
config.cache.10 = fe_users:2,tt_news:11

In order to consider records for the cache lifetime of all pages, use the *all* keyword:
config.cache.all = fe_users:2]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="cache_clearAtMidnight" type="boolean">
            <description><![CDATA[With this setting the cache always expires at midnight of the day, the page is scheduled to expire.]]></description>
            <default><![CDATA[false]]></default>
        </property>
        <property name="cache_period" type="int">
            <description><![CDATA[int, seconds
      The number of second a page may remain in cache.
This value is overridden by the value set in the page-record (field="cache_timeout") if this value is greater than zero.]]></description>
            <default><![CDATA[86400 (=24H)]]></default>
        </property>
        <property name="contentObjectExceptionHandler" type="array">
            <description><![CDATA[Exceptions which occur during rendering of content objects (typically plugins) will now be caught by default in production context and an error message is shown along with the rendered output.

            Use "1" for the default exception handler (enabled by default in production context)
            Use "0" to disable the default exception handler
            Use a class name for individual exception handlers

            See TSref for details:
            https://docs.typo3.org/typo3cms/TyposcriptReference/Setup/Config/Index.html#contentobjectexceptionhandler
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="debug" type="boolean">
            <description><![CDATA[If set any debug-information in the TypoScript code is output. Currently this applies only to the menu-objects]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="disableAllHeaderCode" type="boolean">
            <description><![CDATA[If this is set, none of the features of the PAGE-object is processed and the content of the page will be the result of the cObject array (1,2,3,4...) of the PAGE-object.  This means that the result of the cObject should include everything from the <HTML> .... to the </HTML> tag !!
Use this feature in templates supplying other content-types than HTML. That could be an image or a WAP-page!]]></description>
            <default><![CDATA[false]]></default>
        </property>
        <property name="disablePrefixComment" type="boolean">
            <description><![CDATA[If set, the stdWrap property "prefixComment" will be disabled, thus preventing any revealing and spaceconsuming comments in the HTML source code.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="disablePreviewNotification" type="boolean">
            <description><![CDATA[Disables the "preview" notification box completely]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="doctype" type="string">
            <description><![CDATA[If set, then a document type declaration (and an XML prologue) will be generated. The value can either be a complete doctype or one of the following keywords:

"xhtml_trans" for XHTML 1.0 Transitional doctype.
"xhtml_strict" for XHTML 1.0 Strict doctype.
"xhtml_basic" for XHTML basic doctype.
"xhtml_11" for XHTML 1.1 doctype.
"xhtml+rdf_10" for XHTML+RDFa 1.0 doctype.
"html5" for HTML5 (default)
"none" for NO doctype at all.

Note that the keywords also change the way TYPO3 generates some of the XHTML tags to ensure valid XML.

See "config.htmlTag_setParams" for more details on the effect on the html tag.
]]></description>
            <default><![CDATA[Default is a DOCTYPE like this:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
]]></default>
        </property>
        <property name="enableContentLengthHeader" type="boolean">
            <description><![CDATA[If set, a header "content-length: [bytes of content]" is sent.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="extTarget" type="string">
            <description><![CDATA[Default external target. Used by typolink if no extTarget is set.]]></description>
            <default><![CDATA["" by default, "_blank" if TypoScript settings from Fluid Styled Content are loaded]]></default>
        </property>
        <property name="fileTarget" type="string">
            <description><![CDATA[Default file link target. Used by typolink if no fileTarget is set.]]></description>
            <default><![CDATA[
            ]]></default>
        </property>
        <property name="forceTypeValue" type="int">
            <description><![CDATA[Force the &type value of all TYPO3 generated links to a specific value (except if overruled by local forceTypeValue values).
Useful if you run a template with special content at - say &type=95 - but still wants to keep your targets neutral. Then you set your targets to blank and this value to the type value you wish.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="frontend_editing" type="boolean">
            <description><![CDATA[If set, then frontend editing is enabled (requires EXT:frontend_editing being installed).]]></description>
            <default><![CDATA[false]]></default>
        </property>
        <property name="headerComment " type="string">
            <description><![CDATA[The content is added before the "TYPO3 Content Management Framework" comment in the <head> section of the page. Use this to insert a note like that "Programmed by My-Agency" ...]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="htmlTag_setParams" type="string">
            <description><![CDATA[Sets the attributes for the <html> tag on the page. If you set "config.doctype" to a keyword enabling XHTML then some attributes are already set. This property allows you to override any preset attributes with you own content if needed.

Special: If you set it to "none" then no attributes will be set at any event.

Example:
config.htmlTag_setParams =  xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US"]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="includeLibrary" type="string">
            <description><![CDATA[This includes a phpfile.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="index_descrLgd" type="int">
            <description><![CDATA[This indicates how many chars to preserve as description for an indexed page. This may be used in the search result display.]]></description>
            <default><![CDATA[200]]></default>
        </property>
        <property name="index_enable" type="boolean">
            <description><![CDATA[Enables cached pages to be indexed.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="index_externals" type="boolean">
            <description><![CDATA[If set, external media linked to on the pages is indexed as well.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="inlineStyle2TempFile" type="boolean">
            <description><![CDATA[If set, the inline styles TYPO3 controls in the core are written to a file,  typo3temp/assets/css/stylesheet_[hashstring].css, and the header will only contain the link to the stylesheet.
The file hash is based solely on the content of the styles.

Depends on the compatibility mode (see Tools>Install>Update wizard):
compatibility mode < 4.0:   0
compatibility mode >= 4.0:   1

Example:
config.inlineStyle2TempFile = 1]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="intTarget" type="string">
            <description><![CDATA[default internal target. Used by typolink if no target is set]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="linkVars" type="string">
            <description><![CDATA[HTTP_GET_VARS, which should be passed on with links in TYPO3. This is compiled into a string.

The values are rawurlencoded in PHP.

You can specify a range of valid values by appending a () after each value. If this range does not match, the variable won't be appended to links. This is very important to prevent that the cache system gets flooded with forged values.

The range may containing one of these values:
[a]-[b] - A range of allowed integer valuesint - Only integer values are allowed[a]|[b]|[c] - A list of allowed strings (whitespaces will be removed)/[regex]/ - Match against a regular expression (PCRE style)

Example:
config.linkVars = L, print
This will add "&L=[L-value]&print=[print-value]" to all links in TYPO3.

config.linkVars = L(1-3), print
Same as above, but "&L=[L-value]" will only be added if the current value is 1, 2 or 3.
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="message_preview" type="string">
            <description><![CDATA[Alternative message in HTML that appears when the preview function is active!]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="message_preview_workspace" type="string ">
            <description><![CDATA[Alternative message in HTML that appears when the preview function is active in a draft workspace. You can use sprintf() placeholders for Workspace title (first) and number (second).

Examples:
config.message_preview_workspace = <div class="previewbox">Displaying workspace named "%s" (number %s)!</div>
config.message_preview_workspace = <div class="previewbox">Displaying workspace number %2$s named "%1$s"!</div>]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="moveJsFromHeaderToFooter" type="boolean">
            <description><![CDATA[
            If set, all Javascript (includes and inline) will be moved to the bottom of the HTML document, which is after content and before the closing body tag
            ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="namespaces" type="array">
            <description><![CDATA[array of strings
            This property enables you to add xml namespaces (xmlns) to the html tag. The configuration

namespaces.dc = https://purl.org/dc/elements/1.1/
namespaces.foaf = http://xmlns.com/foaf/0.1/

will result in a html tag like

<html xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:foaf="http://xmlns.com/foaf/0.1/">

This is especially useful if you want to add RDFa or microformats to your html.
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="noPageTitle" type="int">
            <description><![CDATA[If you only want to have the website title (from the site configuration) in your <title> tag, set this to 1. If the value is 2 then the <title> tag is not printed at all.
Please take note that this tag is required for XHTML compliant output, so you should only disable this tag if you generate it manually already.]]></description>
            <default><![CDATA[0]]></default>
        </property>
        <property name="showWebsiteTitle" type="int">
            <description><![CDATA[If you want to omit the website title (from the site configuration) in your <title> tag, set this to 0.]]></description>
            <default><![CDATA[1]]></default>
        </property>
        <property name="no_cache" type="boolean">
            <description><![CDATA[If this is set to true, the page will not be cached. If set to false, it's ignored. Other parameters may have set it to true of other reasons.]]></description>
            <default><![CDATA[-]]></default>
        </property>
        <property name="pageRendererTemplateFile" type="string">
            <description><![CDATA[
            Sets the template for page renderer class (\TYPO3\CMS\Core\Page\PageRenderer).

Example:

pageRendererTemplateFile = fileadmin/test_pagerender.html
            ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="pageTitleFirst" type="boolean">
            <description><![CDATA[If set (and the page title is printed) then the page-title will be printed BEFORE the template title.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="pageTitleSeparator" type="string">
            <description><![CDATA[The signs which should be printed in the title tag between the website name and the page title.]]></description>
            <default><![CDATA[:]]></default>
        </property>
        <property name="removeDefaultCss" type="boolean">
            <description><![CDATA[Remove CSS generated by _CSS_DEFAULT_STYLE configuration of extensions.]]></description>
            <default><![CDATA[false]]></default>
        </property>
        <property name="removeDefaultJS" type="string">
            <description><![CDATA[If set, the default JavaScript in the header will be removed.
The default JavaScript is the decryption function for email addresses.

Special case: if the value is "external" then the default JavaScript is written to a temporary file and included from that file. See "inlineStyle2TempFile" below.

Depends on the compatibility mode (see Tools>Install>Update wizard):
compatibility mode < 4.0:   0
compatibility mode >= 4.0:   1

Example:
config.removeDefaultJS = external
config.removeDefaultJS = 1]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="sendCacheHeaders" type="boolean">
            <description><![CDATA[If set, TYPO3 will output cache-control headers to the client based mainly on  whether the page was cached internally. This feature allows client browsers and/or reverse proxies to take load of TYPO3 websites.

The conditions for allowing client caching are:
page was cachedNo *_INT or *_EXT objects were on the page (eg. USER_INT)No frontend user is logged inNo backend user is logged in

If these conditions are met, the headers sent are:

Expires: [expire time of page cache]
ETag: [md5 of content]
Cache-Control: max-age=[seconds til expiretime]
Pragma: public

In case caching is not allowed, these headers are sent to avoid client caching:
Cache-Control: private, no-store

Notice that enabling the browser caches means you have to consider how log files are written. Because when a page is cached on the client it will not invoke a request to the webserver, thus not writing the request to the log. There should be ways to circumvent these problems but they are outside the domain of TYPO3 in any case.

Tip: Enabling cache-control headers might confuse editors seeing old content served from the browser cache. "Shift-Reload" will bypass both browser- and reverse-proxy caches and even make TYPO3 regenerate the page. Teach them that trick!

Thanks to Ole Tange, www.forbrug.dk for co-authoring this feature.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="sendCacheHeadersForSharedCaches" type="string">
            <description><![CDATA[If enabled, TYPO3 will output cache-control headers to a possible proxy / shared cache based mainly on whether the page was cached internally. This feature allows shared caches such as CDNs / reverse proxies to take load of TYPO3 websites while delivering fresh content to the client.

The value "auto" will send s-maxage if TYPO3 is served behind a trusted reverse proxy, config.sendCacheHeaders might be respected if the request was not performed by a trusted reverse proxy.

The value "force" will send s-maxage in any case, config.sendCacheHeaders will be ignored.

The conditions for allowing proxy caching are:
page was cachedNo *_INT or *_EXT objects were on the page (eg. USER_INT)No frontend user is logged inNo backend user is logged in

If these conditions are met, the headers sent are:

Expires: [expire time of page cache]
ETag: [md5 of content]
Cache-Control: max-age=0, s-maxage=[seconds til expiretime]
Pragma: public

In case caching is not allowed, these headers are sent to avoid client caching:
Cache-Control: private, no-store

Notice that enabling the shared caches means you have to consider how log files are written. Because when a page is cached on the client it will not invoke a request to the webserver, thus not writing the request to the log. There should be ways to circumvent these problems but they are outside the domain of TYPO3 in any case.

Tip: Enabling cache-control headers might confuse editors seeing old content served from the shared cache. You should configure you shared cache to bypass cache if the cookie "be_typo_user" is set.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="spamProtectEmailAddresses" type="int">
            <description><![CDATA[-10 to 10
            If set, then all email addresses in typolinks will be encrypted so spam bots cannot detect them.

If you set this value, then the encryption is simply an
offset of character values. If you set this value to "-2" then all
characters will have their ASCII value offset by "-2". To make this
possible, a little JavaScript code is added to every generated web page!
(It is recommended to set the value in the range from -5 to 1 since setting it to >= 2 means a "z" is converted to "|" which is a special character in TYPO3 tables syntax – and that might confuse columns in tables. Now hardcoded range)
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="spamProtectEmailAddresses_atSubst" type="string">
            <description><![CDATA[Substitute label for the at-sign (@).]]></description>
            <default><![CDATA[(at)]]></default>
        </property>
        <property name="spamProtectEmailAddresses_lastDotSubst" type="string">
            <description><![CDATA[Substitute label for the last dot in the email address.
Example: (dot)]]></description>
            <default><![CDATA[Default: . ( <= just a simple dot)]]></default>
        </property>
        <property name="typolinkLinkAccessRestrictedPages" type="string">
            <description><![CDATA[integer (page id) / keyword "NONE"
            If set, typolinks pointing to access restricted pages will still link to the page even though the page cannot be accessed. If the value of this setting is an integer it will be interpreted as a page id to which the link will be directed.
If the value is "NONE" the original link to the page will be kept although it will generate a page-not-found situation (which can of course be picked up properly by the page-not-found handler and present a nice login form).

See "showAccessRestrictedPages" for menu objects as well (similar feature for menus)

Example:
config.typolinkLinkAccessRestrictedPages = 29
config.typolinkLinkAccessRestrictedPages_addParams = &return_url=###RETURN_URL###&pageId=###PAGE_ID###

Will create a link to page with id 29 and add GET parameters where the return URL and original page id is a part of it.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="typolinkLinkAccessRestrictedPages_addParams" type="string">
            <description><![CDATA[See "typolinkLinkAccessRestrictedPages" above]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="xmlprologue" type="string">
            <description><![CDATA[If empty (not set) then the default XML 1.0 prologue is set, when the doctype is set to a known keyword (eg xhtml_11):

<?xml version="1.0" encoding="utf-8">

If set to one of the know keywords then a standard prologue will be set:
"xml_10" XML 1.0 prologue (see above)
"xml_11" XML 1.1 prologue

If "none" then the default XML prologue is not set.
Any other string is used as the XML prologue itself.]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="CONTENT">
        <property name="renderObj" type="cObj">
            <description><![CDATA[
]]></description>
            <default><![CDATA[< [tablename]]]></default>
        </property>
        <property name="cache" type="cache">
            <description><![CDATA[
            Stores the rendered content into the caching framework and reads it from there.
            This allows you to reuse this content without prior rendering. The presence of cache.key will trigger this feature.
]]></description>
            <default><![CDATA[0]]></default>
        </property>
        <property name="select" type="select">
            <description><![CDATA[The SQL-statement is set here!]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="slide" type="slide">
            <description><![CDATA[int/stdWrap
            If set and no content element is found by the select command, then the rootLine will be traversed back until some content is found.

Possible values are "-1" (slide back up to the siteroot), "1" (only the current level) and "2" (up from one level back).

Use -1 in combination with collect.

.collect (integer/stdWrap): If set, all content elements found on current and parent pages will be collected. Otherwise, the sliding would stop after the first hit. Set this value to the amount of levels to collect on, or use "-1" to collect up to the siteroot.
.collectFuzzy (boolean/stdWrap): Only useful in collect mode. If no content elements have been found for the specified depth in collect mode, traverse further until at least one match has occurred.
.collectReverse (boolean/stdWrap): Change order of elements in collect mode. If set, elements of the current page will be on the bottom.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="stdWrap" type="stdWrap">
            <description><![CDATA[
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="table" type="stdWrap">
            <description><![CDATA[TableName/stdWrap
            The table, the content should come from.
In standard-configurations this will be "tt_content"
NOTE: Only tables allowed are "pages" or tables prefixed with one of these: "tt_", "tx_", "ttx_", "fe_", "user_" or "static_"]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="wrap" type="stdWrap">
            <description><![CDATA[wrap/stdWrap
            Wrap the whole content-story...]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="cache">
        <property name="key" type="stdWrap">
            <description><![CDATA[ string / stdwrap
            The cache identifier that is used to store the rendered content into the cache and to read it from there.
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="lifetime" type="stdWrap">
            <description><![CDATA["unlimited"/"default"/integer/stdWrap
            Lifetime of the content within the cache. Allows you to determine the lifetime of the cached object. This does not depend on the lifetime of the cached version of the page on which it is used.
            Possible values are any positive integer and the keywords "unlimited" and "default".
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="tags" type="stdWrap">
            <description><![CDATA[boolean/stdWrap
            Can hold a comma-separated list of tags. These tags will be attached to the entry within cache_hash
            cache and can be used to purge the cached content.
]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="slide" extends="stdWrap">
        <property name="collect" type="stdWrap">
            <description><![CDATA[int/stdWrap
            If set, all content elements found on current and parent pages will be collected. Otherwise, the sliding would stop after the first hit. Set this value to the amount of levels to collect on, or use “-1” to collect up to the siteroot.
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="collectFuzzy" type="stdWrap">
            <description><![CDATA[boolean/stdWrap
            Only useful in collect mode. If no content elements have been found for the specified depth in collect mode, traverse further until at least one match has occurred.
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="collectReverse" type="stdWrap">
            <description><![CDATA[boolean/stdWrap
            Change order of elements in collect mode. If set, elements of the current page will be at the bottom.
]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="extbase" name="extbase">
        <property name="pluginName" type="stdWrap">
            <description><![CDATA[string/stdWrap
            Sets variables for initializing extbase.]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="controllerExtensionName" type="stdWrap">
            <description><![CDATA[string/stdWrap
            Sets the extension name of the controller.
            Important: This is for example essential if you have translations at the usual paths in your extension and want to use them right away in your template via <f:translate/>.]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="controllerName" type="stdWrap">
            <description><![CDATA[string/stdWrap
            Sets the name of the controller.]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="controllerActionName" type="stdWrap">
            <description><![CDATA[string/stdWrap
            Sets the name of the action.]]></description>
            <default><![CDATA[]]></default>
        </property>
    </type>
    <type id="FILES">
        <property name="references" type="stdWrap">
            <description><![CDATA[string/stdWrap or array
            Provides a way to load files from a file field (of type IRRE with sys_file_reference as child table).
            You can either provide a UID or a comma-separated list of UIDs from the database table sys_file_reference
            or you have to specify a table, uid and field name in the according sub-properties of "references".
            See further documentation of these sub-properties in the table below.]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="cache" type="cache">
            <description><![CDATA[
            Stores the rendered content into the caching framework and reads it from there.
            This allows you to reuse this content without prior rendering. The presence of cache.key will trigger this feature.
]]></description>
            <default><![CDATA[0]]></default>
        </property>
        <property name="files" type="stdWrap">
            <description><![CDATA[string/stdWrap
            Comma-separated list of sys_file UIDs, which are loaded into the FILES object.]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="collections" type="stdWrap">
            <description><![CDATA[string/stdWrap
            Comma-separated list of sys_file_collection UIDs, which are loaded into the FILES object.]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="folders" type="stdWrap">
            <description><![CDATA[string/stdWrap
            Comma-separated list of combined folder identifiers which are loaded into the FILES object.
            A combined folder identifier looks like this: [storageUid]:[folderIdentifier].
            The first part is the UID of the storage and the second part the identifier of the folder.
            The identifier of the folder is often equivalent to the relative path of the folder.]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="sorting" type="stdWrap">
            <description><![CDATA[string/stdWrap
            You can sort in revers order with: sorting.direction = DESC]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="begin" type="integer">
            <description><![CDATA[integer]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="maxItems" type="integer">
            <description><![CDATA[integer]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="renderObj" type="cObj">
            <description><![CDATA[cObject + optionSplit
            The cObject used for rendering the files. It is executed once for every file.
            Note that during each execution you can find information about the current file using
            the getText property "file" with the "current" keyword.]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="stdWrap" type="stdWrap">
            <description><![CDATA[stdWrap]]></description>
            <default><![CDATA[]]></default>
        </property>
    </type>
    <type id="FLUIDTEMPLATE">
        <property name="templateName" type="stdWrap">
            <description><![CDATA[string/stdwrap
This name is used together with the set format to find the template in the given templateRootPaths. Use this property to define a content object, which should be used as template file. It is an alternative to ".file". If ".templateName" is set, it takes precedence.]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="template" type="cObject">
            <description><![CDATA[cObject
Use this property to define a content object, which should be used as template file. It is an alternative to ".file"; if ".template" is set, it takes precedence. While any content object can be used here, the cObject FILE might be the usual choice.]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="file" type="stdWrap">
            <description><![CDATA[string/stdWrap
The fluid template file. It is an alternative to ".template" and is used only, if ".template" is not set.]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="cache" type="cache">
            <description><![CDATA[
            Stores the rendered content into the caching framework and reads it from there.
            This allows you to reuse this content without prior rendering. The presence of cache.key will trigger this feature.
]]></description>
            <default><![CDATA[0]]></default>
        </property>
        <property name="templateRootPaths" type="array">
            <description><![CDATA[array of file paths with stdWrap
Used to define several paths for templates, which will be tried in reversed order (the paths are searched from bottom to top). The first folder where the desired layout is found, is used. If the array keys are numeric, they are first sorted and then tried in reversed order.
Useful in combination with the templateName property.]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="layoutRootPath" type="stdWrap">
            <description><![CDATA[file path/stdWrap
Sets a specific layout path; usually it is Layouts/ underneath the template file.]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="layoutRootPaths" type="array">
            <description><![CDATA[array of file paths with stdWrap
Used to define several paths for layouts, which will be tried in reversed order (the paths are searched from bottom to top). The first folder where the desired layout is found, is used. If the array keys are numeric, they are first sorted and then tried in reversed order.
If property layoutRootPath (singular) is also used, it will be placed as the first option in the list of fall back paths.]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="partialRootPath" type="stdWrap">
            <description><![CDATA[file path/stdWrap
Sets a specific partials path; usually it is Partials/ underneath the template file.]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="layoutRootPaths" type="array">
            <description><![CDATA[array of file paths with stdWrap
Sets the format of the current request.]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="format" type="stdWrap">
            <description><![CDATA[keyword / stdWrap
            Used to define several paths for partials, which will be tried in reversed order. The first folder where the desired partial is found, is used. The keys of the array define the order.
See layoutRootPaths for more details.]]></description>
            <default><![CDATA[html]]></default>
        </property>
        <property name="extbase" type="extbase">
            <description><![CDATA[Additional Extbase configuration]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="variables" type="array">
            <description><![CDATA[array
            Sets variables that should be available in the fluid template. The keys are the variable names in Fluid.
Reserved variables are "data" and "current", which are filled automatically with the current data set.]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="settings" type="array">
            <description><![CDATA[array
            Sets the given settings array in the fluid template. In the view, the value can then be used.

Example:

page = PAGE
page {
    10 = FLUIDTEMPLATE
    10 {
        file = fileadmin/templates/MyTemplate.html
        settings {
            copyrightYear = 2013
        }
    }
}

To access copyrightYear in the template file use this:

{settings.copyrightYear}

Apart from just setting a key-value pair as done in the example, you can also reference objects or access constants as well.]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="dataProcessing" type="array">
            <description><![CDATA[array
            Add one or multiple processors to manipulate the $data variable of the currently rendered content object, like tt_content or page. The sub-property options can be used to pass parameters to the processor class.]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="stdWrap" type="stdWrap">
            <description><![CDATA[stdWrap]]></description>
            <default><![CDATA[]]></default>
        </property>
    </type>
    <type id="FORM_dataArray">
        <property name="10" type="FORM_dataArray_element">
            <description><![CDATA[alternative way to define form Elements]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="20" type="FORM_dataArray_element">
            <description><![CDATA[alternative way to define form Elements]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="30" type="FORM_dataArray_element">
            <description><![CDATA[alternative way to define form Elements]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="40" type="FORM_dataArray_element">
            <description><![CDATA[alternative way to define form Elements]]></description>
            <default><![CDATA[]]></default>
        </property>
    </type>
    <type id="FORM_dataArray_element">
        <property name="label" type="string">
            <description><![CDATA[]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="type" type="string">
            <description><![CDATA[]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="name" type="string">
            <description><![CDATA[]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="value" type="string">
            <description><![CDATA[]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="required" type="boolean">
            <description><![CDATA[]]></description>
            <default><![CDATA[]]></default>
        </property>
    </type>
    <type id="FORM">
        <property name="CHECK.layout" type="string">
            <description><![CDATA[Alternative layout for checkboxes]]></description>
            <default><![CDATA[the "layout"-property]]></default>
        </property>
        <property name="COMMENT.layout" type="string">
            <description><![CDATA[Alternative layout for comments.]]></description>
            <default><![CDATA[the "layout"-property]]></default>
        </property>
        <property name="LABEL.layout" type="string">
            <description><![CDATA[Alternative layout for label types]]></description>
            <default><![CDATA[the "layout"-property]]></default>
        </property>
        <property name="RADIO.layout" type="string">
            <description><![CDATA[Alternative layout for radiobuttons]]></description>
            <default><![CDATA[the "layout"-property]]></default>
        </property>
        <property name="REQ" type="REQ">
            <description><![CDATA[boolean
            Defines if required-fields should be checked and marked up]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="accessibility" type="boolean">
            <description><![CDATA[If set, then the form will be compliant with accessibility guidelines (XHTML compliant). This includes:

label string will be wrapped in <label for="formname[fieldname-hash]"> ... </label>All form elements will have an id-attribute carrying the formname with the md5-hashed fieldname appended

Notice: In TYPO3 4.0 and later, CSS Styled Content is configured to produce accessible forms by default.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="commentWrap" type="stdWrap">
            <description><![CDATA[Comments: Wrap for comments IF you use ###COMMENT###]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="data" type="stdWrap">
            <description><![CDATA[This is the data that sets up the form. See above.
"||" can be used instead of linebreaks]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="dataArray" type="FORM_dataArray">
            <description><![CDATA[This is an alternative way to define the form-fields. Instead of using the syntax with vertical separator bars suggested by the .data property, you can define the elements in regular TypoScript style arrays.
.dataArray is added to the input in .data if any.
Every entry in the dataArray is numeric and has three main properties, label, type, value and required. 'label' and 'value' has stdWrap properties.
There is an alternative property to .value, which is .valueArray. This is also an array in the same style with numeric entries which has properties label, value and selected. 'label' has stdWrap properties.

Example:
  dataArray {
    10.label = Name:
    10.type = name=input
    10.value = [Enter name]
    10.required = 1
    20.label = Eyecolor
    20.type = eyecolor=select
    20.valueArray {
      10.label = Blue
      10.value = 1
      20.label = Red
      20.value = 2
      20.selected = 1
    }
    40.type = submit=submit
    40.value = Submit
  }


This is the same as this line in the .data property:

Name: | *name=input | [Enter name]
Eyecolor: | eyecolor=select | Blue=1, *Red=2
| submit=submit | Submit

Why do it this way?  Good question, but doing it this way has a tremendous advantage because labels are all separated from the codes. In addition it's much easier to pull out or insert new elements in the form.
Inserting an email-field after the name field would be like this:
  dataArray {
    15.label = Email:
    15.type = input
    15.value = your@email.com
    15.specialEval = EMAIL
  }

Or translating the form to danish (setting config.language to 'da'):

  dataArray {
    10.label.lang.da = Navn:
    10.value.lang.da = [Indtast dit navn]
    20.label.lang.da = Øjenfarve
    20.valueArray {
      10.label.lang.da = Blå
      20.label.lang.da = Rød
    }
    40.value.lang.da = Send
  }
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="dontMd5FieldNames" type="boolean">
            <description><![CDATA[The IDs generated for all elements in a form are md5 hashes from the fieldname. Setting this to true will disable this behaviour and use a cleaned fieldname, prefixed with the form name as the ID, instead.
This can be useful to style specifically named fields with CSS.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="emailMess" type="string">
            <description><![CDATA[Message if a field evaluated to be an email adresse did not validate.

NOTE: May be overridden by the property override feature of the formdata (see above)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="fieldPrefix" type="string">
            <description><![CDATA[Alternative prefix for the name of the fields in this form. Otherwise, all fields are prefixed with the form name (either a unique hash or the name set in the "formName" property). If set to "0", there will be no prefix at all.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="fieldWrap" type="stdWrap">
            <description><![CDATA[Field: Wraps the fields]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="formName" type="string">
            <description><![CDATA[An alternative name for this form. Default will be a unique (random) hash.

<form name="...">]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="hiddenFields" type="cObjArray">
            <description><![CDATA[Used to set hiddenFields from TS.

Example:
hiddenFields.pid = TEXT
hiddenFields.pid.value = 2

This makes a hidden-field with the name "pid" and value "2".]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="image" type="IMAGE">
            <description><![CDATA[If this is a valid image the submitbutton is rendered as this image!!

NOTE: CurrentValue is set to the caption-label before generating the image.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="labelWrap" type="stdWrap">
            <description><![CDATA[Labels: Wraps the label]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="layout" type="string">
            <description><![CDATA[This defines how the label and the field are placed towards each other.

Example:
This substitutes the "###FIELD###" with the field data and the "###LABEL###' with labeldata.

<tr><td>###FIELD###</td><td> ###LABEL###</td></tr>

You can also use the marker ###COMMENT### which is ALSO the label value inserted, but wrapped in .commentWrap stdWrap-properties (see below)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="locationData" type="string">
            <description><![CDATA[boolean / string
            If this value is true, then a hidden-field called "locationData" is added to the form. This field wil be loaded with a value like this:
[page id]:[current record table]:[current record id]
For example, if a formfield is inserted on page with uid = "100", as a page-content item from the table "tt_content" with id "120", then the value would be "100:tt_content:120".
The value is use by eg. the cObject SEARCHRESULT. If the value $GLOBALS["HTTP_POST_VARS"]["locationData"] is detected here, the search is done as if it was performed on this page! This is very useful if you want a search functionality implemented on a page with the "stype" field set to "L1" which means that the search is carried out from the first level in the rootline.
Suppose you want the search to submit to a dedicated searchpage where ever. This page will then know - because of locationData - that the search was submitted from another place on the website.
If "locationData" is not only true but also set to "HTTP_POST_VARS" then the value will insert the content of $GLOBALS["HTTP_POST_VARS"]["locationData"] instead of the true location data of the page. This should be done with search-fields as this will carry the initial searching start point with.
NOTE: May be overridden by the property override feature of the formdata (see above)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="method" type="string">
            <description><![CDATA[form-method

            Example:
GET]]></description>
            <default><![CDATA[POST]]></default>
        </property>
        <property name="noValueInsert" type="boolean">
            <description><![CDATA[By default values that are submitted to the same page (and thereby same form, eg. at searchforms) are re-inserted in the form instead of any default-data that might be set up.
This, however, applies ONLY if the "no_cache=1" is set! (a page being cached may not include user-specific defaults in the fields of course...)
If you set this flag, "noValueInsert", the content will always be the default content.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="noWrapAttr" type="boolean">
            <description><![CDATA[If this value is true then all wrap attributes of textarea elements are suppressed. This is needed for XHTML-compliancy.

The wrap attributes can also be disabled on a per-field basis by using the special keyword "disabled" as the value of the wrap attribute.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="no_cache" type="string">
            <description><![CDATA[Default no_cache-option]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="params" type="string">
            <description><![CDATA[form-element tag parameters
            Extra parameters to form elements

Example:
params = style="width:200px;"
params.textarea = style="width:300px;"
params.check =

This sets the default to 200 px width, but excludes check-boxes and sets textareas to 300.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="radioWrap" type="stdWrap">
            <description><![CDATA[Wraps the labels for radiobuttons]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="radioWrap.accessibilityWrap" type="wrap">
            <description><![CDATA[Defines how radio buttons are wrapped when accessibility mode is turned on (see below “accessibility” property)
            default:

            <fieldset###RADIO_FIELD_ID###><legend>###RADIO_GROUP_LABEL###</legend>|</fieldset>
            ]]></description>
            <default><![CDATA[<fieldset###RADIO_FIELD_ID###><legend>###RADIO_GROUP_LABEL###</legend>|</fieldset>
]]></default>
        </property>
        <property name="radioInputWrap" type="stdWrap">
            <description><![CDATA[Wraps the input element and label of a radio button.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="recipient" type="stdWrap">
            <description><![CDATA[(list of) string /stdWrap
            Email recipient of the formmail content (generates the hiddenfield "recipient")]]></description>
            <default><![CDATA[No email]]></default>
        </property>
        <property name="redirect" type="stdWrap">
            <description><![CDATA[URL to redirect to (generates the hidden field "redirect")

Integer: this is regarded to be a page in TYPO3
String: this is regarded to be a normal url
Empty; the current page is chosen.

NOTE: If this value is set the target of this overriddes the target of the "type".]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="stdWrap" type="stdWrap">
            <description><![CDATA[Wraps the hole form (before formtags is added)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="target" type="string">
            <description><![CDATA[target
            Default target of the form. ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="type" type="int">
            <description><![CDATA[Type (action="" of the form):

Integer: this is regarded to be a page in TYPO3
String: this is regarded to be a normal URL (eg. "formmail.php")
Empty: the current page is chosen.

NOTE: If type is integer/empty the form will be submitted to a page in TYPO3 and if this page has a value for target/no_cache, then this will be used instead of the default target/no_cache below.

NOTE: If the redirect-value is set, the redirect-target overrides the target set by the action-url

NOTE: May be overridden by the property override feature of the formdata (see above)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="wrapFieldName" type="wrap">
            <description><![CDATA[This wraps  the fieldnames before they are applied to the form-field tags.

Example:
If value is tx_myextension[input][  |  ]  then the fieldname "email" would be wrapped to this value: tx_myextension[input][email]]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="REQ">
        <property name="fieldWrap" type="stdWrap">
            <description><![CDATA[Field: Wraps the fields, but for required fields]]></description>
            <default><![CDATA[the "fieldWrap"-property]]></default>
        </property>
        <property name="labelWrap" type="stdWrap">
            <description><![CDATA[Labels: Wraps the label, but for required fields]]></description>
            <default><![CDATA[the "labelWrap"-property]]></default>
        </property>
        <property name="layout" type="string">
            <description><![CDATA[The same as "layout" above, but for required fields]]></description>
            <default><![CDATA[the "layout"-property]]></default>
        </property>
    </type>
    <type id="GifBuilderObj">
        <property name="if" type="if">
            <description><![CDATA[.if (->if)  is a property of all gifbuilder-objects. If the property is present and NOT set, the object is NOT rendered! This corresponds to the functionality of ".if" of the stdWrap-function.]]></description>
        </property>
    </type>
    <type id="GIFBUILDER">
        <property name="1" type="GifBuilderObj">
            <description><![CDATA[.if (->if)  is a property of all gifbuilder-objects. If the property is present and NOT set, the object is NOT rendered! This corresponds to the functionality of ".if" of the stdWrap-function.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="2" type="GifBuilderObj">
            <description><![CDATA[.if (->if)  is a property of all gifbuilder-objects. If the property is present and NOT set, the object is NOT rendered! This corresponds to the functionality of ".if" of the stdWrap-function.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="3" type="GifBuilderObj">
            <description><![CDATA[.if (->if)  is a property of all gifbuilder-objects. If the property is present and NOT set, the object is NOT rendered! This corresponds to the functionality of ".if" of the stdWrap-function.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="4" type="GifBuilderObj">
            <description><![CDATA[.if (->if)  is a property of all gifbuilder-objects. If the property is present and NOT set, the object is NOT rendered! This corresponds to the functionality of ".if" of the stdWrap-function.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="XY" type="string">
            <description><![CDATA[x,y +calc
            Size of the gif-file. ]]></description>
            <default><![CDATA[100,20]]></default>
        </property>
        <property name="backColor" type="string">
            <description><![CDATA[GraphicColor
            Background color for the gif]]></description>
            <default><![CDATA[white]]></default>
        </property>
        <property name="format" type="string">
            <description><![CDATA["gif" / "jpg"
            Output type.
"jpg"/"jpeg" = jpg-image]]></description>
            <default><![CDATA[gif]]></default>
        </property>
        <property name="maxHeight" type="int">
            <description><![CDATA[pixels
            Maximal height of gif-file]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="maxWidth" type="int">
            <description><![CDATA[pixels
            Maximal width of gif-file]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="offset" type="string">
            <description><![CDATA[x,y +calc
            Offset all objects on the gif.]]></description>
            <default><![CDATA[0,0]]></default>
        </property>
        <property name="quality" type="int">
            <description><![CDATA[posint (10-100)
            JPG-quality (if ".format" = jpg/jpeg)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="speed" type="int">
            <description><![CDATA[posint (0-10)
            Speed parameter (if ".format" = avif)]]></description>
            <default><![CDATA[-1]]></default>
        </property>
        <property name="transparentBackground" type="boolean">
            <description><![CDATA[Set this flag to render the background transparent. TYPO3 makes the color found at position 0,0 of the image (upper left corner) transparent.
If you render text you should leave the niceText option OFF as the result with probably be more precise without the niceText antialiasing hack]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="transparentColor" type="stdWrap">
            <description><![CDATA[HTMLColor /stdWrap
            Specify a color that should be transparent

Example-values:
#ffffcc
red
255,255,127

Option:
transparentColor.closest = 1
This will allow for the closest color to be matched instead. You may need this if your image is not guaranteed "clean".]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="workArea" type="string">
            <description><![CDATA[x,y,w,h + calc
            Define the workarea on the giffile. All the GifBuilderObj's will see this as the dimensions of the gif-file regarding alignment, overlaying of images an so on. Only will TEXT-objects exceeding the boundaries of the workarea print outside this area.]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="ADJUST" extends="GifBuilderObj">
        <property name="value" type="string">
            <description><![CDATA[This lets you adjust the input-levels like in Photoshop's "levels"-dialog. If you need to adjust gamma, look at the EFFECT-object.
Example:

20 = ADJUST
20.value = inputLevels = 13,230

properties:

inputLevels: low,high
outputLevels: low, high
autoLevels: -
]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="BOX" extends="GifBuilderObj">
        <property name="align" type="string">
            <description><![CDATA[VHalign
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="color" type="string">
            <description><![CDATA[GraphicColor
            fill-color]]></description>
            <default><![CDATA[black]]></default>
        </property>
        <property name="dimensions" type="string">
            <description><![CDATA[x,y,w,h +calc
            Dimensions of a filled box.
x,y    is the offset.
w,h    is the dimensions. Dimensions of 1 will result in 1-pixel wide lines!]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="opacity" type="int">
            <description><![CDATA[pos-int (1-100)
            Dimensions of a filled box.
Opacity (i.e. inverse of transparency, e.g. 100% opacity = 0% transparency)]]></description>
            <default><![CDATA[100
]]></default>
        </property>
    </type>
    <type id="CROP" extends="GifBuilderObj">
        <property name="align" type="string">
            <description><![CDATA[VHalign
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="backColor" type="string">
            <description><![CDATA[GraphicColor
]]></description>
            <default><![CDATA[The original backColor]]></default>
        </property>
        <property name="crop" type="string">
            <description><![CDATA[x,y,v,h + calc
            x,y is offset of the crop-frame,
v,h  is the dimensions]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="ELLIPSE" extends="GifBuilderObj">
        <property name="dimensions" type="string">
            <description><![CDATA[x,y,w,h +calc
Dimensions of a filled ellipse.
x,y    is the offset.
w,h    is the dimensions. Dimensions of 1 will result in 1-pixel wide lines!

Example:
file  =  GIFBUILDER
file  {
 XY  =  200,200
 format  =  jpg
 quality  =  100
 10  =  ELLIPSE
 10.dimensions  =  100,100,50,50
 10.color  =  red

]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="color" type="string">
            <description><![CDATA[GraphicColor
fill-color

Example:
file  =  GIFBUILDER
file  {
 XY  =  200,200
 format  =  jpg
 quality  =  100
 10  =  ELLIPSE
 10.dimensions  =  100,100,50,50
 10.color  =  red

]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="EFFECT" extends="GifBuilderObj">
        <property name="value" type="string">
            <description><![CDATA[.value = [Varnavn] = [value] | [Varnavn] = [value]

Example:
20 = EFFECT
20.value = gamme=1.3 | flip | rotate=180


gamma: 0.5 - 3.0
blur: 1-99
sharpen: 1-99
solarize: 0-99
swirl: 0-100
wave: ampli , length
charcoal: 0-100
gray: -
edge: 0-99
emboss: -
flip: - (Vertical flipping)
flop: - (Horizontal flipping)
rotate: 0-360 (Rotation)
colors: 2-255
shear: -90 - 90 (Horizontal shearing)
invert: - (invert the colors)
]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="EMBOSS" extends="GifBuilderObj">
        <property name="blur" type="int">
            <description><![CDATA[posint (1-99)
            Blurring of the shadow. Above 40 only values of 40,50,60,70,80,90 means something.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="highColor" type="string">
            <description><![CDATA[GraphicColor
            Upper border-color]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="intensity" type="int">
            <description><![CDATA[posint(0-100)
            How "massive" the emboss is. This value can - if it has a high value combined with a blurred shadow - create a kind of soft-edged outline.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="lowColor" type="string">
            <description><![CDATA[GraphicColor
            lower border-color]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="offset" type="string">
            <description><![CDATA[x,y
            Offset of the emboss]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="opacity" type="int">
            <description><![CDATA[posint (1-100)
            Opacity (transparency^-1)
100% opacity = 0% transparency). Only active with a value for blur.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="textObjNum" type="int">
            <description><![CDATA[pos-int
            Must point to the TEXT-object if these shadow-properties are not properties to a TEXT-object directly ("stand-alone-shadow"). Then the shadow needs to know which TEXT-object it should be a shadow of!
If - on the other hand - the shadow is a property to a text-object, this property is not needed.]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="GB_IMAGE" extends="GifBuilderObj">
        <property name="align" type="string">
            <description><![CDATA[VHalign
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="file" type="imgResource">
            <description><![CDATA[The imagefile]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="mask" type="imgResource">
            <description><![CDATA[Optional mask-image for the imagefile.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="offset" type="string">
            <description><![CDATA[x,y +calc
            Offset ]]></description>
            <default><![CDATA[0,0]]></default>
        </property>
        <property name="tile" type="string">
            <description><![CDATA[x,y
            tile x,y times.
Maximum times is 20 each direction. If you need more, use a larger image.]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="OUTLINE" extends="GifBuilderObj">
        <property name="color" type="string">
            <description><![CDATA[GraphicColor
            Outline color]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="textObjNum" type="int">
            <description><![CDATA[pos-int
            Must point to the TEXT-object if these shadow-properties are not properties to a TEXT-object directly ("stand-alone-shadow"). Then the shadow needs to know which TEXT-object it should be a shadow of!
If - on the other hand - the shadow is a property to a text-object, this property is not needed.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="thickness" type="string">
            <description><![CDATA[x,y
            Thickness in each direction, range 1-2]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="SCALE" extends="GifBuilderObj">
        <property name="height" type="string">
            <description><![CDATA[pixels + calc
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="params" type="string">
            <description><![CDATA[ImageMagickParams
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="width" type="string">
            <description><![CDATA[pixels + calc
]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="SHADOW" extends="GifBuilderObj">
        <property name="blur" type="int">
            <description><![CDATA[posint (1-99)
            Blurring of the shadow. Above 40 only values of 40,50,60,70,80,90 means something.

NOTE: Unfortunately the blurring capabilities of ImageMagick is not very mature in the version 4.2.9. This is addressed in the later version 5.2.0 where a gaussian blur-function is added. BUT as we do cannot use the latest ImageMagick development yet, this is not utilized so far.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="color" type="string">
            <description><![CDATA[GraphicColor
            Shadow color]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="intensity" type="int">
            <description><![CDATA[posint(0-100)
            How "massive" the shadow is. This value can - if it has a high value combined with a blurred shadow - create a kind of soft-edged outline.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="offset" type="string">
            <description><![CDATA[x,y
            Shadow offset]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="opacity" type="int">
            <description><![CDATA[posint (1-100)
            Opacity (transparency^-1)
100% opacity = 0% transparency). Only active with a value for blur.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="textObjNum" type="int">
            <description><![CDATA[pos-int
            Must point to the TEXT-object if these shadow-properties are not properties to a TEXT-object directly ("stand-alone-shadow"). Then the shadow needs to know which TEXT-object it should be a shadow of!
If - on the other hand - the shadow is a property to a text-object, this property is not needed.]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="GB_TEXT" extends="GifBuilderObj">
        <property name="align" type="string">
            <description><![CDATA[align
            Alignment of the text]]></description>
            <default><![CDATA[left]]></default>
        </property>
        <property name="angle" type="string">
            <description><![CDATA[degree
            Rotation degrees of the text.

NOTE: Angle is not available if spacing/wordSpacing is set.]]></description>
            <default><![CDATA[0
Range: -90 til 90]]></default>
        </property>
        <property name="antiAlias" type="boolean">
            <description><![CDATA[FreeType antialiasing. Notice, the default mode is "on"!

Note: This option is not available if .niceText is enabled]]></description>
            <default><![CDATA[1]]></default>
        </property>
        <property name="breakWidth" type="int">
            <description><![CDATA[Defines the maximum width for an object, overlapping elements will force an automatic line break.
            ]]></description>
            <default><![CDATA[
            ]]></default>
        </property>
        <property name="breakSpace" type="float">
            <description><![CDATA[Defines a value that is multiplied by the line height of the current element.
            ]]></description>
            <default><![CDATA[1.0]]></default>
        </property>
        <property name="doNotStripHTML" type="boolean">
            <description><![CDATA[If set, HTML-tags in the string inserted are NOT removed. Any other way HTML-code is removed by default!]]></description>
            <default><![CDATA[0]]></default>
        </property>
        <property name="emboss" type="EMBOSS">
            <description><![CDATA[
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="fontColor" type="stdWrap">
            <description><![CDATA[GraphicColor /stdWrap
            Font color]]></description>
            <default><![CDATA[black]]></default>
        </property>
        <property name="fontFile" type="string">
            <description><![CDATA[Font face (truetype font you can upload!!)]]></description>
            <default><![CDATA[Nimbus (Arial-clone)]]></default>
        </property>
        <property name="fontSize" type="int">
            <description><![CDATA[posint
            Font size]]></description>
            <default><![CDATA[12]]></default>
        </property>
        <property name="hide" type="boolean">
            <description><![CDATA[If this is true, the text is NOT printed.
This feature may be used if you need a shadow-object to base a shadow on the text, but do not want the text to print.]]></description>
            <default><![CDATA[0]]></default>
        </property>
        <property name="iterations" type="int">
            <description><![CDATA[posint
            How many times the text should be "printed" onto it self. This will add the effect of bold text.

Note: This option is not available if .niceText is enabled]]></description>
            <default><![CDATA[1]]></default>
        </property>
        <property name="maxWidth" type="int">
            <description><![CDATA[pixels
            Sets the maximum width in pixels, the text must be. Reduces the fontSize if the text does not fit within this width.

Does not support setting alternative fontSizes in splitRendering options.

(By Rene Fritz <r.fritz@colorcube.de>)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="niceText" type="boolean">
            <description><![CDATA[This is a very popular feature that helps to render small letters much nicer than the freetype library can normally do. But it also loads the system very much!
The principle of this function is to create a black/white giffile in twice or more times the size of the actual gif-file and then print the text onto this is a scaled dimension. Afterwards ImageMagick (IM) scales down the mask and masks the font color down on the original gif-file through the temporary mask.
The fact that the font  is  actually rendered in the double size and scaled down adds a more homogeneous shape to the letters. Some fonts are more critical than others though.  If you do not need the quality, then don't use the function.

Some properties:
.before = IM-params before scale
.after = IM-params after scale
.sharpen = sharpen-value for the mask (after scaling), integer 0-99 (this enables you to make the text crisper if it's too blurred!)
.scaleFactor = scaling-factor, int 2-5]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="offset" type="string">
            <description><![CDATA[x,y +calc
            Offset of the text]]></description>
            <default><![CDATA[0,0]]></default>
        </property>
        <property name="outline" type="OUTLINE">
            <description><![CDATA[
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="shadow" type="SHADOW">
            <description><![CDATA[
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="spacing" type="int">
            <description><![CDATA[posint
            Pixel-distance between letters. This may render ugly!]]></description>
            <default><![CDATA[0]]></default>
        </property>
        <property name="splitRendering.compX" type="string">
            <description><![CDATA[Split the rendering of a string into separate processes with individual configurations. By this method a certain range of characters can be rendered with another font face or size. This is very useful if you want to use separate fonts for strings where you have latin characters combined with eg. Japanese and there is a separate font file for each.
You can also render keywords in another font/size/color.

Properties:
splitRendering.compX = Additional pixelspace between parts, x direction
splitRendering.compY = Additional pixelspace between parts, y direction
splitRendering.[array] = keyword  [charRange, highlightWord]
splitRendering.[array] {
  fontFile = Alternative font file for this rendering
  fontSize = Alternative font size for this rendering
  color = Alternative color for this rendering, works ONLY without "niceText"
  xSpaceBefore = x-Space before this part
  xSpaceAfter = x-Space after this part
  ySpaceBefore = y-Space before this part
  ySpaceAfter =  y-Space after this part
}

Keyword: charRange
splitRendering.[array].value = Commaseparated list of character ranges (eg. "100-200") given as Unicode character numbers. The list accepts optional starting and ending points, eg. " - 200" or " 200 -" and single values, eg. "65, 66, 67"

Keyword: highlightWord
splitRendering.[array].value = Word to highlight, makes a case sensitive search for this.

Limitations:
The pixelcompensation values are not corrected for scale factor used with niceText. Basically this means that when niceText is used, these values will have only the half effect.When word spacing is used the "highlightWord" mode doesn't work.The color override works only without "niceText".

Example:
  10.splitRendering.compX = 2
  10.splitRendering.compY = -2
  10.splitRendering.10 = charRange
  10.splitRendering.10 {
    value = 200-380 , 65, 66
    fontSize = 50
    fontFile =  typo3/sysext/core/Resources/Private/Font/nimbus.ttf
    xSpaceBefore = 30
  }
  10.splitRendering.20 = highlightWord
  10.splitRendering.20 {
    value = TheWord
    color = red
  }]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="splitRendering.compY" type="string">
            <description><![CDATA[Split the rendering of a string into separate processes with individual configurations. By this method a certain range of characters can be rendered with another font face or size. This is very useful if you want to use separate fonts for strings where you have latin characters combined with eg. Japanese and there is a separate font file for each.
You can also render keywords in another font/size/color.

Properties:
splitRendering.compX = Additional pixelspace between parts, x direction
splitRendering.compY = Additional pixelspace between parts, y direction
splitRendering.[array] = keyword  [charRange, highlightWord]
splitRendering.[array] {
  fontFile = Alternative font file for this rendering
  fontSize = Alternative font size for this rendering
  color = Alternative color for this rendering, works ONLY without "niceText"
  xSpaceBefore = x-Space before this part
  xSpaceAfter = x-Space after this part
  ySpaceBefore = y-Space before this part
  ySpaceAfter =  y-Space after this part
}

Keyword: charRange
splitRendering.[array].value = Commaseparated list of character ranges (eg. "100-200") given as Unicode character numbers. The list accepts optional starting and ending points, eg. " - 200" or " 200 -" and single values, eg. "65, 66, 67"

Keyword: highlightWord
splitRendering.[array].value = Word to highlight, makes a case sensitive search for this.

Limitations:
The pixelcompensation values are not corrected for scale factor used with niceText. Basically this means that when niceText is used, these values will have only the half effect.When word spacing is used the "highlightWord" mode doesn't work.The color override works only without "niceText".

Example:
  10.splitRendering.compX = 2
  10.splitRendering.compY = -2
  10.splitRendering.10 = charRange
  10.splitRendering.10 {
    value = 200-380 , 65, 66
    fontSize = 50
    fontFile =  typo3/sysext/core/Resources/Private/Font/nimbus.ttf
    xSpaceBefore = 30
  }
  10.splitRendering.20 = highlightWord
  10.splitRendering.20 {
    value = TheWord
    color = red
  }]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="text" type="stdWrap">
            <description><![CDATA[This is text text-string on the gif-file. The item is rendered only if this string is not empty.
The cObj->data-array is loaded with the page-record, if for the GIFBUILDER-object is used]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="textMaxLength" type="int">
            <description><![CDATA[The maximum length of the text.  This is just a natural break that prevents incidental rendering of very long texts!]]></description>
            <default><![CDATA[100]]></default>
        </property>
        <property name="wordSpacing" type="int">
            <description><![CDATA[posint
            Pixel-distance between words.]]></description>
            <default><![CDATA[= ".spacing"*2]]></default>
        </property>
    </type>
    <type id="WORKAREA" extends="GifBuilderObj">
        <property name="clear" type="string">(isset)
            <description><![CDATA[
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="set" type="string">
            <description><![CDATA[x,y,w,h + calc
            Sets another workarea
]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="HMENU">
        <property name="1" type="mObj">
            <description><![CDATA[Required!
Defines which menuObj that should render the menuitems on the various levels.
1 is the first level, 2 is the second level, 3 is the third level, 4 is ....

Example:
temp.sidemenu = HMENU
temp.sidemenu.1 = TMENU  ]]></description>
            <default><![CDATA[ (no menu)]]></default>
        </property>
        <property name="2" type="mObj">
            <description><![CDATA[Defines which menuObj that should render the menuitems on the various levels.
1 is the first level, 2 is the second level, 3 is the third level, 4 is ....

Example:
temp.sidemenu = HMENU
temp.sidemenu.1 = TMENU  ]]></description>
            <default><![CDATA[ (no menu)]]></default>
        </property>
        <property name="3" type="mObj">
            <description><![CDATA[Defines which menuObj that should render the menuitems on the various levels.
1 is the first level, 2 is the second level, 3 is the third level, 4 is ....

Example:
temp.sidemenu = HMENU
temp.sidemenu.1 = TMENU  ]]></description>
            <default><![CDATA[ (no menu)]]></default>
        </property>
        <property name="4" type="mObj">
            <description><![CDATA[Defines which menuObj that should render the menuitems on the various levels.
1 is the first level, 2 is the second level, 3 is the third level, 4 is ....

Example:
temp.sidemenu = HMENU
temp.sidemenu.1 = TMENU  ]]></description>
            <default><![CDATA[ (no menu)]]></default>
        </property>
        <property name="addQueryString" type="string">
            <description><![CDATA[see typolink.addQueryString

Notice: This works only for special=language.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="alwaysActivePIDlist" type="stdWrap">
            <description><![CDATA[List of Integers /stdWrap
            This is a list of page UID numbers that will always be regarded as active menu items and thereby automatically opened regardless of the rootline.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="begin" type="int">
            <description><![CDATA[int +calc
            The first item in the menu.

Example:
This results in a menu, where the first two items are skipped starting with item number 3:
  begin = 3

Notice: Affects all sub menus as well. (See "minItems" for notice)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="cache" type="cache">
            <description><![CDATA[
            Stores the rendered content into the caching framework and reads it from there.
            This allows you to reuse this content without prior rendering. The presence of cache.key will trigger this feature.
]]></description>
            <default><![CDATA[0]]></default>
        </property>
        <property name="entryLevel" type="int">
            <description><![CDATA[Defines at which level in the rootLine, the menu should start.
Default is "0" which gives us a menu of the very first pages on the site.
If the value is < 0, entryLevel is chosen from "behind" in the rootLine. Thus "-1" is a menu with items from the outermost level, "-2" is the level before the outermost...]]></description>
            <default><![CDATA[0]]></default>
        </property>
        <property name="excludeDoktypes" type="intList">
            <description><![CDATA[list of integers
            Enter the list of page document types (doktype) to exclude from menus. By default pages that are marked for backend user access only (6) are excluded. ]]></description>
            <default><![CDATA[5,6]]></default>
        </property>
        <property name="excludeUidList" type="int">
            <description><![CDATA[list of integers
            This is a list of page uid's to exclude when the select statement is done. Comma-separated. You may add "current" to the list to exclude the current page.

Example:
The pages with these uid-number will NOT be within the menu!! Additionally the current page is always excluded too.
  excludeUidList = 34,2,current]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="if" type="if">
            <description><![CDATA[If "if" returns false, the menu is not generated]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="includeNotInMenu" type="boolean">
            <description><![CDATA[If set, pages with "Not in menu" will be included in menus.
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="maxItems" type="int">
            <description><![CDATA[The maximum items in the menu. More items will be ignored.

Notice: Affects all sub menus as well. (See "minItems" for notice)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="minItems" type="int">
            <description><![CDATA[The minimum items in the menu. If the number of pages does not reach this level, a dummy-page with the title "..." and uid=[currentpage_id] is inserted.

Notice: Affects all sub menus as well. To set the value for each menu level individually, set the properties in the menu objects (see "Common properties" table).]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="protectLvar" type="string">
            <description><![CDATA[boolean / keyword
            If set, then for each page in the menu it will be checked if an Alternative Page Language record for the language defined in "config.sys_language_uid" (typically defined via &L) exists for the page. If that is not the case and the pages "Localization settings" have the "Hide page if no translation for current language exists" flag set, then the menu item will link to a non accessible page that will yield an error page to the user. Setting this option will prevent that situation by simply adding "&L=0" for such pages, meaning that they will switch to the default language rather than keeping the current language.
The check is only carried out if a translation is requested ("config.sys_language_uid" is not zero).

Keyword: "all"
When set to "all" the same check is carried out but it will not look if "Hide page if no translation for current language exists" is set - it always reverts to default language if no translation is found.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="special" type="HMENU_SPECIAL">
            <description><![CDATA["directory" / "list" / "updated" / "browse" / "rootline" / "keywords" / "language"
            (See TSref for details:
            <a href="https://docs.typo3.org/typo3cms/TyposcriptReference/ContentObjects/Hmenu/#hmenu-special-property">
            https://docs.typo3.org/typo3cms/TyposcriptReference/ContentObjects/Hmenu/#hmenu-special-property</a> )]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="stdWrap" type="stdWrap">
            <description><![CDATA[
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="wrap" type="stdWrap">
            <description>wrap/stdWrap<![CDATA[
]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="HMENU_SPECIAL">
        <property name="value" type="stdWrap">
            <description><![CDATA[list of page-uid's /stdWrap]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="directory" extends="HMENU_SPECIAL"/>
    <type id="list" extends="HMENU_SPECIAL"/>
    <type id="updated" extends="HMENU_SPECIAL">
        <property name="mode" type="string">
            <description><![CDATA[Which field in the pages-table to use. Default is "SYS_LASTCHANGED" (which is updated when a page is generated to the youngest tstamp of the records on the page), "manual" or "lastUpdated" will use the field "lastUpdated" (set manually in the page-record) and "tstamp" will use the "tstamp"-field of the pagerecord, which is set automatically when the record is changed. "crdate" will use "crdate"-field of the pagerecord. "starttime" will use the starttime field.

Fields with zero value is not selected anyway.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="depth" type="string">
            <description><![CDATA[By default (if the value is not an integer) the depth is 20 levels. The range is 1-20. A depth of 1 means only the start id, depth of 2 means start-id + first level. NOTE: depth is relative to beginAtLevel.
            ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="beginAtLevel" type="int">
            <description><![CDATA[Determines starting level for the pagetrees generated based on .value and .depth. Zero is default and includes the start id. 1=starts with the first row of subpages, 2=starts with the second row of subpages. Depth is relative to this starting point.
            ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="maxAge" type="string">
            <description><![CDATA[Seconds+calc.
            Pages with update-dates older than currenttime minus this number of seconds will not be shown in the menu no matter what. Default is "not used". You may use +-*/ for calculations.
            ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="limit" type="int">
            <description><![CDATA[Max number of items in the menu. Default is 10, max is 100.
            ]]></description>
            <default><![CDATA[10
]]></default>
        </property>
        <property name="excludeNoSearchPages" type="boolean">
            <description><![CDATA[If set, pages marked "No search" is not included into special-menus.
Support for Mount Pages: Yes.
            ]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="rootline" extends="HMENU_SPECIAL">
        <property name="range" type="string">
            <description><![CDATA[rootline creates a menu with pages from the "rootline" (see earlier in this reference)

.range = [begin-level] | [end-level] (same way as you reference the .entryLevel for HMENU)

This...

page.2 = HMENU
page.2.special = rootline
page.2.special.range = 1|-2
page.2.special.targets.3 = page
page.2.1 = TMENU
page.2.1.target = _top
page.2.1.wrap = <HR> | <HR>
page.2.1.NO {
  linkWrap = | >
}
... creates a menu like this:

Page level 1 > Page level 2 > Page level 3 > Page level 4 >

(The menu starts at level 1 and does NOT link to the current page (-2 is the level before). Further all pages on level 3 will have "page" as target and all other "_top")
            ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="reverseOrder" type="boolean">
            <description><![CDATA[If set to true, the order of the rootline menu elements will be reversed.
            ]]></description>
            <default><![CDATA[false]]></default>
        </property>
        <property name="targets" type="string">
            <description><![CDATA[.targets.[0-x]  targets

            This...

page.2 = HMENU
page.2.special = rootline
page.2.special.range = 1|-2
page.2.special.targets.3 = page
page.2.1 = TMENU
page.2.1.target = _top
page.2.1.wrap = <HR> | <HR>
page.2.1.NO {
  linkWrap = | >
}

... creates a menu like this:

Page level 1 > Page level 2 > Page level 3 > Page level 4 >

(The menu starts at level 1 and does NOT link to the current page (-2 is the level before). Further all pages on level 3 will have "page" as target and all other "_top")

            ]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="browse" extends="HMENU_SPECIAL">
        <property name="items" type="string">
            <description><![CDATA[.items  ( "|" separated list of "itemnames")
            This kind of menu is built of items given by a list from the property ".item". Each element in the list (sep. by "|") is either a reserved itemname (see list) with a predefined function or a userdefined name which you can assign a link to any page. Note that the current page cannot be the root-page of a site.
            ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="items.prevnextToSection" type="boolean">
            <description><![CDATA[items.prevnextToSection (boolean) - if set, the "prev" and "next" navigation will jump to the next section when it reaches the end of pages in the current section.
            ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="next" type="HMENU_SPECIAL_browseItem">
            <description><![CDATA[next / prev : links to next page / previous page. Next and previous pages are from the same "pid" as the current page id (or "value") - that is the next item in a menu with the current page. Also referred to as current level.

If ".prevnextToSection" is set then next/prev will link to the first page of next section / last page of previous section.
            ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="prev" type="HMENU_SPECIAL_browseItem">
            <description><![CDATA[next / prev : links to next page / previous page. Next and previous pages are from the same "pid" as the current page id (or "value") - that is the next item in a menu with the current page. Also referred to as current level.

If ".prevnextToSection" is set then next/prev will link to the first page of next section / last page of previous section.
            ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="nextsection" type="HMENU_SPECIAL_browseItem">
            <description><![CDATA[nextsection / prevsection : links to next section / previous section. A section is defined as the subpages of a page on the same level as the parent (pid) page of the current page. Will not work if parent page of current page is the root page of the site.
            ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="prevsection" type="HMENU_SPECIAL_browseItem">
            <description><![CDATA[nextsection / prevsection : links to next section / previous section. A section is defined as the subpages of a page on the same level as the parent (pid) page of the current page. Will not work if parent page of current page is the root page of the site.
            ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="nextsection_last" type="HMENU_SPECIAL_browseItem">
            <description><![CDATA[Where nextsection/prevsection links to the first page in a section, these links to the last pages. If there is only one page in the section that will be both first and last. Will not work if parent page of current page is the root page of the site.
            ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="prevsection_last" type="HMENU_SPECIAL_browseItem">
            <description><![CDATA[Where nextsection/prevsection links to the first page in a section, these links to the last pages. If there is only one page in the section that will be both first and last. Will not work if parent page of current page is the root page of the site.
            ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="first" type="HMENU_SPECIAL_browseItem">
            <description><![CDATA[First / Last page on current level. If there is only one page on the current level that page will be both first and last.
            ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="last" type="HMENU_SPECIAL_browseItem">
            <description><![CDATA[First / Last page on current level. If there is only one page on the current level that page will be both first and last.
            ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="up" type="HMENU_SPECIAL_browseItem">
            <description><![CDATA[Links to the parent (pid) page of the current page. (up 1 level) Will always be available
            ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="index" type="HMENU_SPECIAL_browseItem">
            <description><![CDATA[Links to the parent of the parent page of the current page (up 2 levels). May not be available if that page is out of the rootline.
            ]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="HMENU_SPECIAL_browseItem">
        <property name="target" type="string">
            <description><![CDATA[optional/alternative target of the item]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="uid" type="int">
            <description><![CDATA[.  (uid of page) - optional/alternative page-uid to link to
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="fields" type="string">
            <description><![CDATA[.[itemnames].fields.[fieldname]  (string)
 override field "fieldname" in pagerecord.]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="keywords" extends="HMENU_SPECIAL">
        <property name="mode" type="string">
            <description><![CDATA[Which field in the pages-table to use for sorting. Default is "SYS_LASTCHANGED" (which is updated when a page is generated to the youngest tstamp of the records on the page), "manual" or "lastUpdated" will use the field "lastUpdated" (set manually in the page-record) and "tstamp" will use the "tstamp"-field of the pagerecord, which is set automatically when the record is changed. "crdate" will use "crdate"-field of the pagerecord. "starttime" will use the starttime field.
            ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="depth" type="string">
            <description><![CDATA[By default (if the value is not an integer) the depth is 20 levels. The range is 1-20. A depth of 1 means only the start id, depth of 2 means start-id + first level. NOTE: depth is relative to beginAtLevel.
            ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="beginAtLevel" type="int">
            <description><![CDATA[Determines starting level for the pagetrees generated based on .value and .depth. Zero is default and includes the start id. 1=starts with the first row of subpages, 2=starts with the second row of subpages. Depth is relative to this starting point.
            ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="limit" type="int">
            <description><![CDATA[Max number of items in the menu. Default is 10, max is 100.
            ]]></description>
            <default><![CDATA[10
]]></default>
        </property>
        <property name="excludeNoSearchPages" type="boolean">
            <description><![CDATA[If set, pages marked "No search" is not included into special-menus.
Support for Mount Pages: Yes.
            ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="entryLevel" type="string">
            <description><![CDATA[.entryLevel = where in the rootline the search begins. Standard rootline syntax (-x to x)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="setKeywords" type="stdWrap">
            <description><![CDATA[.setKeywords (/stdWrap) = lets you define the keywords manually by defining them as a commaseparated list. If this property is defined, it overrides the default, which is the keywords of the current page.
            ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="keywordsField" type="string">
            <description><![CDATA[.keywordsField = defines the field in the pages-table in which to search for the keywords. Default is the fieldname "keyword". No check is done to see if the field you enter here exists, so enter an existing field, OK?!]]></description>
            <default><![CDATA["keyword"
]]></default>
        </property>
        <property name="keywordsField.sourceField" type="string">
            <description><![CDATA[.keywordsField.sourceField = defines the field from the current page from which to take the keywords being matched. The default is "keyword". (Notice that ".keywordsField" is only setting the page-record field to search in !)]]></description>
            <default><![CDATA["keyword"
]]></default>
        </property>
    </type>
    <type id="language" extends="HMENU_SPECIAL"/>
    <type id="userdefined" extends="HMENU_SPECIAL">
        <property name="file" type="string">
            <description><![CDATA[.file  [resource]  =  filename of the php-file to include.
            ]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="userfunction" extends="HMENU_SPECIAL">
        <property name="userFunc" type="string">
            <description><![CDATA[.userFunc = function-name
            Calls a user function/method in class which should (as with "userdefined" above) return an array with page records for the menu.
]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="mObj">
        <property name="alternativeSortingField" type="string">
            <description><![CDATA[Normally the menuitems are sorted by the fields "sorting" in the pages- and tt_content-table. Here you can enter a list of fields that is used in the SQL- "ORDER BY" statement instead.

Examples (for "pages" table):
alternativeSortingField = title desc
(This will render the menu in reversed alphabetical order)

LIMITATIONS:
This property works with normal menus, sectionsIndex menus and special-menus of type "directory".]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="begin" type="int">
            <description><![CDATA[int +calc
            The first item in the menu.

Example:
This results in a menu, where the first two items are skipped starting with item number 3:
  begin = 3

Takes precedence over HMENU.begin]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="imgNameNotRandom" type="boolean">
            <description><![CDATA[If set, the image names of menuitems is not randomly assigned. Useful switch if you're manipulating these images with some external JavaScript

NOTE: Don't set this if you're working with a menu with sectionIndex! In that case you need special unique names of items based on something else than the uid of the parent page of course!]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="imgNamePrefix" type="string">
            <description><![CDATA[prefix for the imagenames. This prefix is appended with the uid of the page.]]></description>
            <default><![CDATA["img"]]></default>
        </property>
        <property name="itemArrayProcFunc" type="string">
            <description><![CDATA[function-name
            The first variable passed to this function is the "menuArr" array with the menuitems as they are collected based on the type of menu.
You're free to manipulate or add to this array as you like. Just remember to return the array again!

Note:
.parentObj property is hardcoded to be a reference to the calling AbstractMenuContentObject object. Here you'll find eg. ->id to be the uid of the menu item generating a submenu and such.

Presetting element state
You can override element states like SPC, IFSUB, ACT, CUR or USR by setting the key ITEM_STATE in the page records. See cObject HMENU/special=userdefined for more information.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="maxItems" type="int">
            <description><![CDATA[The maximum items in the menu. More items will be ignored.

Takes precedence over HMENU.maxItems]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="minItems" type="int">
            <description><![CDATA[The minimum items in the menu. If the number of pages does not reach this level, a dummy-page with the title "..." and uid=[currentpage_id] is inserted.

Takes precedence over HMENU.minItems]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="sectionIndex" type="string">
            <description><![CDATA[This is a property that all menuObj's share. If it's set, then the menu will not consist of links to pages on the "next level" but rather links to the parent page to the menu, but in addition "#"-links to the cObjects rendered on the page. In other words, the menuitems will be links to the content elements (with colPos=0!) on the page. A section index.

.sectionIndex = [boolean]

If you set this, all content elements (from tt_content table) of "Column" = "Normal" and the "Index"-check box clicked are selected. This corresponds to the "Menu/Sitemap" content element when "Section index" is selected as type.

.sectionIndex.type = "all" / "header"

If you set this additional property to "all", then the "Index"-checkbox is not considered and all content elements with colPos=0 is selected.

If this property is "header" then only content elements with a visible header-layout (and a non-empty 'header'-field!) is selected. In other words, if the header layout of an element is set to "Hidden" then the page will not appear in the menu.

The data-record /Behind the scene:

When the menu-records are selected it works like this: The parent page record is used as the "base" for the menu-record. That means that any "no_cache" or "target"-properties of the parent page is used for the whole menu.

But of course some fields from the tt_content records are transferred: This is how it mapped:

$temp[$row[uid]]=$basePageRow;

$temp[$row[uid]]["title"]=$row["header"];

$temp[$row[uid]]["subtitle"]=$row["subheader"];

$temp[$row[uid]]["starttime"]=$row["starttime"];

$temp[$row[uid]]["endtime"]=$row["endtime"];

$temp[$row[uid]]["fe_group"]=$row["fe_group"];

$temp[$row[uid]]["media"]=$row["media"];

$temp[$row[uid]]["header_layout"]=$row["header_layout"];

$temp[$row[uid]]["bodytext"]=$row["bodytext"];

$temp[$row[uid]]["image"]=$row["image"];

$temp[$row[uid]]["sectionIndex_uid"]=$row["uid"];

Basically this shows that

- the field "header" and "subheader" from tt_content are mapped to "title" and "subtitle" in the pages-record. Thus you shouldn't need to change your standard menu-objects to fit this thing...

- the fields "starttime", "endtime", "fe_group", "media" from tt_content are mapped to the same fields in a pages-record.

- the fields "header_layout", "bodytext" and "image" are mapped to non-existing fields in the page-record

- a new field, "sectionIndex_uid" is introduced in the page-record. If this field is present in a page record, the linkData()-function will prepend a hash-mark and the number of the field.

NOTE:

You cannot create submenus to sectionIndex-menus. That doesn't make any sense as these elements are not pages and thereby have no "childs".
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="showAccessRestrictedPages" type="string">
            <description><![CDATA[integer (page id) / keyword "NONE"
            If set, pages in the menu will include pages with frontend user group access enabled.  However the page is of course not accessible and therefore the URL in the menu will be linked to the page with the ID of this value. On that page you could put a login form or other message.
If the value is "NONE" the link will not be changed and the site will perform page-not-found handling when clicked (which can be used to capture the event and act accordingly of course).

Properties:
.addParam = Additional parameter for the URL, which can hold two markers; ###RETURN_URL### which will be substituted with the link the page would have had if it had been accessible and ###PAGE_ID### holding the page id of the page coming from (could be used to look up which fe_groups was required for access.

Example:
showAccessRestrictedPages = 22
showAccessRestrictedPages.addParams = &return_url=###RETURN_URL###&pageId=###PAGE_ID###

The example will link access restricted menu items to page id 22 with the return URL in the GET var "return_url" and the page id in the GET var "pageId".]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="submenuObjSuffixes" type="string">
            <description><![CDATA[Defines a suffix for alternative sub-level menu objects. Useful to create special submenus depending on their parent menu element. See example below.

Example:
This example will generate a menu where the menu objects for the second level will differ depending on the number of the first level item for which the submenu is rendered. The second level objects used are "2" (the default), "2a" and "2b" (the alternatives). Which of them is used is defined by "1.submenuObjSuffixes" which has the configuration "a |*| |*| b". This configuration means that the first menu element will use configuration "2a" and the last will use "2b" while anything in between will use "2" (no suffix applied)

page.200 = HMENU
page.200 {
  1 = TMENU
  1.wrap = <div style="width:200px; border: 1px solid;">|</div>
  1.expAll = 1
  1.submenuObjSuffixes = a |*|  |*| b
  1.NO.allWrap = <b>|</b><br/>

  2 = TMENU
  2.NO.allWrap = <div style="background:red;">|</div>

  2a = TMENU
  2a.NO.allWrap = <div style="background:yellow;">|</div>

  2b = TMENU
  2b.NO.allWrap = <div style="background:green;">|</div>
}

The result can be seen in the image below (applied on the testsite package):



Applies to TMENU on >= 2nd level in a menu.]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="TMENU" extends="mObj">
        <property name="ACT" type="TMENUITEM">
            <description><![CDATA[Boolean / (config)
            Enable/Configuration for menu items which are found in the rootLine]]></description>
            <default><![CDATA[0]]></default>
        </property>
        <property name="ACTRO" type="TMENUITEM">
            <description><![CDATA[Boolean / (config)
            Enable/Configuration for menu items which are found in the rootLine]]></description>
            <default><![CDATA[0]]></default>
        </property>
        <property name="ACTIFSUB" type="TMENUITEM">
            <description><![CDATA[Boolean / (config)
            Enable/Configuration for menu items which are found in the rootLine and has subpages]]></description>
            <default><![CDATA[0]]></default>
        </property>
        <property name="ACTIFSUBRO" type="TMENUITEM">
            <description><![CDATA[Boolean / (config)
            Enable/Configuration for menu items which are found in the rootLine and has subpages]]></description>
            <default><![CDATA[0]]></default>
        </property>
        <property name="CUR" type="TMENUITEM">
            <description><![CDATA[Boolean / (config)
            Enable/Configuration for a menu item if the item is the current page.]]></description>
            <default><![CDATA[0]]></default>
        </property>
        <property name="CURRO" type="TMENUITEM">
            <description><![CDATA[Boolean / (config)
            Enable/Configuration for a menu item if the item is the current page.]]></description>
            <default><![CDATA[0]]></default>
        </property>
        <property name="CURIFSUB" type="TMENUITEM">
            <description><![CDATA[Boolean / (config)
            Enable/Configuration for a menu item if the item is the current page and has subpages.]]></description>
            <default><![CDATA[0]]></default>
        </property>
        <property name="CURIFSUBRO" type="TMENUITEM">
            <description><![CDATA[Boolean / (config)
            Enable/Configuration for a menu item if the item is the current page and has subpages.]]></description>
            <default><![CDATA[0]]></default>
        </property>
        <property name="IFSUB" type="TMENUITEM">
            <description><![CDATA[Boolean / (config)
            Enable/Configuration for menu items which has subpages]]></description>
            <default><![CDATA[0]]></default>
        </property>
        <property name="IFSUBRO" type="TMENUITEM">
            <description><![CDATA[Boolean / (config)
            Enable/Configuration for menu items which has subpages]]></description>
            <default><![CDATA[0]]></default>
        </property>
        <property name="NO" type="TMENUITEM">
            <description><![CDATA[Boolean / (config)
            The default "Normal" state rendering of Item. This is required for all menus.
If you specify properties for the "NO" property you do not have to set it "1". Otherwise with no properties setting "NO=1" will render the menu anyways (for TMENU this may make sense).

The simplest menu TYPO3 can generate is then:

page.20 = HMENU
page.20.1 = TMENU
page.20.1.NO = 1

That will be pure <a> tags wrapped around page titles.]]></description>
            <default><![CDATA[1]]></default>
        </property>
        <property name="SPC" type="TMENUITEM">
            <description><![CDATA[Boolean / (config)
            Enable/Configuration for 'Spacer' pages.
Spacers are pages of the doktype "Spacer". These are not viewable pages but "placeholders" which can be used to divide menuitems.]]></description>
            <default><![CDATA[0]]></default>
        </property>
        <property name="USERDEF1" type="TMENUITEM">
            <description><![CDATA[Boolean / (config)
            Userdefined, see .itemArrayProcFunc for details on how to use this.
You can set the ITEM_STATE values USERDEF1 and USERDEF2 (+...RO) from a script/userfunction processing the menu item array. See HMENU/special=userdefined or the property .itemArrayProcFunc of the menu objects.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="USERDEF1RO" type="TMENUITEM">
            <description><![CDATA[Boolean / (config)
            Userdefined, see .itemArrayProcFunc for details on how to use this.
You can set the ITEM_STATE values USERDEF1 and USERDEF2 (+...RO) from a script/userfunction processing the menu item array. See HMENU/special=userdefined or the property .itemArrayProcFunc of the menu objects.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="USERDEF2" type="TMENUITEM">
            <description><![CDATA[Boolean / (config)
            (See above)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="USERDEF2RO" type="TMENUITEM">
            <description><![CDATA[Boolean / (config)
            (See above)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="USR" type="TMENUITEM">
            <description><![CDATA[Boolean / (config)
            Enable/Configuration for menu items which are access restricted pages that a user has access to.]]></description>
            <default><![CDATA[0]]></default>
        </property>
        <property name="USRRO" type="TMENUITEM">
            <description><![CDATA[Boolean / (config)
            Enable/Configuration for menu items which are access restricted pages that a user has access to.]]></description>
            <default><![CDATA[0]]></default>
        </property>
        <property name="IProcFunc" type="string">
            <description><![CDATA[function-name
            The internal array "I" is passed to this function and expected returned as well. Subsequent to this function call the menu item is compiled by implode()'ing the array $I[parts] in the passed array. Thus you may modify this if you need to.
See example on the testsite and in media/scripts/example_itemArrayProcFunc.php]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="debugItemConf" type="string">
            <description><![CDATA[Outputs (by the debug()-function) the configuration arrays for each menuitem. Useful to debug optionSplit things and such...
Applies to TMENU]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="expAll" type="stdWrap">boolean/stdWrap
            <description><![CDATA[If this is true, the menu will always show the menu on the level underneath the menuitem. This corresponds to a situation where a user has clicked a menuitem and the menu folds out the next level. This can enable that to happen on all items as default.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="forceTypeValue" type="int">
            <description><![CDATA[If set, the &type parameter of the link is forced to this value regardless of target.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="JSWindow" type="boolean">
            <description><![CDATA[If set, the links of the menu-items will open by JavaScript in a pop-up window.

.newWindow boolean, that lets every menuitem open in its own window opposite to opening in the same window for each click.

.params is the list of parameters sent to the JavaScript open-window function, eg:
width=200,height=300,status=0,menubar=0
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="overrideId" type="int">
            <description><![CDATA[integer (page-id)
            If set, then all links in the menu will point to this pageid. Instead the real uid of the page is sent by the parameter "&real_uid=[uid]".
This feature is smart, if you have inserted a menu from somewhere else, perhaps a shared menu, but wants the menuitems to call the same page, which then generates a proper output based on the real_uid.
Applies to TMENU]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="stdWrap" type="stdWrap">
            <description><![CDATA[Wraps the whole item using stdWrap
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="submenuObjSuffixes" type="string">
            <description><![CDATA[Defines a suffix for alternative sub-level menu objects. Useful to create special submenus depending on their parent menu element. See example below.

Example:
This example will generate a menu where the menu objects for the second level will differ depending on the number of the first level item for which the submenu is rendered. The second level objects used are "2" (the default), "2a" and "2b" (the alternatives). Which of them is used is defined by "1.submenuObjSuffixes" which has the configuration "a |*| |*| b". This configuration means that the first menu element will use configuration "2a" and the last will use "2b" while anything in between will use "2" (no suffix applied)

page.200 = HMENU
page.200 {
  1 = TMENU
  1.wrap = <div style="width:200px; border: 1px solid;">|</div>
  1.expAll = 1
  1.submenuObjSuffixes = a |*|  |*| b
  1.NO.allWrap = <b>|</b><br/>

  2 = TMENU
  2.NO.allWrap = <div style="background:red;">|</div>

  2a = TMENU
  2a.NO.allWrap = <div style="background:yellow;">|</div>

  2b = TMENU
  2b.NO.allWrap = <div style="background:green;">|</div>
}

The result can be seen in the image below (applied on the testsite package):



Applies to TMENU on >= 2nd level in a menu.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="target" type="string">
            <description><![CDATA[target
            Target of the menulinks]]></description>
            <default><![CDATA[self]]></default>
        </property>
        <property name="wrap" type="wrap">
            <description><![CDATA[Wraps only if there were items in the menu!]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="TMENUITEM">
        <property name="ATagBeforeWrap" type="boolean">
            <description><![CDATA[
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="ATagParams" type="stdWrap">
            <description><![CDATA[<A>-params /stdWrap
            Additional parameters

Example:
class="board"]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="ATagTitle" type="stdWrap">
            <description><![CDATA[Allows you to specify the "title" attribute of the <a> tag around the menu item.

Example:
ATagTitle.field = abstract // description

This would use the abstract or description field for the <a title=""> attribute.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="RO" type="boolean">
            <description><![CDATA[if set, rollOver is enabled for this link]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="additionalParams" type="stdWrap">
            <description><![CDATA[Define parameters that are added to the end of the URL. This must be code ready to insert after the last parameter.

For details, see typolink->additionalParams]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="after" type="stdWrap">
            <description><![CDATA[HTML /stdWrap
            The series of "before..." properties are duplicated to "after..." properties as well. The only difference is that the output generated by the .after.... properties are placed after the link and not before.
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="afterImg" type="imgResource">The series of "before..." properties are duplicated to "after..." properties as well. The only difference is that the output generated by the .after.... properties are placed after the link and not before.
            <description><![CDATA[
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="afterImgLink" type="boolean">
            <description><![CDATA[If set, this image is linked with the same <A> tag as the text
            The series of "before..." properties are duplicated to "after..." properties as well. The only difference is that the output generated by the .after.... properties are placed after the link and not before.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="afterImgTagParams" type="string">
            <description><![CDATA[<img>-params
            The series of "before..." properties are duplicated to "after..." properties as well. The only difference is that the output generated by the .after.... properties are placed after the link and not before.
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="afterROImg" type="imgResource">
            <description><![CDATA[If set, ".afterImg" and ".afterROImg" is expected to create a rollOver-pair.
            The series of "before..." properties are duplicated to "after..." properties as well. The only difference is that the output generated by the .after.... properties are placed after the link and not before. ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="afterWrap" type="wrap">
            <description><![CDATA[wrap around the ".after"-code
            The series of "before..." properties are duplicated to "after..." properties as well. The only difference is that the output generated by the .after.... properties are placed after the link and not before.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="allStdWrap" type="stdWrap">
            <description><![CDATA[stdWrap of the whole item]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="allWrap" type="stdWrap">
            <description><![CDATA[wrap /stdWrap
            Wraps the whole item]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="altTarget" type="string">
            <description><![CDATA[target
            Alternative target overriding the target property of the TMENU if set.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="before" type="stdWrap">
            <description><![CDATA[HTML /stdWrap
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="beforeImg" type="imgResource">
            <description><![CDATA[
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="beforeImgLink" type="boolean">
            <description><![CDATA[If set, this image is linked with the same <A> tag as the text]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="beforeImgTagParams" type="string">
            <description><![CDATA[<img>-params
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="beforeROImg" type="imgResource">
            <description><![CDATA[If set, ".beforeImg" and ".beforeROImg" is expected to create a rollOver-pair. ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="beforeWrap" type="wrap">
            <description><![CDATA[wrap around the ".before"-code]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="doNotLinkIt" type="boolean">
            <description><![CDATA[if set, the linktext are not linked at all!]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="doNotShowLink" type="boolean">
            <description><![CDATA[if set, the text will not be shown at all (smart with spacers)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="linkWrap" type="wrap">
            <description><![CDATA[
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="stdWrap" type="stdWrap">
            <description><![CDATA[stdWrap to the link-text! ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="stdWrap2" type="stdWrap">
            <description><![CDATA[stdWrap to the total link-text and ATag.  (Notice that the plain default value passed to stdWrap function is "|".)]]></description>
            <default><![CDATA[ | ]]></default>
        </property>
        <property name="subst_elementUid" type="boolean">
            <description><![CDATA[If set, all appearances of the string '{elementUid}' in the total element html-code (after wrapped in .allWrap} is substituted with the uid number of the menu item.
This is useful if you want to insert an identification code in the HTML in order to manipulate properties with JavaScript.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="wrapItemAndSub " type="wrap">
            <description><![CDATA[Wraps the whole item and any submenu concatenated to it.]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="stringList"/>
    <type id="charRangeMap" extends="array"/>
    <type id="wrap"/>
    <type id="wrapSplitChar" extends="wrap">
        <property name="splitChar" type="string">
            <description><![CDATA[defines an alternative splitting character (default is "|" - the vertical line)]]></description>
            <default><![CDATA[|]]></default>
        </property>
    </type>
    <type id="HTMLparser">
        <property name="allowTags" type="string">
            <description><![CDATA[Default allowed tags]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="globalNesting" type="string">
            <description><![CDATA[List of tags (among the already set tags), which will be forced to have the nesting-flag set to "global"]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="htmlSpecialChars" type="int">
            <description><![CDATA[values: -1 / 0 / 1 / 2
            This regards all content which is NOT tags:
"0" means "disabled" - nothing is done
"1" means the content outside tags is htmlspecialchar()'ed (PHP-function which converts &"<> to &...;)
"2" is the same as "1" but entities like "&amp;" or "&#234" are untouched.
"-1" does the opposite of "1" - converts < to <, > to >, &quot; to " etc.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="keepNonMatchedTags" type="string">
            <description><![CDATA[If set (true=1), then all tags are kept regardless of tags present as keys in $tags-array.
If "protect", then the preserved tags have their <> converted to < and >
Default is to REMOVE all tags, which are not specifically assigned to be allowed! So you might probably want to set this value!]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="localNesting" type="string">
            <description><![CDATA[List of tags (among the already set tags), which will be forced to have the nesting-flag set to true]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="noAttrib" type="string">
            <description><![CDATA[List of tags (among the already set tags), which will be forced to have the allowedAttribs value set to zero (which means, all attributes will be removed.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="removeTags" type="string">
            <description><![CDATA[List of tags (among the already set tags), which will be configured so they are surely removed.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="rmTagIfNoAttrib" type="string">
            <description><![CDATA[List of tags (among the already set tags), which will be forced to have the rmTagIfNoAttrib set to true]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="tags.[tagname]" type="HTMLparser_tags">
            <description><![CDATA[Either set this property to 0 or 1 to allow or deny the tag. If you enter ->HTMLparser_tags properties, those will automatically overrule this option, thus it's not needed then.
[tagname] in lowercase.]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="HTMLparser_tags">
        <property name="allowedAttribs" type="string">
            <description><![CDATA['0' (zero) = no attributes allowed, '[commalist of attributes]' = only allowed attributes. If blank/not set, all attributes are allowed.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="fixAttrib" type="array">
            <description><![CDATA[fixAttrib.[attribute].always = true / false
If set, the attribute is always processed. Normally an attribute is processed only if it exists

fixAttrib.[attribute].casesensitiveComp = true / false
If set, the comparison in .removeIfEquals and .list will be case-sensitive. At this point, it's insensitive.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="fixAttrib.[attribute]" type="HTMLparser_tags_fixAttrib">
            <description><![CDATA[If no attribute exists by this name, this value is set as default value (if this value is not blank)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="nesting" type="">
            <description><![CDATA[If set true, then this tag must have starting and ending tags in the correct order. Any tags not in this order will be discarded. Thus '</B><B><I></B></I></B>' will be converted to '<B><I></B></I>'.
Is the value "global" then true nesting in relation to other tags marked for "global" nesting control is preserved. This means that if <B> and <I> are set for global nesting then this string '</B><B><I></B></I></B>' is converted to '<B></B>']]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="overrideAttribs" type="string">
            <description><![CDATA[If set, this string is preset as the attributes of the tag. ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="protect" type="boolean">
            <description><![CDATA[If set, the tag <> is converted to < and >]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="remap" type="string">
            <description><![CDATA[If set, the tagname is remapped to this tagname]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="rmTagIfNoAttrib" type="boolean">
            <description><![CDATA[If set, then the tag is removed if no attributes happened to be there.]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="HTMLparser_tags_fixAttrib">
        <property name="default" type="string">
            <description><![CDATA[If no attribute exists by this name, this value is set as default value (if this value is not blank)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="list" type="stringList">
            <description><![CDATA[Attribute value must be in this list. If not, the value is set to the first element.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="prefixRelPathWith" type="string">
            <description><![CDATA[If the value of the attribute seems to be a relative URL (no scheme like "http" and no "/" as first char) then that value of this property will be prefixed the attribute.

Example:

...fixAttrib.src.prefixRelPathWith = http://192.168.230.3/typo3/32/dummy/]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="range" type="intList">
            <description><![CDATA[Setting integer range. ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="removeIfEquals" type="string">
            <description><![CDATA[If the attribute value matches the value set here, then it is removed.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="removeIfFalse" type="stingList">
            <description><![CDATA[boolean/"blank" string
If set, then the attribute is removed if it is "false". If this value is set to "blank" then the value must be a blank string (that means a "zero" value will not be removed)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="set" type="string">
            <description><![CDATA[Force the attribute value to this value.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="trim" type="boolean">
            <description><![CDATA[If any of these keys are set, the value is passed through the respective PHP-functions.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="unset" type="boolean">
            <description><![CDATA[ If set, the attribute is unset.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="userFunc" type="string">
            <description><![CDATA[User function for processing of the attribute.

Example:

...fixAttrib.href.userFunc = tx_realurl->test_urlProc]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="IMAGE">
        <property name="altText" type="stdWrap">
            <description><![CDATA[If no alttext is specified, it will use an empty alttext

("alttext" is the old spelling of this attribute. It will be used only if "altText" does not specify a value or properties)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="emptyTitleHandling" type="string">
            <description><![CDATA[Value can be "keepEmpty" to preserve an empty title attribute, or "useAlt" to use the alt attribute instead.
]]></description>
            <default><![CDATA[useAlt
]]></default>
        </property>
        <property name="cache" type="cache">
            <description><![CDATA[
            Stores the rendered content into the caching framework and reads it from there.
            This allows you to reuse this content without prior rendering. The presence of cache.key will trigger this feature.
]]></description>
            <default><![CDATA[0]]></default>
        </property>
        <property name="file" type="imgResource">
            <description><![CDATA[
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="if" type="if">
            <description><![CDATA[if "if" returns false the image is not shown!]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="imageLinkWrap" type="imageLinkWrap">
            <description><![CDATA[boolean / imageLinkWrap

CAUTION: only active if set to 1:
imageLinkWrap = 1

Additional Note: ONLY active if linkWrap is NOT set and file is NOT GIFBUILDER (as it works with the original imagefile)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="titleText" type="stdWrap">
            <description><![CDATA[If no titletext is specified, it will use the alttext instead. If no alttext is specified, it will use an empty alttext]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="linkWrap" type="wrap">
            <description><![CDATA[(before ".wrap")]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="params" type="stdWrap">
            <description><![CDATA[
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="stdWrap" type="stdWrap">
            <description><![CDATA[
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="wrap" type="wrap">
            <description><![CDATA[
]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="IMG_RESOURCE">
        <property name="cache" type="cache">
            <description><![CDATA[
            Stores the rendered content into the caching framework and reads it from there.
            This allows you to reuse this content without prior rendering. The presence of cache.key will trigger this feature.
]]></description>
            <default><![CDATA[0]]></default>
        </property>
        <property name="file" type="imgResource">
            <description><![CDATA[ ]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="stdWrap" type="stdWrap">
            <description><![CDATA[ ]]></description>
            <default><![CDATA[]]></default>
        </property>
    </type>
    <type id="IMGTEXT" extends="cObjArray">
        <property name="1" type="IMAGE">
            <description><![CDATA[Rendering of the images
The register "IMAGE_NUM" is set with the number of image being rendered for each rendering of an image-object. Starting with zero.
The image-object should not be of type GIFBUILDER!
Important:
"file.import.current = 1" fetches the name of the images!
</description>]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="2" type="IMAGE">
            <description><![CDATA[Rendering of the images
The register "IMAGE_NUM" is set with the number of image being rendered for each rendering of an image-object. Starting with zero.
The image-object should not be of type GIFBUILDER!
Important:
"file.import.current = 1" fetches the name of the images!
</description>]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="3" type="IMAGE">
            <description><![CDATA[Rendering of the images
The register "IMAGE_NUM" is set with the number of image being rendered for each rendering of an image-object. Starting with zero.
The image-object should not be of type GIFBUILDER!
Important:
"file.import.current = 1" fetches the name of the images!
</description>]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="altText" type="stdWrap">
            <description><![CDATA[Default altText/titleText if no alternatives are provided by the ->IMAGE cObjects

If no alttext is specified, it will use an empty alttext]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="borderCol" type="stdWrap">
            <description><![CDATA[Color of the border, if ".border" is set]]></description>
            <default><![CDATA[black]]></default>
        </property>
        <property name="borderThick" type="stdWrap">
            <description><![CDATA[Width of the border around the pictures]]></description>
            <default><![CDATA[1]]></default>
        </property>
        <property name="caption" type="stdWrap">
            <description><![CDATA[Caption]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="captionSplit" type="boolean">
            <description><![CDATA[If this is set, the caption text is split by the character (or string) from ".token" , and every item is displayed under an image each in the image block.
.token = (string /stdWrap) Character to split the caption elements (default is chr(10))
.cObject = cObject, used to fetch the caption for the split
.stdWrap = stdWrap properties used to render the caption.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="colRelations" type="stdWrap">
            <description><![CDATA[This value defines the width-relations of the images in the columns of IMGTEXT. The syntax is "[int] : [int] : [int] : ..." for each column. If there are more imagecolumns than figures in this value, it's ignored. If the relation between two of these figures exceeds 10, this function is ignore.
It works only fully if all images are downscaled by their maxW-definition.

Example:
If 6 images are placed in three columns and their width's are high enough to be forcibly scaled, this value will scale the images in the to be eg. 100, 200 and 300  pixels from left to right
1 : 2 : 3]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="colSpace" type="stdWrap">
            <description><![CDATA[space between columns]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="cols" type="stdWrap ">
            <description><![CDATA[Columns]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="emptyTitleHandling" type="string">
            <description><![CDATA[Value can be "keepEmpty" to preserve an empty title attribute, or "useAlt" to use the alt attribute instead.
]]></description>
            <default><![CDATA[useAlt
]]></default>
        </property>
        <property name="equalH" type="stdWrap">
            <description><![CDATA[If this value is greater than zero, it will secure that images in a row has the same height. The width will be calculated.
If the total width of the images raise above the "maxW"-value of the table the height for each image will be scaled down equally so that the images still have the same height but is within the limits of the totalWidth.
Please note that this value will override the properties "width", "maxH", "maxW", "minW", "minH" of the IMAGE-objects generating the images. It will generate a table with no columns!]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="image_frames" type="array ">
            <description><![CDATA[Frames:
.key points to the frame used.

".image_frames.x" is imgResource-mask (".m")properties which will override to the [imgResource].m properties of the imageObjects. This is used to mask the images into a frame.

Example:
1 {
  mask = media/uploads/darkroom1_mask.jpg
  bgImg = GIFBUILDER
  bgImg {
    XY = 100,100
    backColor = {$bgCol}
  }
  bottomImg = GIFBUILDER
  bottomImg {
    XY = 100,100
    backColor = black
  }
  bottomImg_mask = media/uploads/darkroom1_bottom.jpg
}

NOTE: This cancels the jpg-quality settings sent as ordinary ".params" to the imgResource. In addition the output of this operation will always be jpg or gif!
NOTE: Works ONLY if IMAGE-obj is NOT GIFBUILDER]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="imgList" type="stdWrap">
            <description><![CDATA[list of images from ".imgPath"

Example:
This imports the list of images from tt_content's image-field
"imgList.field = image"]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="imgMax" type="stdWrap">
            <description><![CDATA[max number of images]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="imgObjNum" type="int">
            <description><![CDATA[ +optionSplit
Here you define, which IMAGE-cObjects from the array "1,2,3,4..." in this object that should render the images.
"current" is set to the image-filename.

Example:
"imgObjNum = 1 |*||*| 2":
This would render the first two images with "1. ..." and the last image with "2. ...", provided that the ".imgList" contains 3 images.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="imgPath" type="stdWrap">
            <description><![CDATA[Path to the images

Example:
"uploads/pics/"]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="imgStart" type="stdWrap">
            <description><![CDATA[start with image-number ".imgStart"]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="maxW" type="stdWrap">
            <description><![CDATA[max width of the image-table.
This will scale images not in the right size! Takes the number of columns into account!

NOTE: Works ONLY if IMAGE-obj is NOT GIFBUILDER]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="maxWInText" type="stdWrap">
            <description><![CDATA[max width of the image-table, if the text is wrapped around the image-table (on the left or right side).
This will scale images not in the right size! Takes the number of columns into account!

NOTE: Works ONLY if IMAGE-obj is NOT GIFBUILDER]]></description>
            <default><![CDATA[50% of maxW]]></default>
        </property>
        <property name="rowSpace" type="stdWrap">
            <description><![CDATA[space between rows]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="rows" type="stdWrap">
            <description><![CDATA[Rows (higher priority than "cols")]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="spaceBelowAbove" type="stdWrap">
            <description><![CDATA[Pixel space between content and images when position of image is above or below text (but not in text)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="stdWrap" type="stdWrap">
            <description><![CDATA[
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="tableStdWrap" type="stdWrap">
            <description><![CDATA[This passes the final <table> code for the image block to the stdWrap function.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="text" type="stdWrap">
            <description><![CDATA[Use this to import / generate the content, that should flow around the imageblock.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="textMargin" type="stdWrap">
            <description><![CDATA[margin between the image and the content]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="textMargin_outOfText" type="boolean">
            <description><![CDATA[If set, the textMargin space will still be inserted even if the image is placed above or below the text.
This flag is only for a kind of backwards compatibility because this "feature" was recently considered a bug and thus corrected. So if anyone has depended on this way things are done, you can compensate with this flag.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="textPos" type="stdWrap">
            <description><![CDATA[Textposition:
bit[0-2]: 000 = centre, 001 = right, 010 = left
bit[3-5]: 000 = over, 001 = under, 010 text

0 - Above: Centre
1 - Above: Right
2 - Above: Left
8 - Below: Centre
9 - Below: Right
10 - Below: Left
17 - In Text: Right
18 - In Text: Left
25 - In Text: Right (no wrap)
26 - In Text: Left (no wrap)]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="LOAD_REGISTER" extends="array">
        <property name="[myRegisterVar1]" type="stdWrap">
            <description><![CDATA[Example:
(This sets "contentWidth", "label" and "head")

page.27 = LOAD_REGISTER
page.27 {
  contentWidth = 500

  label.field = header

  head = some text
  head.wrap = <B> | </B>
}]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="[myRegisterVar2]" type="stdWrap">
            <default><![CDATA[
]]></default>
        </property>
        <property name="[myRegisterVar3]" type="stdWrap">
            <default><![CDATA[
]]></default>
        </property>
        <property name="cache" type="cache">
            <description><![CDATA[
            Stores the rendered content into the caching framework and reads it from there.
            This allows you to reuse this content without prior rendering. The presence of cache.key will trigger this feature.
]]></description>
            <default><![CDATA[0]]></default>
        </property>
    </type>
    <type id="META" extends="array">
        <property name="REFRESH" type="stdWrap">
            <description><![CDATA[Meta tag
If value is empty (after trimming) the meta tag is not generated.
[seconds]; [url, leave blank for same page]
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="DESCRIPTION" type="stdWrap">
            <description><![CDATA[Meta tag
If value is empty (after trimming) the meta tag is not generated.
If the "key" (eg. "REFRESH" or "DESCRIPTION") is "REFRESH" (caseinsensitive), then the "http-equiv"-attribute is used in the meta tag instead of "name".

Examples:
.REFRESH =  [seconds]; [url, leave blank for same page]
.DESCRIPTION = This is the description of the content in this document
.KEYWORDS = This is the keywords...]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="KEYWORDS" type="stdWrap">
            <description><![CDATA[Meta tag
If value is empty (after trimming) the meta tag is not generated.
Examples:
.KEYWORDS = This, is, the, list, of, keywords]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="[myMetaTag]" type="stdWrap">
            <description><![CDATA[Meta tag
If value is empty (after trimming) the meta tag is not generated.
Of course you can specify your own meta tags too...]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="MULTIMEDIA">
        <property name="file" type="stdWrap">
            <description><![CDATA[The multimedia file. Types are:
txt, html, htm:Inserted directly
class:Java-applet
swf:Flash animation
swa, dcr:ShockWave Animation
wav,au,ogg,opus,flac:Sound
avi,mov,asf,mpg,wmv:Movies (AVI, QuickTime, MPEG4)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="params" type="stdWrap">
            <description><![CDATA[This is parameters for the multimedia-objects. Use this to enter stuff like with and height:

Example:
width=200
height=300

... will generate a tag like '<embed .... width="200" height="300">'
height=

An empty string will remove the parameter from the embed-tag]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="stdWrap" type="stdWrap">
            <description><![CDATA[
]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="RECORDS">
        <property name="cache" type="cache">
            <description><![CDATA[
            Stores the rendered content into the caching framework and reads it from there.
            This allows you to reuse this content without prior rendering. The presence of cache.key will trigger this feature.
]]></description>
            <default><![CDATA[0]]></default>
        </property>
        <property name="conf" type="array">
            <description><![CDATA[Config-array which renders records from table tablename]]></description>
            <default><![CDATA[If this is NOT defined, the rendering of the records is done with the toplevel-object [tablename] - just like the cObject, CONTENT!]]></default>
        </property>
        <property name="dontCheckPid" type="boolean">
            <description><![CDATA[Normally a record cannot be selected, if it's parent page (pid) is not accessible for the website user. This option disables that check.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="source" type="stdWrap">
            <description><![CDATA[List of record-id's, optionally with appended table-names.

Example:
tt_content_34, 45, tt_links_56]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="tables" type="stringList">
            <description><![CDATA[List of accepted tables. If any items in the ".source"-list is not prepended with a tablename, the first table in this list is assumed to be the table for such records.
Also tablenames configured in .conf is allowed.

Example:
tables = tt_content, tt_address, tt_links
conf.tx_myexttable = TEXT
conf.tx_myexttable.value = Hello world

This adds the tables tt_content, tt_address, tt_links, tx_myexttable]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="wrap" type="wrap">
            <description><![CDATA[
]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="SEARCHRESULT">
        <property name="addExtUrlsAndShortCuts" type="boolean">
            <description><![CDATA[If set, then the doktypes 3 (Link) and 4 (Shortcut) are added to the doktypes being searched.
However at this point in time, no pages will be select if they do not have at least one tt_content record on them! That is because the pages and tt_content (or other) table is joined. So there must at least one occurrence of a tt_content element on an Link / Shortcut page for them to show up.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="allowedCols" type="string">
            <description><![CDATA[List (separated by ":") of allowed table-cols.

Example:
pages.title:tt_content.bodytext]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="languageField.[2nd table]" type="string">
            <description><![CDATA[Setting a field name to filter language on. This works like the "languageField" setting in ->select

Example:

languageField.tt_content = sys_language_uid]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="layout" type="string">
            <description><![CDATA[This defines how the search content is shown.

Example:
This substitutes the following fields:
###RANGELOW###:The low result range, eg. "1"
###RANGEHIGH###:The high result range, eg. "10"
###TOTAL###:The total results
###RESULT###:The result itself
###NEXT###:The next-button
###PREV###:The prev-button]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="next" type="cObj">
            <description><![CDATA[This cObject will be wrapped by a link to the next searchresult. This is the code substituting the "###NEXT###"-mark]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="noOrderBy" type="boolean">
            <description><![CDATA[If this is set, the result is NOT sorted after lastUpdated, tstamp for the pages-table.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="noResultObj" type="cObj">
            <description><![CDATA[the cObject used if the search results in no rows.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="prev" type="cObj">
            <description><![CDATA[This cObject will be wrapped by a link to the prev searchresult. This is the code substituting the "###PREV###"-mark]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="range" type="int">
            <description><![CDATA[The number of results at a time!]]></description>
            <default><![CDATA[20]]></default>
        </property>
        <property name="renderObj" type="cObj">
            <description><![CDATA[the cObject to render the searchresults
$cObj->data array is set to the resulting record from the search.
Please note, that in all fields are named [tablename]_[fieldname]. Thus the page title is in the field "pages_title".
Apart from this, these fields from the pages-table are also present:
uid]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="renderWrap" type="wrap">
            <description><![CDATA[
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="resultObj" type="cObj">
            <description><![CDATA[the cObject prepended in the search results returns rows]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="stdWrap" type="stdWrap">
            <description><![CDATA[Wrap the whole content...]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="target" type="target">
            <description><![CDATA[target til next/prev links!]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="wrap" type="wrap">
            <description><![CDATA[Wrap the whole content...]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="TEXT" extends="stdWrap">
        <property name="cache" type="cache">
            <description><![CDATA[
            Stores the rendered content into the caching framework and reads it from there.
            This allows you to reuse this content without prior rendering. The presence of cache.key will trigger this feature.
]]></description>
            <default><![CDATA[0]]></default>
        </property>
        <property name="value" type="stdWrap">
            <description><![CDATA[text, wrap with stdWrap properties]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="USER">
        <property name="cache" type="cache">
            <description><![CDATA[
            Stores the rendered content into the caching framework and reads it from there.
            This allows you to reuse this content without prior rendering. The presence of cache.key will trigger this feature.
]]></description>
            <default><![CDATA[0]]></default>
        </property>
        <property name="userFunc" type="string">
            <description><![CDATA[The name of the function. If you specify the name with a '->' in, it's interpreted as a call to a method in a class.
Two parameters are sent: A content variable (which is empty in this case, but not when used from stdWrap function .postUserFunc and .preUserFunc) and the second parameter is an array with the properties of this cObject if any.

Example:
This TypoScript will display all content element headers of a page in reversed order. Please take a look in media/scripts/example_callfunction.php!!
(Also demonstrated on the testsite, page

page = PAGE
page.typeNum=0

page.30 = USER
page.30 {
  userFunc = user_various->listContentRecordsOnPage
  reverseOrder = 1
}]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="USER_INT">
        <property name="cache" type="cache">
            <description><![CDATA[
            Stores the rendered content into the caching framework and reads it from there.
            This allows you to reuse this content without prior rendering. The presence of cache.key will trigger this feature.
]]></description>
            <default><![CDATA[0]]></default>
        </property>
        <property name="userFunc" type="string">
            <description><![CDATA[The name of the function. If you specify the name with a '->' in, it's interpreted as a call to a method in a class.
Two parameters are sent: A content variable (which is empty in this case, but not when used from stdWrap function .postUserFunc and .preUserFunc) and the second parameter is an array with the properties of this cObject if any.

Example:
This TypoScript will display all content element headers of a page in reversed order. Please take a look in media/scripts/example_callfunction.php!!
(Also demonstrated on the testsite, page

page = PAGE
page.typeNum=0

page.30 = USER
page.30 {
  userFunc = user_various->listContentRecordsOnPage
  reverseOrder = 1
}]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="TLO">
        <property name="config" type="CONFIG">
            <description><![CDATA[Global configuration.
These values are stored with cached pages which means they are also accessible when retrieving a cached page.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="constants" type="CONSTANTS">
            <description><![CDATA[Site-specific constants, eg. a general email-adresse. These constants may be substituted in the text throughout the pages. The substitution is done by parseFunc. (Option: constants=1)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="resources" type="array">
            <description><![CDATA[Resources in list (internal)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="types" type="array">
            <description><![CDATA[Types (internal)
type=99 reserved for plaintext display ]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="PAGE" extends="cObjArray">
        <property name="10" type="cObj">
            <description><![CDATA[the object which should be rendered in the page. You have to set this to a contenttype (IMAGE, TEXT, HTML...)
You can specify as much elements in this array as you want.

Example:

page.10 = TEXT
page.10.value = Here goes the header
page.20 = TEXT
page.20.value = Hello World!
page.30 = TEXT
page.30.value = Here goes the footer]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="20" type="cObj">
            <description><![CDATA[the object which should be rendered in the page. You have to set this to a contenttype (IMAGE, TEXT, HTML...)
You can specify as much elements in this array as you want.

Example:

page.10 = TEXT
page.10.value = Here goes the header
page.20 = TEXT
page.20.value = Hello World!
page.30 = TEXT
page.30.value = Here goes the footer]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="30" type="cObj">
            <description><![CDATA[the object which should be rendered in the page. You have to set this to a contenttype (IMAGE, TEXT, HTML...)
You can specify as much elements in this array as you want.

Example:

page.10 = TEXT
page.10.value = Here goes the header
page.20 = TEXT
page.20.value = Hello World!
page.30 = TEXT
page.30.value = Here goes the footer]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="bgImg" type="imgResource">
            <description><![CDATA[Background image on the page. This is automatically added to the body-tag.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="bodyTag" type="string">
            <description><![CDATA[Bodytag on the page

Example:
page.bodyTag = <body bgcolor="{$bgCol}">]]></description>
            <default><![CDATA[<body bgcolor="#FFFFFF">]]></default>
        </property>
        <property name="bodyTagAdd" type="string">
            <description><![CDATA[This content is added to the end of the bodyTag.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="bodyTagCObject" type="cObj">
            <description><![CDATA[This is default bodytag overridden by ".bodyTag" if that is set.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="cssInline" type="CARRAY">
            <description><![CDATA[Use cObjects for creating inline CSS

Example:

cssInline {
    10 = TEXT
    10.value = h1 {margin:15px;}

    20 = TEXT
    20.value = h1 span {color: blue;}
}
            ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="config" type="CONFIG">
            <description><![CDATA[configuration for the page. Any entries override the same entries in the toplevel-object "config".]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="disableBodyTag" type="boolean">
            <description><![CDATA[This option disables <body> tag generation by the TYPO3 core. It is useful for extensions like TemplaVoila, which can produce its own <body> tag with additional attributes.]]></description>
            <default><![CDATA[0]]></default>
        </property>
        <property name="footerData" type="CARRAY">
            <description><![CDATA[Same as headerData above, except that this block gets included at the bottom of the page (just before the closing body tag).
            ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="headTag" type="string">
            <description><![CDATA[Head-tag if alternatives are wanted]]></description>
            <default><![CDATA[<head>]]></default>
        </property>
        <property name="headerData" type="cObjArray">
            <description><![CDATA[Inserts content in the header-section. Could be JavaScripts, meta-tags, other stylesheet references.
Is inserted after all the style-definitions.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="includeCSS" type="array">
            <description><![CDATA[Inserts a stylesheet (just like the .stylesheet property) by allows to setting up more than a single stylesheet, because you can enter files in an array.

The file definition must be a valid "resource" datatype, otherwise nothing is inserted.

Each file has optional properties:

.media - setting the media attribute of the <style> tag.

.title - setting the title of the <style> tag.

.alternate - If set (boolean) then the rel-attribute will be "alternate stylesheet"

.import - If set (boolean) then the @import way of including a stylesheet is used instead of <link>

.allWrap - wraps the complete tag, useful for conditional comments.

.external - If set, there is no file existence check. Useful for inclusion of external files.

.inline - Inline the contents of the CSS file using a <style> tag.

Example:

includeCSS {
  file1 = fileadmin/mystylesheet1.css

  file2 = stylesheet_uploaded_to_template*.css
  file2.title = High contrast
  file2.media = print

  ie6Style = fileadmin/css/style3.css
  ie6Style.allWrap = <!--[if lte IE 7]>|<![endif]-->

  bootstrap = https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css
  bootstrap.external = 1
}
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="includeJS" type="array">
            <description><![CDATA[Inserts one or more (Java)Scripts in <script> tags.

The file definition must be a valid "resource" datatype, otherwise nothing is inserted. This means that remote files cannot be referenced (i.e. using "http://..."), except by using the ".external" property.

Each file has optional properties:

.type - setting the MIME type of the script (default: empty, set it to "text/javascript" for backwards-compatibility)

.forceOnTop - boolean flag. If set, this file will be added on top of all other files.

.allWrap - wraps the complete tag, useful for conditional comments.

.external - If set, there is no file existence check. Useful for inclusion of external files.

Example:

includeJS {
  file1 = fileadmin/helloworld.js
  file1.type = application/x-javascript
  file2 = javascript_uploaded_to_template*.js
}]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="includeJSLibs" type="array">
            <description><![CDATA[Adds JS library files to head of page.

The file definition must be a valid "resource" datatype, otherwise nothing is inserted. This means that remote files cannot be referenced (i.e. using "http://..."), except by using the ".external" property.

Each file has optional properties:

.allWrap - wraps the complete tag, useful for conditional comments.

.external - If set, there is no file existence check. Useful for inclusion of external files.

Example:

includeJSLibs.twitter = https://twitter.com/javascripts/blogger.js

includeJSLibs.twitter.external = 1
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="includeJSFooter" type="array">
            <description><![CDATA[resource
            Same as includeJS above, except that this block gets included at the bottom of the page (just before the closing body tag).
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="includeJSFooterlibs" type="array">
            <description><![CDATA[	Same as includeJSLibs above, except that this block gets included at the bottom of the page (just before the closing body tag).
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="inlineSettings" type="array">
            <description><![CDATA[array of strings
Adds settings to the page.

Example:

page.inlineSettings {
   setting1 = Hello
   setting2 = GoOnTop
}

will produce following source:

TYPO3.settings = {"TS":{"setting1":"Hello","setting2":"GoOnTop"}};
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="jsInline" type="CARRAY">
            <description><![CDATA[Use cObjects for creating inline JavaScript

Example:

page.jsInline {
10 = TEXT
10.dataWrap = var pageId = {TSFE:id};
}

Note:

with config.removeDefaultJS = external, the inlineJS is moved to external file.
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="jsFooterInline" type="CARRAY">
            <description><![CDATA[Same jsInline above, except that the JavaScript gets inserted at the bottom of the page (just before the closing body tag).
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="meta" type="META">
            <description><![CDATA[
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="shortcutIcon" type="string">
            <description><![CDATA[Favicon of the page. Create a reference to an icon here!
Browsers that support favicons display them in the browser's address bar, next to the site's name in lists of bookmarks, and next to the page's title in a Tabbed Document Interface.

Note:
This must be a valid ".ico"-file (iconfile)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="stdWrap" type="stdWrap">
            <description><![CDATA[Wraps the content of the cObject array with stdWrap options]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="typeNum" type="int">
            <description><![CDATA[This decides the typeId of the page. The value defaults to 0 for the first
found PAGE object, but it MUST be set and be unique as soon you use more than one such object (watch this if you use frames on your page)!]]></description>
            <default><![CDATA[0]]></default>
        </property>
        <property name="wrap" type="wrap">
            <description><![CDATA[Wraps the content of the cObject array]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="CONSTANTS">
        <property name="[myConstant]" type="string">
            <description><![CDATA[Constants.

Examples:
.EMAIL =  email@email.com
Now if parseFunc anywhere is configured with constants=1 then all cases of the string ###EMAIL### will be substituted in the text.
see ->parseFunc]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="encapsLines">
        <property name="addAttributes" type="array">
            <description><![CDATA[Attributes to set in the encapsulation tag.

Example:
addAttributes.P {
  style=padding-bottom:0px; margin-top:1px; margin-bottom:1px;
  align=center
}

([tagname] is in uppercase.)

.setOnly =
exists : This will set the value ONLY if the property does not already exist
blank : This will set the value ONLY if the property does not already exist OR is blank ("")

Default is to always override/set the attributes value.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="defaultAlign" type="stdWrap">
            <description><![CDATA[If set, this value is set as the default "align" value of the wrapping tags, both from .encapsTagList, .bypassEncapsTagList and .nonWrappedTag]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="encapsLinesStdWrap.[tagname]" type="stdWrap">
            <description><![CDATA[Wraps the content inside all encapsulated lines.
([tagname] is in uppercase.)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="encapsTagList" type="stringList">
            <description><![CDATA[List of tags which qualify as encapsulating tags. Must be lowercase.

Example:
encapsTagList = div, p

This setting will recognize the red line below as encapsulated lines:

First line of text
Some <div>text</div>
<p>Some text</p>
<div>Some text</div>
<B>Some text</B>]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="innerStdWrap_all" type="stdWrap">
            <description><![CDATA[Wraps the content inside all lines, whether they are encapsulated or not.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="nonWrappedTag" type="string">
            <description><![CDATA[For all non-wrapped lines, you can set here which tag it should be wrapped in. Example would be "P". This is an alternative to .wrapNonWrappedLines and has the advantage that it's attributes are set by .addAttributes as well as defaultAlign. Thus you can easier match the wrapping tags used for nonwrapped and wrapped lines.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="remapTag.[tagname]" type="string">
            <description><![CDATA[Enter a new tag name here if you wish the tagname of any encapsulation to be unified to a single tag name.

For instance, setting this value to "remapTags.P=DIV" would convert:

<p>Some text</p>
<div>Some text</div>

to

<div>Some text</div>
<div>Some text</div>

([tagname] is in uppercase.)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="removeWrapping" type="boolean">
            <description><![CDATA[If set, then all existing wrapping will be removed.

This:

First line of text
Some <div>text</div>
<p>Some text</p>
<div>Some text</div>
<B>Some text</B>

becomes this:

First line of text
Some <div>text</div>
Some text
Some text
<B>Some text</B>]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="wrapNonWrappedLines" type="wrap">
            <description><![CDATA[Wrapping for non-encapsulated lines

Example:
.wrapNonWrappedLines = <P>|</P>

This:

First line of text
<p>Some text</p>

becomes this:

<P>First line of text</P>
<p>Some text</p>]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="filelink">
        <property name="ATagBeforeWrap" type="boolean">
            <description><![CDATA[If set, the link is first wrapped with ".wrap" and then the <A>-tag.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="ATagParams" type="stdWrap">
            <description><![CDATA[Additional parameters

Example:
class="board"]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="altText" type="stdWrap">
            <description><![CDATA[For icons (image made with "iconCObject" must have their own properties)

If no alttext is specified, it will use an empty alttext]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="emptyTitleHandling" type="string">
            <description><![CDATA[Value can be "keepEmpty" to preserve an empty title attribute, or "useAlt" to use the alt attribute instead.
]]></description>
            <default><![CDATA[useAlt
]]></default>
        </property>
        <property name="file" type="stdWrap">
            <description><![CDATA[stdWrap of the label (by default the label is the filename) after having been wrapped with A-tag!]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="icon" type="stdWrap">
            <description><![CDATA[Set if icon should be shown]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="iconCObject" type="cObj">
            <description><![CDATA[Enter a cObject to use alternatively for the icons, eg. IMAGE type.
If this is set, it'll substitute the use of the thumbs-script for display of thumbnails.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="icon_image_ext_list" type="stringList">
            <description><![CDATA[These are the extensions that should render as thumbnails instead of icons.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="icon_link" type="boolean">
            <description><![CDATA[If the icon should be linked also]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="labelStdWrap" type="stdWrap">
            <description><![CDATA[stdWrap options for the label (by default the label is the filename) before being wrapped with the A-tags.
Use this to eg. import another label from a database field or such.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="path" type="stdWrap">
            <description><![CDATA[Example:
"uploads/media/"]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="removePrependedNumbers" type="boolean">
            <description><![CDATA[if set, any 2-digit prepended numbers ("eg _23") in the filename is removed.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="size" type="stdWrap">
            <description><![CDATA[Set if size should be shown]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="stdWrap" type="stdWrap">
            <description><![CDATA[
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="target" type="string">
            <description><![CDATA[_self / _top / _blank / ...
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="wrap" type="wrap">
            <description><![CDATA[Wraps the links.]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="if">
        <property name="directReturn" type="boolean">
            <description><![CDATA[If this property exists the true/false of this value is returned. Could be used to set true/false by TypoScript constant]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="equals" type="stdWrap">
            <description><![CDATA[returns false if content does not equal ".value"]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="isFalse" type="stdWrap">
            <description><![CDATA[If the content is "false"... (empty or zero)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="isGreaterThan" type="stdWrap">
            <description><![CDATA[returns false if content is not greater than ".value"]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="isInList" type="stdWrap">
            <description><![CDATA[returns false if content is not in the comma-separated list ".value".
The list in ".value" may not have spaces between elements!!]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="contains" type="stdWrap">
            <description><![CDATA[returns true if content string is in the haystack of ".value".]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="startsWith" type="stdWrap">
            <description><![CDATA[returns true if content string is the start of ".value".]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="endsWith" type="stdWrap">
            <description><![CDATA[returns true if content string is the end of ".value".]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="isLessThan" type="stdWrap">
            <description><![CDATA[returns false if content is not less than ".value"]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="isPositive" type="stdWrap">
            <description><![CDATA[returns false if content is not positive]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="isTrue" type="stdWrap">
            <description><![CDATA[If the content is "true".... (not empty string and not zero)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="negate" type="boolean">
            <description><![CDATA[This negates the result just before it exits. So if anything above returns true the overall returns ends up returning false!!]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="value" type="stdWrap">
            <description><![CDATA["value" (the comparison value mentioned above)]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="imageLinkWrap">
        <property name="JSwindow" type="stdWrap">
            <description><![CDATA[boolean/stdWrap
            The image will be opened in a new window which is fitted to the dimensions of the image!]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="JSwindow.altUrl" type="stdWrap">
            <description><![CDATA[If this returns anything, the URL shown in the JS-window is NOT showpic.php but the url given here!]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="JSwindow.altUrl_noDefaultParams" type="boolean">
            <description><![CDATA[If this is set, the image parameters are not appended to the altUrl
automatically. This is useful if you want to create them with a userfunction
instead.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="JSwindow.expand" type="intList">
            <description><![CDATA[x and y is added to the window dimensions.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="JSwindow.newWindow" type="boolean">
            <description><![CDATA[Each picture will open in a new window!]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="bodyTag" type="string">
            <description><![CDATA[Body tag of the new window]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="directImageLink" type="boolean">
            <description><![CDATA[If true, a link to the generated image file will be returned directly (showpic.php is not used)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="linkParams" type="typolink">
            <description><![CDATA[Allows the manipulation of the generated typolink if JSwindow is not used.

            Example:
            linkParams.ATagParams.dataWrap =  class="{$styles.content.imgtext.linkWrap.lightboxCssClass}" rel="{$styles.content.imgtext.linkWrap.lightboxRelAttribute}"
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="effects" type="string">
            <description><![CDATA[Example:
gamma=1,3 | sharpen=80 | solarize=70]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="enable" type="stdWrap">
            <description><![CDATA[The image is linked ONLY if this is true!!]]></description>
            <default><![CDATA[0]]></default>
        </property>
        <property name="file" type="stdWrap">
            <description><![CDATA[Override the path of the image which is displayed]]></description>
            <default><![CDATA[
            ]]></default>
        </property>
        <property name="height" type="int">
            <description><![CDATA[Range:  1-1000
If you add "m" to either the width or height, the image will be held in proportions and width/height works as max-dimensions]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="sample" type="boolean">
            <description><![CDATA[If set, -sample is used to scale images instead of -geometry. Sample does not use antialiasing and is therefore much faster.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="stdWrap" type="stdWrap">
            <description><![CDATA[->stdWrap
            Enable stdWrap for the image.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="target" type="string">
            <description><![CDATA[NOTE: Only if ".JSwindow" is set]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="title" type="string">
            <description><![CDATA[page title of the new window (HTML)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="typolink" type="typolink">
            <description><![CDATA[NOTE: This overrides the imageLinkWrap if it returns anything!!]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="width" type="int">
            <description><![CDATA[Range: 1-1000
If you add "m" to either the width or height, the image will be held in proportions and width/height works as max-dimensions]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="wrap" type="wrap">
            <description><![CDATA[Wrap of the image, which is output between the body-tags]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="imgResource">
        <property name="ext" type="stdWrap">
            <description><![CDATA[
]]></description>
            <default><![CDATA[web]]></default>
        </property>
        <property name="frame" type="int">
            <description><![CDATA[Chooses which frame in an gif-animation or pdf-file.
"" = first frame (zero)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="height" type="stdWrap">
            <description><![CDATA[see ".width"]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="import" type="stdWrap">
            <description><![CDATA[value should be set to the path of the file
with stdWrap you get the filename from the data-array

Example:
This returns the first image in the field "image" from the data-array:
.import = uploads/pics/
.import.field = image
.import.listNum = 0]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="m" type="mask">
            <description><![CDATA[NOTE: Mask for the image.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="maxH" type="stdWrap">
            <description><![CDATA[Max height]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="maxW" type="stdWrap">
            <description><![CDATA[Max width]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="minH" type="int">
            <description><![CDATA[Min height (overrules maxW/maxH)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="minW" type="int">
            <description><![CDATA[Min width (overrules maxW/maxH)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="params" type="string">
            <description><![CDATA[ImageMagick command-line:
fx. "-rotate 90" or "-negate"]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="sample" type="boolean">
            <description><![CDATA[If set, -sample is used to scale images instead of -geometry. Sample does not use antialiasing and is therefore much faster.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="stripProfile" type="boolean">
            <description><![CDATA[If set, IM-command will use a stripProfile-command which shrinks the generated thumbnails. See Install Tool for options and details.

If processor_stripColorProfileByDefault is set in the install tool, you can deactivate it by setting stripProfile=0.

Example:

10 = IMAGE
10.file = fileadmin/images/image1.jpg
10.file.stripProfile = 1
            ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="width" type="stdWrap">
            <description><![CDATA[If both the width and the height are set and one of the numbers is appended by an "m", the proportions will be preserved and thus width/height are treated as maximum dimensions for the image. The image will be scaled to fit into width/height rectangle.

If both the width and the height are set and at least one of the numbers is appended by a "c", cropscaling will be enabled. This means that the proportions will be preserved and the image will be scaled to fit around a rectangle with width/height dimensions. Then, a centered portion from inside of the image (size defined by width/height) will be cut out.
The "c" can have a percentage value (-100 ... +100) after it, which defines how much the cropping will be moved off the center to the border.

Notice that you can only use "m" or "c" at the same time!

Examples:
This crops 120x80px from the center of the scaled image:
.width = 120c.height = 80c

This crops 100x100px; from landscape-images at the left and portrait-images centered:
.width = 100c-100.height = 100c

This crops 100x100px; from landscape-images a bit right of the center and portrait-images a bit upper than centered:
.width = 100c+30
.height = 100c-25]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="noScale" type="boolean">
            <description><![CDATA[If set, image will never be scaled. Only width and height are calculated according to the other properties, so that image is _displayed_ resized, but original files is used. Example:

 file = test.jpg // has 1600 x 1200 pixels)
 file.width = 240m
 file.height = 240m
 file.noScale = 1

results in

 <img src="test.jpg" width="240" height="180" />
 // note src="test.jpg" is the _original_ file.

Usage:

 For creating PDFs or printing of pages the original file could provide much better quality as a rescaled one
            ]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="mask">
        <property name="bgImg" type="imgResource">
            <description><![CDATA[NOTE: Both "m.mask" and "m.bgImg" must be valid images.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="bottomImg" type="imgResource">
            <description><![CDATA[An image masked by "m.bottomImg_mask" onto "m.bgImg" before the imgResources is masked by "m.mask".
Both "m.bottomImg" and "m.bottomImg_mask" is scaled to fit the size of the imgResource image!
This is most often used to create an underlay for the imgResource.
NOTE: Both "m.bottomImg" and "m.bottomImg_mask" must be valid images.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="bottomImg_mask" type="imgResource">
            <description><![CDATA[(optional)
NOTE: Both "m.bottomImg" and "m.bottomImg_mask" must be valid images.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="mask" type="imgResource">
            <description><![CDATA[The mask by which the image is masked onto "m.bgImg". Both "m.mask" and "m.bgImg" is scaled to fit the size of the imgResource image!
NOTE: Both "m.mask" and "m.bgImg" must be valid images.]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="makelinks">
        <property name="http" type="makelinksHttp">
            <description><![CDATA[]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="mailto" type="makelinksMailto">
            <description><![CDATA[]]></description>
            <default><![CDATA[]]></default>
        </property>
    </type>
    <type id="makelinksHttp">
        <property name="ATagBeforeWrap" type="boolean">
            <description><![CDATA[If set, the link is first wrapped with http.wrap and then the <A>-tag.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="ATagParams" type="stdWrap">
            <description><![CDATA[Additional parameters

Example:
class="board"]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="extTarget" type="string">
            <description><![CDATA[The target of the link]]></description>
            <default><![CDATA[_top]]></default>
        </property>
        <property name="keep" type="stringList">
            <description><![CDATA[list: "scheme","path","query"
As default the link-text will be the full domain-name of the link.

Examples:
http://www.webaddress.rld/test/doc.php?id=3
"": www.webaddress.rld
"scheme": http://www.webaddress.rld
"scheme,path": http://www.webaddress.rld/test/doc.php
"scheme,path,query": http://www.webaddress.rld/test/doc.php?id=3]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="wrap" type="wrap">
            <description><![CDATA[wrap around the link]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="makelinksMailto">
        <property name="ATagBeforeWrap" type="boolean">
            <description><![CDATA[If set, the link is first wrapped with mailto.wrap and then the <A>-tag.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="ATagParams" type="stdWrap">
            <description><![CDATA[Additional parameters

Example:
class="board"]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="wrap" type="wrap">
            <description><![CDATA[wrap around the link]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="numRows">
        <property name="select" type="select">
            <description><![CDATA[Select query for the operation.

The property "selectFields" is overridden internally with "count(*)".]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="table" type="string">
            <description><![CDATA[The name of the database table
]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="numberFormat">
        <property name="decimals" type="stdWrap">
            <description><![CDATA[integer / stdWrap
Number of decimals the formatted number will have. Defaults to 0, so that your input will be rounded off in that case.
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="dec_point" type="stdWrap">
            <description><![CDATA[string / stdWrap
Character that divides the decimals from the rest. Defaults to "."
]]></description>
            <default><![CDATA[.]]></default>
        </property>
        <property name="thousands_sep" type="stdWrap">
            <description><![CDATA[string / stdWrap
Character that divides the thousands of the number. Defaults to ",", set an empty value to have no thousands separator.
]]></description>
            <default><![CDATA[,]]></default>
        </property>
    </type>
    <type id="parseFunc">
        <property name="allowTags" type="stringList">
            <description><![CDATA[List of tags, which are allowed to exist in code!
Highest priority: If a tag is found in allowTags, denyTags is ignored!!]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="constants" type="boolean">
            <description><![CDATA[The toplevel-defined constants will be substituted in the text. The constant-name is wrapped in "###".

Example:
constants.EMAIL =  email@email.com
(NOTE: This is toplevel TypoScript!)
All cases of the string ###EMAIL### will be substituted in the text. The constants are defined as a toplevel object. ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="denyTags" type="stringList">
            <description><![CDATA[List of tags, which may NOT exist in code! (use "*" for all.)
Lowest priority: If a tag is NOT found in allowTags, denyTags is checked. If denyTags is not "*" and the tag is not found in the list, the tag may exist!

Example:
This allows <B>, <I>, <A> and <IMG> -tags to exist
.allowTags = b,i,a,img
.denyTags = *]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="externalBlocks " type="stringList">
            <description><![CDATA[This allows you to pre-split the content passed to parseFunc so that only content outside the blocks with the given tags is parsed.
Extra properties:
.[tagname] {
  callRecursive = [boolean]; If set, the content of the block is directed into parseFunc again. Otherwise the content is just passed through with no other processing than stdWrap (see below)
  callRecursive.dontWrapSelf = [boolean]; If set, the tags of the block is not wrapped around the content returned from parseFunc.
  callRecursive.alternativeWrap = Alternative wrapping instead of the original tags.
  callRecursive.tagStdWrap = ->stdWrap processing of the block-tags.
  stdWrap = ->stdWrap processing of the whole block (regardless of whether callRecursive was set.)
  stripNLprev = [boolean]; Strips off last linebreak of the previous outside block
  stripNLnext = [boolean]; Strips off first linebreak of the next outside block
  stripNL = [boolean]: Does both of the above.

   HTMLtableCells = [boolean]; If set, then the content is expected to be a table and every table-cell is traversed.
   # Below, default is all cells and 1,2,3... overrides for specific cols.
   HTMLtableCells.[default/1/2/3/...] {
     callRecursive = [boolean]; The content is parsed through current parseFunc
      stdWrap = ->stdWrap processing of the content in the cell
      tagStdWrap = -> The <TD> tag is processed by ->stdWrap
   }
   HTMLtableCells.addChr10BetweenParagraphs = [boolean]; If set, then all </P><P> appearances will have a chr(10) inserted between them
}

Example:
This example is used to split regular bodytext content so that tables and blockquotes in the bodytext are processed correctly. The blockquotes are passed into parseFunc again (recursively) and further their top/bottom margins are set to 0 (so no apparent linebreaks are seen)
The tables are also displayed with a number of properties of the cells overridden.
tt_content.text.20.parseFunc.externalBlocks {
  blockquote.callRecursive=1
  blockquote.callRecursive.tagStdWrap.HTMLparser = 1
  blockquote.callRecursive.tagStdWrap.HTMLparser {
    tags.blockquote.fixAttrib.style.list = margin-bottom:0;margin-top:0;
    tags.blockquote.fixAttrib.style.always=1
  }
  blockquote.stripNLprev=1
  blockquote.stripNLnext=1

  table.stripNL=1
  table.stdWrap.HTMLparser = 1
  table.stdWrap.HTMLparser {
    tags.table.overrideAttribs = border=0 cellpadding=2 cellspacing=1 style="margin-top:10px; margin-bottom:10px;"
    tags.tr.allowedAttribs=0
    tags.td.overrideAttribs = valign=top bgcolor="#eeeeee" style="font-family : Verdana, Geneva, Arial, Helvetica, sans-serif;font-size : 10px;"
  }
}]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="if" type="if">
            <description><![CDATA[if "if" returns false the input value is not parsed, but returned directly.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="makelinks" type="makelinks">
            <description><![CDATA[Set it to 1 for conversion
Convert web-addresses prefixed with "http://" and mail-addresses prefixed with "mailto:"
to links.
Example:
makelinks = 1
makelinks.http.keep = path
makelinks.http.extTarget = _blank
makelinks.mailto.keep = path]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="nonTypoTagStdWrap" type="stdWrap">
            <description><![CDATA[Like .plainTextStdWrap. Difference:
.plainTextStdWrap works an ALL non-tag pieces in the text. .nonTypoTagStdWrap is post processing of all text (including tags) between special TypoTags (unless .breakoutTypoTagContent is not set for the TypoTag)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="nonTypoTagUserFunc" type="string">
            <description><![CDATA[Like .userFunc. Differences is (like nonTypoTagStdWrap) that this is post processing of all content pieces around TypoTags while .userFunc processes all non-tag content. (Notice: .breakoutTypoTagContent must be set for the TypoTag if it's excluded from nonTypoTagContent)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="plainTextStdWrap" type="stdWrap">
            <description><![CDATA[This is stdWrap properties for all non-tag content. ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="short" type="array">
            <description><![CDATA[Like constants above, but local.

Example:
This substitutes all occurrences of "T3" with "TYPO3 CMS" and "T3web" with a link to typo3.org.
short {
  T3 = TYPO3 CMS
  T3web = <a href="https://typo3.org">typo3</a>
}]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="tags" type="tags">
            <description><![CDATA[Here you can define custom tags that will parse the content to something.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="userFunc" type="string">
            <description><![CDATA[This passes the non-tag content to a function of your own choice. Similar to eg. .postUserFunc in stdWrap.
Remember the function name must possibly be prepended "user_"]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="plugin">
        <property name="_CSS_DEFAULT_STYLE" type="string">
            <description><![CDATA[Use this to have some default CSS styles inserted in the header section of the document. Most likely this will provide a default acceptable display from the plugin, but should ideally be cleared and moved to an external stylesheet.
This value is for all plugins read by the pagegen script when making the header of the document.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="_LOCAL_LANG.[lang-key].[label-key]" type="string">
            <description><![CDATA[Can be used to override the default locallang labels for an Extbase plugin.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="userFunc" type="string">
            <description><![CDATA[Property setting up the USER / USER_INT object of the plugin]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="select">
        <property name="andWhere" type="stdWrap">
            <description><![CDATA[SQL-where without "AND"!,
Example:
andWhere = doktype = 1]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="begin" type="int ">
            <description><![CDATA[begin with record number value

Special keyword: "total" is substituted with count(*)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="groupBy" type="string">
            <description><![CDATA[SQL-groupBy without "group by"! Eg. "CType"]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="join" type="string">
            <description><![CDATA[Enter tablename for JOIN , LEFT OUTER JOIN and RIGHT OUTER JOIN respectively.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="languageField" type="string">
            <description><![CDATA[If set, this points to the field in the record which holds a reference to a site language. And if set, the records returned by the select-function will be selected only if the value of this field matches the frontend language which is set by the config.sys_language_uid option]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="max" type="int ">
            <description><![CDATA[max records

Special keyword: "total" is substituted with count(*)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="markers" type="array">
            <description><![CDATA[array of markers
            The markers defined in this section can be used, wrapped in the usual ###markername### way, in any other property of select.
Each value is properly escaped and quoted to prevent SQL injection problems. This provides a way to safely use external data
(e.g. database fields, GET/POST parameters) in a query.
<markername>.value (value) sets the value directly
<markername>.commaSeparatedList (bool) If set the value is interpreted as a comma separated list of values. Each value in
the list is individually escaped and quoted.
(stdWrap properties ...) All stdWrap properties can be used for each markername

Example:

page.60 = CONTENT
page.60 {
  table = tt_content
  select {
      pidInList = 73
      where = header != ###whatever###
      orderBy = ###sortfield###
      markers {
        whatever.data = GP:first
        sortfield.value = sor
        sortfield.wrap = |ting
      }
  }
}
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="orderBy" type="string">
            <description><![CDATA[without "order by"! Eg. "sorting, title"]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="pidInList" type="stdWrap">
            <description><![CDATA[
list of page_id]]></description>
            <default><![CDATA[this]]></default>
        </property>
        <property name="selectFields" type="string">
            <description><![CDATA[List of fields to select, or "count(*)".]]></description>
            <default><![CDATA[*]]></default>
        </property>
        <property name="uidInList" type="intList">
            <description><![CDATA[list of page_id
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="where" type="string">
            <description><![CDATA[SQL-where without "where"!, Eg. " (title LIKE '%SOMETHING%' AND NOT doktype) "]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="split" extends="cObjArray">
        <property name="1" type="stdWrap">
            <description><![CDATA[The object that should treat the value.
NOTE: The "current"-value is set to the value of current item, when the objects are called. See "stdWrap" / current.

Example (stdWrap used):
1.current = 1
1.wrap = <B> | </B>

Example (CARRAY used):
1 {
  10 = TEXT
  10.current = 1
  10.wrap = <B> | </B>
  20 = TEXT
  20.value = Mytext
}]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="2" type="stdWrap">
            <description/>
            <default><![CDATA[
]]></default>
        </property>
        <property name="3" type="stdWrap">
            <description/>
            <default><![CDATA[
]]></default>
        </property>
        <property name="cObjNum" type="int">
            <description><![CDATA[+optionSplit
This is a pointer the array of this object ("1,2,3,4"), that should treat the items, resulting from the split.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="max" type="stdWrap">
            <description><![CDATA[max number of splits]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="min" type="stdWrap">
            <description><![CDATA[min number of splits.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="returnKey" type="stdWrap">
            <description><![CDATA[Instead of parsing the split result, just return this element of the index immediately.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="token" type="stdWrap">
            <description><![CDATA[string or character (token) used to split the value]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="wrap" type="wrap ">
            <description><![CDATA[Defines a wrap for each item.]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="stdWrap">
        <property name="HTMLparser" type="HTMLparser">
            <description><![CDATA[boolean / HTMLparser
This object allows you to parse the HTML-content and make all kinds of advanced filterings on the content.
Value must be set and properties are those of ->HTMLparser.
(See adminguide for ->HTMLparser options)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="age" type="string">
            <description><![CDATA[If enabled with a "1" (number, integer) the content is seen as a date (UNIX-time) and the difference from present time and the content-time is returned as one of these four variations:
"xx min" or "xx hrs" or "xx days" or "xx yrs"
The limits between which layout is used are 60 minutes, 24 hours, 365 days,

NOTE:
If you set this property with a non-integer, it's used to format the four units. Use eight values to format both singular and plural values, where the first four values are the plural values and the last four are singular. This is the default string:

" min| hrs| days| yrs| min| hour| day| year"

Set another string if you want to change the units. You may include the "-signs. They are removed anyway.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="append" type="cObj">
            <description><![CDATA[cObject appended to content (after)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="br" type="boolean">
            <description><![CDATA[PHP function nl2br(); Converts linebreaks to <br />-tags]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="brTag" type="string">
            <description><![CDATA[All ASCII-codes of "10" (CR) is substituted with value]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="bytes" type="boolean">
            <description><![CDATA[Will format the input (an integer) as bytes: bytes, kb, mb

If you add a value for the property "labels" you can alter the default suffixes. Labels for bytes, kilo, mega and giga are separated by vertical bar (|) and possibly encapsulated in "". Eg: " | K| M| G" (which is the default value)
Thus:

bytes.labels = " | K| M| G"]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="cObject" type="cObj">
            <description><![CDATA[Loads content from a content-object]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="cache" type="cache">
            <description><![CDATA[
            Stores the rendered content into the caching framework and reads it from there.
            This allows you to reuse this content without prior rendering. The presence of cache.key will trigger this feature.
]]></description>
            <default><![CDATA[0]]></default>
        </property>
        <property name="case" type="case">
            <description><![CDATA[Converts case

- upper: Converts to upper case (default)
- lower: Converts to lower case
- capitalize: Capitalize words

Uses utf-8 for the operation.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="char" type="int">
            <description><![CDATA[Content is set to the chr(value).
PHP: $content=chr((int)$conf["char"]);]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="crop" type="string">
            <description><![CDATA[Crops the content to a certain length
Syntax: +/- (chars) = from left / from right | [string] | [boolean: keep whole words]

Examples:
20 | ...    => max 20 characters. If more, the value will be truncated to first 20 chars and prepended with "..."
-20 | ... => max 20 characters. If more, the value will be truncated to last 20 chars and appended with "..."
20 | ... | 1 => max 20 characters. If more, the value will be truncated to last 20 chars and appended with "...". If the division is in the middle of a word, the remains of that word is removed.

Uses utf-8 for the operation.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="cropHTML" type="string">
            <description><![CDATA[Crops the content to a certain length. In contrast to stdWrap.crop it respects HTML tags. It does not crop inside tags and closes open tags. Entities (like ">") are counted as one char. See stdWrap.crop below for a syntax description and examples.

Note that stdWrap.crop should not be used if stdWrap.cropHTML is already used.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="csConv" type="string">
            <description><![CDATA[Convert the charset of the string from the charset given as value to utf-8.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="current" type="boolean">
            <description><![CDATA[Sets the content to the "current"-value (see ->split)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="data" type="getText">
            <description><![CDATA[
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="dataWrap" type="string">
            <description><![CDATA[The content is parsed for sections of {...} and the content of {...} is of the type getText and substituted with the result of getText.

Example:
This should result in a font-tag where the fontsize is decided by the global variable "size":
<font size="{global : size}"> | </font>]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="date" type="string">
            <description><![CDATA[The content should be data-type "UNIX-time". Returns the content formatted as a date.
$content=Date($conf["date"], $content);

Example where a timestamp is imported:
.value.field = tstamp
.value.date = ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="debug" type="boolean">
            <description><![CDATA[Prints content with HTMLSpecialChars() and <PRE></PRE>: Useful for debugging which value stdWrap actually ends up with, if you're constructing a website with TypoScript.
Should be used under construction only.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="debugData" type="boolean">
            <description><![CDATA[Prints the current data-array, $cObj->data, directly to browser. This is where ".field" gets data from.
Should be used under construction only. ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="debugFunc" type="boolean">
            <description><![CDATA[Prints the content directly to browser with the debug() function.
Should be used under construction only.
Set to value "2" the content will be printed in a table - looks nicer.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="doubleBrTag" type="string">
            <description><![CDATA[All double-line-breaks are substituted with this value.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="encapsLines" type="encapsLines">
            <description><![CDATA[Lets you split the content by chr(10) and process each line independently. Used to format content made with the RTE.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="field" type="string">
            <description><![CDATA[Sets the content to the value $cObj->data[field]

Example: Set content to the value of field "title": ".field = title"
$cObj->data changes. See the description for the data type "getText"/field!

Note: You can also divide fieldnames by "//". Say, you set "nav_title // title" as the value, then the content from the field nav_title will be returned unless it is a blank string, in which case the title-field's value is returned.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="fieldRequired" type="string">
            <description><![CDATA[value in this field MUST be set]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="hash" type="stdWrap">
            <description><![CDATA[Returns a hashed value of the current content. Use one of the algorithms which are available in PHP. For a list of supported algorithms see https://www.php.net/manual/en/function.hash-algos.php

Example:

page.10 = TEXT
page.10 {
    value = test@example.com
    hash = md5
    wrap = <img src="http://www.gravatar.com/avatar/|" />
}]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="htmlSpecialChars" type="boolean">
            <description><![CDATA[Passes the content through htmlspecialchars()-PHP-function
Additional property ".preserveEntities" will preserve entities so only non-entity chars are affected.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="if" type="if">
            <description><![CDATA[If the if-object returns false, stdWrap returns "" immediately]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="ifBlank" type="stdWrap">
            <description><![CDATA[Same as "ifEmpty" but the check is done using strlen().]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="ifEmpty" type="stdWrap">
            <description><![CDATA[if the content is empty (trimmed) at this point, the content is loaded with "ifEmpty". Zeros are treated as empty values!]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="innerWrap" type="stdWrap">
            <description><![CDATA[Wraps the content]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="innerWrap2" type="stdWrap">
            <description><![CDATA[same as .innerWrap (but watch the order in which they are executed)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="insertData" type="boolean">
            <description><![CDATA[If set, then the content string is parsed like .dataWrap above.

Example:
Displays the page title:
10 = TEXT
10.value = This is the page title: {page:title}
10.insertData = 1]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="intval" type="boolean">
            <description><![CDATA[PHP function intval(); Returns an integer.
PHP: $content=intval($content);]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="keywords" type="boolean">
            <description><![CDATA[splits the content by characters "," ";" and chr(10) (return), trims each value and returns a comma-separated list of the values.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="lang" type="ARR_languages_strings">
            <description><![CDATA[This is used to define optional language specific values.
If the global language key set by the ->config property .language is found in this array, then this value is used instead of the default input value to stdWrap.

Example:
config.language = de
page.10 = TEXT
page.10.value = I am a Berliner!
page.10.lang.de = Ich bin ein Berliner!

Output will be "Ich bin..." instead of "I am..."]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="listNum" type="listNum">
            <description><![CDATA[Explodes the content with "," (comma) and the content is set to the item[value].

Special keyword: "last" is set to the last element of the array!

.splitChar (string):
Defines the string used to explode the value. If splitChar is an integer, the character with that number is used (eg. "10" to split lines...).
Default: "," (comma)

.listNum = rand:
Returns a random item out of the list

.stdWrap (stdWrap properties):
stdWrap properties of the listNum...

Examples:

We have a value of "item 1, item 2, item 3, item 4":
This would return "item 3":
.listNum = last - 1


This way, the subtitle field changes on every reload:
page.5 = COA_INT
page.5 {
  10 = TEXT
  10 {
    field = subtitle
    stdWrap.listNum = rand
  }
}
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="noTrimWrap" type="wrap">
            <description><![CDATA[This wraps the content with the values val1 and val2 in the example below - including surrounding whitespace! - without trimming the values. Note that this kind of wrap requires a "|"  character to begin and end the wrap.

Example:
| val1 | val2 |]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="numRows" type="numRows">
            <description><![CDATA[Returns the number of rows resulting from the select]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="numberFormat" type="numberFormat">
            <description><![CDATA[Formats a float value to any number format you need (e.g. prices)

With this property you can format a float value and display it like you want, for example as a price. It's a wrapper for PHP's number_format() function.
You can define how many decimals you want and which separators you want for decimals and thousands.

Examples:

lib.myPrice = TEXT
lib.myPrice {
  value = 0.8
  numberFormat {
    decimals = 2
    dec_point = ,
  }
  noTrimWrap = || €|
}
# Will result in "0,80 €"


lib.carViews = CONTENT
lib.carViews {
  table = tx_mycarext_car
  select.pidInList = 42
  renderObj = TEXT
  renderObj {
    field = views
    numberFormat.thousands_sep = .
  }
}
# Will result in something like "2.055"
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="outerWrap" type="stdWrap">
            <description><![CDATA[Wraps the complete content]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="override" type="stdWrap">
            <description><![CDATA[if "override" returns something else than "" or zero (trimmed), the content is loaded with this! ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="parseFunc" type="parseFunc">
            <description><![CDATA[object path reference / parseFunc
Processing instructions for the content.
Notice: If you enter a string as value this will be taken as a reference to an object path globally in the TypoScript object tree. This will be the basis configuration for parseFunc merged with any properties you add here. It works exactly like references does for content elements.

Example:
parseFunc = < lib.parseFunc_RTE
parseFunc.tags.myTag = TEXT
parseFunc.tags.myTag.value = This will be inserted when <myTag> is found!]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="postCObject" type="cObj">
            <description><![CDATA[cObject appended the content]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="postUserFunc" type="string">
            <description><![CDATA[Calling a PHP-function or method in a class, passing the current content to the function as first parameter and any properties as second parameter. Please see the description of the cObject USER for in-depth information.

Example:
You can paste this example directly into a new template record.

page = PAGE
page.typeNum=0

page.10 = TEXT
page.10 {
  value = Hello World
  postUserFunc = user_reverseString
  postUserFunc.uppercase = 1
}

page.20 = TEXT
page.20 {
  value = Hello World
  postUserFunc = user_various->reverseString
  postUserFunc.uppercase = 1
  postUserFunc.typolink = 11
}]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="postUserFuncInt" type="string">
            <description><![CDATA[Calling a PHP-function or method in a class, passing the current content to the function as first parameter and any properties as second parameter. The result will be rendered non-cached, outside the main page-rendering. Please see the description of the cObject USER_INT for in-depth information.
Supplied by Jens Ellerbrock]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="preCObject" type="cObj">
            <description><![CDATA[cObject prepended the content ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="preIfEmptyListNum" type="listNum">
            <description><![CDATA[(as "listNum" below)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="preUserFunc" type="string">
            <description><![CDATA[Calling a PHP-function or method in a class, passing the current content to the function as first parameter and any properties as second parameter.
See .postUserFunc]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="prefixComment" type="string">
            <description><![CDATA[Prefixes content with a HTML comment with the second part of input string (divided by "|") where first part is an integer telling how many trailing tabs to put before the comment on a new line.
The content is parsed through insertData.

Example:
prefixComment = 2 | CONTENT ELEMENT, uid:{field:uid}/{field:CType}

Will indent the comment with 1 tab (and the next line with 2+1 tabs)
(Added in TYPO3 >3.6.0RC1)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="prepend" type="cObj">
            <description><![CDATA[cObject prepended to content (before)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="prioriCalc" type="boolean">
            <description><![CDATA[Calculation of the value using operators -+*/%^ plus respects priority to + and - operators and parenthesis levels ().
. (period) is decimal delimiter.
Returns a doublevalue.
If .prioriCalc is set to "intval" an integer is returned.
There is no errorchecking and division by zero or other invalid values may generate strange results. Also you use a proper syntax because future modifications to the function used may allow for more operators and features.

Examples:
100%7 = 2
-5*-4 = 20
+6^2 = 36
6 ^(1+1) = 36
-5*-4+6^2-100%7  = 54
-5 * (-4+6) ^ 2 - 100%7 = 98
-5 * ((-4+6) ^ 2) - 100%7 = -22]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="rawUrlEncode" type="boolean">
            <description><![CDATA[Passes the content through rawurlencode()-PHP-function]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="replacement" type="boolean">
            <description><![CDATA[Allows to execute search/replace-functionality. Optionally PCRE-regex are supported (see: http://www.php.net/manual/en/function.preg-replace.php) A numeric index allows multiple replacements at once.

Example:

20 = TEXT
20 {
  value = There_is_a_cat,_a_dog_and_a_tiger_in_da_hood!_Yeah!
  stdWrap.replacement {
    10 {
      search = _
      replace.char = 32
    }
    20 {
      search = in da hood
      replace = around the block
    }
    30 {
      search = #a (Cat|Dog|Tiger)#i
      replace = an animal
      useRegExp = 1
    }
  }
}
]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="required" type="boolean">
            <description><![CDATA[This flag requires the content to be set to some value after any content-import and treatment that might have happened now (data, field, current, listNum, trim). Zero's is NOT regarded as empty! Use "if" instead!
If the content i empty, "" is returned immediately.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="round" type="array">
            <description><![CDATA[Round a number.

Additional properties:

.roundType = round (default) | ceil | floor
.decimals = 0 (default) or number of digits after decimal separator (only with roundType = round)


Example:
temp.number = TEXT
temp.number {
  value = 3.14159
  round.roundType = round
}

or

temp.number = TEXT
temp.number {
  value = 3.14159
  round.decimals = 2
}]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="setContentToCurrent" type="boolean">
            <description><![CDATA[Sets the current value to the incoming content of the function.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="setCurrent" type="stdWrap">
            <description><![CDATA[Sets the "current"-value. This is normally set from some outside routine, so be careful with this. But it might be handy to do this]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="split" type="split">
            <description><![CDATA[
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="stdWrap" type="stdWrap">
            <description><![CDATA[Recursive call to stdWrap function]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="strftime" type="string">
            <description><![CDATA[Exactly like "date" above. See the PHP-manual (strftime) for the codes, or datatype "strftime-conf".
This formatting is useful if the locale is set in advance in the CONFIG-object. See this.

Properties:
.charset  : Can be set to the charset of the output string if you need to convert it to utf-8. Default is to take the intelligently guessed charset from \TYPO3\CMS\Core\Charset\CharsetConverter.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="stripHtml" type="boolean">
            <description><![CDATA[Strips all html-tags.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="substring" type="stringList">
            <description><![CDATA[Returns the substring with [p1] and [p2] send as the 2nd and 3rd parameter to the PHP substring function.

Uses utf-8 as character set for the operation.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="trim" type="boolean">
            <description><![CDATA[PHP-function trim(); Removes whitespace around value]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="typolink" type="typolink">
            <description><![CDATA[Wraps the content with a link-tag]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="wrap" type="wrapSplitChar">
            <description><![CDATA[]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="wrap2" type="wrapSplitChar">
            <description><![CDATA[same as .wrap (but watch the order in which they are executed)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="wrap3" type="wrapSplitChar">
            <description><![CDATA[same as .wrap (but watch the order in which they are executed)]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="wrapAlign" type="stdWrap">
            <description><![CDATA[Wraps content with <div style=text-align:[value];"> | </div> if align is set]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="SVG">
        <property name="cache" type="cache">
            <description><![CDATA[
            Stores the rendered content into the caching framework and reads it from there.
            This allows you to reuse this content without prior rendering. The presence of cache.key will trigger this feature.
]]></description>
            <default><![CDATA[0]]></default>
        </property>
        <property name="width" type="stdWrap">
            <description><![CDATA[int/stdWrap
            width of SVG
]]></description>
            <default><![CDATA[600]]></default>
        </property>
        <property name="height" type="stdWrap">
            <description><![CDATA[int/stdWrap
            height of SVG
]]></description>
            <default><![CDATA[400]]></default>
        </property>
        <property name="src" type="stdWrap">
            <description><![CDATA[file resource/stdWrap
            SVG file resource
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="value" type="stdWrap">
            <description><![CDATA[XML/stdWrap
            SVG raw XML. When src is defined the file will be loaded and value is ignored.

Example:
10 = SVG
10 {
   width = 600
   height = 600
   value (
    <rect x="100" y="100" width="500" height="200" fill="white" stroke="black" stroke-width="5px"/>
    <line x1="0" y1="200" x2="700" y2="200" stroke="red" stroke-width="20px"/>
        <polygon points="185 0 125 25 185 100" transform="rotate(135 125 25)" />
        <circle cx="190" cy="150" r="40" stroke="black" stroke-width="2" fill="yellow"/>
   )
   noscript.cObject = TEXT
   noscript.cObject.value = no svg rendering possible, use a browser
}
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="noscript" type="stdWrap">
            <description><![CDATA[text/stdWrap
            Output if SVG output is not possible
]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="renderMode" type="string">
            <description><![CDATA[The setting .renderMode can be set to "inline" to render an inline version of the SVG file.
            ]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="stdWrap" type="stdWrap">
            <description><![CDATA[stdwrap properties, applied on the returned object.
]]></description>
        </property>
    </type>
    <type id="tags" extends="array">
        <property name="[myHtmlTag]" type="cObject">
            <description><![CDATA[Every entry in the Array... corresponds to a tag, that will be parsed. The elements MUST be in lowercase.
Every entry must be set to a content-object.
"current" is set to the content of the tag, eg <TAG>content</TAG>: here "current" is set to "content".
Parameters:
Parameters of the tag is set in $cObj->parameters (key is lowercased):
<TAG COLOR="red">content</TAG>
=> $cObj->parameters[color] = red
Special added properties to the content-object:
$cObj->parameters[allParams]:  this is automatically set to the whole parameter-string of the tag, eg ' color="red"'
[cObject].stripNL: is a boolean option, which tells parseFunc that NewLines before and after content of the tag should be stripped.
[cObject].breakoutTypoTagContent: is a boolean option, which tells parseFunc that this block of content is breaking up the nonTypoTag content and that the content after this must be re-wrapped.

Examples:
tags.bold = TEXT
tags.bold {
  current = 1
  wrap = <B> | </B>
}
tags.bold.stripNL = 1]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="typolink">
        <property name="ATagBeforeWrap" type="boolean">
            <description><![CDATA[If set, the link is first wrapped with ".wrap" and then the <A>-tag.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="ATagParams" type="stdWrap">
            <description><![CDATA[Additional parameters

Example:
class="board"]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="JSwindow_params" type="string">
            <description><![CDATA[Preset values for opening the window. This example lists almost all possible attributes:
status=1,menubar=1,scrollbars=1,resizable=1,location=1,directories=1,toolbar=1]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="addQueryString" type="boolean">
            <description><![CDATA[Add the QUERY_STRING to the start of the link. Notice that this does not check for any duplicate parameters! This is not a problem (only the last parameter of the same name will be applied).

.method: If set to GET then then the parsed query arguments will be used. This settings are useful if you use URL processing extensions like Real URL, which translate part of the path into query arguments.

.exclude: List of query arguments to exclude from the link (eg L or cHash).]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="additionalParams" type="stdWrap">
            <description><![CDATA[This is parameters that are added to the end of the url. This must be code ready to insert after the last parameter.

Example:
'&print=1'

NOTE: This is only active for internal links!]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="extTarget" type="stdWrap">
            <description><![CDATA[target used for external links]]></description>
            <default><![CDATA[_top]]></default>
        </property>
        <property name="fileTarget" type="string">
            <description><![CDATA[Default file link target. Used by typolink if no fileTarget is set. ]]></description>
            <default><![CDATA[
            ]]></default>
        </property>
        <property name="no_cache" type="stdWrap">
            <description><![CDATA[Adds a "&no_cache=1"-parameter to the link]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="parameter" type="stdWrap">
            <description><![CDATA[This is the data, that ->typoLink uses to create the link. The value is trimmed and if it's empty, ->typoLink returns the input value untouched.

NOTE: If used from parseFunc, this value should be imported by:
typolink.parameter.data = parameters : allParams

Examples:
Internal links:
integers (51): creates a link to page with uid = 51
filerefs (fileadmin/somedir/thedoc.html): creates a link to the file on the local server.
strings (some_alias):  creates a link to the page with alias = "some_alias"

External links:
email-addresses (name@email.com): creates a link to the email-addr.
domains (www.domain.com): creates link to http://-page

The input is parsed like this:
First the parameter is splitted by character-space. This provides a way to pass more parameters. See "target" below here.
If a "@" is in the string, it's an email
If a period (.) is in the string AND if the period (.) is found before a slash (/) is found OR if a doubleslash is found, then it's a URL
If a slash (/) is found, it's a filereference. If the file/directory does not exist on the server, the link is NOT made!

Now the input can be an alias or page-id. If the input is an integer it's a page-id, if it's two comma separated integers, it's an id/type pair, else it's an alias. For page-id's or aliases you can prepend a "#" mark with a number indication tt_content record number on the page to jump to! (if .section-property is present, it overrides this).
If you insert only "#234" where "234" is the tt_content record number, it links to the current page-id
Notice: The parameter can contain a keyword that hands over link generation to an external function. See example below this table!

Target
Target is normally defined by the "extTarget" and "target" properties of typolink. But you may override this target by adding the new target after the parameter separated by a whitespace. Thus the target becomes the second parameter.
If the "Target" parameter is set to the "-" character, then it's the same as no target passed to the function. This feature enables you to still pass a class as third parameter and title as fourth parameter without setting the target also.

Open in windows with fixed dimensions (JavaScript)
It is possible to open the link in a window opened by JavaScript (with "window.open"). For this, just set the target value to "123x456" where 123 is the window width and 456 is the window height. You can also specify additional parameters to the function by entering them separated from the width and height with a colon ":". For instance "230x450:resizable=0,location=1" will disable resizing of the window and enable the location bar.
Also see property "JSwindow".

Class
If you specify a third parameter separated by whitespace in the parameter value this becomes the class-parameter of the link. This class parameter is inserted in the link-tag before any values from .ATagParams which means this class value will override any class value set in ATagParams (at least for MSIE). If set to "-", then it's the same as no class passed to the function. This feature enables you to still pass a title as fourth parameter without setting the class also.

Title
The title attribute is normally specified via .ATagParams or directly via the .title property. But you may override this value by adding the desired title as the fourth parameter (parameters separated by whitespace) to typolink.

Examples of multiparameters:
Consider this .parameter value passed to this function:

51  _blank  blueLink

This would result in a link approx like this:

<A href="?id=51" target="_blank" class="blueLink">]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="returnLast" type="string">
            <description><![CDATA[If set to "url" then it will return the URL of the link ($this->lastTypoLinkUrl)
If set to "target" it will return the target of the link.
So, in these two cases you will not get the value wrapped but the url or target value returned!]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="section" type="stdWrap">
            <description><![CDATA[If this value is present, it's prepended with a "#" and placed after any internal url to another page in TYPO3.
This is used create a link, which jumps from one page directly the section on another page.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="target" type="stdWrap">
            <description><![CDATA[target used for internal links]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="title" type="stdWrap">
            <description><![CDATA[Sets the title parameter of the A-tag.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="userFunc" type="string">
            <description><![CDATA[This passes the link-data compiled by the typolink function to a user-defined function for final manipulation.
The $content variable passed to the user-function (first parameter) is an array with the keys "TYPE",  "TAG", "url", "targetParams" and "aTagParams".
TYPE is an indication of link-kind: mailto, url, file, page
TAG is the full <A>-tag as generated and ready from the typolink function.
The latter three is combined into the 'TAG' value after this formula:

<a href="'.$finalTagParts['url'].'"'.
           $finalTagParts['targetParams'].
           $finalTagParts['aTagParams'].'>

The userfunction must return an <A>-tag.]]></description>
            <default><![CDATA[
]]></default>
        </property>
        <property name="wrap" type="wrap">
            <description><![CDATA[Wraps the links.]]></description>
            <default><![CDATA[
]]></default>
        </property>
    </type>
    <type id="listNum">
        <property name="splitChar" type="string">
            <description><![CDATA[Defines the string used to explode the value. If splitChar is an integer, the character with that number is used (e.g. "10" to split lines...).

                Default: "," (comma)]]></description>
            <default><![CDATA[,]]></default>
        </property>
        <property name="stdWrap" type="stdWrap">
            <description><![CDATA[stdwrap properties of the listNum...
]]></description>
        </property>
    </type>
    <type id="additionalHeadersArray" extends="array">
        <property name="10" type="additionalHeadersItem">
            <description><![CDATA[Defines a header.

Must at least contain the header property.]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="20" type="additionalHeadersItem">
            <description><![CDATA[Defines a header.

Must at least contain the header property.]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="30" type="additionalHeadersItem">
            <description><![CDATA[Defines a header.

Must at least contain the header property.]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="40" type="additionalHeadersItem">
            <description><![CDATA[Defines a header.

Must at least contain the header property.]]></description>
            <default><![CDATA[]]></default>
        </property>
    </type>
    <type id="additionalHeadersItem">
        <property name="header" type="string">
            <description><![CDATA[The header string]]></description>
            <default><![CDATA[]]></default>
        </property>
        <property name="replace" type="boolean">
            <description><![CDATA[Optional.

If set, previous headers with the same name are replaced with the current one.

Default is "1".]]></description>
            <default><![CDATA[1]]></default>
        </property>
        <property name="httpResponseCode" type="int">
            <description><![CDATA[Optional. HTTP status code as an integer.]]></description>
            <default><![CDATA[]]></default>
        </property>
    </type>
</tsRef>
