123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- '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)
- })
- }
|