86 lines
1.6 KiB
JavaScript
86 lines
1.6 KiB
JavaScript
'use strict'
|
|
|
|
var trim = require('trim')
|
|
var whitespace = require('is-whitespace-character')
|
|
var locate = require('../locate/strong')
|
|
|
|
module.exports = strong
|
|
strong.locator = locate
|
|
|
|
var backslash = '\\'
|
|
var asterisk = '*'
|
|
var underscore = '_'
|
|
|
|
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 previous
|
|
|
|
if (
|
|
(character !== asterisk && character !== 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) {
|
|
previous = character
|
|
character = value.charAt(index)
|
|
|
|
if (
|
|
character === marker &&
|
|
value.charAt(index + 1) === marker &&
|
|
(!pedantic || !whitespace(previous))
|
|
) {
|
|
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 === backslash) {
|
|
queue += character
|
|
character = value.charAt(++index)
|
|
}
|
|
|
|
queue += character
|
|
index++
|
|
}
|
|
}
|