NAME CSS::Minifier::XS - XS based CSS minifier SYNOPSIS use CSS::Minifier::XS qw(minify); $minified = minify($css); DESCRIPTION "CSS::Minifier::XS" is a CSS "minifier"; its designed to remove un-necessary whitespace and comments from CSS files, while also not breaking the CSS. "CSS::Minifier::XS" is similar in function to "CSS::Minifier", but is substantially faster as its written in XS and not just pure Perl. METHODS minify($css) Minifies the given $css, returning the minified CSS back to the caller. HOW IT WORKS "CSS::Minifier::XS" minifies the CSS by removing un-necessary whitespace from CSS documents. Comment blocks are also removed, *except* when (a) they contain the word "copyright" in them, or (b) they're needed to implement the "Mac/IE Comment Hack". Internally, the minification is done by taking multiple passes through the CSS document: Pass 1: Tokenize First, we go through and parse the CSS document into a series of tokens internally. The tokenizing process does not check to make sure that you've got syntactically valid CSS, it just breaks up the text into a stream of tokens suitable for processing by the subsequent stages. Pass 2: Collapse We then march through the token list and collapse certain tokens down to their smallest possible representation. *If* they're still included in the final results we only want to include them at their shortest. Whitespace Runs of multiple whitespace characters are reduced down to a single whitespace character. If the whitespace contains any "end of line" (EOL) characters, then the end result is the *first* EOL character encountered. Otherwise, the result is the first whitespace character in the run. Comments Comments implementing the "Mac/IE Comment Hack" are collapsed down to the smallest possible comment that would still implement the hack ("/*\*/" to start the hack, and "/**/" to end it). Zero Units Zero Units (e.g. "0px") are reduced down to just "0", as the CSS specification indicates that the unit is not required when its a zero value. Pass 3: Pruning We then go back through the token list and prune and remove un-necessary tokens. Whitespace Wherever possible, whitespace is removed; before+after comment blocks, and before+after various symbols/sigils. Comments Comments that either (a) are needed to implement the "Mac/IE Comment Hack", or that (b) contain the word "copyright" in them are preserved. All other comments are removed. Symbols/Sigils Semi-colons that are immediately followed by a closing brace (e.g. ";}") are removed; semi-colons are needed to separate multiple declarations, but aren't required at the end of a group. Everything else We keep everything else; identifiers, quoted literal strings, symbols/sigils, etc. Pass 4: Re-assembly Lastly, we go back through the token list and re-assemble it all back into a single CSS string, which is then returned back to the caller. AUTHOR Graham TerMarsch (cpan@howlingfrog.com) COPYRIGHT Copyright (C) 2007-, Graham TerMarsch. All Rights Reserved. This is free software; you can redistribute it and/or modify it under the same license as Perl itself. SEE ALSO "CSS::Minifier".