|
|
@ -2,6 +2,9 @@ |
|
|
|
|
|
|
|
'use strict'; |
|
|
|
|
|
|
|
var isWhiteSpace = require('../common/utils').isWhiteSpace; |
|
|
|
var isPunctChar = require('../common/utils').isPunctChar; |
|
|
|
|
|
|
|
|
|
|
|
function isAlphaNum(code) { |
|
|
|
return (code >= 0x30 /* 0 */ && code <= 0x39 /* 9 */) || |
|
|
@ -13,6 +16,8 @@ function isAlphaNum(code) { |
|
|
|
// "start" should point at a valid marker
|
|
|
|
function scanDelims(state, start) { |
|
|
|
var pos = start, lastChar, nextChar, count, |
|
|
|
isLastWhiteSpace, isLastPunctChar, |
|
|
|
isNextWhiteSpace, isNextPunctChar, |
|
|
|
can_open = true, |
|
|
|
can_close = true, |
|
|
|
max = state.posMax, |
|
|
@ -26,9 +31,26 @@ function scanDelims(state, start) { |
|
|
|
|
|
|
|
nextChar = pos < max ? state.src.charCodeAt(pos) : -1; |
|
|
|
|
|
|
|
// check whitespace conditions
|
|
|
|
if (nextChar === 0x20 || nextChar === 0x0A) { can_open = false; } |
|
|
|
if (lastChar === 0x20 || lastChar === 0x0A) { can_close = false; } |
|
|
|
isLastPunctChar = lastChar >= 0 && isPunctChar(String.fromCharCode(lastChar)); |
|
|
|
isNextPunctChar = nextChar >= 0 && isPunctChar(String.fromCharCode(nextChar)); |
|
|
|
isLastWhiteSpace = lastChar >= 0 && isWhiteSpace(lastChar); |
|
|
|
isNextWhiteSpace = nextChar >= 0 && isWhiteSpace(nextChar); |
|
|
|
|
|
|
|
if (isNextWhiteSpace) { |
|
|
|
can_open = false; |
|
|
|
} else if (isNextPunctChar) { |
|
|
|
if (!(isLastWhiteSpace || isLastPunctChar || lastChar === -1)) { |
|
|
|
can_open = false; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (isLastWhiteSpace) { |
|
|
|
can_close = false; |
|
|
|
} else if (isLastPunctChar) { |
|
|
|
if (!(isNextWhiteSpace || isNextPunctChar || nextChar === -1)) { |
|
|
|
can_close = false; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (marker === 0x5F /* _ */) { |
|
|
|
// check if we aren't inside the word
|
|
|
|