Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/bleargh45/css-minifier-xs
XS based CSS minifier
https://github.com/bleargh45/css-minifier-xs
css-minifier minification minifier minify-css perl xs
Last synced: about 1 month ago
JSON representation
XS based CSS minifier
- Host: GitHub
- URL: https://github.com/bleargh45/css-minifier-xs
- Owner: bleargh45
- Created: 2015-08-13T17:49:03.000Z (over 9 years ago)
- Default Branch: main
- Last Pushed: 2023-06-12T20:11:02.000Z (over 1 year ago)
- Last Synced: 2024-10-15T16:24:08.213Z (3 months ago)
- Topics: css-minifier, minification, minifier, minify-css, perl, xs
- Language: Perl
- Homepage: http://metacpan.org/release/CSS-Minifier-XS/
- Size: 139 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: Changes
Awesome Lists containing this project
README
# NAME
CSS::Minifier::XS - XS based CSS minifier
# SYNOPSIS
```perl
use CSS::Minifier::XS qw(minify);
my $css = '...';
my $minified = minify($css);
```# DESCRIPTION
`CSS::Minifier::XS` is a CSS "minifier"; its designed to remove unnecessary
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 unnecessary 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 unnecessary
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 ([email protected])
# 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`.