123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- 'use strict'
- var locate = require('../locate/code-inline')
- module.exports = inlineCode
- inlineCode.locator = locate
- var lineFeed = 10 // '\n'
- var space = 32 // ' '
- var graveAccent = 96 // '`'
- function inlineCode(eat, value, silent) {
- var length = value.length
- var index = 0
- var openingFenceEnd
- var closingFenceStart
- var closingFenceEnd
- var code
- var next
- var found
- while (index < length) {
- if (value.charCodeAt(index) !== graveAccent) {
- break
- }
- index++
- }
- if (index === 0 || index === length) {
- return
- }
- openingFenceEnd = index
- next = value.charCodeAt(index)
- while (index < length) {
- code = next
- next = value.charCodeAt(index + 1)
- if (code === graveAccent) {
- if (closingFenceStart === undefined) {
- closingFenceStart = index
- }
- closingFenceEnd = index + 1
- if (
- next !== graveAccent &&
- closingFenceEnd - closingFenceStart === openingFenceEnd
- ) {
- found = true
- break
- }
- } else if (closingFenceStart !== undefined) {
- closingFenceStart = undefined
- closingFenceEnd = undefined
- }
- index++
- }
- if (!found) {
- return
- }
- /* istanbul ignore if - never used (yet) */
- if (silent) {
- return true
- }
- // Remove the initial and final space (or line feed), iff they exist and there
- // are non-space characters in the content.
- index = openingFenceEnd
- length = closingFenceStart
- code = value.charCodeAt(index)
- next = value.charCodeAt(length - 1)
- found = false
- if (
- length - index > 2 &&
- (code === space || code === lineFeed) &&
- (next === space || next === lineFeed)
- ) {
- index++
- length--
- while (index < length) {
- code = value.charCodeAt(index)
- if (code !== space && code !== lineFeed) {
- found = true
- break
- }
- index++
- }
- if (found === true) {
- openingFenceEnd++
- closingFenceStart--
- }
- }
- return eat(value.slice(0, closingFenceEnd))({
- type: 'inlineCode',
- value: value.slice(openingFenceEnd, closingFenceStart)
- })
- }
|