From 111243bc1932beaaa11270f78b6b4be2e41deca0 Mon Sep 17 00:00:00 2001 From: Thiemo Kreuz Date: Fri, 8 Jan 2021 11:39:28 +0100 Subject: [PATCH] Update matchbrackets addon to most recent version We "forgot" to update this addon when we did the update in I6f0f030 (T258999). Bug: T258999 Bug: T270317 Change-Id: Iab29e9e36f34b76551ddac497e40dc76669ba7c7 --- .../codemirror/addon/edit/matchbrackets.js | 37 +++++++++++++------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/resources/lib/codemirror/addon/edit/matchbrackets.js b/resources/lib/codemirror/addon/edit/matchbrackets.js index d6ee740b..51c8c79f 100644 --- a/resources/lib/codemirror/addon/edit/matchbrackets.js +++ b/resources/lib/codemirror/addon/edit/matchbrackets.js @@ -1,11 +1,11 @@ // CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE +// Distributed under an MIT license: https://codemirror.net/LICENSE /** * Modified by the WMDE Technical Wishes Team * currently based on - * https://github.com/codemirror/CodeMirror/blob/156e6686774c38f1722a8ec5bfc790f7b47fd0e3/addon/edit/matchbrackets.js - * (from 2018-01-26) + * https://github.com/codemirror/CodeMirror/blob/a966b5d115af09983d37f7c9aa034b78ac954ca4/addon/edit/matchbrackets.js + * (from 2020-12-04) * * Modifications: * - Introduced findSurroundingBrackets() along with it's `brackets` map. This is called when no @@ -27,7 +27,11 @@ var Pos = CodeMirror.Pos; - var matching = {"(": ")>", ")": "(<", "[": "]>", "]": "[<", "{": "}>", "}": "{<"}; + var matching = {"(": ")>", ")": "(<", "[": "]>", "]": "[<", "{": "}>", "}": "{<", "<": ">>", ">": "<<"}; + + function bracketRegex(config) { + return config && config.bracketRegex || /[(){}[\]]/ + } var brackets = { '(': ')', @@ -124,13 +128,14 @@ var afterCursor = config && config.afterCursor if (afterCursor == null) afterCursor = /(^| )cm-fat-cursor($| )/.test(cm.getWrapperElement().className) + var re = bracketRegex(config) // A cursor is defined as between two characters, but in in vim command mode // (i.e. not insert mode), the cursor is visually represented as a // highlighted box on top of the 2nd character. Otherwise, we allow matches // from before or after the cursor. - var match = (!afterCursor && pos >= 0 && matching[line.text.charAt(pos)]) || - matching[line.text.charAt(++pos)]; + var match = (!afterCursor && pos >= 0 && re.test(line.text.charAt(pos)) && matching[line.text.charAt(pos)]) || + re.test(line.text.charAt(pos + 1)) && matching[line.text.charAt(++pos)]; // Note: Modified by WMDE, was `return null` before. if (!match) return findSurroundingBrackets( cm, where ); var dir = match.charAt(1) == ">" ? 1 : -1; @@ -156,7 +161,7 @@ var maxScanLines = (config && config.maxScanLines) || 1000; var stack = []; - var re = config && config.bracketRegex ? config.bracketRegex : /[(){}[\]]/; + var re = bracketRegex(config) var lineEnd = dir > 0 ? Math.min(where.line + maxScanLines, cm.lastLine() + 1) : Math.max(cm.firstLine() - 1, where.line - maxScanLines); for (var lineNo = where.line; lineNo != lineEnd; lineNo += dir) { @@ -169,7 +174,7 @@ var ch = line.charAt(pos); if (re.test(ch) && (style === undefined || cm.getTokenTypeAt(Pos(lineNo, pos + 1)) == style)) { var match = matching[ch]; - if ((match.charAt(1) == ">") == (dir > 0)) stack.push(ch); + if (match && (match.charAt(1) == ">") == (dir > 0)) stack.push(ch); else if (!stack.length) return {pos: Pos(lineNo, pos), ch: ch}; else stack.pop(); } @@ -217,17 +222,25 @@ }); } + function clearHighlighted(cm) { + if (cm.state.matchBrackets && cm.state.matchBrackets.currentlyHighlighted) { + cm.state.matchBrackets.currentlyHighlighted(); + cm.state.matchBrackets.currentlyHighlighted = null; + } + } + CodeMirror.defineOption("matchBrackets", false, function(cm, val, old) { if (old && old != CodeMirror.Init) { cm.off("cursorActivity", doMatchBrackets); - if (cm.state.matchBrackets && cm.state.matchBrackets.currentlyHighlighted) { - cm.state.matchBrackets.currentlyHighlighted(); - cm.state.matchBrackets.currentlyHighlighted = null; - } + cm.off("focus", doMatchBrackets) + cm.off("blur", clearHighlighted) + clearHighlighted(cm); } if (val) { cm.state.matchBrackets = typeof val == "object" ? val : {}; cm.on("cursorActivity", doMatchBrackets); + cm.on("focus", doMatchBrackets) + cm.on("blur", clearHighlighted) } });