Vitaly Puzrin
10 years ago
7 changed files with 47 additions and 26 deletions
@ -0,0 +1,41 @@ |
|||||
|
// 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'); |
||||
|
|
||||
|
// Strin 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; |
||||
|
}; |
Loading…
Reference in new issue