parseFunc

This object is used to parse some content for stuff like special typo tags, the makelinks-things and so on...

Properties

externalBlocks

externalBlocks

externalBlocks
Type
list of tagnames / +properties

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 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 line break of the previous outside block.
  • stripNLnext: boolean. Strips off first line break 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" means all cells and "1", "2", "3", ... overrides for specific columns.

  • 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 appearances of </P><P> 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 line breaks are seen)

The tables are also displayed with a number of properties of the cells overridden

EXT:site_package/Configuration/TypoScript/setup.typoscript
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" style="margin-top: 10px;"
         tags.tr.allowedAttribs = 0
         tags.td.overrideAttribs = class="table-cell" style="font-size: 10px;"
      }
}
Copied!

short

short

short
Type
(array of strings)

If this property is set, you can replace a char or word in your text with the value of the according constant.

Example

This replaces all occurrences of "T3" with "TYPO3 CMS" and "T3web" with a link to typo3.org.

EXT:site_package/Configuration/TypoScript/setup.typoscript
page.10 = TEXT
page.10.value = Learn more about T3, look here: T3web
page.10.parseFunc.short {
      T3 = TYPO3 CMS
      T3web = <a href="https://typo3.org">typo3.org</a>
}
# Output: Learn more about TYPO3 CMS, look here: <a href="https://typo3.org">typo3.org</a>
Copied!

plainTextStdWrap

plainTextStdWrap

plainTextStdWrap
Type
stdWrap

This is stdWrap properties for all non-tag content.

userFunc

userFunc

userFunc
Type
function name

This passes the non-tag content to a function of your own choice. Similar to, for example, postUserFunc in stdWrap, or typolink.userFunc.

Remember the function name must possibly be prepended user_.

nonTypoTagStdWrap

nonTypoTagStdWrap

nonTypoTagStdWrap
Type
stdWrap

Like plainTextStdWrap. Difference:

parsefunc-plainTextStdWrap works on 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).

nonTypoTagUserFunc

nonTypoTagUserFunc

nonTypoTagUserFunc
Type
function name

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).

tags

tags

tags
Type
tags

Here you can define custom tags that will parse the content to something.

allowTags

allowTags

allowTags
Type
list of strings or "*"

Changed in version 13.2

Defining the TypoScript properties allowTags or denyTags for the HTML processing via stdWrap.parseFunc is now optional.

Besides that, it is now possible to use allowTags = *.

List of tags, which are allowed to exist in code, use "*" for all. Security aspects are considered automatically by the HTML sanitizer, unless htmlSanitize is disabled explicitly.

If a tag is found in allowTags, the corresponding tag in denyTags is ignored!

Example

The example allows any tag, except <u> which will be encoded:

EXT:site_package/Configuration/TypoScript/setup.typoscript
10 = TEXT
10.value = <p><em>Example</em> <u>underlined</u> text</p>
10.parseFunc = 1
10.parseFunc {
  allowTags = *
  denyTags = u
}
Copied!

denyTags

denyTags

denyTags
Type
list of strings

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:

EXT:site_package/Configuration/TypoScript/setup.typoscript
tt_content.text.20.parseFunc {
    allowTags = b,i,a,img
    denyTags = *
}
Copied!

if

if

if
Type
if

if "if" returns false, the input value is not parsed, but returned directly.

Example

This example takes the content of the field "bodytext" and parses it through the makelinks-functions and substitutes all <LINK> and <TYPOLIST>-tags with something else.

EXT:site_package/Configuration/TypoScript/setup.typoscript
tt_content.text.default {
    20 = TEXT
    20.stdWrap.field = bodytext
    20.stdWrap.wrap = | <br>
    20.stdWrap.brTag = <br>
    20.stdWrap.parseFunc {
        makelinks = 1
        makelinks.http.keep = path
        makelinks.http.extTarget = _blank
        makelinks.mailto.keep = path
        tags {
            link = TEXT
            link {
                stdWrap.current = 1
                stdWrap.typolink.extTarget = _blank
                stdWrap.typolink.target = {$cLinkTagTarget}
                stdWrap.typolink.wrap = <p style="color: red; font-weight: bold;">|</p>
                stdWrap.typolink.parameter.data = parameters : allParams
            }

            typolist < tt_content.bullets.default.20
            typolist.trim = 1
            typolist.field >
            typolist.current = 1
        }
    }
Copied!