* 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>
93 lines
1.8 KiB
JavaScript
93 lines
1.8 KiB
JavaScript
/**
|
|
* @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++;
|
|
}
|
|
}
|