CSS tokenizing and minimizing library for Lua 5.1. No external dependencies - only pure Lua. The library tries to closely follow the CSS3 specification.
css.lua is the library. utf8.lua is used by the library. Those are the only files you need.
local css = [[
div {
	color: blue;
	/* Blah. */
	background-color: #36B !important;
}
@media (min-width: 800px) {
	.box a:hover { text-decoration: underline; }
}
]]
local cssLib = require("css")
local minimizedCss = cssLib.minimize(css)
-- minimizedCss is:
-- div{color:blue;background-color:#36B!important}@media(min-width:800px){.box a:hover{text-decoration:underline}}cssString = minimize( cssString [, options ] )
tokens = minimize( tokens [, options ] )
Minimize a CSS string or a token array. In the case of tokens, the original array is unchanged and a new array is returned. See available options.
cssString = serialize( tokens [, options ] )
Convert a token array to CSS string. See available options.
cssString = serializeAndMinimize( tokens [, options ] )
Convert a token array to minimized CSS string. See available options.
tokens = tokenize( cssString )
Convert a CSS string to tokens.
local tokens = cssLib.tokenize(css)
for i, token in ipairs(tokens) do
	print(i, token.type, token.value, token.unit)
endNote that all instances of U+0000 (NULL) code points are converted to U+FFFD (replacement character) per the specification.
version = _VERSION
Not a function! Get the version of the library, i.e. "1.0.2".
options is a table that can have any of these fields:
Enable automatic conversion of zero values (e.g. 0px or 0%) to become simply 0 during minification.
The default value is true.
Trigger an error if a badString or badUrl token is encountered during minification.
Otherwise, the error message is only printed.
The default value is false.
token = {
	-- Always present:
	type           = tokenType,
	-- Present in some token types:
	value          = tokenValue,
	from           = unicodeRangeStart,
	idType         = hashTokenIdentifierType,
	numberType     = numberType,
	quoteCharacter = stringQuoteCharacter,
	representation = originalNumberRepresentation,
	to             = unicodeRangeEnd,
	unit           = dimensionUnit,
}| Type | Value | Description | 
|---|---|---|
| "atKeyword" | The name, e.g. "media". | @whatever | 
| "badString" | nothing | Malformed string. | 
| "badUrl" | nothing | Malformed url(). | 
| "cdo""cdc" | nothing | Long ago people used to wrap embedded CSS code inside HTML comments, thus these tokens ( "<!--"and"-->", respectively). | 
| "colon" | nothing | : | 
| "columnMatch" | nothing | Token that exists to help with parsing: ||. | 
| "comma" | nothing | , | 
| "comment" | The contents of the comment. | /* Blah. */Note that comments starting with !are preserved during minification, e.g./*! Copyright info. */. | 
| "dashMatch" | nothing | |= | 
| "dimension" | The number. | Numeric value with a unit. This token has a unitfield, e.g. with the value"px".This token also has the extra fields that the numbertype has. | 
| "function" | The name of the function, e.g. "calc". | An identifier followed by a (. | 
| "hash" | The name, e.g. "commentBox"or"A0FF5C". | Matches include ID selectors and color values. This token also has an idTypefield with the value"id"or"unrestricted"(the latter generally meaning the value is a color starting with a number, e.g.#2FBBAA). | 
| "ident" | The name, e.g. "div"or"font-size". | Any isolated identifier. | 
| "includeMatch" | nothing | ~= | 
| "number" | The number. | Plain numeric value. This token also has a numberTypeandrepresentationfield.numberTypecan be either"integer"or"number". | 
| "percentage" | The number. | Numeric percentage value. This token also has the extra fields that the numbertype has. | 
| "prefixMatch" | nothing | ^= | 
| "semicolon" | nothing | ; | 
| "string" | The contents of the string. | This token also has a quoteCharacterfield whose value is either"(quote) or'(apostrophe).Also see badString. | 
| "substringMatch" | nothing | *= | 
| "suffixMatch" | nothing | $= | 
| "unicodeRange" | nothing | Unicode ranges has a fromand atofield with Unicode code points. | 
| "url" | The URL. | This token also has a quoteCharacterfield whose value is either"(quote),'(apostrophe) or an empty string.Also see badUrl. | 
| "whitespace" | The contents of the whitespace sequence. | Whitespace characters are space, horizontal tab and newline. Note that all line endings are normalized into newlines. | 
| "(",")" | nothing | (and), respectively. | 
| "[","]" | nothing | [and], respectively. | 
| "{","}" | nothing | {and}, respectively. | 
| "delim" | The delimiter. | Any other isolated punctuation character, e.g. "."or"+". |