Вход Регистрация
Файл: engine/skins/mirror/addon/comment/comment.js
Строк: 511
<?php
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE

(function(mod) {
  if (
typeof exports == "object" && typeof module == "object"// CommonJS
    
mod(require("../../lib/codemirror"));
  else if (
typeof define == "function" && define.amd// AMD
    
define(["../../lib/codemirror"], mod);
  else 
// Plain browser env
    
mod(CodeMirror);
})(function(
CodeMirror) {
  
"use strict";

  var 
noOptions = {};
  var 
nonWS = /[^su00a0]/;
  var 
Pos CodeMirror.Pos;

  function 
firstNonWS(str) {
    var 
found str.search(nonWS);
    return 
found == -found;
  }

  
CodeMirror.commands.toggleComment = function(cm) {
    var 
minLine Infinityranges cm.listSelections(), mode null;
    for (var 
ranges.length 1>= 0i--) {
      var 
from ranges[i].from(), to ranges[i].to();
      if (
from.line >= minLine) continue;
      if (
to.line >= minLineto Pos(minLine0);
      
minLine from.line;
      if (
mode == null) {
        if (
cm.uncomment(fromto)) mode "un";
        else { 
cm.lineComment(fromto); mode "line"; }
      } else if (
mode == "un") {
        
cm.uncomment(fromto);
      } else {
        
cm.lineComment(fromto);
      }
    }
  };

  
CodeMirror.defineExtension("lineComment", function(fromtooptions) {
    if (!
optionsoptions noOptions;
    var 
self thismode self.getModeAt(from);
    var 
commentString options.lineComment || mode.lineComment;
    if (!
commentString) {
      if (
options.blockCommentStart || mode.blockCommentStart) {
        
options.fullLines true;
        
self.blockComment(fromtooptions);
      }
      return;
    }
    var 
firstLine self.getLine(from.line);
    if (
firstLine == null) return;
    var 
end Math.min(to.ch != || to.line == from.line to.line to.lineself.lastLine() + 1);
    var 
pad options.padding == null " " options.padding;
    var 
blankLines options.commentBlankLines || from.line == to.line;

    
self.operation(function() {
      if (
options.indent) {
        var 
baseString firstLine.slice(0firstNonWS(firstLine));
        for (var 
from.lineend; ++i) {
          var 
line self.getLine(i), cut baseString.length;
          if (!
blankLines && !nonWS.test(line)) continue;
          if (
line.slice(0cut) != baseStringcut firstNonWS(line);
          
self.replaceRange(baseString commentString padPos(i0), Pos(icut));
        }
      } else {
        for (var 
from.lineend; ++i) {
          if (
blankLines || nonWS.test(self.getLine(i)))
            
self.replaceRange(commentString padPos(i0));
        }
      }
    });
  });

  
CodeMirror.defineExtension("blockComment", function(fromtooptions) {
    if (!
optionsoptions noOptions;
    var 
self thismode self.getModeAt(from);
    var 
startString options.blockCommentStart || mode.blockCommentStart;
    var 
endString options.blockCommentEnd || mode.blockCommentEnd;
    if (!
startString || !endString) {
      if ((
options.lineComment || mode.lineComment) && options.fullLines != false)
        
self.lineComment(fromtooptions);
      return;
    }

    var 
end Math.min(to.lineself.lastLine());
    if (
end != from.line && to.ch == && nonWS.test(self.getLine(end))) --end;

    var 
pad options.padding == null " " options.padding;
    if (
from.line end) return;

    
self.operation(function() {
      if (
options.fullLines != false) {
        var 
lastLineHasText nonWS.test(self.getLine(end));
        
self.replaceRange(pad endStringPos(end));
        
self.replaceRange(startString padPos(from.line0));
        var 
lead options.blockCommentLead || mode.blockCommentLead;
        if (
lead != null) for (var from.line 1<= end; ++i)
          if (
!= end || lastLineHasText)
            
self.replaceRange(lead padPos(i0));
      } else {
        
self.replaceRange(endStringto);
        
self.replaceRange(startStringfrom);
      }
    });
  });

  
CodeMirror.defineExtension("uncomment", function(fromtooptions) {
    if (!
optionsoptions noOptions;
    var 
self thismode self.getModeAt(from);
    var 
end Math.min(to.lineself.lastLine()), start Math.min(from.lineend);

    
// Try finding line comments
    
var lineString options.lineComment || mode.lineCommentlines = [];
    var 
pad options.padding == null " " options.paddingdidSomething;
    
lineComment: {
      if (!
lineString) break lineComment;
      for (var 
start<= end; ++i) {
        var 
line self.getLine(i);
        var 
found line.indexOf(lineString);
        if (
found > -&& !/comment/.test(self.getTokenTypeAt(Pos(ifound 1)))) found = -1;
        if (
found == -&& (!= end || == start) && nonWS.test(line)) break lineComment;
        if (
found > -&& nonWS.test(line.slice(0found))) break lineComment;
        
lines.push(line);
      }
      
self.operation(function() {
        for (var 
start<= end; ++i) {
          var 
line lines[start];
          var 
pos line.indexOf(lineString), endPos pos lineString.length;
          if (
pos 0) continue;
          if (
line.slice(endPosendPos pad.length) == padendPos += pad.length;
          
didSomething true;
          
self.replaceRange(""Pos(ipos), Pos(iendPos));
        }
      });
      if (
didSomething) return true;
    }

    
// Try block comments
    
var startString options.blockCommentStart || mode.blockCommentStart;
    var 
endString options.blockCommentEnd || mode.blockCommentEnd;
    if (!
startString || !endString) return false;
    var 
lead options.blockCommentLead || mode.blockCommentLead;
    var 
startLine self.getLine(start), endLine end == start startLine self.getLine(end);
    var 
open startLine.indexOf(startString), close endLine.lastIndexOf(endString);
    if (
close == -&& start != end) {
      
endLine self.getLine(--end);
      
close endLine.lastIndexOf(endString);
    }
    if (
open == -|| close == -||
        !/
comment/.test(self.getTokenTypeAt(Pos(startopen 1))) ||
        !/
comment/.test(self.getTokenTypeAt(Pos(endclose 1))))
      return 
false;

    
// Avoid killing block comments completely outside the selection.
    // Positions of the last startString before the start of the selection, and the first endString after it.
    
var lastStart startLine.lastIndexOf(startStringfrom.ch);
    var 
firstEnd lastStart == -? -startLine.slice(0from.ch).indexOf(endStringlastStart startString.length);
    if (
lastStart != -&& firstEnd != -1) return false;
    
// Positions of the first endString after the end of the selection, and the last startString before it.
    
firstEnd endLine.indexOf(endStringto.ch);
    var 
almostLastStart endLine.slice(to.ch).lastIndexOf(startStringfirstEnd to.ch);
    
lastStart = (firstEnd == -|| almostLastStart == -1) ? -to.ch almostLastStart;
    if (
firstEnd != -&& lastStart != -1) return false;

    
self.operation(function() {
      
self.replaceRange(""Pos(endclose - (pad && endLine.slice(close pad.lengthclose) == pad pad.length 0)),
                        
Pos(endclose endString.length));
      var 
openEnd open startString.length;
      if (
pad && startLine.slice(openEndopenEnd pad.length) == padopenEnd += pad.length;
      
self.replaceRange(""Pos(startopen), Pos(startopenEnd));
      if (
lead) for (var start 1<= end; ++i) {
        var 
line self.getLine(i), found line.indexOf(lead);
        if (
found == -|| nonWS.test(line.slice(0found))) continue;
        var 
foundEnd found lead.length;
        if (
pad && line.slice(foundEndfoundEnd pad.length) == padfoundEnd += pad.length;
        
self.replaceRange(""Pos(ifound), Pos(ifoundEnd));
      }
    });
    return 
true;
  });
});
?>
Онлайн: 1
Реклама