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
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++;
|
|
}
|
|
}
|