123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- 'use strict'
- module.exports = atxHeading
- var lineFeed = '\n'
- var tab = '\t'
- var space = ' '
- var numberSign = '#'
- var maxFenceCount = 6
- function atxHeading(eat, value, silent) {
- var self = this
- var pedantic = self.options.pedantic
- var length = value.length + 1
- var index = -1
- var now = eat.now()
- var subvalue = ''
- var content = ''
- var character
- var queue
- var depth
- // Eat initial spacing.
- while (++index < length) {
- character = value.charAt(index)
- if (character !== space && character !== tab) {
- index--
- break
- }
- subvalue += character
- }
- // Eat hashes.
- depth = 0
- while (++index <= length) {
- character = value.charAt(index)
- if (character !== numberSign) {
- index--
- break
- }
- subvalue += character
- depth++
- }
- if (depth > maxFenceCount) {
- return
- }
- if (!depth || (!pedantic && value.charAt(index + 1) === numberSign)) {
- return
- }
- length = value.length + 1
- // Eat intermediate white-space.
- queue = ''
- while (++index < length) {
- character = value.charAt(index)
- if (character !== space && character !== tab) {
- index--
- break
- }
- queue += character
- }
- // Exit when not in pedantic mode without spacing.
- if (!pedantic && queue.length === 0 && character && character !== lineFeed) {
- return
- }
- if (silent) {
- return true
- }
- // Eat content.
- subvalue += queue
- queue = ''
- content = ''
- while (++index < length) {
- character = value.charAt(index)
- if (!character || character === lineFeed) {
- break
- }
- if (character !== space && character !== tab && character !== numberSign) {
- content += queue + character
- queue = ''
- continue
- }
- while (character === space || character === tab) {
- queue += character
- character = value.charAt(++index)
- }
- // `#` without a queue is part of the content.
- if (!pedantic && content && !queue && character === numberSign) {
- content += character
- continue
- }
- while (character === numberSign) {
- queue += character
- character = value.charAt(++index)
- }
- while (character === space || character === tab) {
- queue += character
- character = value.charAt(++index)
- }
- index--
- }
- now.column += subvalue.length
- now.offset += subvalue.length
- subvalue += content + queue
- return eat(subvalue)({
- type: 'heading',
- depth: depth,
- children: self.tokenizeInline(content, now)
- })
- }
|