diff --git a/www/code/markers.js b/www/code/markers.js index 125fe82ed..ed8453450 100644 --- a/www/code/markers.js +++ b/www/code/markers.js @@ -219,6 +219,8 @@ define([ var toKeep = []; var toJoin = {}; + var firstMarks = first.marks.slice(); + debug('error', "Fix marks"); debug('warn', first); debug('warn', last); @@ -258,9 +260,15 @@ define([ // If we still have markers in "first", store the last one so that we can "join" // everything at the end + // NOTE: we only join if the marks were joined initially! if (first.marks.length) { - var toJoinMark = first.marks[first.marks.length - 1].slice(); + var idx = first.marks.length - 1; + var toJoinMark = first.marks[index].slice(); toJoin = parseMark(toJoinMark); + var next = parseMark(firstMarks[idx + 1]); // always an object + if (toJoin.endLine !== next.startLine || toJoin.endCh !== next.startCh) { + toJoin.overlapOnly = true; + } } @@ -302,13 +310,17 @@ define([ && typeof(toJoin.endCh) !== "undefined") { // Make sure the marks are joined correctly: // fix the start position of the marks to keep - // Note: we must preserve the same end for this mark if it was single line! - if (typeof(toKeepEnd[0][4]) === "undefined") { // Single line - toKeepEnd[0][4] = toKeepEnd[0][3] || (toKeepEnd[0][2]+1); // preserve end ch - toKeepEnd[0][3] = toKeepEnd[0][1]; // preserve end line + var overlap = toKeepEnd[0][1] < toJoin.endLine || + (toKeepEnd[0][1] === toJoin.endLine && toKeepEnd[0][2] < toJoin.endCh); + if (!toJoin.overlapOnly || overlap) { + // Note: we must preserve the same end for this mark if it was single line! + if (typeof(toKeepEnd[0][4]) === "undefined") { // Single line + toKeepEnd[0][4] = toKeepEnd[0][3] || (toKeepEnd[0][2]+1); // preserve end ch + toKeepEnd[0][3] = toKeepEnd[0][1]; // preserve end line + } + toKeepEnd[0][1] = toJoin.endLine; + toKeepEnd[0][2] = toJoin.endCh; } - toKeepEnd[0][1] = toJoin.endLine; - toKeepEnd[0][2] = toJoin.endCh; } debug('log', 'Fixed');