resin 0.3.1 → 0.4.0
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.
- data/amber/bin/amberc +10 -350
 - data/amber/js/Benchfib.deploy.js +80 -89
 - data/amber/js/Benchfib.js +80 -89
 - data/amber/js/Canvas.deploy.js +558 -545
 - data/amber/js/Canvas.js +563 -545
 - data/amber/js/Compiler-AST.deploy.js +431 -243
 - data/amber/js/Compiler-AST.js +487 -244
 - data/amber/js/Compiler-Core.deploy.js +201 -1045
 - data/amber/js/Compiler-Core.js +208 -1207
 - data/amber/js/Compiler-Exceptions.deploy.js +37 -18
 - data/amber/js/Compiler-Exceptions.js +42 -18
 - data/amber/js/Compiler-IR.deploy.js +1071 -774
 - data/amber/js/Compiler-IR.js +1194 -848
 - data/amber/js/Compiler-Inlining.deploy.js +395 -373
 - data/amber/js/Compiler-Inlining.js +395 -373
 - data/amber/js/Compiler-Interpreter.deploy.js +1202 -0
 - data/amber/js/Compiler-Interpreter.js +1631 -0
 - data/amber/js/Compiler-Semantic.deploy.js +695 -600
 - data/amber/js/Compiler-Semantic.js +721 -611
 - data/amber/js/Compiler-Tests.deploy.js +699 -376
 - data/amber/js/Compiler-Tests.js +834 -381
 - data/amber/js/Compiler.deploy.js +8563 -1805
 - data/amber/js/Compiler.js +11476 -2633
 - data/amber/js/Examples.deploy.js +29 -29
 - data/amber/js/Examples.js +29 -29
 - data/amber/js/IDE.deploy.js +3292 -2649
 - data/amber/js/IDE.js +3318 -2710
 - data/amber/js/Importer-Exporter.deploy.js +393 -349
 - data/amber/js/Importer-Exporter.js +398 -354
 - data/amber/js/Kernel-Announcements.deploy.js +53 -44
 - data/amber/js/Kernel-Announcements.js +55 -44
 - data/amber/js/Kernel-Classes.deploy.js +566 -368
 - data/amber/js/Kernel-Classes.js +660 -402
 - data/amber/js/Kernel-Collections.deploy.js +1149 -1098
 - data/amber/js/Kernel-Collections.js +1183 -1116
 - data/amber/js/Kernel-Exceptions.deploy.js +173 -75
 - data/amber/js/Kernel-Exceptions.js +215 -77
 - data/amber/js/Kernel-Methods.deploy.js +530 -313
 - data/amber/js/Kernel-Methods.js +632 -338
 - data/amber/js/Kernel-Objects.deploy.js +1734 -1577
 - data/amber/js/Kernel-Objects.js +1867 -1654
 - data/amber/js/Kernel-Tests.deploy.js +1416 -973
 - data/amber/js/Kernel-Tests.js +1495 -981
 - data/amber/js/Kernel-Transcript.deploy.js +23 -24
 - data/amber/js/Kernel-Transcript.js +25 -26
 - data/amber/js/SUnit-Tests.deploy.js +402 -0
 - data/amber/js/SUnit-Tests.js +518 -0
 - data/amber/js/SUnit.deploy.js +535 -237
 - data/amber/js/SUnit.js +634 -246
 - data/amber/js/amber.js +90 -53
 - data/amber/js/boot.js +441 -255
 - data/amber/js/init.js +1 -3
 - data/amber/js/lib/CodeMirror/codemirror.css +3 -0
 - data/amber/js/lib/CodeMirror/codemirror.js +104 -55
 - data/amber/js/lib/peg-0.7.0.min.js +9 -0
 - data/amber/js/parser.js +1504 -802
 - data/amber/js/parser.pegjs +170 -165
 - data/amber/st/Canvas.st +6 -0
 - data/amber/st/Compiler-AST.st +54 -3
 - data/amber/st/Compiler-Core.st +6 -551
 - data/amber/st/Compiler-Exceptions.st +4 -0
 - data/amber/st/Compiler-IR.st +205 -87
 - data/amber/st/Compiler-Interpreter.st +597 -0
 - data/amber/st/Compiler-Semantic.st +46 -21
 - data/amber/st/Compiler-Tests.st +254 -7
 - data/amber/st/Compiler.st +3172 -1541
 - data/amber/st/IDE.st +57 -93
 - data/amber/st/Importer-Exporter.st +4 -7
 - data/amber/st/Kernel-Announcements.st +8 -0
 - data/amber/st/Kernel-Classes.st +149 -40
 - data/amber/st/Kernel-Collections.st +43 -32
 - data/amber/st/Kernel-Exceptions.st +70 -1
 - data/amber/st/Kernel-Methods.st +165 -27
 - data/amber/st/Kernel-Objects.st +215 -140
 - data/amber/st/Kernel-Tests.st +195 -10
 - data/amber/st/Kernel-Transcript.st +1 -3
 - data/amber/st/SUnit-Tests.st +186 -0
 - data/amber/st/SUnit.st +186 -14
 - data/bin/resin +6 -0
 - data/lib/resin/cli.rb +19 -0
 - metadata +41 -25
 - data/amber/js/lib/peg-0.6.2.min.js +0 -2
 - data/bin/resin-compile +0 -6
 - data/bin/runresin +0 -12
 
    
        data/amber/js/init.js
    CHANGED
    
    
| 
         @@ -80,6 +80,7 @@ 
     | 
|
| 
       80 
80 
     | 
    
         
             
              word-wrap: normal;
         
     | 
| 
       81 
81 
     | 
    
         
             
              line-height: inherit;
         
     | 
| 
       82 
82 
     | 
    
         
             
              color: inherit;
         
     | 
| 
      
 83 
     | 
    
         
            +
              overflow: visible;
         
     | 
| 
       83 
84 
     | 
    
         
             
            }
         
     | 
| 
       84 
85 
     | 
    
         | 
| 
       85 
86 
     | 
    
         
             
            .CodeMirror-wrap pre {
         
     | 
| 
         @@ -152,6 +153,8 @@ div.CodeMirror-selected { background: #d9d9d9; } 
     | 
|
| 
       152 
153 
     | 
    
         
             
            .cm-s-default span.cm-quote {color: #090;}
         
     | 
| 
       153 
154 
     | 
    
         
             
            .cm-s-default span.cm-hr {color: #999;}
         
     | 
| 
       154 
155 
     | 
    
         
             
            .cm-s-default span.cm-link {color: #00c;}
         
     | 
| 
      
 156 
     | 
    
         
            +
            span.cm-negative {color: #d44;}
         
     | 
| 
      
 157 
     | 
    
         
            +
            span.cm-positive {color: #292;}
         
     | 
| 
       155 
158 
     | 
    
         | 
| 
       156 
159 
     | 
    
         
             
            span.cm-header, span.cm-strong {font-weight: bold;}
         
     | 
| 
       157 
160 
     | 
    
         
             
            span.cm-em {font-style: italic;}
         
     | 
| 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            // CodeMirror version 2. 
     | 
| 
      
 1 
     | 
    
         
            +
            // CodeMirror version 2.37
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            // All functions that need access to the editor's state live inside
         
     | 
| 
       4 
4 
     | 
    
         
             
            // the CodeMirror function. Below that, at the bottom of the file,
         
     | 
| 
         @@ -77,7 +77,7 @@ window.CodeMirror = (function() { 
     | 
|
| 
       77 
77 
     | 
    
         
             
                // Selection-related flags. shiftSelecting obviously tracks
         
     | 
| 
       78 
78 
     | 
    
         
             
                // whether the user is holding shift.
         
     | 
| 
       79 
79 
     | 
    
         
             
                var shiftSelecting, lastClick, lastDoubleClick, lastScrollTop = 0, draggingText,
         
     | 
| 
       80 
     | 
    
         
            -
                    overwrite = false, suppressEdits = false;
         
     | 
| 
      
 80 
     | 
    
         
            +
                    overwrite = false, suppressEdits = false, pasteIncoming = false;
         
     | 
| 
       81 
81 
     | 
    
         
             
                // Variables used by startOperation/endOperation to track what
         
     | 
| 
       82 
82 
     | 
    
         
             
                // happened during the operation.
         
     | 
| 
       83 
83 
     | 
    
         
             
                var updateInput, userSelChange, changes, textChanged, selectionChanged,
         
     | 
| 
         @@ -130,7 +130,7 @@ window.CodeMirror = (function() { 
     | 
|
| 
       130 
130 
     | 
    
         
             
                  connect(scroller, "drop", operation(onDrop));
         
     | 
| 
       131 
131 
     | 
    
         
             
                }
         
     | 
| 
       132 
132 
     | 
    
         
             
                connect(scroller, "paste", function(){focusInput(); fastPoll();});
         
     | 
| 
       133 
     | 
    
         
            -
                connect(input, "paste", fastPoll);
         
     | 
| 
      
 133 
     | 
    
         
            +
                connect(input, "paste", function(){pasteIncoming = true; fastPoll();});
         
     | 
| 
       134 
134 
     | 
    
         
             
                connect(input, "cut", operation(function(){
         
     | 
| 
       135 
135 
     | 
    
         
             
                  if (!options.readOnly) replaceSelection("");
         
     | 
| 
       136 
136 
     | 
    
         
             
                }));
         
     | 
| 
         @@ -169,6 +169,8 @@ window.CodeMirror = (function() { 
     | 
|
| 
       169 
169 
     | 
    
         
             
                    else if (option == "lineWrapping" && oldVal != value) operation(wrappingChanged)();
         
     | 
| 
       170 
170 
     | 
    
         
             
                    else if (option == "tabSize") updateDisplay(true);
         
     | 
| 
       171 
171 
     | 
    
         
             
                    else if (option == "keyMap") keyMapChanged();
         
     | 
| 
      
 172 
     | 
    
         
            +
                    else if (option == "tabindex") input.tabIndex = value;
         
     | 
| 
      
 173 
     | 
    
         
            +
                    else if (option == "showCursorWhenSelecting") updateSelection();
         
     | 
| 
       172 
174 
     | 
    
         
             
                    if (option == "lineNumbers" || option == "gutter" || option == "firstLineNumber" ||
         
     | 
| 
       173 
175 
     | 
    
         
             
                        option == "theme" || option == "lineNumberFormatter") {
         
     | 
| 
       174 
176 
     | 
    
         
             
                      gutterChanged();
         
     | 
| 
         @@ -231,6 +233,7 @@ window.CodeMirror = (function() { 
     | 
|
| 
       231 
233 
     | 
    
         
             
                    var off = eltOffset(lineSpace);
         
     | 
| 
       232 
234 
     | 
    
         
             
                    return coordsChar(coords.x - off.left, coords.y - off.top);
         
     | 
| 
       233 
235 
     | 
    
         
             
                  },
         
     | 
| 
      
 236 
     | 
    
         
            +
                  defaultTextHeight: function() { return textHeight(); },
         
     | 
| 
       234 
237 
     | 
    
         
             
                  markText: operation(markText),
         
     | 
| 
       235 
238 
     | 
    
         
             
                  setBookmark: setBookmark,
         
     | 
| 
       236 
239 
     | 
    
         
             
                  findMarksAt: findMarksAt,
         
     | 
| 
         @@ -280,7 +283,9 @@ window.CodeMirror = (function() { 
     | 
|
| 
       280 
283 
     | 
    
         
             
                  lineCount: function() {return doc.size;},
         
     | 
| 
       281 
284 
     | 
    
         
             
                  clipPos: clipPos,
         
     | 
| 
       282 
285 
     | 
    
         
             
                  getCursor: function(start) {
         
     | 
| 
       283 
     | 
    
         
            -
                    if (start == null) start = sel.inverted;
         
     | 
| 
      
 286 
     | 
    
         
            +
                    if (start == null || start == "head") start = sel.inverted;
         
     | 
| 
      
 287 
     | 
    
         
            +
                    if (start == "anchor") start = !sel.inverted;
         
     | 
| 
      
 288 
     | 
    
         
            +
                    if (start == "end") start = false;
         
     | 
| 
       284 
289 
     | 
    
         
             
                    return copyPos(start ? sel.from : sel.to);
         
     | 
| 
       285 
290 
     | 
    
         
             
                  },
         
     | 
| 
       286 
291 
     | 
    
         
             
                  somethingSelected: function() {return !posEq(sel.from, sel.to);},
         
     | 
| 
         @@ -345,6 +350,11 @@ window.CodeMirror = (function() { 
     | 
|
| 
       345 
350 
     | 
    
         
             
                    return {x: scroller.scrollLeft, y: scrollbar.scrollTop,
         
     | 
| 
       346 
351 
     | 
    
         
             
                            height: scrollbar.scrollHeight, width: scroller.scrollWidth};
         
     | 
| 
       347 
352 
     | 
    
         
             
                  },
         
     | 
| 
      
 353 
     | 
    
         
            +
                  scrollIntoView: function(pos) {
         
     | 
| 
      
 354 
     | 
    
         
            +
                    var coords = localCoords(pos ? clipPos(pos) : sel.inverted ? sel.from : sel.to);
         
     | 
| 
      
 355 
     | 
    
         
            +
                    scrollIntoView(coords.x, coords.y, coords.x, coords.yBot);
         
     | 
| 
      
 356 
     | 
    
         
            +
                  },
         
     | 
| 
      
 357 
     | 
    
         
            +
             
     | 
| 
       348 
358 
     | 
    
         
             
                  setSize: function(width, height) {
         
     | 
| 
       349 
359 
     | 
    
         
             
                    function interpret(val) {
         
     | 
| 
       350 
360 
     | 
    
         
             
                      val = String(val);
         
     | 
| 
         @@ -394,7 +404,7 @@ window.CodeMirror = (function() { 
     | 
|
| 
       394 
404 
     | 
    
         
             
                }
         
     | 
| 
       395 
405 
     | 
    
         | 
| 
       396 
406 
     | 
    
         
             
                function onScrollBar(e) {
         
     | 
| 
       397 
     | 
    
         
            -
                  if (scrollbar.scrollTop  
     | 
| 
      
 407 
     | 
    
         
            +
                  if (Math.abs(scrollbar.scrollTop - lastScrollTop) > 1) {
         
     | 
| 
       398 
408 
     | 
    
         
             
                    lastScrollTop = scroller.scrollTop = scrollbar.scrollTop;
         
     | 
| 
       399 
409 
     | 
    
         
             
                    updateDisplay([]);
         
     | 
| 
       400 
410 
     | 
    
         
             
                  }
         
     | 
| 
         @@ -403,7 +413,7 @@ window.CodeMirror = (function() { 
     | 
|
| 
       403 
413 
     | 
    
         
             
                function onScrollMain(e) {
         
     | 
| 
       404 
414 
     | 
    
         
             
                  if (options.fixedGutter && gutter.style.left != scroller.scrollLeft + "px")
         
     | 
| 
       405 
415 
     | 
    
         
             
                    gutter.style.left = scroller.scrollLeft + "px";
         
     | 
| 
       406 
     | 
    
         
            -
                  if (scroller.scrollTop  
     | 
| 
      
 416 
     | 
    
         
            +
                  if (Math.abs(scroller.scrollTop - lastScrollTop) > 1) {
         
     | 
| 
       407 
417 
     | 
    
         
             
                    lastScrollTop = scroller.scrollTop;
         
     | 
| 
       408 
418 
     | 
    
         
             
                    if (scrollbar.scrollTop != lastScrollTop)
         
     | 
| 
       409 
419 
     | 
    
         
             
                      scrollbar.scrollTop = lastScrollTop;
         
     | 
| 
         @@ -488,8 +498,12 @@ window.CodeMirror = (function() { 
     | 
|
| 
       488 
498 
     | 
    
         | 
| 
       489 
499 
     | 
    
         
             
                  function doSelect(cur) {
         
     | 
| 
       490 
500 
     | 
    
         
             
                    if (type == "single") {
         
     | 
| 
       491 
     | 
    
         
            -
                      setSelectionUser(start, cur);
         
     | 
| 
       492 
     | 
    
         
            -
             
     | 
| 
      
 501 
     | 
    
         
            +
                      setSelectionUser(clipPos(start), cur);
         
     | 
| 
      
 502 
     | 
    
         
            +
                      return;
         
     | 
| 
      
 503 
     | 
    
         
            +
                    }
         
     | 
| 
      
 504 
     | 
    
         
            +
                    startstart = clipPos(startstart);
         
     | 
| 
      
 505 
     | 
    
         
            +
                    startend = clipPos(startend);
         
     | 
| 
      
 506 
     | 
    
         
            +
                    if (type == "double") {
         
     | 
| 
       493 
507 
     | 
    
         
             
                      var word = findWordAt(cur);
         
     | 
| 
       494 
508 
     | 
    
         
             
                      if (posLess(cur, startstart)) setSelectionUser(word.from, startend);
         
     | 
| 
       495 
509 
     | 
    
         
             
                      else setSelectionUser(startstart, word.to);
         
     | 
| 
         @@ -614,7 +628,6 @@ window.CodeMirror = (function() { 
     | 
|
| 
       614 
628 
     | 
    
         
             
                  }, 50);
         
     | 
| 
       615 
629 
     | 
    
         | 
| 
       616 
630 
     | 
    
         
             
                  var name = keyNames[e_prop(e, "keyCode")], handled = false;
         
     | 
| 
       617 
     | 
    
         
            -
                  var flipCtrlCmd = opera && mac;
         
     | 
| 
       618 
631 
     | 
    
         
             
                  if (name == null || e.altGraphKey) return false;
         
     | 
| 
       619 
632 
     | 
    
         
             
                  if (e_prop(e, "altKey")) name = "Alt-" + name;
         
     | 
| 
       620 
633 
     | 
    
         
             
                  if (e_prop(e, flipCtrlCmd ? "metaKey" : "ctrlKey")) name = "Ctrl-" + name;
         
     | 
| 
         @@ -636,7 +649,7 @@ window.CodeMirror = (function() { 
     | 
|
| 
       636 
649 
     | 
    
         
             
                  if (handled) {
         
     | 
| 
       637 
650 
     | 
    
         
             
                    e_preventDefault(e);
         
     | 
| 
       638 
651 
     | 
    
         
             
                    restartBlink();
         
     | 
| 
       639 
     | 
    
         
            -
                    if ( 
     | 
| 
      
 652 
     | 
    
         
            +
                    if (ie_lt9) { e.oldKeyCode = e.keyCode; e.keyCode = 0; }
         
     | 
| 
       640 
653 
     | 
    
         
             
                  }
         
     | 
| 
       641 
654 
     | 
    
         
             
                  return handled;
         
     | 
| 
       642 
655 
     | 
    
         
             
                }
         
     | 
| 
         @@ -956,12 +969,13 @@ window.CodeMirror = (function() { 
     | 
|
| 
       956 
969 
     | 
    
         
             
                  while (same < l && prevInput[same] == text[same]) ++same;
         
     | 
| 
       957 
970 
     | 
    
         
             
                  if (same < prevInput.length)
         
     | 
| 
       958 
971 
     | 
    
         
             
                    sel.from = {line: sel.from.line, ch: sel.from.ch - (prevInput.length - same)};
         
     | 
| 
       959 
     | 
    
         
            -
                  else if (overwrite && posEq(sel.from, sel.to))
         
     | 
| 
      
 972 
     | 
    
         
            +
                  else if (overwrite && posEq(sel.from, sel.to) && !pasteIncoming)
         
     | 
| 
       960 
973 
     | 
    
         
             
                    sel.to = {line: sel.to.line, ch: Math.min(getLine(sel.to.line).text.length, sel.to.ch + (text.length - same))};
         
     | 
| 
       961 
974 
     | 
    
         
             
                  replaceSelection(text.slice(same), "end");
         
     | 
| 
       962 
975 
     | 
    
         
             
                  if (text.length > 1000) { input.value = prevInput = ""; }
         
     | 
| 
       963 
976 
     | 
    
         
             
                  else prevInput = text;
         
     | 
| 
       964 
977 
     | 
    
         
             
                  if (!nestedOperation) endOperation();
         
     | 
| 
      
 978 
     | 
    
         
            +
                  pasteIncoming = false;
         
     | 
| 
       965 
979 
     | 
    
         
             
                  return true;
         
     | 
| 
       966 
980 
     | 
    
         
             
                }
         
     | 
| 
       967 
981 
     | 
    
         
             
                function resetInput(user) {
         
     | 
| 
         @@ -973,7 +987,8 @@ window.CodeMirror = (function() { 
     | 
|
| 
       973 
987 
     | 
    
         
             
                }
         
     | 
| 
       974 
988 
     | 
    
         | 
| 
       975 
989 
     | 
    
         
             
                function focusInput() {
         
     | 
| 
       976 
     | 
    
         
            -
                  if (options.readOnly != "nocursor" 
     | 
| 
      
 990 
     | 
    
         
            +
                  if (options.readOnly != "nocursor" && (ie_lt9 || document.activeElement != input))
         
     | 
| 
      
 991 
     | 
    
         
            +
                    input.focus();
         
     | 
| 
       977 
992 
     | 
    
         
             
                }
         
     | 
| 
       978 
993 
     | 
    
         | 
| 
       979 
994 
     | 
    
         
             
                function scrollCursorIntoView() {
         
     | 
| 
         @@ -1238,18 +1253,20 @@ window.CodeMirror = (function() { 
     | 
|
| 
       1238 
1253 
     | 
    
         
             
                  var wrapOff = eltOffset(wrapper), lineOff = eltOffset(lineDiv);
         
     | 
| 
       1239 
1254 
     | 
    
         
             
                  inputDiv.style.top = Math.max(0, Math.min(scroller.offsetHeight, headPos.y + lineOff.top - wrapOff.top)) + "px";
         
     | 
| 
       1240 
1255 
     | 
    
         
             
                  inputDiv.style.left = Math.max(0, Math.min(scroller.offsetWidth, headPos.x + lineOff.left - wrapOff.left)) + "px";
         
     | 
| 
       1241 
     | 
    
         
            -
                  if (collapsed) {
         
     | 
| 
      
 1256 
     | 
    
         
            +
                  if (collapsed || options.showCursorWhenSelecting) {
         
     | 
| 
       1242 
1257 
     | 
    
         
             
                    cursor.style.top = headPos.y + "px";
         
     | 
| 
       1243 
1258 
     | 
    
         
             
                    cursor.style.left = (options.lineWrapping ? Math.min(headPos.x, lineSpace.offsetWidth) : headPos.x) + "px";
         
     | 
| 
       1244 
1259 
     | 
    
         
             
                    cursor.style.display = "";
         
     | 
| 
       1245 
     | 
    
         
            -
                    selectionDiv.style.display = "none";
         
     | 
| 
       1246 
1260 
     | 
    
         
             
                  } else {
         
     | 
| 
      
 1261 
     | 
    
         
            +
                    cursor.style.display = "none";
         
     | 
| 
      
 1262 
     | 
    
         
            +
                  }
         
     | 
| 
      
 1263 
     | 
    
         
            +
                  if (!collapsed) {
         
     | 
| 
       1247 
1264 
     | 
    
         
             
                    var sameLine = fromPos.y == toPos.y, fragment = document.createDocumentFragment();
         
     | 
| 
       1248 
1265 
     | 
    
         
             
                    var clientWidth = lineSpace.clientWidth || lineSpace.offsetWidth;
         
     | 
| 
       1249 
1266 
     | 
    
         
             
                    var clientHeight = lineSpace.clientHeight || lineSpace.offsetHeight;
         
     | 
| 
       1250 
1267 
     | 
    
         
             
                    var add = function(left, top, right, height) {
         
     | 
| 
       1251 
1268 
     | 
    
         
             
                      var rstyle = quirksMode ? "width: " + (!right ? clientWidth : clientWidth - right - left) + "px"
         
     | 
| 
       1252 
     | 
    
         
            -
                                              : "right: " + right + "px";
         
     | 
| 
      
 1269 
     | 
    
         
            +
                                              : "right: " + (right - 1) + "px";
         
     | 
| 
       1253 
1270 
     | 
    
         
             
                      fragment.appendChild(elt("div", null, "CodeMirror-selected", "position: absolute; left: " + left +
         
     | 
| 
       1254 
1271 
     | 
    
         
             
                                               "px; top: " + top + "px; " + rstyle + "; height: " + height + "px"));
         
     | 
| 
       1255 
1272 
     | 
    
         
             
                    };
         
     | 
| 
         @@ -1264,8 +1281,9 @@ window.CodeMirror = (function() { 
     | 
|
| 
       1264 
1281 
     | 
    
         
             
                    if ((!sameLine || !sel.from.ch) && toPos.y < clientHeight - .5 * th)
         
     | 
| 
       1265 
1282 
     | 
    
         
             
                      add(0, toPos.y, clientWidth - toPos.x, th);
         
     | 
| 
       1266 
1283 
     | 
    
         
             
                    removeChildrenAndAdd(selectionDiv, fragment);
         
     | 
| 
       1267 
     | 
    
         
            -
                    cursor.style.display = "none";
         
     | 
| 
       1268 
1284 
     | 
    
         
             
                    selectionDiv.style.display = "";
         
     | 
| 
      
 1285 
     | 
    
         
            +
                  } else {
         
     | 
| 
      
 1286 
     | 
    
         
            +
                    selectionDiv.style.display = "none";
         
     | 
| 
       1269 
1287 
     | 
    
         
             
                  }
         
     | 
| 
       1270 
1288 
     | 
    
         
             
                }
         
     | 
| 
       1271 
1289 
     | 
    
         | 
| 
         @@ -1418,7 +1436,7 @@ window.CodeMirror = (function() { 
     | 
|
| 
       1418 
1436 
     | 
    
         
             
                    var startChar = line.charAt(start);
         
     | 
| 
       1419 
1437 
     | 
    
         
             
                    var check = isWordChar(startChar) ? isWordChar :
         
     | 
| 
       1420 
1438 
     | 
    
         
             
                                /\s/.test(startChar) ? function(ch) {return /\s/.test(ch);} :
         
     | 
| 
       1421 
     | 
    
         
            -
                                function(ch) {return !/\s/.test(ch) &&  
     | 
| 
      
 1439 
     | 
    
         
            +
                                function(ch) {return !/\s/.test(ch) && isWordChar(ch);};
         
     | 
| 
       1422 
1440 
     | 
    
         
             
                    while (start > 0 && check(line.charAt(start - 1))) --start;
         
     | 
| 
       1423 
1441 
     | 
    
         
             
                    while (end < line.length && check(line.charAt(end))) ++end;
         
     | 
| 
       1424 
1442 
     | 
    
         
             
                  }
         
     | 
| 
         @@ -1462,6 +1480,7 @@ window.CodeMirror = (function() { 
     | 
|
| 
       1462 
1480 
     | 
    
         | 
| 
       1463 
1481 
     | 
    
         
             
                  if (indentString != curSpaceString)
         
     | 
| 
       1464 
1482 
     | 
    
         
             
                    replaceRange(indentString, {line: n, ch: 0}, {line: n, ch: curSpaceString.length});
         
     | 
| 
      
 1483 
     | 
    
         
            +
                  line.stateAfter = null;
         
     | 
| 
       1465 
1484 
     | 
    
         
             
                }
         
     | 
| 
       1466 
1485 
     | 
    
         | 
| 
       1467 
1486 
     | 
    
         
             
                function loadMode() {
         
     | 
| 
         @@ -1507,18 +1526,17 @@ window.CodeMirror = (function() { 
     | 
|
| 
       1507 
1526 
     | 
    
         | 
| 
       1508 
1527 
     | 
    
         
             
                function TextMarker(type, style) { this.lines = []; this.type = type; if (style) this.style = style; }
         
     | 
| 
       1509 
1528 
     | 
    
         
             
                TextMarker.prototype.clear = operation(function() {
         
     | 
| 
       1510 
     | 
    
         
            -
                  var min 
     | 
| 
      
 1529 
     | 
    
         
            +
                  var min, max;
         
     | 
| 
       1511 
1530 
     | 
    
         
             
                  for (var i = 0; i < this.lines.length; ++i) {
         
     | 
| 
       1512 
1531 
     | 
    
         
             
                    var line = this.lines[i];
         
     | 
| 
       1513 
     | 
    
         
            -
                    var span = getMarkedSpanFor(line.markedSpans, this 
     | 
| 
       1514 
     | 
    
         
            -
                    if (span.from != null  
     | 
| 
       1515 
     | 
    
         
            -
             
     | 
| 
       1516 
     | 
    
         
            -
             
     | 
| 
       1517 
     | 
    
         
            -
                    }
         
     | 
| 
      
 1532 
     | 
    
         
            +
                    var span = getMarkedSpanFor(line.markedSpans, this);
         
     | 
| 
      
 1533 
     | 
    
         
            +
                    if (span.from != null) min = lineNo(line);
         
     | 
| 
      
 1534 
     | 
    
         
            +
                    if (span.to != null) max = lineNo(line);
         
     | 
| 
      
 1535 
     | 
    
         
            +
                    line.markedSpans = removeMarkedSpan(line.markedSpans, span);
         
     | 
| 
       1518 
1536 
     | 
    
         
             
                  }
         
     | 
| 
       1519 
     | 
    
         
            -
                  if (min !=  
     | 
| 
       1520 
     | 
    
         
            -
                    changes.push({from: min, to: max + 1});
         
     | 
| 
      
 1537 
     | 
    
         
            +
                  if (min != null) changes.push({from: min, to: max + 1});
         
     | 
| 
       1521 
1538 
     | 
    
         
             
                  this.lines.length = 0;
         
     | 
| 
      
 1539 
     | 
    
         
            +
                  this.explicitlyCleared = true;
         
     | 
| 
       1522 
1540 
     | 
    
         
             
                });
         
     | 
| 
       1523 
1541 
     | 
    
         
             
                TextMarker.prototype.find = function() {
         
     | 
| 
       1524 
1542 
     | 
    
         
             
                  var from, to;
         
     | 
| 
         @@ -1545,7 +1563,7 @@ window.CodeMirror = (function() { 
     | 
|
| 
       1545 
1563 
     | 
    
         
             
                    var span = {from: curLine == from.line ? from.ch : null,
         
     | 
| 
       1546 
1564 
     | 
    
         
             
                                to: curLine == to.line ? to.ch : null,
         
     | 
| 
       1547 
1565 
     | 
    
         
             
                                marker: marker};
         
     | 
| 
       1548 
     | 
    
         
            -
                     
     | 
| 
      
 1566 
     | 
    
         
            +
                    line.markedSpans = (line.markedSpans || []).concat([span]);
         
     | 
| 
       1549 
1567 
     | 
    
         
             
                    marker.lines.push(line);
         
     | 
| 
       1550 
1568 
     | 
    
         
             
                    ++curLine;
         
     | 
| 
       1551 
1569 
     | 
    
         
             
                  });
         
     | 
| 
         @@ -1556,8 +1574,9 @@ window.CodeMirror = (function() { 
     | 
|
| 
       1556 
1574 
     | 
    
         
             
                function setBookmark(pos) {
         
     | 
| 
       1557 
1575 
     | 
    
         
             
                  pos = clipPos(pos);
         
     | 
| 
       1558 
1576 
     | 
    
         
             
                  var marker = new TextMarker("bookmark"), line = getLine(pos.line);
         
     | 
| 
      
 1577 
     | 
    
         
            +
                  history.addChange(pos.line, 1, [newHL(line.text, line.markedSpans)], true);
         
     | 
| 
       1559 
1578 
     | 
    
         
             
                  var span = {from: pos.ch, to: pos.ch, marker: marker};
         
     | 
| 
       1560 
     | 
    
         
            -
                   
     | 
| 
      
 1579 
     | 
    
         
            +
                  line.markedSpans = (line.markedSpans || []).concat([span]);
         
     | 
| 
       1561 
1580 
     | 
    
         
             
                  marker.lines.push(line);
         
     | 
| 
       1562 
1581 
     | 
    
         
             
                  return marker;
         
     | 
| 
       1563 
1582 
     | 
    
         
             
                }
         
     | 
| 
         @@ -1646,8 +1665,6 @@ window.CodeMirror = (function() { 
     | 
|
| 
       1646 
1665 
     | 
    
         | 
| 
       1647 
1666 
     | 
    
         
             
                function measureLine(line, ch) {
         
     | 
| 
       1648 
1667 
     | 
    
         
             
                  if (ch == 0) return {top: 0, left: 0};
         
     | 
| 
       1649 
     | 
    
         
            -
                  var wbr = options.lineWrapping && ch < line.text.length &&
         
     | 
| 
       1650 
     | 
    
         
            -
                            spanAffectsWrapping.test(line.text.slice(ch - 1, ch + 1));
         
     | 
| 
       1651 
1668 
     | 
    
         
             
                  var pre = lineContent(line, ch);
         
     | 
| 
       1652 
1669 
     | 
    
         
             
                  removeChildrenAndAdd(measure, pre);
         
     | 
| 
       1653 
1670 
     | 
    
         
             
                  var anchor = pre.anchor;
         
     | 
| 
         @@ -1980,6 +1997,7 @@ window.CodeMirror = (function() { 
     | 
|
| 
       1980 
1997 
     | 
    
         
             
                  if (extensions.propertyIsEnumerable(ext) &&
         
     | 
| 
       1981 
1998 
     | 
    
         
             
                      !instance.propertyIsEnumerable(ext))
         
     | 
| 
       1982 
1999 
     | 
    
         
             
                    instance[ext] = extensions[ext];
         
     | 
| 
      
 2000 
     | 
    
         
            +
                for (var i = 0; i < initHooks.length; ++i) initHooks[i](instance);
         
     | 
| 
       1983 
2001 
     | 
    
         
             
                return instance;
         
     | 
| 
       1984 
2002 
     | 
    
         
             
              } // (end of function CodeMirror)
         
     | 
| 
       1985 
2003 
     | 
    
         | 
| 
         @@ -2003,6 +2021,7 @@ window.CodeMirror = (function() { 
     | 
|
| 
       2003 
2021 
     | 
    
         
             
                gutter: false,
         
     | 
| 
       2004 
2022 
     | 
    
         
             
                fixedGutter: false,
         
     | 
| 
       2005 
2023 
     | 
    
         
             
                firstLineNumber: 1,
         
     | 
| 
      
 2024 
     | 
    
         
            +
                showCursorWhenSelecting: false,
         
     | 
| 
       2006 
2025 
     | 
    
         
             
                readOnly: false,
         
     | 
| 
       2007 
2026 
     | 
    
         
             
                dragDrop: true,
         
     | 
| 
       2008 
2027 
     | 
    
         
             
                onChange: null,
         
     | 
| 
         @@ -2054,7 +2073,11 @@ window.CodeMirror = (function() { 
     | 
|
| 
       2054 
2073 
     | 
    
         
             
                var modeObj = mfactory(options, spec);
         
     | 
| 
       2055 
2074 
     | 
    
         
             
                if (modeExtensions.hasOwnProperty(spec.name)) {
         
     | 
| 
       2056 
2075 
     | 
    
         
             
                  var exts = modeExtensions[spec.name];
         
     | 
| 
       2057 
     | 
    
         
            -
                  for (var prop in exts)  
     | 
| 
      
 2076 
     | 
    
         
            +
                  for (var prop in exts) {
         
     | 
| 
      
 2077 
     | 
    
         
            +
                    if (!exts.hasOwnProperty(prop)) continue;
         
     | 
| 
      
 2078 
     | 
    
         
            +
                    if (modeObj.hasOwnProperty(prop)) modeObj["_" + prop] = modeObj[prop];
         
     | 
| 
      
 2079 
     | 
    
         
            +
                    modeObj[prop] = exts[prop];
         
     | 
| 
      
 2080 
     | 
    
         
            +
                  }
         
     | 
| 
       2058 
2081 
     | 
    
         
             
                }
         
     | 
| 
       2059 
2082 
     | 
    
         
             
                modeObj.name = spec.name;
         
     | 
| 
       2060 
2083 
     | 
    
         
             
                return modeObj;
         
     | 
| 
         @@ -2077,6 +2100,9 @@ window.CodeMirror = (function() { 
     | 
|
| 
       2077 
2100 
     | 
    
         
             
                extensions[name] = func;
         
     | 
| 
       2078 
2101 
     | 
    
         
             
              };
         
     | 
| 
       2079 
2102 
     | 
    
         | 
| 
      
 2103 
     | 
    
         
            +
              var initHooks = [];
         
     | 
| 
      
 2104 
     | 
    
         
            +
              CodeMirror.defineInitHook = function(f) {initHooks.push(f);};
         
     | 
| 
      
 2105 
     | 
    
         
            +
             
     | 
| 
       2080 
2106 
     | 
    
         
             
              var modeExtensions = CodeMirror.modeExtensions = {};
         
     | 
| 
       2081 
2107 
     | 
    
         
             
              CodeMirror.extendMode = function(mode, properties) {
         
     | 
| 
       2082 
2108 
     | 
    
         
             
                var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});
         
     | 
| 
         @@ -2169,7 +2195,7 @@ window.CodeMirror = (function() { 
     | 
|
| 
       2169 
2195 
     | 
    
         
             
              keyMap.emacsy = {
         
     | 
| 
       2170 
2196 
     | 
    
         
             
                "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown",
         
     | 
| 
       2171 
2197 
     | 
    
         
             
                "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd",
         
     | 
| 
       2172 
     | 
    
         
            -
                "Ctrl-V": " 
     | 
| 
      
 2198 
     | 
    
         
            +
                "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharRight", "Ctrl-H": "delCharLeft",
         
     | 
| 
       2173 
2199 
     | 
    
         
             
                "Alt-D": "delWordRight", "Alt-Backspace": "delWordLeft", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars"
         
     | 
| 
       2174 
2200 
     | 
    
         
             
              };
         
     | 
| 
       2175 
2201 
     | 
    
         | 
| 
         @@ -2206,6 +2232,7 @@ window.CodeMirror = (function() { 
     | 
|
| 
       2206 
2232 
     | 
    
         
             
                var name = keyNames[e_prop(event, "keyCode")];
         
     | 
| 
       2207 
2233 
     | 
    
         
             
                return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod";
         
     | 
| 
       2208 
2234 
     | 
    
         
             
              }
         
     | 
| 
      
 2235 
     | 
    
         
            +
              CodeMirror.isModifierKey = isModifierKey;
         
     | 
| 
       2209 
2236 
     | 
    
         | 
| 
       2210 
2237 
     | 
    
         
             
              CodeMirror.fromTextArea = function(textarea, options) {
         
     | 
| 
       2211 
2238 
     | 
    
         
             
                if (!options) options = {};
         
     | 
| 
         @@ -2226,15 +2253,13 @@ window.CodeMirror = (function() { 
     | 
|
| 
       2226 
2253 
     | 
    
         
             
                if (textarea.form) {
         
     | 
| 
       2227 
2254 
     | 
    
         
             
                  // Deplorable hack to make the submit method do the right thing.
         
     | 
| 
       2228 
2255 
     | 
    
         
             
                  var rmSubmit = connect(textarea.form, "submit", save, true);
         
     | 
| 
       2229 
     | 
    
         
            -
                   
     | 
| 
       2230 
     | 
    
         
            -
             
     | 
| 
       2231 
     | 
    
         
            -
                     
     | 
| 
       2232 
     | 
    
         
            -
             
     | 
| 
       2233 
     | 
    
         
            -
             
     | 
| 
       2234 
     | 
    
         
            -
             
     | 
| 
       2235 
     | 
    
         
            -
             
     | 
| 
       2236 
     | 
    
         
            -
                    };
         
     | 
| 
       2237 
     | 
    
         
            -
                  }
         
     | 
| 
      
 2256 
     | 
    
         
            +
                  var form = textarea.form, realSubmit = form.submit;
         
     | 
| 
      
 2257 
     | 
    
         
            +
                  textarea.form.submit = function wrappedSubmit() {
         
     | 
| 
      
 2258 
     | 
    
         
            +
                    save();
         
     | 
| 
      
 2259 
     | 
    
         
            +
                    form.submit = realSubmit;
         
     | 
| 
      
 2260 
     | 
    
         
            +
                    form.submit();
         
     | 
| 
      
 2261 
     | 
    
         
            +
                    form.submit = wrappedSubmit;
         
     | 
| 
      
 2262 
     | 
    
         
            +
                  };
         
     | 
| 
       2238 
2263 
     | 
    
         
             
                }
         
     | 
| 
       2239 
2264 
     | 
    
         | 
| 
       2240 
2265 
     | 
    
         
             
                textarea.style.display = "none";
         
     | 
| 
         @@ -2256,18 +2281,24 @@ window.CodeMirror = (function() { 
     | 
|
| 
       2256 
2281 
     | 
    
         
             
                return instance;
         
     | 
| 
       2257 
2282 
     | 
    
         
             
              };
         
     | 
| 
       2258 
2283 
     | 
    
         | 
| 
       2259 
     | 
    
         
            -
              var gecko = /gecko\/\d 
     | 
| 
      
 2284 
     | 
    
         
            +
              var gecko = /gecko\/\d/i.test(navigator.userAgent);
         
     | 
| 
       2260 
2285 
     | 
    
         
             
              var ie = /MSIE \d/.test(navigator.userAgent);
         
     | 
| 
       2261 
2286 
     | 
    
         
             
              var ie_lt8 = /MSIE [1-7]\b/.test(navigator.userAgent);
         
     | 
| 
       2262 
2287 
     | 
    
         
             
              var ie_lt9 = /MSIE [1-8]\b/.test(navigator.userAgent);
         
     | 
| 
       2263 
2288 
     | 
    
         
             
              var quirksMode = ie && document.documentMode == 5;
         
     | 
| 
       2264 
2289 
     | 
    
         
             
              var webkit = /WebKit\//.test(navigator.userAgent);
         
     | 
| 
      
 2290 
     | 
    
         
            +
              var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(navigator.userAgent);
         
     | 
| 
       2265 
2291 
     | 
    
         
             
              var chrome = /Chrome\//.test(navigator.userAgent);
         
     | 
| 
       2266 
2292 
     | 
    
         
             
              var opera = /Opera\//.test(navigator.userAgent);
         
     | 
| 
       2267 
2293 
     | 
    
         
             
              var safari = /Apple Computer/.test(navigator.vendor);
         
     | 
| 
       2268 
2294 
     | 
    
         
             
              var khtml = /KHTML\//.test(navigator.userAgent);
         
     | 
| 
       2269 
2295 
     | 
    
         
             
              var mac_geLion = /Mac OS X 10\D([7-9]|\d\d)\D/.test(navigator.userAgent);
         
     | 
| 
       2270 
2296 
     | 
    
         | 
| 
      
 2297 
     | 
    
         
            +
              var opera_version = opera && navigator.userAgent.match(/Version\/(\d*\.\d*)/);
         
     | 
| 
      
 2298 
     | 
    
         
            +
              if (opera_version) opera_version = Number(opera_version[1]);
         
     | 
| 
      
 2299 
     | 
    
         
            +
              // Some browsers use the wrong event properties to signal cmd/ctrl on OS X
         
     | 
| 
      
 2300 
     | 
    
         
            +
              var flipCtrlCmd = mac && (qtwebkit || opera && (opera_version == null || opera_version < 12.11));
         
     | 
| 
      
 2301 
     | 
    
         
            +
             
     | 
| 
       2271 
2302 
     | 
    
         
             
              // Utility functions for working with state. Exported because modes
         
     | 
| 
       2272 
2303 
     | 
    
         
             
              // sometimes need to do this.
         
     | 
| 
       2273 
2304 
     | 
    
         
             
              function copyState(mode, state) {
         
     | 
| 
         @@ -2355,16 +2386,20 @@ window.CodeMirror = (function() { 
     | 
|
| 
       2355 
2386 
     | 
    
         
             
                this.from = from; this.to = to; this.marker = marker;
         
     | 
| 
       2356 
2387 
     | 
    
         
             
              }
         
     | 
| 
       2357 
2388 
     | 
    
         | 
| 
       2358 
     | 
    
         
            -
              function getMarkedSpanFor(spans, marker 
     | 
| 
      
 2389 
     | 
    
         
            +
              function getMarkedSpanFor(spans, marker) {
         
     | 
| 
       2359 
2390 
     | 
    
         
             
                if (spans) for (var i = 0; i < spans.length; ++i) {
         
     | 
| 
       2360 
2391 
     | 
    
         
             
                  var span = spans[i];
         
     | 
| 
       2361 
     | 
    
         
            -
                  if (span.marker == marker)  
     | 
| 
       2362 
     | 
    
         
            -
                    if (del) spans.splice(i, 1);
         
     | 
| 
       2363 
     | 
    
         
            -
                    return span;
         
     | 
| 
       2364 
     | 
    
         
            -
                  }
         
     | 
| 
      
 2392 
     | 
    
         
            +
                  if (span.marker == marker) return span;
         
     | 
| 
       2365 
2393 
     | 
    
         
             
                }
         
     | 
| 
       2366 
2394 
     | 
    
         
             
              }
         
     | 
| 
       2367 
2395 
     | 
    
         | 
| 
      
 2396 
     | 
    
         
            +
              function removeMarkedSpan(spans, span) {
         
     | 
| 
      
 2397 
     | 
    
         
            +
                var r;
         
     | 
| 
      
 2398 
     | 
    
         
            +
                for (var i = 0; i < spans.length; ++i)
         
     | 
| 
      
 2399 
     | 
    
         
            +
                  if (spans[i] != span) (r || (r = [])).push(spans[i]);
         
     | 
| 
      
 2400 
     | 
    
         
            +
                return r;
         
     | 
| 
      
 2401 
     | 
    
         
            +
              }
         
     | 
| 
      
 2402 
     | 
    
         
            +
             
     | 
| 
       2368 
2403 
     | 
    
         
             
              function markedSpansBefore(old, startCh, endCh) {
         
     | 
| 
       2369 
2404 
     | 
    
         
             
                if (old) for (var i = 0, nw; i < old.length; ++i) {
         
     | 
| 
       2370 
2405 
     | 
    
         
             
                  var span = old[i], marker = span.marker;
         
     | 
| 
         @@ -2448,7 +2483,15 @@ window.CodeMirror = (function() { 
     | 
|
| 
       2448 
2483 
     | 
    
         
             
              // hl stands for history-line, a data structure that can be either a
         
     | 
| 
       2449 
2484 
     | 
    
         
             
              // string (line without markers) or a {text, markedSpans} object.
         
     | 
| 
       2450 
2485 
     | 
    
         
             
              function hlText(val) { return typeof val == "string" ? val : val.text; }
         
     | 
| 
       2451 
     | 
    
         
            -
              function hlSpans(val) { 
     | 
| 
      
 2486 
     | 
    
         
            +
              function hlSpans(val) {
         
     | 
| 
      
 2487 
     | 
    
         
            +
                if (typeof val == "string") return null;
         
     | 
| 
      
 2488 
     | 
    
         
            +
                var spans = val.markedSpans, out = null;
         
     | 
| 
      
 2489 
     | 
    
         
            +
                for (var i = 0; i < spans.length; ++i) {
         
     | 
| 
      
 2490 
     | 
    
         
            +
                  if (spans[i].marker.explicitlyCleared) { if (!out) out = spans.slice(0, i); }
         
     | 
| 
      
 2491 
     | 
    
         
            +
                  else if (out) out.push(spans[i]);
         
     | 
| 
      
 2492 
     | 
    
         
            +
                }
         
     | 
| 
      
 2493 
     | 
    
         
            +
                return !out ? spans : out.length ? out : null;
         
     | 
| 
      
 2494 
     | 
    
         
            +
              }
         
     | 
| 
       2452 
2495 
     | 
    
         
             
              function newHL(text, spans) { return spans ? {text: text, markedSpans: spans} : text; }
         
     | 
| 
       2453 
2496 
     | 
    
         | 
| 
       2454 
2497 
     | 
    
         
             
              function detachMarkedSpans(line) {
         
     | 
| 
         @@ -2584,13 +2627,17 @@ window.CodeMirror = (function() { 
     | 
|
| 
       2584 
2627 
     | 
    
         
             
                    span = function(html, text, style) {
         
     | 
| 
       2585 
2628 
     | 
    
         
             
                      var l = text.length;
         
     | 
| 
       2586 
2629 
     | 
    
         
             
                      if (wrapAt >= outPos && wrapAt < outPos + l) {
         
     | 
| 
       2587 
     | 
    
         
            -
                         
     | 
| 
       2588 
     | 
    
         
            -
             
     | 
| 
      
 2630 
     | 
    
         
            +
                        var cut = wrapAt - outPos;
         
     | 
| 
      
 2631 
     | 
    
         
            +
                        if (cut) {
         
     | 
| 
      
 2632 
     | 
    
         
            +
                          span_(html, text.slice(0, cut), style);
         
     | 
| 
       2589 
2633 
     | 
    
         
             
                          // See comment at the definition of spanAffectsWrapping
         
     | 
| 
       2590 
     | 
    
         
            -
                          if (compensateForWrapping)  
     | 
| 
      
 2634 
     | 
    
         
            +
                          if (compensateForWrapping) {
         
     | 
| 
      
 2635 
     | 
    
         
            +
                            var view = text.slice(cut - 1, cut + 1);
         
     | 
| 
      
 2636 
     | 
    
         
            +
                            if (spanAffectsWrapping.test(view)) html.appendChild(elt("wbr"));
         
     | 
| 
      
 2637 
     | 
    
         
            +
                            else if (!ie_lt8 && /\w\w/.test(view)) html.appendChild(document.createTextNode("\u200d"));
         
     | 
| 
      
 2638 
     | 
    
         
            +
                          }
         
     | 
| 
       2591 
2639 
     | 
    
         
             
                        }
         
     | 
| 
       2592 
2640 
     | 
    
         
             
                        html.appendChild(anchor);
         
     | 
| 
       2593 
     | 
    
         
            -
                        var cut = wrapAt - outPos;
         
     | 
| 
       2594 
2641 
     | 
    
         
             
                        span_(anchor, opera ? text.slice(cut, cut + 1) : text.slice(cut), style);
         
     | 
| 
       2595 
2642 
     | 
    
         
             
                        if (opera) span_(html, text.slice(cut + 1), style);
         
     | 
| 
       2596 
2643 
     | 
    
         
             
                        wrapAt--;
         
     | 
| 
         @@ -2820,7 +2867,7 @@ window.CodeMirror = (function() { 
     | 
|
| 
       2820 
2867 
     | 
    
         
             
                if (line.parent == null) return null;
         
     | 
| 
       2821 
2868 
     | 
    
         
             
                var cur = line.parent, no = indexOf(cur.lines, line);
         
     | 
| 
       2822 
2869 
     | 
    
         
             
                for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {
         
     | 
| 
       2823 
     | 
    
         
            -
                  for (var i = 0 
     | 
| 
      
 2870 
     | 
    
         
            +
                  for (var i = 0; ; ++i) {
         
     | 
| 
       2824 
2871 
     | 
    
         
             
                    if (chunk.children[i] == cur) break;
         
     | 
| 
       2825 
2872 
     | 
    
         
             
                    no += chunk.children[i].chunkSize();
         
     | 
| 
       2826 
2873 
     | 
    
         
             
                  }
         
     | 
| 
         @@ -2874,7 +2921,7 @@ window.CodeMirror = (function() { 
     | 
|
| 
       2874 
2921 
     | 
    
         
             
                  var time = +new Date, cur = lst(this.done), last = cur && lst(cur);
         
     | 
| 
       2875 
2922 
     | 
    
         
             
                  var dtime = time - this.time;
         
     | 
| 
       2876 
2923 
     | 
    
         | 
| 
       2877 
     | 
    
         
            -
                  if ( 
     | 
| 
      
 2924 
     | 
    
         
            +
                  if (cur && !this.closed && this.compound) {
         
     | 
| 
       2878 
2925 
     | 
    
         
             
                    cur.push({start: start, added: added, old: old});
         
     | 
| 
       2879 
2926 
     | 
    
         
             
                  } else if (dtime > 400 || !last || this.closed ||
         
     | 
| 
       2880 
2927 
     | 
    
         
             
                             last.start > start + old.length || last.start + last.added < start) {
         
     | 
| 
         @@ -3080,8 +3127,10 @@ window.CodeMirror = (function() { 
     | 
|
| 
       3080 
3127 
     | 
    
         
             
                  if (collection[i] == elt) return i;
         
     | 
| 
       3081 
3128 
     | 
    
         
             
                return -1;
         
     | 
| 
       3082 
3129 
     | 
    
         
             
              }
         
     | 
| 
      
 3130 
     | 
    
         
            +
              var nonASCIISingleCaseWordChar = /[\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc]/;
         
     | 
| 
       3083 
3131 
     | 
    
         
             
              function isWordChar(ch) {
         
     | 
| 
       3084 
     | 
    
         
            -
                return /\w/.test(ch) || ch 
     | 
| 
      
 3132 
     | 
    
         
            +
                return /\w/.test(ch) || ch > "\x80" &&
         
     | 
| 
      
 3133 
     | 
    
         
            +
                  (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch));
         
     | 
| 
       3085 
3134 
     | 
    
         
             
              }
         
     | 
| 
       3086 
3135 
     | 
    
         | 
| 
       3087 
3136 
     | 
    
         
             
              // See if "".split is the broken IE version, if so, provide an
         
     | 
| 
         @@ -3137,7 +3186,7 @@ window.CodeMirror = (function() { 
     | 
|
| 
       3137 
3186 
     | 
    
         
             
                for (var i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = "F" + i;
         
     | 
| 
       3138 
3187 
     | 
    
         
             
              })();
         
     | 
| 
       3139 
3188 
     | 
    
         | 
| 
       3140 
     | 
    
         
            -
              CodeMirror.version = "2. 
     | 
| 
      
 3189 
     | 
    
         
            +
              CodeMirror.version = "2.37";
         
     | 
| 
       3141 
3190 
     | 
    
         | 
| 
       3142 
3191 
     | 
    
         
             
              return CodeMirror;
         
     | 
| 
       3143 
3192 
     | 
    
         
             
            })();
         
     |