1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- '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 asterisk = '*'
- var underscore = '_'
- var backslash = '\\'
- 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 previous
- if (character !== asterisk && character !== 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) {
- previous = character
- character = value.charAt(index)
- if (character === marker && (!pedantic || !whitespace(previous))) {
- character = value.charAt(++index)
- if (character !== marker) {
- if (!trim(queue) || previous === marker) {
- return
- }
- if (!pedantic && marker === 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 === backslash) {
- queue += character
- character = value.charAt(++index)
- }
- queue += character
- index++
- }
- }
|