12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- // CodeMirror, copyright (c) by Marijn Haverbeke and others
- // Distributed under an MIT license: https://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)
- // Plain browser env
- else mod(CodeMirror)
- })(function (CodeMirror) {
- 'use strict'
- 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),
- }
- })
- })
|