This repository has been archived on 2020-11-02. You can view files and clone it, but cannot push or open issues or pull requests.
TripSit_Suite/node_modules/remark-stringify/lib/visitors/inline-code.js
2020-11-01 22:46:04 +00:00

64 lines
1.2 KiB
JavaScript

'use strict'
var streak = require('longest-streak')
var repeat = require('repeat-string')
module.exports = inlineCode
var graveAccentChar = '`'
var lineFeed = 10 // '\n'
var space = 32 // ' '
var graveAccent = 96 // '`'
// Stringify inline code.
//
// Knows about internal ticks (`\``), and ensures one more tick is used to
// enclose the inline code:
//
// ````markdown
// ```foo ``bar`` baz```
// ````
//
// Even knows about inital and final ticks:
//
// ``markdown
// `` `foo ``
// `` foo` ``
// ```
function inlineCode(node) {
var value = node.value
var ticks = repeat(graveAccentChar, streak(value, graveAccentChar) + 1)
var start = ticks
var end = ticks
var head = value.charCodeAt(0)
var tail = value.charCodeAt(value.length - 1)
var wrap = false
var index
var length
if (head === graveAccent || tail === graveAccent) {
wrap = true
} else if (value.length > 2 && ws(head) && ws(tail)) {
index = 1
length = value.length - 1
while (++index < length) {
if (!ws(value.charCodeAt(index))) {
wrap = true
break
}
}
}
if (wrap) {
start += ' '
end = ' ' + end
}
return start + value + end
}
function ws(code) {
return code === lineFeed || code === space
}