Parser: add 'hack' to properly take care of non-literal BODY[*]

fork
mscdex 11 years ago
parent f935a722f1
commit e2c7cdd32f

@ -579,7 +579,7 @@ function parseEnvelopeAddresses(list) {
function parseExpr(o, literals, result, start, useBrackets) { function parseExpr(o, literals, result, start, useBrackets) {
start = start || 0; start = start || 0;
var inQuote = false, lastPos = start - 1, isTop = false, val; var inQuote = false, lastPos = start - 1, isTop = false, val, isBody = false;
if (useBrackets === undefined) if (useBrackets === undefined)
useBrackets = true; useBrackets = true;
@ -591,7 +591,14 @@ function parseExpr(o, literals, result, start, useBrackets) {
} }
for (var i = start, len = o.str.length; i < len; ++i) { for (var i = start, len = o.str.length; i < len; ++i) {
if (!inQuote) { if (!inQuote) {
if (o.str[i] === '"') if (isBody) {
if (o.str[i] === ']') {
val = convStr(o.str.substring(lastPos + 1, i + 1), literals);
result.push(val);
lastPos = i;
isBody = false;
}
} else if (o.str[i] === '"')
inQuote = true; inQuote = true;
else if (o.str[i] === ' ' || o.str[i] === ')' else if (o.str[i] === ' ' || o.str[i] === ')'
|| (useBrackets && o.str[i] === ']')) { || (useBrackets && o.str[i] === ']')) {
@ -603,10 +610,17 @@ function parseExpr(o, literals, result, start, useBrackets) {
return i; return i;
lastPos = i; lastPos = i;
} else if ((o.str[i] === '(' || (useBrackets && o.str[i] === '['))) { } else if ((o.str[i] === '(' || (useBrackets && o.str[i] === '['))) {
var innerResult = []; if (o.str[i] === '['
i = parseExpr(o, literals, innerResult, i + 1, useBrackets); && i - 4 >= start
lastPos = i; && o.str.substring(i - 4, i).toUpperCase() === 'BODY') {
result.push(innerResult); isBody = true;
lastPos = i - 5;
} else {
var innerResult = [];
i = parseExpr(o, literals, innerResult, i + 1, useBrackets);
lastPos = i;
result.push(innerResult);
}
} }
} else if (o.str[i] === '"' && } else if (o.str[i] === '"' &&
(o.str[i - 1] && (o.str[i - 1] &&

Loading…
Cancel
Save