Search code examples
typo3rte

Keep whitespaces in RTE for pre and code tags


I want to display code through <pre> and/or <code> tags, which works fine. White spaces are saved on first save and displayed properly in the front-end. However, when reloading the content in the backend, the editor shows the code without the additional whitespaces. Saving again drops the whole code formatting.

I assume there is some setting for this but I couldn't find anything until now. Any hints on this?

For the code highlighting, I am using the GeshiLib and vjrtecodesnippetsextensions.

Edit:

Sorry, missed the configuration. There is the basic rtehtmlarea involved, currently v4.7.5, there is no TCA specific change since it is a standard bodytext field from TYPO3's standard Text content element (displayed through css_styled_content).

PageTS for the RTE looks like the following:

RTE.default.hidePStyleItems := removeFromList(pre)
RTE.default.proc {
  allowTags := addToList(pre)
  entryHTMLparser_db.allowTags < RTE.default.proc.allowTags

  overruleMode = tx_vjrtecodesnippets,ts_css,cleanenc
  allowTags := addToList(code)
  allowTagsOutside := addToList(code)

  entryHTMLparser_db {
    allowTags < RTE.default.proc.allowTags
    allowTagsOutside < RTE.default.proc.allowTagsOutside
  }

  HTMLparser_rte {
    allowTags < RTE.default.proc.allowTags
    allowTagsOutside < RTE.default.proc.allowTagsOutside
  }
}

Edit2: We've published the TYPO3 extension news_blog which does exactly this.


Solution

  • I wanted to write a comment, but a short answer with sophisticated guesses might be just as good:

    • I checked at my own site, the <code> tag works fine. Whitespaces are stored as &nbsp; in the bodytext field, therefore preserved when saved and re-opened.
    • Have you tried deleting the line
      RTE.default.hidePStyleItems := removeFromList(pre)?
    • According to the manual, only <code> tags are supported by vjrtecodesnippets. Do you really need both tags for syntax highlighting?
    • Also, have you tried changing your PageTS like follows to enable <pre>?:

    -

    RTE.default.proc {
      allowTagsOutside := addToList(code,pre)
    }
    

    EDIT:
    I found a related TypoScript snippet, which might be noteworthy for your case. Please try making the following adjustments:

    In the Template SETUP section:

    lib.parseFunc.allowTags := addToList(code,pre)
    lib.parseFunc_RTE.allowTags := addToList(code,pre)
    

    In the PAGE TSconfig:

    RTE.default.proc {
      allowTags := addToList(code,pre)
      allowTagsOutside := addToList(code,pre)
      overruleMode = tx_vjrtecodesnippets,ts_css,cleanenc
    
      // CONTENT TO DATABASE
      HTMLparser_rte {
        allowTags < RTE.default.proc.allowTags
        allowTagsOutside < RTE.default.proc.allowTagsOutside
      }
    
      // Entry HTML parser
      entryHTMLparser_db {
        allowTags < RTE.default.proc.allowTags
        allowTagsOutside < RTE.default.proc.allowTagsOutside
      }
    }