* Remove pinning of eslint-plugin-markdown An issue affecting Node.js source has been fixed in eslint-plugin-markdown so we don't need to pin it to beta-4 anymore. Refs: https://github.com/eslint/eslint-plugin-markdown/issues/69 * Update eslint-plugin-markdown up to 1.0.0-beta.7 * Fix docs for eslint-plugin-markdown@1.0.0-beta.7 PR-URL: https://github.com/nodejs/node/pull/14047 Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Yuta Hiroto <hello@about-hiroppy.com> Reviewed-By: Refael Ackermann <refack@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
94 lines
1.9 KiB
JavaScript
94 lines
1.9 KiB
JavaScript
/**
|
|
* @author Titus Wormer
|
|
* @copyright 2015 Titus Wormer
|
|
* @license MIT
|
|
* @module remark:parse:tokenize:emphasis
|
|
* @fileoverview Tokenise emphasis.
|
|
*/
|
|
|
|
'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 = '_';
|
|
|
|
/* Tokenise emphasis. */
|
|
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++;
|
|
}
|
|
}
|