5
if (typeof exports == "object" && typeof module == "object")
6
mod(require("../../lib/codemirror"));
7
else if (typeof define == "function" && define.amd)
8
define(["../../lib/codemirror"], mod);
11
})(function(CodeMirror) {
14
CodeMirror.registerHelper("fold", "markdown", function(cm, start) {
17
function isHeader(lineNo) {
18
var tokentype = cm.getTokenTypeAt(CodeMirror.Pos(lineNo, 0));
19
return tokentype && /\bheader\b/.test(tokentype);
22
function headerLevel(lineNo, line, nextLine) {
23
var match = line && line.match(/^#+/);
24
if (match && isHeader(lineNo)) return match[0].length;
25
match = nextLine && nextLine.match(/^[=\-]+\s*$/);
26
if (match && isHeader(lineNo + 1)) return nextLine[0] == "=" ? 1 : 2;
30
var firstLine = cm.getLine(start.line), nextLine = cm.getLine(start.line + 1);
31
var level = headerLevel(start.line, firstLine, nextLine);
32
if (level === maxDepth) return undefined;
34
var lastLineNo = cm.lastLine();
35
var end = start.line, nextNextLine = cm.getLine(end + 2);
36
while (end < lastLineNo) {
37
if (headerLevel(end + 1, nextLine, nextNextLine) <= level) break;
39
nextLine = nextNextLine;
40
nextNextLine = cm.getLine(end + 2);
44
from: CodeMirror.Pos(start.line, firstLine.length),
45
to: CodeMirror.Pos(end, cm.getLine(end).length)