diff --git a/src/highlight.js b/src/highlight.js index ec33008187..7de4709958 100644 --- a/src/highlight.js +++ b/src/highlight.js @@ -328,13 +328,24 @@ https://highlightjs.org/ } if (!mode.begin) mode.begin = /\B|\b/; - mode.beginRe = langRe(mode.begin); - if (mode.endSameAsBegin) - mode.end = mode.begin; + if (mode.afterBegin) { + var rsb = reStr(mode.begin), rsab = reStr(mode.afterBegin); + mode.beginRe = langRe(rsb + '(?=' + rsab + ')'); + mode.begin = rsb + '(' + rsab + ')'; + } else { + mode.beginRe = langRe(mode.begin); + } if (!mode.end && !mode.endsWithParent) mode.end = /\B|\b/; - if (mode.end) - mode.endRe = langRe(mode.end); + if (mode.end) { + if (mode.afterEnd) { + var rse = reStr(mode.end), rsae = reStr(mode.afterEnd); + mode.endRe = langRe(rse + '(?=' + rsae + ')'); + mode.end = rse + '(' + rsae + ')'; + } else { + mode.endRe = langRe(mode.end); + } + } mode.terminator_end = reStr(mode.end) || ''; if (mode.endsWithParent && parent.terminator_end) mode.terminator_end += (mode.end ? '|' : '') + parent.terminator_end; @@ -498,6 +509,9 @@ https://highlightjs.org/ var new_mode = subMode(lexeme, top); if (new_mode) { + if (new_mode.afterBegin) { + lexeme = lexeme.match(new_mode.beginRe)[0]; + } if (new_mode.skip) { mode_buffer += lexeme; } else { @@ -516,6 +530,9 @@ https://highlightjs.org/ var end_mode = endOfMode(top, lexeme); if (end_mode) { var origin = top; + if (origin.afterEnd) { + lexeme = lexeme.match(origin.endRe)[0]; + } if (origin.skip) { mode_buffer += lexeme; } else {