@hpcc-js/codemirror 2.55.0 → 2.59.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.es6.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { Palette, HTMLWidget } from '@hpcc-js/common';
2
2
 
3
3
  var PKG_NAME = "@hpcc-js/codemirror";
4
- var PKG_VERSION = "2.55.0";
5
- var BUILD_VERSION = "2.97.0";
4
+ var PKG_VERSION = "2.59.1";
5
+ var BUILD_VERSION = "2.102.4";
6
6
 
7
7
  /*! *****************************************************************************
8
8
  Copyright (c) Microsoft Corporation.
@@ -2637,9 +2637,11 @@ var codemirror = {exports: {}};
2637
2637
  }
2638
2638
 
2639
2639
  function widgetTopHeight(lineObj) {
2640
+ var ref = visualLine(lineObj);
2641
+ var widgets = ref.widgets;
2640
2642
  var height = 0;
2641
- if (lineObj.widgets) { for (var i = 0; i < lineObj.widgets.length; ++i) { if (lineObj.widgets[i].above)
2642
- { height += widgetHeight(lineObj.widgets[i]); } } }
2643
+ if (widgets) { for (var i = 0; i < widgets.length; ++i) { if (widgets[i].above)
2644
+ { height += widgetHeight(widgets[i]); } } }
2643
2645
  return height
2644
2646
  }
2645
2647
 
@@ -9892,7 +9894,7 @@ var codemirror = {exports: {}};
9892
9894
 
9893
9895
  addLegacyProps(CodeMirror);
9894
9896
 
9895
- CodeMirror.version = "5.65.0";
9897
+ CodeMirror.version = "5.65.2";
9896
9898
 
9897
9899
  return CodeMirror;
9898
9900
 
@@ -10535,7 +10537,7 @@ CodeMirror.defineMode("css", function(config, parserConfig) {
10535
10537
  "cell", "center", "checkbox", "circle", "cjk-decimal", "cjk-earthly-branch",
10536
10538
  "cjk-heavenly-stem", "cjk-ideographic", "clear", "clip", "close-quote",
10537
10539
  "col-resize", "collapse", "color", "color-burn", "color-dodge", "column", "column-reverse",
10538
- "compact", "condensed", "contain", "content", "contents",
10540
+ "compact", "condensed", "conic-gradient", "contain", "content", "contents",
10539
10541
  "content-box", "context-menu", "continuous", "contrast", "copy", "counter", "counters", "cover", "crop",
10540
10542
  "cross", "crosshair", "cubic-bezier", "currentcolor", "cursive", "cyclic", "darken", "dashed", "decimal",
10541
10543
  "decimal-leading-zero", "default", "default-button", "dense", "destination-atop",
@@ -10585,8 +10587,8 @@ CodeMirror.defineMode("css", function(config, parserConfig) {
10585
10587
  "pointer", "polygon", "portrait", "pre", "pre-line", "pre-wrap", "preserve-3d",
10586
10588
  "progress", "push-button", "radial-gradient", "radio", "read-only",
10587
10589
  "read-write", "read-write-plaintext-only", "rectangle", "region",
10588
- "relative", "repeat", "repeating-linear-gradient",
10589
- "repeating-radial-gradient", "repeat-x", "repeat-y", "reset", "reverse",
10590
+ "relative", "repeat", "repeating-linear-gradient", "repeating-radial-gradient",
10591
+ "repeating-conic-gradient", "repeat-x", "repeat-y", "reset", "reverse",
10590
10592
  "rgb", "rgba", "ridge", "right", "rotate", "rotate3d", "rotateX", "rotateY",
10591
10593
  "rotateZ", "round", "row", "row-resize", "row-reverse", "rtl", "run-in", "running",
10592
10594
  "s-resize", "sans-serif", "saturate", "saturation", "scale", "scale3d", "scaleX", "scaleY", "scaleZ", "screen",
@@ -13032,6 +13034,7 @@ CodeMirror.defineMode("javascript", function(config, parserConfig) {
13032
13034
  cx.state.context = new Context(cx.state.context, cx.state.localVars, true);
13033
13035
  cx.state.localVars = null;
13034
13036
  }
13037
+ pushcontext.lex = pushblockcontext.lex = true;
13035
13038
  function popcontext() {
13036
13039
  cx.state.localVars = cx.state.context.vars;
13037
13040
  cx.state.context = cx.state.context.prev;
@@ -13707,7 +13710,7 @@ CodeMirror.defineMIME("application/typescript", { name: "javascript", typescript
13707
13710
  }
13708
13711
 
13709
13712
  function getTagRegexp(tagName, anchored) {
13710
- return new RegExp((anchored ? "^" : "") + "<\/\s*" + tagName + "\s*>", "i");
13713
+ return new RegExp((anchored ? "^" : "") + "<\/\\s*" + tagName + "\\s*>", "i");
13711
13714
  }
13712
13715
 
13713
13716
  function addTags(from, to) {
@@ -14787,7 +14790,7 @@ function styleInject$1(css, ref) {
14787
14790
  }
14788
14791
  }
14789
14792
 
14790
- var css_248z$2 = ".CodeMirror{color:#000;direction:ltr;font-family:monospace;height:300px}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{background-color:#f7f7f7;border-right:1px solid #ddd;white-space:nowrap}.CodeMirror-linenumber{color:#999;min-width:20px;padding:0 3px 0 5px;text-align:right;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{background:#7e7;border:0!important;width:auto}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor .CodeMirror-line::selection,.cm-fat-cursor .CodeMirror-line>span::selection,.cm-fat-cursor .CodeMirror-line>span>span::selection{background:transparent}.cm-fat-cursor .CodeMirror-line::-moz-selection,.cm-fat-cursor .CodeMirror-line>span::-moz-selection,.cm-fat-cursor .CodeMirror-line>span>span::-moz-selection{background:transparent}.cm-fat-cursor{caret-color:transparent}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{bottom:0;left:0;overflow:hidden;position:absolute;right:0;top:-50px}.CodeMirror-ruler{border-left:1px solid #ccc;bottom:0;position:absolute;top:0}.cm-s-default .cm-header{color:blue}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{background:#fff;overflow:hidden;position:relative}.CodeMirror-scroll{height:100%;margin-bottom:-50px;margin-right:-50px;outline:none;overflow:scroll!important;padding-bottom:50px;position:relative}.CodeMirror-sizer{border-right:50px solid transparent;position:relative}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{display:none;outline:none;position:absolute;z-index:6}.CodeMirror-vscrollbar{overflow-x:hidden;overflow-y:scroll;right:0;top:0}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-x:scroll;overflow-y:hidden}.CodeMirror-scrollbar-filler{bottom:0;right:0}.CodeMirror-gutter-filler{bottom:0;left:0}.CodeMirror-gutters{left:0;min-height:100%;position:absolute;top:0;z-index:3}.CodeMirror-gutter{display:inline-block;height:100%;margin-bottom:-50px;vertical-align:top;white-space:normal}.CodeMirror-gutter-wrapper{background:none!important;border:none!important;position:absolute;z-index:4}.CodeMirror-gutter-background{bottom:0;position:absolute;top:0;z-index:4}.CodeMirror-gutter-elt{cursor:default;position:absolute;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{word-wrap:normal;-webkit-tap-highlight-color:transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;color:inherit;font-family:inherit;font-size:inherit;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual;line-height:inherit;margin:0;overflow:visible;position:relative;white-space:pre;z-index:2}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{bottom:0;left:0;position:absolute;right:0;top:0;z-index:0}.CodeMirror-linewidget{padding:.1px;position:relative;z-index:2}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{height:0;overflow:hidden;position:absolute;visibility:hidden;width:100%}.CodeMirror-cursor{pointer-events:none;position:absolute}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{position:relative;visibility:hidden;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:\"\"}span.CodeMirror-selectedtext{background:none}";
14793
+ var css_248z$2 = ".CodeMirror{color:#000;direction:ltr;font-family:monospace;height:300px}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{background-color:#f7f7f7;border-right:1px solid #ddd;white-space:nowrap}.CodeMirror-linenumber{color:#999;min-width:20px;padding:0 3px 0 5px;text-align:right;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{background:#7e7;border:0!important;width:auto}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor .CodeMirror-line::selection,.cm-fat-cursor .CodeMirror-line>span::selection,.cm-fat-cursor .CodeMirror-line>span>span::selection{background:transparent}.cm-fat-cursor .CodeMirror-line::-moz-selection,.cm-fat-cursor .CodeMirror-line>span::-moz-selection,.cm-fat-cursor .CodeMirror-line>span>span::-moz-selection{background:transparent}.cm-fat-cursor{caret-color:transparent}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{bottom:0;left:0;overflow:hidden;position:absolute;right:0;top:-50px}.CodeMirror-ruler{border-left:1px solid #ccc;bottom:0;position:absolute;top:0}.cm-s-default .cm-header{color:blue}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{background:#fff;overflow:hidden;position:relative}.CodeMirror-scroll{height:100%;margin-bottom:-50px;margin-right:-50px;outline:none;overflow:scroll!important;padding-bottom:50px;position:relative;z-index:0}.CodeMirror-sizer{border-right:50px solid transparent;position:relative}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{display:none;outline:none;position:absolute;z-index:6}.CodeMirror-vscrollbar{overflow-x:hidden;overflow-y:scroll;right:0;top:0}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-x:scroll;overflow-y:hidden}.CodeMirror-scrollbar-filler{bottom:0;right:0}.CodeMirror-gutter-filler{bottom:0;left:0}.CodeMirror-gutters{left:0;min-height:100%;position:absolute;top:0;z-index:3}.CodeMirror-gutter{display:inline-block;height:100%;margin-bottom:-50px;vertical-align:top;white-space:normal}.CodeMirror-gutter-wrapper{background:none!important;border:none!important;position:absolute;z-index:4}.CodeMirror-gutter-background{bottom:0;position:absolute;top:0;z-index:4}.CodeMirror-gutter-elt{cursor:default;position:absolute;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{word-wrap:normal;-webkit-tap-highlight-color:transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;color:inherit;font-family:inherit;font-size:inherit;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual;line-height:inherit;margin:0;overflow:visible;position:relative;white-space:pre;z-index:2}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{bottom:0;left:0;position:absolute;right:0;top:0;z-index:0}.CodeMirror-linewidget{padding:.1px;position:relative;z-index:2}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{height:0;overflow:hidden;position:absolute;visibility:hidden;width:100%}.CodeMirror-cursor{pointer-events:none;position:absolute}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{position:relative;visibility:hidden;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:\"\"}span.CodeMirror-selectedtext{background:none}";
14791
14794
  styleInject$1(css_248z$2);
14792
14795
 
14793
14796
  (function (module, exports) {
@@ -14798,58 +14801,67 @@ styleInject$1(css_248z$2);
14798
14801
  mod(codemirror.exports);
14799
14802
  })(function(CodeMirror) {
14800
14803
 
14801
- CodeMirror.registerHelper("fold", "brace", function(cm, start) {
14802
- var line = start.line, lineText = cm.getLine(line);
14803
-
14804
- function findOpening(openCh) {
14805
- var tokenType;
14806
- for (var at = start.ch, pass = 0;;) {
14807
- var found = at <= 0 ? -1 : lineText.lastIndexOf(openCh, at - 1);
14808
- if (found == -1) {
14809
- if (pass == 1) break;
14810
- pass = 1;
14811
- at = lineText.length;
14812
- continue;
14813
- }
14814
- if (pass == 1 && found < start.ch) break;
14815
- tokenType = cm.getTokenTypeAt(CodeMirror.Pos(line, found + 1));
14816
- if (!/^(comment|string)/.test(tokenType)) return {ch: found + 1, tokenType: tokenType};
14817
- at = found - 1;
14818
- }
14819
- }
14820
-
14821
- function findRange(startToken, endToken, found) {
14822
- var count = 1, lastLine = cm.lastLine(), end, startCh = found.ch, endCh;
14823
- outer: for (var i = line; i <= lastLine; ++i) {
14824
- var text = cm.getLine(i), pos = i == line ? startCh : 0;
14825
- for (;;) {
14826
- var nextOpen = text.indexOf(startToken, pos), nextClose = text.indexOf(endToken, pos);
14827
- if (nextOpen < 0) nextOpen = text.length;
14828
- if (nextClose < 0) nextClose = text.length;
14829
- pos = Math.min(nextOpen, nextClose);
14830
- if (pos == text.length) break;
14831
- if (cm.getTokenTypeAt(CodeMirror.Pos(i, pos + 1)) == found.tokenType) {
14832
- if (pos == nextOpen) ++count;
14833
- else if (!--count) { end = i; endCh = pos; break outer; }
14804
+ function bracketFolding(pairs) {
14805
+ return function(cm, start) {
14806
+ var line = start.line, lineText = cm.getLine(line);
14807
+
14808
+ function findOpening(pair) {
14809
+ var tokenType;
14810
+ for (var at = start.ch, pass = 0;;) {
14811
+ var found = at <= 0 ? -1 : lineText.lastIndexOf(pair[0], at - 1);
14812
+ if (found == -1) {
14813
+ if (pass == 1) break;
14814
+ pass = 1;
14815
+ at = lineText.length;
14816
+ continue;
14817
+ }
14818
+ if (pass == 1 && found < start.ch) break;
14819
+ tokenType = cm.getTokenTypeAt(CodeMirror.Pos(line, found + 1));
14820
+ if (!/^(comment|string)/.test(tokenType)) return {ch: found + 1, tokenType: tokenType, pair: pair};
14821
+ at = found - 1;
14822
+ }
14823
+ }
14824
+
14825
+ function findRange(found) {
14826
+ var count = 1, lastLine = cm.lastLine(), end, startCh = found.ch, endCh;
14827
+ outer: for (var i = line; i <= lastLine; ++i) {
14828
+ var text = cm.getLine(i), pos = i == line ? startCh : 0;
14829
+ for (;;) {
14830
+ var nextOpen = text.indexOf(found.pair[0], pos), nextClose = text.indexOf(found.pair[1], pos);
14831
+ if (nextOpen < 0) nextOpen = text.length;
14832
+ if (nextClose < 0) nextClose = text.length;
14833
+ pos = Math.min(nextOpen, nextClose);
14834
+ if (pos == text.length) break;
14835
+ if (cm.getTokenTypeAt(CodeMirror.Pos(i, pos + 1)) == found.tokenType) {
14836
+ if (pos == nextOpen) ++count;
14837
+ else if (!--count) { end = i; endCh = pos; break outer; }
14838
+ }
14839
+ ++pos;
14834
14840
  }
14835
- ++pos;
14836
14841
  }
14837
- }
14838
14842
 
14839
- if (end == null || line == end) return null
14840
- return {from: CodeMirror.Pos(line, startCh),
14841
- to: CodeMirror.Pos(end, endCh)};
14842
- }
14843
+ if (end == null || line == end) return null
14844
+ return {from: CodeMirror.Pos(line, startCh),
14845
+ to: CodeMirror.Pos(end, endCh)};
14846
+ }
14843
14847
 
14844
- var startBrace = findOpening("{"), startBracket = findOpening("[");
14845
- if (startBrace && (!startBracket || startBracket.ch > startBrace.ch)) {
14846
- return findRange("{", "}", startBrace) || (startBracket && findRange("[", "]", startBracket))
14847
- } else if (startBracket) {
14848
- return findRange("[", "]", startBracket) || (startBrace && findRange("{", "}", startBrace))
14849
- } else {
14848
+ var found = [];
14849
+ for (var i = 0; i < pairs.length; i++) {
14850
+ var open = findOpening(pairs[i]);
14851
+ if (open) found.push(open);
14852
+ }
14853
+ found.sort(function(a, b) { return a.ch - b.ch });
14854
+ for (var i = 0; i < found.length; i++) {
14855
+ var range = findRange(found[i]);
14856
+ if (range) return range
14857
+ }
14850
14858
  return null
14851
14859
  }
14852
- });
14860
+ }
14861
+
14862
+ CodeMirror.registerHelper("fold", "brace", bracketFolding([["{", "}"], ["[", "]"]]));
14863
+
14864
+ CodeMirror.registerHelper("fold", "brace-paren", bracketFolding([["{", "}"], ["[", "]"], ["(", ")"]]));
14853
14865
 
14854
14866
  CodeMirror.registerHelper("fold", "import", function(cm, start) {
14855
14867
  function hasImport(line) {