| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- 'use strict';
- module.exports = setextHeading;
- var C_NEWLINE = '\n';
- var C_TAB = '\t';
- var C_SPACE = ' ';
- var C_EQUALS = '=';
- var C_DASH = '-';
- var MAX_HEADING_INDENT = 3;
- /* Map of characters which can be used to mark setext
- * headers, mapping to their corresponding depth. */
- var SETEXT_MARKERS = {};
- SETEXT_MARKERS[C_EQUALS] = 1;
- SETEXT_MARKERS[C_DASH] = 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 !== C_SPACE || index >= MAX_HEADING_INDENT) {
- index--;
- break;
- }
- subvalue += character;
- }
- /* Eat content. */
- content = '';
- queue = '';
- while (++index < length) {
- character = value.charAt(index);
- if (character === C_NEWLINE) {
- index--;
- break;
- }
- if (character === C_SPACE || character === C_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 !== C_NEWLINE || !SETEXT_MARKERS[marker]) {
- return;
- }
- subvalue += character;
- /* Eat Setext-line. */
- queue = marker;
- depth = SETEXT_MARKERS[marker];
- while (++index < length) {
- character = value.charAt(index);
- if (character !== marker) {
- if (character !== C_NEWLINE) {
- return;
- }
- index--;
- break;
- }
- queue += character;
- }
- if (silent) {
- return true;
- }
- return eat(subvalue + queue)({
- type: 'heading',
- depth: depth,
- children: self.tokenizeInline(content, now)
- });
- }
|