Spaces:
Sleeping
Sleeping
processmaker-community / processmaker-files /gulliver /js /codemirror /addon /fold /markdown-fold.js
| // 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) { | |
| ; | |
| CodeMirror.registerHelper("fold", "markdown", function(cm, start) { | |
| var maxDepth = 100; | |
| function isHeader(lineNo) { | |
| var tokentype = cm.getTokenTypeAt(CodeMirror.Pos(lineNo, 0)); | |
| return tokentype && /\bheader\b/.test(tokentype); | |
| } | |
| function headerLevel(lineNo, line, nextLine) { | |
| var match = line && line.match(/^#+/); | |
| if (match && isHeader(lineNo)) return match[0].length; | |
| match = nextLine && nextLine.match(/^[=\-]+\s*$/); | |
| if (match && isHeader(lineNo + 1)) return nextLine[0] == "=" ? 1 : 2; | |
| return maxDepth; | |
| } | |
| var firstLine = cm.getLine(start.line), nextLine = cm.getLine(start.line + 1); | |
| var level = headerLevel(start.line, firstLine, nextLine); | |
| if (level === maxDepth) return undefined; | |
| var lastLineNo = cm.lastLine(); | |
| var end = start.line, nextNextLine = cm.getLine(end + 2); | |
| while (end < lastLineNo) { | |
| if (headerLevel(end + 1, nextLine, nextNextLine) <= level) break; | |
| ++end; | |
| nextLine = nextNextLine; | |
| nextNextLine = cm.getLine(end + 2); | |
| } | |
| return { | |
| from: CodeMirror.Pos(start.line, firstLine.length), | |
| to: CodeMirror.Pos(end, cm.getLine(end).length) | |
| }; | |
| }); | |
| }); | |