Files
emacs/lisp/emacs-application-framework/app/mermaid/node_modules/strip-css-comments/index.js
2020-12-05 21:29:49 +01:00

75 lines
1.7 KiB
JavaScript

'use strict';
var isRegExp = require('is-regexp');
module.exports = function (str, opts) {
str = str.toString();
opts = opts || {};
var preserveFilter;
var comment = '';
var currentChar = '';
var insideString = false;
var preserveImportant = !(opts.preserve === false || opts.all === true);
var ret = '';
if (typeof opts.preserve === 'function') {
preserveImportant = false;
preserveFilter = opts.preserve;
} else if (isRegExp(opts.preserve)) {
preserveImportant = false;
preserveFilter = function (comment) {
return opts.preserve.test(comment);
};
}
for (var i = 0; i < str.length; i++) {
currentChar = str[i];
if (str[i - 1] !== '\\') {
if (currentChar === '"' || currentChar === '\'') {
if (insideString === currentChar) {
insideString = false;
} else if (!insideString) {
insideString = currentChar;
}
}
}
// find beginning of /* type comment
if (!insideString && currentChar === '/' && str[i + 1] === '*') {
// ignore important comment when configured to preserve comments using important syntax: /*!
if (!(preserveImportant && str[i + 2] === '!')) {
var j = i + 2;
// iterate over comment
for (; j < str.length; j++) {
// find end of comment
if (str[j] === '*' && str[j + 1] === '/') {
if (preserveFilter) {
// evaluate comment text
ret = preserveFilter(comment) ? ret + ('/*' + comment + '*/') : ret;
comment = '';
}
break;
}
// store comment text to be evaluated by the filter when the end of the comment is reached
if (preserveFilter) {
comment += str[j];
}
}
// resume iteration over CSS string from the end of the comment
i = j + 1;
continue;
}
}
ret += currentChar;
}
return ret;
};