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