Package com.googlecode.htmlcompressor.compressor

# Class HtmlCompressor

java.lang.Object
com.googlecode.htmlcompressor.compressor.HtmlCompressor

All Implemented Interfaces:
  `Compressor`

public class HtmlCompressor extends Object implements Compressor
Class that compresses given HTML source by removing comments, extra spaces and lin<pre> while preserving content within <pre>, <textarea>, <script> and <style> tags.

Blocks that should be additionally preserved could be marked with:
`<!-- {{{ -->
...
<!-- }}} -->`
or any number of user defined patterns.

Content inside <script> or <style> tags could be optionally compressed using Yahoo YUI Compressor or Google Closure Compiler libraries.

Author:
  Sergiy Kovalchuk

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final String`
  `ALL_TAGS`
  Could be passed to `setRemoveSurroundingSpaces` method to remove all surrounding spaces (not recommended).
  `static final String`
  `BLOCK_TAGS_MAX`
  Predefined list of tags that are block-level by default, excluding `<div>` and `<li>` tags.
  `static final String`
  `BLOCK_TAGS_MIN`
  Predefined list of tags that are very likely to be block-level.
  `protected static final Pattern`
  `booleanAttrPattern`
  The Constant booleanAttrPattern.
  `protected static final Pattern`
  `cdataPattern`
  The Constant cdataPattern.
  `protected static final Pattern`
  `commentPattern`
  The Constant commentPattern.
  `protected static final Pattern`
  `condCommentPattern`
  The Constant condCommentPattern.
  `protected static final Pattern`
  `doctypePattern`
  The Constant doctypePattern.
  `protected static final Pattern`
  `emptyPattern`
  The Constant emptyPattern.
  `protected static final Pattern`
  `eventJsProtocolPattern`
  The Constant eventJsProtocolPattern.
  `protected static final Pattern`
  `eventPattern1`
  The Constant eventPattern1 (unmasked).
  `protected static final Pattern`
  `eventPattern2`
  The Constant eventPattern2.
  `protected static final Pattern`
  `formMethodAttrPattern`
  The Constant formMethodAttrPattern.
  `protected static final Pattern`
  `httpProtocolPattern`
  The Constant httpProtocolPattern.
  `protected static final Pattern`
  `httpsProtocolPattern`
  The Constant httpsProtocolPattern.
  `protected static final Pattern`
  `inputTypeAttrPattern`
  The Constant inputTypeAttrPattern.
  `protected static final Pattern`
  `intertagPattern_CustomCustom`
  The Constant intertagPattern_CustomCustom.
  `protected static final Pattern`
  `intertagPattern_CustomTag`
  The Constant intertagPattern_CustomTag.
  `protected static final Pattern`
  `intertagPattern_TagCustom`
  The Constant intertagPattern_TagCustom.
  `protected static final Pattern`
  `intertagPattern_TagTag`
  The Constant intertagPattern_TagTag.
  `static final String`
  `JS_COMPRESSOR_CLOSURE`
  The Constant JS_COMPRESSOR_CLOSURE.
  `static final String`
  `JS_COMPRESSOR_YUI`
  The Constant JS_COMPRESSOR_YUI.
  `protected static final Pattern`
  `jsLangAttrPattern`
  The Constant jsLangAttrPattern.
  `protected static final Pattern`
  `jsTypeAttrPattern`
  The Constant jsTypeAttrPattern.
  `protected static final Pattern`
  `lineBreakPattern`
  The Constant lineBreakPattern.
  `protected static final Pattern`
  `linkRelAttrPattern`
  The Constant linkRelAttrPattern.
  `protected static final Pattern`
  `linkTypeAttrPattern`
  The Constant linkTypeAttrPattern.
  `protected static final Pattern`
  `multispacePattern`
  The Constant multispacePattern.
  `static final Pattern`
  `PHP_TAG_PATTERN`
  Predefined pattern that matches `<?`
  `protected static final Pattern`
  `prePattern`
  The Constant prePattern.
  `protected static final Pattern`
  `relExternalPattern`
  The Constant relExternalPattern.
  `protected static final Pattern`
  `scriptPattern`
  The Constant scriptPattern.
  `static final Pattern`
  `SERVER_SCRIPT_TAG_PATTERN`
  Predefined pattern that matches `<%`
  `static final Pattern`
  `SERVER_SIDE_INCLUDE_PATTERN`
  Predefined pattern that matches `<--#`
  `protected static final Pattern`
  `skipPattern`
  The Constant skipPattern.
  `protected static final Pattern`
  `stylePattern`
  The Constant stylePattern.
  `protected static final Pattern`
  `styleTypeAttrPattern`
  The Constant styleTypeAttrPattern.
  `protected static final Pattern`
  `surroundingSpacesAllPattern`
  The Constant surroundingSpacesAllPattern.
  `protected static final Pattern`
  `surroundingSpacesMaxPattern`
  The Constant surroundingSpacesMaxPattern.
  `protected static final Pattern`
  `surroundingSpacesMinPattern`
  The Constant surroundingSpacesMinPattern.
  `protected static final Pattern`
  `tagEndSpacePattern`
  The Constant tagEndSpacePattern.
  `protected static final Pattern`
  `tagLastUnquotedValuePattern`
  The Constant tagLastUnquotedValuePattern.
  `protected static final Pattern`
  `tagPropertyPattern`
  The Constant tagPropertyPattern.
  `protected static final Pattern`
  `tagQuotePattern`
  The Constant tagQuotePattern.
  `protected static final Pattern`
  `taPattern`
  The Constant taPattern.
  `protected static final String`
  `TEMP_COND_COMMENT_BLOCK`
  The Constant tempCondCommentBlock.
  `protected static final String`
  `TEMP_EVENT_BLOCK`
  The Constant tempEventBlock.
  `protected static final String`
  `TEMP_LINE_BREAK_BLOCK`
  The Constant tempLineBreakBlock.
  `protected static final String`
  `TEMP_PRE_BLOCK`
  The Constant tempPreBlock.
  `protected static final String`
  `TEMP_SCRIPT_BLOCK`
  The Constant tempScriptBlock.
  `protected static final String`
  `TEMP_SKIP_BLOCK`
  The Constant tempSkipBlock.
  `protected static final String`
  `TEMP_STYLE_BLOCK`
  The Constant tempStyleBlock.
  `protected static final String`
  `TEMP_TEXT_AREA_BLOCK`
  The Constant tempTextAreaBlock.
  `protected static final String`
  `TEMP_USER_BLOCK`
  The Constant tempUserBlock.
  `protected static final Pattern`
  `tempCondCommentPattern`
  The Constant tempCondCommentPattern.
  `protected static final Pattern`
  `tempEventPattern`
  The Constant tempEventPattern.
  `protected static final Pattern`
  `tempLineBreakPattern`
  The Constant tempLineBreakPattern.
  `protected static final Pattern`
  `tempPrePattern`
  The Constant tempPrePattern.
  `protected static final Pattern`
  `tempScriptPattern`
  The Constant tempScriptPattern.
  `protected static final Pattern`
  `tempSkipPattern`
  The Constant tempSkipPattern.
  `protected static final Pattern`
  `tempStylePattern`
  The Constant tempStylePattern.
  `protected static final Pattern`
  `tempTextAreaPattern`
  The Constant tempTextAreaPattern.
  `protected static final Pattern`
  `typeAttrPattern`
  The Constant typeAttrPattern.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `HtmlCompressor()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `String`
  `compress(String html)`
  The main method that compresses given HTML source and returns compressed result.
  `protected String`
  `compressCssStyles(String source)`
  Compress css styles.
  `protected String`
  `compressJavaScript(String source)`
  Compress java script.
  `protected HtmlCompressor`
  `createCompressorClone()`
  Creates the compressor clone.
  `protected void`
  `endStatistics(String html)`
  End statistics.
  `Compressor`
  `getCssCompressor()`
  Returns CSS compressor implementation that will be used to compress inline CSS in HTML.
  `Compressor`
  `getJavaScriptCompressor()`
  Returns JavaScript compressor implementation that will be used to compress inline JavaScript in HTML.
  `List<Pattern>`
  `getPreservePatterns()`
  Returns a list of Patterns defining custom preserving block rules.
  `String`
  `getRemoveSurroundingSpaces()`
  Returns a comma separated list of tags around which spaces will be removed.
  `HtmlCompressorStatistics`
  `getStatistics()`
  Returns `HtmlCompressorStatistics` object containing statistics of the last HTML compression, if enabled.
  `int`
  `getYuiCssLineBreak()`
  Returns number of symbols per line Yahoo YUI Compressor will use during CSS compression.
  `org.mozilla.javascript.ErrorReporter`
  `getYuiErrorReporter()`
  Returns `ErrorReporter` used by YUI Compressor to log error messages during JavasSript compression.
  `int`
  `getYuiJsLineBreak()`
  Returns number of symbols per line Yahoo YUI Compressor will use during JavaScript compression.
  `protected void`
  `initStatistics(String html)`
  Inits the statistics.
  `boolean`
  `isCompressCss()`
  Returns `true` if CSS compression is enabled.
  `boolean`
  `isCompressJavaScript()`
  Returns `true` if JavaScript compression is enabled.
  `boolean`
  `isEnabled()`
  Returns `true` if compression is enabled.
  `boolean`
  `isGenerateStatistics()`
  Returns `true` if HTML compression statistics is generated.
  `boolean`
  `isPreserveLineBreaks()`
  Returns `true` if line breaks will be preserved.
  `boolean`
  `isRemoveComments()`
  Returns `true` if all HTML comments will be removed.
  `boolean`
  `isRemoveFormAttributes()`
  Returns `true` if `method="get"` attributes will be removed from `<form>` tags.
  `boolean`
  `isRemoveHttpProtocol()`
  Returns `true` if `HTTP` protocol will be removed from `href`, `src`, `cite`, and `action` tag attributes.
  `boolean`
  `isRemoveHttpsProtocol()`
  Returns `true` if `HTTPS` protocol will be removed from `href`, `src` , `cite`, and `action` tag attributes.
  `boolean`
  `isRemoveInputAttributes()`
  Returns `true` if `type="text"` attributes will be removed from `<input>` tags.
  `boolean`
  `isRemoveIntertagSpaces()`
  Returns `true` if all inter-tag whitespace characters will be removed.
  `boolean`
  `isRemoveJavaScriptProtocol()`
  Returns `true` if `javascript:` pseudo-protocol will be removed from inline event handlers.
  `boolean`
  `isRemoveLinkAttributes()`
  Returns `true` if unnecessary attributes will be removed from `<link>` tags.
  `boolean`
  `isRemoveMultiSpaces()`
  Returns `true` if all multiple whitespace characters will be replaced with single spaces.
  `boolean`
  `isRemoveQuotes()`
  Returns `true` if all unnecessary quotes will be removed from tag attributes.
  `boolean`
  `isRemoveScriptAttributes()`
  Returns `true` if unnecessary attributes will be removed from `<script>` tags.
  `boolean`
  `isRemoveStyleAttributes()`
  Returns `true` if `type="text/style"` attributes will be removed from `<style>` tags.
  `boolean`
  `isSimpleBooleanAttributes()`
  Returns `true` if boolean attributes will be simplified.
  `boolean`
  `isSimpleDoctype()`
  Returns `true` if existing DOCTYPE declaration will be replaced with simple `<!`
  `boolean`
  `isYuiJsDisableOptimizations()`
  Returns `true` if Yahoo YUI Compressor will disable all the built-in micro optimizations during JavaScript compression.
  `boolean`
  `isYuiJsNoMunge()`
  Returns `true` if Yahoo YUI Compressor will only minify javascript without obfuscating local symbols.
  `boolean`
  `isYuiJsPreserveAllSemiColons()`
  Returns `true` if Yahoo YUI Compressor will preserve unnecessary semicolons during JavaScript compression.
  `protected String`
  `preserveBlocks(String html, List<String> preBlocks, List<String> taBlocks, List<String> scriptBlocks, List<String> styleBlocks, List<String> eventBlocks, List<String> condCommentBlocks, List<String> skipBlocks, List<String> lineBreakBlocks, List<List<String>> userBlocks)`
  Preserve blocks.
  `protected void`
  `processCondCommentBlocks(List<String> condCommentBlocks)`
  Process cond comment blocks.
  `protected void`
  `processEventBlocks(List<String> eventBlocks)`
  Process event blocks.
  `protected String`
  `processHtml(String html)`
  Process html.
  `protected void`
  `processLineBreakBlocks(List<String> lineBreakBlocks)`
  Process line break blocks.
  `protected void`
  `processPreBlocks(List<String> preBlocks)`
  Process pre blocks.
  `protected void`
  `processPreservedBlocks(List<String> preBlocks, List<String> taBlocks, List<String> scriptBlocks, List<String> styleBlocks, List<String> eventBlocks, List<String> condCommentBlocks, List<String> skipBlocks, List<String> lineBreakBlocks, List<List<String>> userBlocks)`
  Process preserved blocks.
  `protected void`
  `processScriptBlocks(List<String> scriptBlocks)`
  Process script blocks.
  `protected void`
  `processSkipBlocks(List<String> skipBlocks)`
  Process skip blocks.
  `protected void`
  `processStyleBlocks(List<String> styleBlocks)`
  Process style blocks.
  `protected void`
  `processTextAreaBlocks(List<String> taBlocks)`
  Process text area blocks.
  `protected void`
  `processUserBlocks(List<List<String>> userBlocks)`
  Process user blocks.
  `protected String`
  `removeComments(String html)`
  Removes the comments.
  `protected String`
  `removeFormAttributes(String html)`
  Removes the form attributes.
  `protected String`
  `removeHttpProtocol(String html)`
  Removes the http protocol.
  `protected String`
  `removeHttpsProtocol(String html)`
  Removes the https protocol.
  `protected String`
  `removeInputAttributes(String html)`
  Removes the input attributes.
  `protected String`
  `removeIntertagSpaces(String html)`
  Removes the intertag spaces.
  `protected String`
  `removeJavaScriptProtocol(String source)`
  Removes the java script protocol.
  `protected String`
  `removeLinkAttributes(String html)`
  Removes the link attributes.
  `protected String`
  `removeMultiSpaces(String html)`
  Removes the multi spaces.
  `protected String`
  `removeQuotesInsideTags(String html)`
  Removes the quotes inside tags.
  `protected String`
  `removeScriptAttributes(String html)`
  Removes the script attributes.
  `protected String`
  `removeSpacesInsideTags(String html)`
  Removes the spaces inside tags.
  `protected String`
  `removeStyleAttributes(String html)`
  Removes the style attributes.
  `protected String`
  `removeSurroundingSpaces(String html)`
  Removes the surrounding spaces.
  `protected String`
  `returnBlocks(String html, List<String> preBlocks, List<String> taBlocks, List<String> scriptBlocks, List<String> styleBlocks, List<String> eventBlocks, List<String> condCommentBlocks, List<String> skipBlocks, List<String> lineBreakBlocks, List<List<String>> userBlocks)`
  Return blocks.
  `void`
  `setCompressCss(boolean compressCss)`
  Enables CSS compression within <style> tags using Yahoo YUI Compressor if set to `true`.
  `void`
  `setCompressJavaScript(boolean compressJavaScript)`
  Enables JavaScript compression within <script> tags using Yahoo YUI Compressor if set to `true`.
  `void`
  `setCssCompressor(Compressor cssCompressor)`
  Sets CSS compressor implementation that will be used to compress inline CSS in HTML.
  `void`
  `setEnabled(boolean enabled)`
  If set to `false` all compression will be bypassed.
  `void`
  `setGenerateStatistics(boolean generateStatistics)`
  If set to `true`, HTML compression statistics will be generated.
  `void`
  `setJavaScriptCompressor(Compressor javaScriptCompressor)`
  Sets JavaScript compressor implementation that will be used to compress inline JavaScript in HTML.
  `void`
  `setPreserveLineBreaks(boolean preserveLineBreaks)`
  If set to `true`, line breaks will be preserved.
  `void`
  `setPreservePatterns(List<Pattern> preservePatterns)`
  This method allows setting custom block preservation rules defined by regular expression patterns.
  `void`
  `setRemoveComments(boolean removeComments)`
  If set to `true` all HTML comments will be removed.
  `void`
  `setRemoveFormAttributes(boolean removeFormAttributes)`
  If set to `true`, `method="get"` attributes will be removed from `<form>` tags.
  `void`
  `setRemoveHttpProtocol(boolean removeHttpProtocol)`
  If set to `true`, `HTTP` protocol will be removed from `href`, `src`, `cite`, and `action` tag attributes.
  `void`
  `setRemoveHttpsProtocol(boolean removeHttpsProtocol)`
  If set to `true`, `HTTPS` protocol will be removed from `href`, `src` , `cite`, and `action` tag attributes.
  `void`
  `setRemoveInputAttributes(boolean removeInputAttributes)`
  If set to `true`, `type="text"` attributes will be removed from `<input>` tags.
  `void`
  `setRemoveIntertagSpaces(boolean removeIntertagSpaces)`
  If set to `true` all inter-tag whitespace characters will be removed.
  `void`
  `setRemoveJavaScriptProtocol(boolean removeJavaScriptProtocol)`
  If set to `true`, `javascript:` pseudo-protocol will be removed from inline event handlers.
  `void`
  `setRemoveLinkAttributes(boolean removeLinkAttributes)`
  If set to `true`, following attributes will be removed from `<link rel="stylesheet">` and `<link rel="alternate stylesheet">` tags: type="text/css" type="text/plain"
  `void`
  `setRemoveMultiSpaces(boolean removeMultiSpaces)`
  If set to `true` all multiple whitespace characters will be replaced with single spaces.
  `void`
  `setRemoveQuotes(boolean removeQuotes)`
  If set to `true` all unnecessary quotes will be removed from tag attributes.
  `void`
  `setRemoveScriptAttributes(boolean removeScriptAttributes)`
  If set to `true`, following attributes will be removed from `<script>` tags: type="text/javascript" type="application/javascript" language="javascript"
  `void`
  `setRemoveStyleAttributes(boolean removeStyleAttributes)`
  If set to `true`, `type="text/style"` attributes will be removed from `<style>` tags.
  `void`
  `setRemoveSurroundingSpaces(String tagList)`
  Enables surrounding spaces removal around provided comma separated list of tags.
  `void`
  `setSimpleBooleanAttributes(boolean simpleBooleanAttributes)`
  If set to `true`, any values of following boolean attributes will be removed: checked selected disabled readonly
  `void`
  `setSimpleDoctype(boolean simpleDoctype)`
  If set to `true`, existing DOCTYPE declaration will be replaced with simple `<!`
  `void`
  `setYuiCssLineBreak(int yuiCssLineBreak)`
  Tells Yahoo YUI Compressor to break lines after the specified number of symbols during CSS compression.
  `void`
  `setYuiErrorReporter(org.mozilla.javascript.ErrorReporter yuiErrorReporter)`
  Sets `ErrorReporter` that YUI Compressor will use for reporting errors during JavaScript compression.
  `void`
  `setYuiJsDisableOptimizations(boolean yuiJsDisableOptimizations)`
  Tells Yahoo YUI Compressor to disable all the built-in micro optimizations during JavaScript compression.
  `void`
  `setYuiJsLineBreak(int yuiJsLineBreak)`
  Tells Yahoo YUI Compressor to break lines after the specified number of symbols during JavaScript compression.
  `void`
  `setYuiJsNoMunge(boolean yuiJsNoMunge)`
  Tells Yahoo YUI Compressor to only minify javascript without obfuscating local symbols.
  `void`
  `setYuiJsPreserveAllSemiColons(boolean yuiJsPreserveAllSemiColons)`
  Tells Yahoo YUI Compressor to preserve unnecessary semicolons during JavaScript compression.
  `protected String`
  `simpleBooleanAttributes(String html)`
  Simple boolean attributes.
  `protected String`
  `simpleDoctype(String html)`
  Simple doctype.

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Field Details

  - ### JS_COMPRESSOR_YUI

    public static final String JS_COMPRESSOR_YUI
    The Constant JS_COMPRESSOR_YUI.
    See Also:
      - Constant Field Values

  - ### JS_COMPRESSOR_CLOSURE

    public static final String JS_COMPRESSOR_CLOSURE
    The Constant JS_COMPRESSOR_CLOSURE.
    See Also:
      - Constant Field Values

  - ### PHP_TAG_PATTERN

    public static final Pattern PHP_TAG_PATTERN
    Predefined pattern that matches `<?php ... ?>` tags. Could be passed inside a list to `setPreservePatterns` method.

  - ### SERVER_SCRIPT_TAG_PATTERN

    public static final Pattern SERVER_SCRIPT_TAG_PATTERN
    Predefined pattern that matches `<% ... %>` tags. Could be passed inside a list to `setPreservePatterns` method.

  - ### SERVER_SIDE_INCLUDE_PATTERN

    public static final Pattern SERVER_SIDE_INCLUDE_PATTERN
    Predefined pattern that matches `<--# ... -->` tags. Could be passed inside a list to `setPreservePatterns` method.

  - ### BLOCK_TAGS_MIN

    public static final String BLOCK_TAGS_MIN
    Predefined list of tags that are very likely to be block-level. Could be passed to `setRemoveSurroundingSpaces` method.
    See Also:
      - Constant Field Values

  - ### BLOCK_TAGS_MAX

    public static final String BLOCK_TAGS_MAX
    Predefined list of tags that are block-level by default, excluding `<div>` and `<li>` tags. Table tags are also included. Could be passed to `setRemoveSurroundingSpaces` method.
    See Also:
      - Constant Field Values

  - ### ALL_TAGS

    public static final String ALL_TAGS
    Could be passed to `setRemoveSurroundingSpaces` method to remove all surrounding spaces (not recommended).
    See Also:
      - Constant Field Values

  - ### TEMP_COND_COMMENT_BLOCK

    protected static final String TEMP_COND_COMMENT_BLOCK
    The Constant tempCondCommentBlock.
    See Also:
      - Constant Field Values

  - ### TEMP_PRE_BLOCK

    protected static final String TEMP_PRE_BLOCK
    The Constant tempPreBlock.
    See Also:
      - Constant Field Values

  - ### TEMP_TEXT_AREA_BLOCK

    protected static final String TEMP_TEXT_AREA_BLOCK
    The Constant tempTextAreaBlock.
    See Also:
      - Constant Field Values

  - ### TEMP_SCRIPT_BLOCK

    protected static final String TEMP_SCRIPT_BLOCK
    The Constant tempScriptBlock.
    See Also:
      - Constant Field Values

  - ### TEMP_STYLE_BLOCK

    protected static final String TEMP_STYLE_BLOCK
    The Constant tempStyleBlock.
    See Also:
      - Constant Field Values

  - ### TEMP_EVENT_BLOCK

    protected static final String TEMP_EVENT_BLOCK
    The Constant tempEventBlock.
    See Also:
      - Constant Field Values

  - ### TEMP_LINE_BREAK_BLOCK

    protected static final String TEMP_LINE_BREAK_BLOCK
    The Constant tempLineBreakBlock.
    See Also:
      - Constant Field Values

  - ### TEMP_SKIP_BLOCK

    protected static final String TEMP_SKIP_BLOCK
    The Constant tempSkipBlock.
    See Also:
      - Constant Field Values

  - ### TEMP_USER_BLOCK

    protected static final String TEMP_USER_BLOCK
    The Constant tempUserBlock.
    See Also:
      - Constant Field Values

  - ### emptyPattern

    protected static final Pattern emptyPattern
    The Constant emptyPattern.

  - ### skipPattern

    protected static final Pattern skipPattern
    The Constant skipPattern.

  - ### condCommentPattern

    protected static final Pattern condCommentPattern
    The Constant condCommentPattern.

  - ### commentPattern

    protected static final Pattern commentPattern
    The Constant commentPattern.

  - ### intertagPattern_TagTag

    protected static final Pattern intertagPattern_TagTag
    The Constant intertagPattern_TagTag.

  - ### intertagPattern_TagCustom

    protected static final Pattern intertagPattern_TagCustom
    The Constant intertagPattern_TagCustom.

  - ### intertagPattern_CustomTag

    protected static final Pattern intertagPattern_CustomTag
    The Constant intertagPattern_CustomTag.

  - ### intertagPattern_CustomCustom

    protected static final Pattern intertagPattern_CustomCustom
    The Constant intertagPattern_CustomCustom.

  - ### multispacePattern

    protected static final Pattern multispacePattern
    The Constant multispacePattern.

  - ### tagEndSpacePattern

    protected static final Pattern tagEndSpacePattern
    The Constant tagEndSpacePattern.

  - ### tagLastUnquotedValuePattern

    protected static final Pattern tagLastUnquotedValuePattern
    The Constant tagLastUnquotedValuePattern.

  - ### tagQuotePattern

    protected static final Pattern tagQuotePattern
    The Constant tagQuotePattern.

  - ### prePattern

    protected static final Pattern prePattern
    The Constant prePattern.

  - ### taPattern

    protected static final Pattern taPattern
    The Constant taPattern.

  - ### scriptPattern

    protected static final Pattern scriptPattern
    The Constant scriptPattern.

  - ### stylePattern

    protected static final Pattern stylePattern
    The Constant stylePattern.

  - ### tagPropertyPattern

    protected static final Pattern tagPropertyPattern
    The Constant tagPropertyPattern.

  - ### cdataPattern

    protected static final Pattern cdataPattern
    The Constant cdataPattern.

  - ### doctypePattern

    protected static final Pattern doctypePattern
    The Constant doctypePattern.

  - ### typeAttrPattern

    protected static final Pattern typeAttrPattern
    The Constant typeAttrPattern.

  - ### jsTypeAttrPattern

    protected static final Pattern jsTypeAttrPattern
    The Constant jsTypeAttrPattern.

  - ### jsLangAttrPattern

    protected static final Pattern jsLangAttrPattern
    The Constant jsLangAttrPattern.

  - ### styleTypeAttrPattern

    protected static final Pattern styleTypeAttrPattern
    The Constant styleTypeAttrPattern.

  - ### linkTypeAttrPattern

    protected static final Pattern linkTypeAttrPattern
    The Constant linkTypeAttrPattern.

  - ### linkRelAttrPattern

    protected static final Pattern linkRelAttrPattern
    The Constant linkRelAttrPattern.

  - ### formMethodAttrPattern

    protected static final Pattern formMethodAttrPattern
    The Constant formMethodAttrPattern.

  - ### inputTypeAttrPattern

    protected static final Pattern inputTypeAttrPattern
    The Constant inputTypeAttrPattern.

  - ### booleanAttrPattern

    protected static final Pattern booleanAttrPattern
    The Constant booleanAttrPattern.

  - ### eventJsProtocolPattern

    protected static final Pattern eventJsProtocolPattern
    The Constant eventJsProtocolPattern.

  - ### httpProtocolPattern

    protected static final Pattern httpProtocolPattern
    The Constant httpProtocolPattern.

  - ### httpsProtocolPattern

    protected static final Pattern httpsProtocolPattern
    The Constant httpsProtocolPattern.

  - ### relExternalPattern

    protected static final Pattern relExternalPattern
    The Constant relExternalPattern.

  - ### eventPattern1

    protected static final Pattern eventPattern1
    The Constant eventPattern1 (unmasked).

  - ### eventPattern2

    protected static final Pattern eventPattern2
    The Constant eventPattern2.

  - ### lineBreakPattern

    protected static final Pattern lineBreakPattern
    The Constant lineBreakPattern.

  - ### surroundingSpacesMinPattern

    protected static final Pattern surroundingSpacesMinPattern
    The Constant surroundingSpacesMinPattern.

  - ### surroundingSpacesMaxPattern

    protected static final Pattern surroundingSpacesMaxPattern
    The Constant surroundingSpacesMaxPattern.

  - ### surroundingSpacesAllPattern

    protected static final Pattern surroundingSpacesAllPattern
    The Constant surroundingSpacesAllPattern.

  - ### tempCondCommentPattern

    protected static final Pattern tempCondCommentPattern
    The Constant tempCondCommentPattern.

  - ### tempPrePattern

    protected static final Pattern tempPrePattern
    The Constant tempPrePattern.

  - ### tempTextAreaPattern

    protected static final Pattern tempTextAreaPattern
    The Constant tempTextAreaPattern.

  - ### tempScriptPattern

    protected static final Pattern tempScriptPattern
    The Constant tempScriptPattern.

  - ### tempStylePattern

    protected static final Pattern tempStylePattern
    The Constant tempStylePattern.

  - ### tempEventPattern

    protected static final Pattern tempEventPattern
    The Constant tempEventPattern.

  - ### tempSkipPattern

    protected static final Pattern tempSkipPattern
    The Constant tempSkipPattern.

  - ### tempLineBreakPattern

    protected static final Pattern tempLineBreakPattern
    The Constant tempLineBreakPattern.

- ## Constructor Details

  - ### HtmlCompressor

    public HtmlCompressor()

- ## Method Details

  - ### compress

    public String compress(String html)
    The main method that compresses given HTML source and returns compressed result.
    Specified by:
      `compress` in interface `Compressor`
    Parameters:
      `html` - HTML content to compress
    Returns:
      compressed content.

  - ### initStatistics

    protected void initStatistics(String html)
    Inits the statistics.
    Parameters:
      `html` - the html

  - ### endStatistics

    protected void endStatistics(String html)
    End statistics.
    Parameters:
      `html` - the html

  - ### preserveBlocks

    protected String preserveBlocks(String html, List<String> preBlocks, List<String> taBlocks, List<String> scriptBlocks, List<String> styleBlocks, List<String> eventBlocks, List<String> condCommentBlocks, List<String> skipBlocks, List<String> lineBreakBlocks, List<List<String>> userBlocks)
    Preserve blocks.
    Parameters:
      `html` - the html
      `preBlocks` - the pre blocks
      `taBlocks` - the ta blocks
      `scriptBlocks` - the script blocks
      `styleBlocks` - the style blocks
      `eventBlocks` - the event blocks
      `condCommentBlocks` - the cond comment blocks
      `skipBlocks` - the skip blocks
      `lineBreakBlocks` - the line break blocks
      `userBlocks` - the user blocks
    Returns:
      the string

  - ### returnBlocks

    protected String returnBlocks(String html, List<String> preBlocks, List<String> taBlocks, List<String> scriptBlocks, List<String> styleBlocks, List<String> eventBlocks, List<String> condCommentBlocks, List<String> skipBlocks, List<String> lineBreakBlocks, List<List<String>> userBlocks)
    Return blocks.
    Parameters:
      `html` - the html
      `preBlocks` - the pre blocks
      `taBlocks` - the ta blocks
      `scriptBlocks` - the script blocks
      `styleBlocks` - the style blocks
      `eventBlocks` - the event blocks
      `condCommentBlocks` - the cond comment blocks
      `skipBlocks` - the skip blocks
      `lineBreakBlocks` - the line break blocks
      `userBlocks` - the user blocks
    Returns:
      the string

  - ### processHtml

    protected String processHtml(String html)
    Process html.
    Parameters:
      `html` - the html
    Returns:
      the string

  - ### removeSurroundingSpaces

    protected String removeSurroundingSpaces(String html)
    Removes the surrounding spaces.
    Parameters:
      `html` - the html
    Returns:
      the string

  - ### removeQuotesInsideTags

    protected String removeQuotesInsideTags(String html)
    Removes the quotes inside tags.
    Parameters:
      `html` - the html
    Returns:
      the string

  - ### removeSpacesInsideTags

    protected String removeSpacesInsideTags(String html)
    Removes the spaces inside tags.
    Parameters:
      `html` - the html
    Returns:
      the string

  - ### removeMultiSpaces

    protected String removeMultiSpaces(String html)
    Removes the multi spaces.
    Parameters:
      `html` - the html
    Returns:
      the string

  - ### removeIntertagSpaces

    protected String removeIntertagSpaces(String html)
    Removes the intertag spaces.
    Parameters:
      `html` - the html
    Returns:
      the string

  - ### removeComments

    protected String removeComments(String html)
    Removes the comments.
    Parameters:
      `html` - the html
    Returns:
      the string

  - ### simpleDoctype

    protected String simpleDoctype(String html)
    Simple doctype.
    Parameters:
      `html` - the html
    Returns:
      the string

  - ### removeScriptAttributes

    protected String removeScriptAttributes(String html)
    Removes the script attributes.
    Parameters:
      `html` - the html
    Returns:
      the string

  - ### removeStyleAttributes

    protected String removeStyleAttributes(String html)
    Removes the style attributes.
    Parameters:
      `html` - the html
    Returns:
      the string

  - ### removeLinkAttributes

    protected String removeLinkAttributes(String html)
    Removes the link attributes.
    Parameters:
      `html` - the html
    Returns:
      the string

  - ### removeFormAttributes

    protected String removeFormAttributes(String html)
    Removes the form attributes.
    Parameters:
      `html` - the html
    Returns:
      the string

  - ### removeInputAttributes

    protected String removeInputAttributes(String html)
    Removes the input attributes.
    Parameters:
      `html` - the html
    Returns:
      the string

  - ### simpleBooleanAttributes

    protected String simpleBooleanAttributes(String html)
    Simple boolean attributes.
    Parameters:
      `html` - the html
    Returns:
      the string

  - ### removeHttpProtocol

    protected String removeHttpProtocol(String html)
    Removes the http protocol.
    Parameters:
      `html` - the html
    Returns:
      the string

  - ### removeHttpsProtocol

    protected String removeHttpsProtocol(String html)
    Removes the https protocol.
    Parameters:
      `html` - the html
    Returns:
      the string

  - ### processPreservedBlocks

    protected void processPreservedBlocks(List<String> preBlocks, List<String> taBlocks, List<String> scriptBlocks, List<String> styleBlocks, List<String> eventBlocks, List<String> condCommentBlocks, List<String> skipBlocks, List<String> lineBreakBlocks, List<List<String>> userBlocks)
    Process preserved blocks.
    Parameters:
      `preBlocks` - the pre blocks
      `taBlocks` - the ta blocks
      `scriptBlocks` - the script blocks
      `styleBlocks` - the style blocks
      `eventBlocks` - the event blocks
      `condCommentBlocks` - the cond comment blocks
      `skipBlocks` - the skip blocks
      `lineBreakBlocks` - the line break blocks
      `userBlocks` - the user blocks

  - ### processPreBlocks

    protected void processPreBlocks(List<String> preBlocks)
    Process pre blocks.
    Parameters:
      `preBlocks` - the pre blocks

  - ### processTextAreaBlocks

    protected void processTextAreaBlocks(List<String> taBlocks)
    Process text area blocks.
    Parameters:
      `taBlocks` - the ta blocks

  - ### processCondCommentBlocks

    protected void processCondCommentBlocks(List<String> condCommentBlocks)
    Process cond comment blocks.
    Parameters:
      `condCommentBlocks` - the cond comment blocks

  - ### processSkipBlocks

    protected void processSkipBlocks(List<String> skipBlocks)
    Process skip blocks.
    Parameters:
      `skipBlocks` - the skip blocks

  - ### processLineBreakBlocks

    protected void processLineBreakBlocks(List<String> lineBreakBlocks)
    Process line break blocks.
    Parameters:
      `lineBreakBlocks` - the line break blocks

  - ### processUserBlocks

    protected void processUserBlocks(List<List<String>> userBlocks)
    Process user blocks.
    Parameters:
      `userBlocks` - the user blocks

  - ### processEventBlocks

    protected void processEventBlocks(List<String> eventBlocks)
    Process event blocks.
    Parameters:
      `eventBlocks` - the event blocks

  - ### removeJavaScriptProtocol

    protected String removeJavaScriptProtocol(String source)
    Removes the java script protocol.
    Parameters:
      `source` - the source
    Returns:
      the string

  - ### processScriptBlocks

    protected void processScriptBlocks(List<String> scriptBlocks)
    Process script blocks.
    Parameters:
      `scriptBlocks` - the script blocks

  - ### processStyleBlocks

    protected void processStyleBlocks(List<String> styleBlocks)
    Process style blocks.
    Parameters:
      `styleBlocks` - the style blocks

  - ### compressJavaScript

    protected String compressJavaScript(String source)
    Compress java script.
    Parameters:
      `source` - the source
    Returns:
      the string

  - ### compressCssStyles

    protected String compressCssStyles(String source)
    Compress css styles.
    Parameters:
      `source` - the source
    Returns:
      the string

  - ### createCompressorClone

    protected HtmlCompressor createCompressorClone()
    Creates the compressor clone.
    Returns:
      the html compressor

  - ### isCompressJavaScript

    public boolean isCompressJavaScript()
    Returns `true` if JavaScript compression is enabled.
    Returns:
      current state of JavaScript compression.

  - ### setCompressJavaScript

    public void setCompressJavaScript(boolean compressJavaScript)
    Enables JavaScript compression within <script> tags using Yahoo YUI Compressor if set to `true`. Default is `false` for performance reasons.

    Note: Compressing JavaScript is not recommended if pages are compressed dynamically on-the-fly because of performance impact. You should consider putting JavaScript into a separate file and compressing it using standalone YUICompressor for example.

    Parameters:
      `compressJavaScript` - set `true` to enable JavaScript compression. Default is `false`
    See Also:
      - Yahoo YUI Compressor

  - ### isCompressCss

    public boolean isCompressCss()
    Returns `true` if CSS compression is enabled.
    Returns:
      current state of CSS compression.

  - ### setCompressCss

    public void setCompressCss(boolean compressCss)
    Enables CSS compression within <style> tags using Yahoo YUI Compressor if set to `true`. Default is `false` for performance reasons.

    Note: Compressing CSS is not recommended if pages are compressed dynamically on-the-fly because of performance impact. You should consider putting CSS into a separate file and compressing it using standalone YUICompressor for example.

    Parameters:
      `compressCss` - set `true` to enable CSS compression. Default is `false`
    See Also:
      - Yahoo YUI Compressor

  - ### isYuiJsNoMunge

    public boolean isYuiJsNoMunge()
    Returns `true` if Yahoo YUI Compressor will only minify javascript without obfuscating local symbols. This corresponds to `--nomunge` command line option.
    Returns:
      `nomunge` parameter value used for JavaScript compression.
    See Also:
      - Yahoo YUI Compressor

  - ### setYuiJsNoMunge

    public void setYuiJsNoMunge(boolean yuiJsNoMunge)
    Tells Yahoo YUI Compressor to only minify javascript without obfuscating local symbols. This corresponds to `--nomunge` command line option. This option has effect only if JavaScript compression is enabled. Default is `false`.
    Parameters:
      `yuiJsNoMunge` - set `true` to enable `nomunge` mode
    See Also:
      - Yahoo YUI Compressor

  - ### isYuiJsPreserveAllSemiColons

    public boolean isYuiJsPreserveAllSemiColons()
    Returns `true` if Yahoo YUI Compressor will preserve unnecessary semicolons during JavaScript compression. This corresponds to `--preserve-semi` command line option.
    Returns:
      `preserve-semi` parameter value used for JavaScript compression.
    See Also:
      - Yahoo YUI Compressor

  - ### setYuiJsPreserveAllSemiColons

    public void setYuiJsPreserveAllSemiColons(boolean yuiJsPreserveAllSemiColons)
    Tells Yahoo YUI Compressor to preserve unnecessary semicolons during JavaScript compression. This corresponds to `--preserve-semi` command line option. This option has effect only if JavaScript compression is enabled. Default is `false`.
    Parameters:
      `yuiJsPreserveAllSemiColons` - set `true` to enable `preserve-semi` mode
    See Also:
      - Yahoo YUI Compressor

  - ### isYuiJsDisableOptimizations

    public boolean isYuiJsDisableOptimizations()
    Returns `true` if Yahoo YUI Compressor will disable all the built-in micro optimizations during JavaScript compression. This corresponds to `--disable-optimizations` command line option.
    Returns:
      `disable-optimizations` parameter value used for JavaScript compression.
    See Also:
      - Yahoo YUI Compressor

  - ### setYuiJsDisableOptimizations

    public void setYuiJsDisableOptimizations(boolean yuiJsDisableOptimizations)
    Tells Yahoo YUI Compressor to disable all the built-in micro optimizations during JavaScript compression. This corresponds to `--disable-optimizations` command line option. This option has effect only if JavaScript compression is enabled. Default is `false`.
    Parameters:
      `yuiJsDisableOptimizations` - set `true` to enable `disable-optimizations` mode
    See Also:
      - Yahoo YUI Compressor

  - ### getYuiJsLineBreak

    public int getYuiJsLineBreak()
    Returns number of symbols per line Yahoo YUI Compressor will use during JavaScript compression. This corresponds to `--line-break` command line option.
    Returns:
      `line-break` parameter value used for JavaScript compression.
    See Also:
      - Yahoo YUI Compressor

  - ### setYuiJsLineBreak

    public void setYuiJsLineBreak(int yuiJsLineBreak)
    Tells Yahoo YUI Compressor to break lines after the specified number of symbols during JavaScript compression. This corresponds to `--line-break` command line option. This option has effect only if JavaScript compression is enabled. Default is `-1` to disable line breaks.
    Parameters:
      `yuiJsLineBreak` - set number of symbols per line
    See Also:
      - Yahoo YUI Compressor

  - ### getYuiCssLineBreak

    public int getYuiCssLineBreak()
    Returns number of symbols per line Yahoo YUI Compressor will use during CSS compression. This corresponds to `--line-break` command line option.
    Returns:
      `line-break` parameter value used for CSS compression.
    See Also:
      - Yahoo YUI Compressor

  - ### setYuiCssLineBreak

    public void setYuiCssLineBreak(int yuiCssLineBreak)
    Tells Yahoo YUI Compressor to break lines after the specified number of symbols during CSS compression. This corresponds to `--line-break` command line option. This option has effect only if CSS compression is enabled. Default is `-1` to disable line breaks.
    Parameters:
      `yuiCssLineBreak` - set number of symbols per line
    See Also:
      - Yahoo YUI Compressor

  - ### isRemoveQuotes

    public boolean isRemoveQuotes()
    Returns `true` if all unnecessary quotes will be removed from tag attributes.
    Returns:
      true, if is removes the quotes

  - ### setRemoveQuotes

    public void setRemoveQuotes(boolean removeQuotes)
    If set to `true` all unnecessary quotes will be removed from tag attributes. Default is `false`.

    Note: Even though quotes are removed only when it is safe to do so, it still might break strict HTML validation. Turn this option on only if a page validation is not very important or to squeeze the most out of the compression. This option has no performance impact.

    Parameters:
      `removeQuotes` - set `true` to remove unnecessary quotes from tag attributes

  - ### isEnabled

    public boolean isEnabled()
    Returns `true` if compression is enabled.
    Returns:
      `true` if compression is enabled.

  - ### setEnabled

    public void setEnabled(boolean enabled)
    If set to `false` all compression will be bypassed. Might be useful for testing purposes. Default is `true`.
    Parameters:
      `enabled` - set `false` to bypass all compression

  - ### isRemoveComments

    public boolean isRemoveComments()
    Returns `true` if all HTML comments will be removed.
    Returns:
      `true` if all HTML comments will be removed

  - ### setRemoveComments

    public void setRemoveComments(boolean removeComments)
    If set to `true` all HTML comments will be removed. Default is `true`.
    Parameters:
      `removeComments` - set `true` to remove all HTML comments

  - ### isRemoveMultiSpaces

    public boolean isRemoveMultiSpaces()
    Returns `true` if all multiple whitespace characters will be replaced with single spaces.
    Returns:
      `true` if all multiple whitespace characters will be replaced with single spaces.

  - ### setRemoveMultiSpaces

    public void setRemoveMultiSpaces(boolean removeMultiSpaces)
    If set to `true` all multiple whitespace characters will be replaced with single spaces. Default is `true`.
    Parameters:
      `removeMultiSpaces` - set `true` to replace all multiple whitespace characters will single spaces.

  - ### isRemoveIntertagSpaces

    public boolean isRemoveIntertagSpaces()
    Returns `true` if all inter-tag whitespace characters will be removed.
    Returns:
      `true` if all inter-tag whitespace characters will be removed.

  - ### setRemoveIntertagSpaces

    public void setRemoveIntertagSpaces(boolean removeIntertagSpaces)
    If set to `true` all inter-tag whitespace characters will be removed. Default is `false`.

    Note: It is fairly safe to turn this option on unless you rely on spaces for page formatting. Even if you do, you can always preserve required spaces with `&nbsp;`. This option has no performance impact.

    Parameters:
      `removeIntertagSpaces` - set `true` to remove all inter-tag whitespace characters

  - ### getPreservePatterns

    public List<Pattern> getPreservePatterns()
    Returns a list of Patterns defining custom preserving block rules.
    Returns:
      list of `Pattern` objects defining rules for preserving block rules

  - ### setPreservePatterns

    public void setPreservePatterns(List<Pattern> preservePatterns)
    This method allows setting custom block preservation rules defined by regular expression patterns. Blocks that match provided patterns will be skipped during HTML compression.

    Custom preservation rules have higher priority than default rules. Priority between custom rules are defined by their position in a list (beginning of a list has higher priority).

    Besides custom patterns, you can use 3 predefined patterns: `PHP_TAG_PATTERN`, `SERVER_SCRIPT_TAG_PATTERN`, `SERVER_SIDE_INCLUDE_PATTERN`.

    Parameters:
      `preservePatterns` - List of `Pattern` objects that will be used to skip matched blocks during compression

  - ### getYuiErrorReporter

    public org.mozilla.javascript.ErrorReporter getYuiErrorReporter()
    Returns `ErrorReporter` used by YUI Compressor to log error messages during JavasSript compression.
    Returns:
      `ErrorReporter` used by YUI Compressor to log error messages during JavasSript compression
    See Also:
      - Yahoo YUI Compressor
      - Error Reporter Interface

  - ### setYuiErrorReporter

    public void setYuiErrorReporter(org.mozilla.javascript.ErrorReporter yuiErrorReporter)
    Sets `ErrorReporter` that YUI Compressor will use for reporting errors during JavaScript compression. If no `ErrorReporter` was provided `YuiJavaScriptCompressor.DefaultErrorReporter` will be used which reports errors to `System.err` stream.
    Parameters:
      `yuiErrorReporter` - `ErrorReporter` that will be used by YUI Compressor
    See Also:
      - `YuiJavaScriptCompressor.DefaultErrorReporter`
      - Yahoo YUI Compressor
      - ErrorReporter Interface

  - ### getJavaScriptCompressor

    public Compressor getJavaScriptCompressor()
    Returns JavaScript compressor implementation that will be used to compress inline JavaScript in HTML.
    Returns:
      `Compressor` implementation that will be used to compress inline JavaScript in HTML.
    See Also:
      - `YuiJavaScriptCompressor`
      - `ClosureJavaScriptCompressor`
      - Yahoo YUI Compressor
      - Google Closure Compiler

  - ### setJavaScriptCompressor

    public void setJavaScriptCompressor(Compressor javaScriptCompressor)
    Sets JavaScript compressor implementation that will be used to compress inline JavaScript in HTML.

    HtmlCompressor currently comes with basic implementations for Yahoo YUI Compressor (called `YuiJavaScriptCompressor`) and Google Closure Compiler (called `ClosureJavaScriptCompressor`) that should be enough for most cases, but users can also create their own JavaScript compressors for custom needs.

    If no compressor is set `YuiJavaScriptCompressor` will be used by default.

    Parameters:
      `javaScriptCompressor` - `Compressor` implementation that will be used for inline JavaScript compression
    See Also:
      - `YuiJavaScriptCompressor`
      - `ClosureJavaScriptCompressor`
      - Yahoo YUI Compressor
      - Google Closure Compiler

  - ### getCssCompressor

    public Compressor getCssCompressor()
    Returns CSS compressor implementation that will be used to compress inline CSS in HTML.
    Returns:
      `Compressor` implementation that will be used to compress inline CSS in HTML.
    See Also:
      - `YuiCssCompressor`
      - Yahoo YUI Compressor

  - ### setCssCompressor

    public void setCssCompressor(Compressor cssCompressor)
    Sets CSS compressor implementation that will be used to compress inline CSS in HTML.

    HtmlCompressor currently comes with basic implementation for Yahoo YUI Compressor (called `YuiCssCompressor`), but users can also create their own CSS compressors for custom needs.

    If no compressor is set `YuiCssCompressor` will be used by default.

    Parameters:
      `cssCompressor` - `Compressor` implementation that will be used for inline CSS compression
    See Also:
      - `YuiCssCompressor`
      - Yahoo YUI Compressor

  - ### isSimpleDoctype

    public boolean isSimpleDoctype()
    Returns `true` if existing DOCTYPE declaration will be replaced with simple `<!DOCTYPE html>` declaration.
    Returns:
      `true` if existing DOCTYPE declaration will be replaced with simple `<!DOCTYPE html>` declaration.

  - ### setSimpleDoctype

    public void setSimpleDoctype(boolean simpleDoctype)
    If set to `true`, existing DOCTYPE declaration will be replaced with simple `<!DOCTYPE html>` declaration. Default is `false`.
    Parameters:
      `simpleDoctype` - set `true` to replace existing DOCTYPE declaration with `<!DOCTYPE html>`

  - ### isRemoveScriptAttributes

    public boolean isRemoveScriptAttributes()
    Returns `true` if unnecessary attributes will be removed from `<script>` tags.
    Returns:
      `true` if unnecessary attributes will be removed from `<script>` tags

  - ### setRemoveScriptAttributes

    public void setRemoveScriptAttributes(boolean removeScriptAttributes)
    If set to `true`, following attributes will be removed from `<script>` tags:
    - type="text/javascript"
    - type="application/javascript"
    - language="javascript"

    Default is `false`.

    Parameters:
      `removeScriptAttributes` - set `true` to remove unnecessary attributes from `<script>` tags

  - ### isRemoveStyleAttributes

    public boolean isRemoveStyleAttributes()
    Returns `true` if `type="text/style"` attributes will be removed from `<style>` tags.
    Returns:
      `true` if `type="text/style"` attributes will be removed from `<style>` tags

  - ### setRemoveStyleAttributes

    public void setRemoveStyleAttributes(boolean removeStyleAttributes)
    If set to `true`, `type="text/style"` attributes will be removed from `<style>` tags. Default is `false`.
    Parameters:
      `removeStyleAttributes` - set `true` to remove `type="text/style"` attributes from `<style>` tags

  - ### isRemoveLinkAttributes

    public boolean isRemoveLinkAttributes()
    Returns `true` if unnecessary attributes will be removed from `<link>` tags.
    Returns:
      `true` if unnecessary attributes will be removed from `<link>` tags

  - ### setRemoveLinkAttributes

    public void setRemoveLinkAttributes(boolean removeLinkAttributes)
    If set to `true`, following attributes will be removed from `<link rel="stylesheet">` and `<link rel="alternate stylesheet">` tags:
    - type="text/css"
    - type="text/plain"

    Default is `false`.

    Parameters:
      `removeLinkAttributes` - set `true` to remove unnecessary attributes from `<link>` tags

  - ### isRemoveFormAttributes

    public boolean isRemoveFormAttributes()
    Returns `true` if `method="get"` attributes will be removed from `<form>` tags.
    Returns:
      `true` if `method="get"` attributes will be removed from `<form>` tags

  - ### setRemoveFormAttributes

    public void setRemoveFormAttributes(boolean removeFormAttributes)
    If set to `true`, `method="get"` attributes will be removed from `<form>` tags. Default is `false`.
    Parameters:
      `removeFormAttributes` - set `true` to remove `method="get"` attributes from `<form>` tags

  - ### isRemoveInputAttributes

    public boolean isRemoveInputAttributes()
    Returns `true` if `type="text"` attributes will be removed from `<input>` tags.
    Returns:
      `true` if `type="text"` attributes will be removed from `<input>` tags

  - ### setRemoveInputAttributes

    public void setRemoveInputAttributes(boolean removeInputAttributes)
    If set to `true`, `type="text"` attributes will be removed from `<input>` tags. Default is `false`.
    Parameters:
      `removeInputAttributes` - set `true` to remove `type="text"` attributes from `<input>` tags

  - ### isSimpleBooleanAttributes

    public boolean isSimpleBooleanAttributes()
    Returns `true` if boolean attributes will be simplified.
    Returns:
      `true` if boolean attributes will be simplified

  - ### setSimpleBooleanAttributes

    public void setSimpleBooleanAttributes(boolean simpleBooleanAttributes)
    If set to `true`, any values of following boolean attributes will be removed:
    - checked
    - selected
    - disabled
    - readonly

    For example, `<input readonly="readonly">` would become `<input readonly>`

    Default is `false`.

    Parameters:
      `simpleBooleanAttributes` - set `true` to simplify boolean attributes

  - ### isRemoveJavaScriptProtocol

    public boolean isRemoveJavaScriptProtocol()
    Returns `true` if `javascript:` pseudo-protocol will be removed from inline event handlers.
    Returns:
      `true` if `javascript:` pseudo-protocol will be removed from inline event handlers.

  - ### setRemoveJavaScriptProtocol

    public void setRemoveJavaScriptProtocol(boolean removeJavaScriptProtocol)
    If set to `true`, `javascript:` pseudo-protocol will be removed from inline event handlers.

    For example, `<a onclick="javascript:alert()">` would become `<a onclick="alert()">`

    Default is `false`.

    Parameters:
      `removeJavaScriptProtocol` - set `true` to remove `javascript:` pseudo-protocol from inline event handlers.

  - ### isRemoveHttpProtocol

    public boolean isRemoveHttpProtocol()
    Returns `true` if `HTTP` protocol will be removed from `href`, `src`, `cite`, and `action` tag attributes.
    Returns:
      `true` if `HTTP` protocol will be removed from `href`, `src`, `cite`, and `action` tag attributes.

  - ### setRemoveHttpProtocol

    public void setRemoveHttpProtocol(boolean removeHttpProtocol)
    If set to `true`, `HTTP` protocol will be removed from `href`, `src`, `cite`, and `action` tag attributes. URL without a protocol would make a browser use document's current protocol instead.

    Tags marked with `rel="external"` will be skipped.

    For example:

    `<a href="http://example.com"> <script src="http://google.com/js.js" rel="external">`

    would become:

    `<a href="//example.com"> <script src="http://google.com/js.js" rel="external">`

    Default is `false`.

    Parameters:
      `removeHttpProtocol` - set `true` to remove `HTTP` protocol from tag attributes

  - ### isRemoveHttpsProtocol

    public boolean isRemoveHttpsProtocol()
    Returns `true` if `HTTPS` protocol will be removed from `href`, `src` , `cite`, and `action` tag attributes.
    Returns:
      `true` if `HTTPS` protocol will be removed from `href`, `src` , `cite`, and `action` tag attributes.

  - ### setRemoveHttpsProtocol

    public void setRemoveHttpsProtocol(boolean removeHttpsProtocol)
    If set to `true`, `HTTPS` protocol will be removed from `href`, `src` , `cite`, and `action` tag attributes. URL without a protocol would make a browser use document's current protocol instead.

    Tags marked with `rel="external"` will be skipped.

    For example:

    `<a href="https://example.com"> <script src="https://google.com/js.js" rel="external">`

    would become:

    `<a href="//example.com"> <script src="https://google.com/js.js" rel="external">`

    Default is `false`.

    Parameters:
      `removeHttpsProtocol` - set `true` to remove `HTTP` protocol from tag attributes

  - ### isGenerateStatistics

    public boolean isGenerateStatistics()
    Returns `true` if HTML compression statistics is generated.
    Returns:
      `true` if HTML compression statistics is generated

  - ### setGenerateStatistics

    public void setGenerateStatistics(boolean generateStatistics)
    If set to `true`, HTML compression statistics will be generated.

    Important: Enabling statistics makes HTML compressor not thread safe.

    Default is `false`.

    Parameters:
      `generateStatistics` - set `true` to generate HTML compression statistics
    See Also:
      - `getStatistics()`

  - ### getStatistics

    public HtmlCompressorStatistics getStatistics()
    Returns `HtmlCompressorStatistics` object containing statistics of the last HTML compression, if enabled. Should be called after `compress(String)`
    Returns:
      `HtmlCompressorStatistics` object containing last HTML compression statistics
    See Also:
      - `HtmlCompressorStatistics`
      - `setGenerateStatistics(boolean)`

  - ### isPreserveLineBreaks

    public boolean isPreserveLineBreaks()
    Returns `true` if line breaks will be preserved.
    Returns:
      `true` if line breaks will be preserved.

  - ### setPreserveLineBreaks

    public void setPreserveLineBreaks(boolean preserveLineBreaks)
    If set to `true`, line breaks will be preserved.

    Default is `false`.

    Parameters:
      `preserveLineBreaks` - set `true` to preserve line breaks

  - ### getRemoveSurroundingSpaces

    public String getRemoveSurroundingSpaces()
    Returns a comma separated list of tags around which spaces will be removed.
    Returns:
      a comma separated list of tags around which spaces will be removed.

  - ### setRemoveSurroundingSpaces

    public void setRemoveSurroundingSpaces(String tagList)
    Enables surrounding spaces removal around provided comma separated list of tags.

    Besides custom defined lists, you can pass one of 3 predefined lists of tags: `BLOCK_TAGS_MIN`, `BLOCK_TAGS_MAX`, `ALL_TAGS`.

    Parameters:
      `tagList` - a comma separated list of tags around which spaces will be removed