diff --git a/lib/preprocess.js b/lib/preprocess.js index 1d10bd7..65c7b6b 100644 --- a/lib/preprocess.js +++ b/lib/preprocess.js @@ -187,20 +187,17 @@ function preprocessor(src, context, opts, noRestoreEol) { }); rv = replace(rv, opts.type.exec, function (match, name, value) { - name = (name || '').trim(); - value = value || ''; + var reToken = new RegExp(/^\s*(?:("|')(.*?)(?:\1\s*,?|$)|([^,]*?)\s*(?:,|$))/), + params = []; - var params = value.split(','); - var stringRegex = /^['"](.*)['"]$/; + function token2param(s, q, str, prop) { + params.push(typeof str !== 'undefined' ? str : getDeepPropFromObj(context, prop)); + return ''; + } - params = params.map(function(param){ - param = param.trim(); - if (stringRegex.test(param)) { // handle string parameter - return param.replace(stringRegex, '$1'); - } else { // handle variable parameter - return getDeepPropFromObj(context, param); - } - }); + name = (name || '').trim(); + value = value == null ? ' ' : value + ' '; // space for end of comma + while (value.length) { value = value.replace(reToken, token2param); } var fn = getDeepPropFromObj(context, name); if (!fn || typeof fn !== 'function') return '';