You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
// Normalize input string
|
|
|
|
|
|
|
|
'use strict';
|
|
|
|
|
|
|
|
|
|
|
|
var TABS_SCAN_RE = /[\n\t]/g;
|
|
|
|
var NEWLINES_RE = /\r[\n\u0085]|[\u2424\u2028\u0085]/g;
|
|
|
|
var NULL_RE = /\u0000/g;
|
|
|
|
|
|
|
|
|
|
|
|
module.exports = function inline(state) {
|
|
|
|
var str, lineStart, lastTabPos;
|
|
|
|
|
|
|
|
// Normalize newlines
|
|
|
|
str = state.src.replace(NEWLINES_RE, '\n');
|
|
|
|
|
|
|
|
// Replace NULL characters
|
|
|
|
str = str.replace(NULL_RE, '\uFFFD');
|
|
|
|
|
|
|
|
// Replace tabs with proper number of spaces (1..4)
|
|
|
|
if (str.indexOf('\t') >= 0) {
|
|
|
|
lineStart = 0;
|
|
|
|
lastTabPos = 0;
|
|
|
|
|
|
|
|
str = str.replace(TABS_SCAN_RE, function (match, offset) {
|
|
|
|
var result;
|
|
|
|
if (str.charCodeAt(offset) === 0x0A) {
|
|
|
|
lineStart = offset + 1;
|
|
|
|
lastTabPos = 0;
|
|
|
|
return match;
|
|
|
|
}
|
|
|
|
result = ' '.slice((offset - lineStart - lastTabPos) % 4);
|
|
|
|
lastTabPos = offset - lineStart + 1;
|
|
|
|
return result;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
state.src = str;
|
|
|
|
};
|