module.exports = { decorator: function(handlers) { var curNode = null; var prev = null; var tokens = []; return { children: handlers.children, node: function(node) { var tmp = curNode; curNode = node; handlers.node.call(this, node); curNode = tmp; }, chunk: function(chunk) { if (tokens.length > 0) { switch (curNode.type) { case 'Dimension': case 'HexColor': case 'IdSelector': case 'Percentage': if (prev.node === curNode) { prev.value += chunk; return; } break; case 'Function': case 'PseudoClassSelector': case 'PseudoElementSelector': case 'Url': if (chunk === '(') { prev.value += chunk; return; } break; case 'Atrule': if (prev.node === curNode && prev.value === '@') { prev.value += chunk; return; } break; } } tokens.push(prev = { value: chunk, node: curNode }); }, result: function() { return tokens; } }; } };