'use strict' module.exports = setextHeading var lineFeed = '\n' var tab = '\t' var space = ' ' var equalsTo = '=' var dash = '-' var maxIndent = 3 var equalsToDepth = 1 var dashDepth = 2 function setextHeading(eat, value, silent) { var self = this var now = eat.now() var length = value.length var index = -1 var subvalue = '' var content var queue var character var marker var depth // Eat initial indentation. while (++index < length) { character = value.charAt(index) if (character !== space || index >= maxIndent) { index-- break } subvalue += character } // Eat content. content = '' queue = '' while (++index < length) { character = value.charAt(index) if (character === lineFeed) { index-- break } if (character === space || character === tab) { queue += character } else { content += queue + character queue = '' } } now.column += subvalue.length now.offset += subvalue.length subvalue += content + queue // Ensure the content is followed by a newline and a valid marker. character = value.charAt(++index) marker = value.charAt(++index) if (character !== lineFeed || (marker !== equalsTo && marker !== dash)) { return } subvalue += character // Eat Setext-line. queue = marker depth = marker === equalsTo ? equalsToDepth : dashDepth while (++index < length) { character = value.charAt(index) if (character !== marker) { if (character !== lineFeed) { return } index-- break } queue += character } if (silent) { return true } return eat(subvalue + queue)({ type: 'heading', depth: depth, children: self.tokenizeInline(content, now) }) }