mirror of
https://github.com/wahyd4/cdnjs.git
synced 2026-08-17 08:46:19 +10:00
78 lines
2.0 KiB
JavaScript
78 lines
2.0 KiB
JavaScript
(function() {
|
|
var QuoteScanner = function QuoteScanner(data) {
|
|
this.data = data;
|
|
};
|
|
|
|
var findCommentEnd = function(data, matched, cursor) {
|
|
var commentStartMark = '/*';
|
|
var commentEndMark = '*/';
|
|
var escapeMark = '\\';
|
|
var commentStarted = false;
|
|
|
|
while (true) {
|
|
if (data[cursor] === undefined)
|
|
break;
|
|
if (!commentStarted && data[cursor] == commentEndMark[1] && data[cursor - 1] == commentEndMark[0])
|
|
break;
|
|
if (data[cursor] == matched && data[cursor - 1] != escapeMark)
|
|
break;
|
|
if (data[cursor] == commentStartMark[1] && data[cursor - 1] == commentStartMark[0])
|
|
commentStarted = true;
|
|
|
|
cursor++;
|
|
}
|
|
|
|
return cursor;
|
|
};
|
|
|
|
QuoteScanner.prototype.each = function(callback) {
|
|
var data = this.data;
|
|
var tempData = [];
|
|
var nextStart = 0;
|
|
var nextEnd = 0;
|
|
var cursor = 0;
|
|
var matchedMark = null;
|
|
var singleMark = '\'';
|
|
var doubleMark = '"';
|
|
var dataLength = data.length;
|
|
|
|
for (; nextEnd < data.length;) {
|
|
var nextStartSingle = data.indexOf(singleMark, nextEnd + 1);
|
|
var nextStartDouble = data.indexOf(doubleMark, nextEnd + 1);
|
|
|
|
if (nextStartSingle == -1)
|
|
nextStartSingle = dataLength;
|
|
if (nextStartDouble == -1)
|
|
nextStartDouble = dataLength;
|
|
|
|
if (nextStartSingle < nextStartDouble) {
|
|
nextStart = nextStartSingle;
|
|
matchedMark = singleMark;
|
|
} else {
|
|
nextStart = nextStartDouble;
|
|
matchedMark = doubleMark;
|
|
}
|
|
|
|
if (nextStart == -1)
|
|
break;
|
|
|
|
nextEnd = findCommentEnd(data, matchedMark, nextStart + 1);
|
|
if (nextEnd == -1)
|
|
break;
|
|
|
|
var text = data.substring(nextStart, nextEnd + 1);
|
|
tempData.push(data.substring(cursor, nextStart));
|
|
if (text.length > 0)
|
|
callback(text, tempData, nextStart);
|
|
|
|
cursor = nextEnd + 1;
|
|
}
|
|
|
|
return tempData.length > 0 ?
|
|
tempData.join('') + data.substring(cursor, data.length) :
|
|
data;
|
|
};
|
|
|
|
module.exports = QuoteScanner;
|
|
})();
|