github.com/cayleygraph/cayley@v0.7.7/static/third_party/codemirror/addon/edit/matchbrackets.min.js (about)
1 (function(){function r(e,r,i){function g(r,i,s){if(!r.text)return;var u=h?0:r.text.length-1,a=h?r.text.length:-1;if(r.text.length>o)return null;s!=null&&(u=s+p);for(;u!=a;u+=p){var f=r.text.charAt(u);if(m.test(f)&&e.getTokenTypeAt(t(i,u+1))==d){var l=n[f];if(l.charAt(1)==">"==h)v.push(f);else{if(v.pop()!=l.charAt(0))return{pos:u,match:!1};if(!v.length)return{pos:u,match:!0}}}}}var s=e.state.matchBrackets,o=s&&s.maxScanLineLength||1e4,u=s&&s.maxScanLines||100,a=r||e.getCursor(),f=e.getLineHandle(a.line),l=a.ch-1,c=l>=0&&n[f.text.charAt(l)]||n[f.text.charAt(++l)];if(!c)return null;var h=c.charAt(1)==">",p=h?1:-1;if(i&&h!=(l==a.ch))return null;var d=e.getTokenTypeAt(t(a.line,l+1)),v=[f.text.charAt(l)],m=/[(){}[\]]/;for(var y=a.line,b,w=h?Math.min(y+u,e.lineCount()):Math.max(-1,y-u);y!=w;y+=p){y==a.line?b=g(f,y,l):b=g(e.getLineHandle(y),y);if(b)break}return{from:t(a.line,l),to:b&&t(y,b.pos),match:b&&b.match,forward:h}}function i(n,i){var s=n.state.matchBrackets.maxHighlightLineLength||1e3,o=r(n);if(!o||n.getLine(o.from.line).length>s||o.to&&n.getLine(o.to.line).length>s)return;var u=o.match?"CodeMirror-matchingbracket":"CodeMirror-nonmatchingbracket",a=n.markText(o.from,t(o.from.line,o.from.ch+1),{className:u}),f=o.to&&n.markText(o.to,t(o.to.line,o.to.ch+1),{className:u});e&&n.state.focused&&n.display.input.focus();var l=function(){n.operation(function(){a.clear(),f&&f.clear()})};if(!i)return l;setTimeout(l,800)}function o(e){e.operation(function(){s&&(s(),s=null),e.somethingSelected()||(s=i(e,!1))})}var e=/MSIE \d/.test(navigator.userAgent)&&(document.documentMode==null||document.documentMode<8),t=CodeMirror.Pos,n={"(":")>",")":"(<","[":"]>","]":"[<","{":"}>","}":"{<"},s=null;CodeMirror.defineOption("matchBrackets",!1,function(e,t,n){n&&n!=CodeMirror.Init&&e.off("cursorActivity",o),t&&(e.state.matchBrackets=typeof t=="object"?t:{},e.on("cursorActivity",o))}),CodeMirror.defineExtension("matchBrackets",function(){i(this,!0)}),CodeMirror.defineExtension("findMatchingBracket",function(e,t){return r(this,e,t)})})();