| '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 prev |
| |
| 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) { |
| 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 === backslash) { |
| queue += character |
| character = value.charAt(++index) |
| } |
| |
| queue += character |
| index++ |
| } |
| } |