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.

86 lines
1.7 KiB

'use strict';
var trim = require('trim');
var word = require('is-word-character');
var whitespace = require('is-whitespace-character');
var locate = require('../locate/emphasis');
module.exports = emphasis;
emphasis.locator = locate;
var C_ASTERISK = '*';
var C_UNDERSCORE = '_';
function emphasis(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) {
return;
}
pedantic = self.options.pedantic;
subvalue = character;
marker = character;
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 && (!pedantic || !whitespace(prev))) {
character = value.charAt(++index);
if (character !== marker) {
if (!trim(queue) || prev === marker) {
return;
}
if (!pedantic && marker === C_UNDERSCORE && word(character)) {
queue += marker;
continue;
}
/* istanbul ignore if - never used (yet) */
if (silent) {
return true;
}
now = eat.now();
now.column++;
now.offset++;
return eat(subvalue + queue + marker)({
type: 'emphasis',
children: self.tokenizeInline(queue, now)
});
}
queue += marker;
}
if (!pedantic && character === '\\') {
queue += character;
character = value.charAt(++index);
}
queue += character;
index++;
}
}