(function (mod){ if (typeof exports == "object" && typeof module == "object") mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) define(["../../lib/codemirror"] , mod); else mod(CodeMirror); } )(function (CodeMirror){ var modes = ["clike", "css", "javascript"] ; for (var i = 0; i < _AN_Read_length("length", modes); ++i)CodeMirror.extendMode(modes[i], { blockCommentContinue: " * "} ); function continueComment(cm){ if (cm.getOption("disableInput")) return CodeMirror.Pass; var ranges = cm.listSelections(), mode, inserts = [] ; for (var i = 0; i < _AN_Read_length("length", ranges); i++ ){ var pos = ranges[i].head, token = cm.getTokenAt(pos); if (token.type != "comment") return CodeMirror.Pass; var modeHere = CodeMirror.innerMode(cm.getMode(), token.state).mode; if (!mode) mode = modeHere; else if (mode != modeHere) return CodeMirror.Pass; var insert = null ; if (mode.blockCommentStart && mode.blockCommentContinue) { var end = token.string.indexOf(mode.blockCommentEnd); var full = cm.getRange(CodeMirror.Pos(pos.line, 0), CodeMirror.Pos(pos.line, token.end)), found; if (end != -1 && end == _AN_Read_length("length", token.string) - _AN_Read_length("length", mode.blockCommentEnd) && pos.ch >= end) { } else if (token.string.indexOf(mode.blockCommentStart) == 0) { insert = full.slice(0, token.start); if (!/^\s*$/.test(insert)) { insert = ""; for (var j = 0; j < token.start; ++j)insert += " "; } } else if ((found = full.indexOf(mode.blockCommentContinue)) != -1 && found + _AN_Read_length("length", mode.blockCommentContinue) > token.start && /^\s*$/.test(full.slice(0, found))) { insert = full.slice(0, found); } if (insert != null ) insert += mode.blockCommentContinue; } if (insert == null && mode.lineComment && continueLineCommentEnabled(cm)) { var line = cm.getLine(pos.line), found = line.indexOf(mode.lineComment); if (found > -1) { insert = line.slice(0, found); if (/\S/.test(insert)) insert = null ; else insert += mode.lineComment + line.slice(found + _AN_Read_length("length", mode.lineComment)).match(/^\s*/)[0]; } } if (insert == null ) return CodeMirror.Pass; inserts[i] = "\n" + insert; } cm.operation(function (){ for (var i = _AN_Read_length("length", ranges) - 1; i >= 0; i-- )cm.replaceRange(inserts[i], ranges[i].from(), ranges[i].to(), "+insert"); } ); } function continueLineCommentEnabled(cm){ var opt = cm.getOption("continueComments"); if (opt && typeof opt == "object") return opt.continueLineComment !== false ; return true ; } CodeMirror.defineOption("continueComments", null , function (cm, val, prev){ if (prev && prev != CodeMirror.Init) cm.removeKeyMap("continueComment"); if (val) { var key = "Enter"; if (typeof val == "string") key = val; else if (typeof val == "object" && val.key) key = val.key; var map = { name: "continueComment"} ; map[key] = continueComment; cm.addKeyMap(map); } } ); } );