mirror of https://github.com/lukechilds/node.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
1.8 KiB
93 lines
1.8 KiB
/**
|
|
* @author Titus Wormer
|
|
* @copyright 2015 Titus Wormer
|
|
* @license MIT
|
|
* @module remark:parse:tokenize:strong
|
|
* @fileoverview Tokenise strong.
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
var trim = require('trim');
|
|
var whitespace = require('is-whitespace-character');
|
|
var locate = require('../locate/strong');
|
|
|
|
module.exports = strong;
|
|
strong.locator = locate;
|
|
|
|
var C_ASTERISK = '*';
|
|
var C_UNDERSCORE = '_';
|
|
|
|
/* Tokenise strong. */
|
|
function strong(eat, value, silent) {
|
|
var self = this;
|
|
var index = 0;
|
|
var character = value.charAt(index);
|
|
var now;
|
|
var pedantic;
|
|
var marker;
|
|
var queue;
|
|
var subvalue;
|
|
var length;
|
|
var prev;
|
|
|
|
if (
|
|
(character !== C_ASTERISK && character !== C_UNDERSCORE) ||
|
|
value.charAt(++index) !== character
|
|
) {
|
|
return;
|
|
}
|
|
|
|
pedantic = self.options.pedantic;
|
|
marker = character;
|
|
subvalue = marker + marker;
|
|
length = value.length;
|
|
index++;
|
|
queue = '';
|
|
character = '';
|
|
|
|
if (pedantic && whitespace(value.charAt(index))) {
|
|
return;
|
|
}
|
|
|
|
while (index < length) {
|
|
prev = character;
|
|
character = value.charAt(index);
|
|
|
|
if (
|
|
character === marker &&
|
|
value.charAt(index + 1) === marker &&
|
|
(!pedantic || !whitespace(prev))
|
|
) {
|
|
character = value.charAt(index + 2);
|
|
|
|
if (character !== marker) {
|
|
if (!trim(queue)) {
|
|
return;
|
|
}
|
|
|
|
/* istanbul ignore if - never used (yet) */
|
|
if (silent) {
|
|
return true;
|
|
}
|
|
|
|
now = eat.now();
|
|
now.column += 2;
|
|
now.offset += 2;
|
|
|
|
return eat(subvalue + queue + subvalue)({
|
|
type: 'strong',
|
|
children: self.tokenizeInline(queue, now)
|
|
});
|
|
}
|
|
}
|
|
|
|
if (!pedantic && character === '\\') {
|
|
queue += character;
|
|
character = value.charAt(++index);
|
|
}
|
|
|
|
queue += character;
|
|
index++;
|
|
}
|
|
}
|
|
|