// 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; if (!state.normalizeInput) { return; } // 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; };