From 4adf4c989e9d7eabb234f2a27b6bda0eba82b69b Mon Sep 17 00:00:00 2001 From: Sapphire Becker Date: Sun, 13 Nov 2016 20:28:48 -0500 Subject: [PATCH] Adds afterBegin and afterEnd tags to perform end-of-element lookaheads correctly --- src/highlight.js | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/highlight.js b/src/highlight.js index 4c9c0658de..748c03f3ee 100644 --- a/src/highlight.js +++ b/src/highlight.js @@ -270,11 +270,24 @@ https://highlightjs.org/ } if (!mode.begin) mode.begin = /\B|\b/; - mode.beginRe = langRe(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; @@ -436,6 +449,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 { @@ -454,6 +470,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 {