- SourceOpt : reformatting the (x)HTML output & removal of new-lines, comments and generator-info
 - RegExRep : search and replace strings using your regular expressions ; embrace regex and migrate now
 - SVGstore : combines all SVG selected within elements into one <symbol> file and replaces <img> by <use>
 
composer require lochmueller/sourceopt- 
via TypoScript
[constants]@import 'EXT:sourceopt/Configuration/TypoScript/constants'[setup]@import 'EXT:sourceopt/Configuration/TypoScript/setup' - 
via input device
- add 
[EXT:sourceopt/Configuration/TypoScript]intoInclude staticatIncludesinTemplate 
 - add 
 
Include the extension and go to the Constant Editor of a template where you find all options under PLUGIN
The PHP process need server performance, because there are several search/replace operations in the logic
Note: The following features are executed in reverse order
TypoScript [constants] || prepend config. at [setup]
| Property | Type | Description | Default | 
|---|---|---|---|
| sourceopt.enabled | boolean | Is the optimization enabled for this template | 1 | 
| sourceopt.removeGenerator | boolean | Remove <meta name="generator" content="TYPO3 CMS"> | 1 | 
| sourceopt.removeComments | boolean | Remove HTML-Comments | 1 | 
| sourceopt.removeComments.keep | array | Spare these listed comments: Regular expressions that match comments that should not be removed. Very useful e.g. to keep the TYPO3SEARCH-Comments so indexed_search can work properly | .10 | 
| sourceopt.removeComments.keep.10 | string | Spare TYPO3SEARCH-Comments from removal | /^TYPO3SEARCH_/usi | 
| sourceopt.headerComment | string | Your additional (appended) header comment | [empty] | 
| sourceopt.formatHtml | integer | Formats the code beautiful and easy readable. New lines and tabs are used in the usual way of illustrating the structure of an XML code. | 4 | 
| sourceopt.formatHtml.tabSize | integer | Defines the size of the tabs used for formating. If blank one tab is used. If a number is specified the specified number of blank spaces is used instead. This will only work together with formatHtml | 
[empty] | 
| sourceopt.formatHtml.debugComment | boolean | Includes a comment at the end of the html source code that points the numbers of open html tags. This will only work together with formatHtml | 
[empty] | 
TypoScript [setup] incl. stdWrap
config.replacer {
  search {
    1 = /(?<="|')\/?(fileadmin|typo3temp|uploads)/
    give-me-cherries = /fruit/
    wrapBoldly < tmp.find
    wrapBoldly.wrap = /|/
  }
  replace {
    1 = //cdn.tld/$1
    give-me-cherries = cherry
    wrapBoldly < tmp.repl
    wrapBoldly.wrap = <b>|</b>
  }
}
Note: both arrays will be ksort'ed in "natural order"
from jweiland/replacer : 1.4 - 2.x
from jweiland/replacer : 1.4 - 2.x
- regex replace 
config\.tx_(?:\w*replace\w*)toconfig.replacer - remove 
config.tx_replacer.enable_regex = 1 
from maxserv/replacecontent 2013 - 2017
from maxserv/replacecontent 2013 - 2017
- regex replace 
config\.tx_(?:\w*replace\w*)toconfig.replacer 
from typo3-ter/ja_replacer 2009 - 2013 || phorax/ja-replacer 2016
from typo3-ter/ja_replacer 2009 - 2013 || phorax/ja-replacer 2016
composer install jweiland/replacer& replace config.tx_ja_replacer to config.tx_replacer
from typo3-ter/n84_contentreplacer 2016
from typo3-ter/n84_contentreplacer 2016
- regex replace 
config\.tx_(?:\w*replace\w*)toconfig.replacer 
from typo3-ter/fereplace 2011
from typo3-ter/fereplace 2011
composer install jweiland/replacer& replace plugin.fereplace.pairs to config.tx_replacer .. ah .. and one regex
- search 
(\n\s*)(\d+)(?:{\s+|\.)old\s*=\s*([^\n]+).+?new\s*=\s*([^\n]+) - replace 
$1search.$2 = $3\n$1replace.$2 = $4 
from typo3-ter/regex 2009
from typo3-ter/regex 2009
- regex replace 
config\.regextoconfig.replacer - regex replace 
(?:\s)(\w+)\s*=\s*tosearch.$1 = - regex replace 
(\w+)\.replacement\s*=\s*toreplace.$1 = 
TypoScript [constants] || prepend config. at [setup]
| Property | Type | Description | Default | 
|---|---|---|---|
| svgstore.enabled | boolean | Is the SVG extract & merge enabled for this template | 1 | 
| svgstore.fileSize | integer | Maximum file size of a SVG to include (in [byte]) | 
50000 | 
- Try external packages like https://github.com/ArjanSchouten/HtmlMinifier
 

