| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- /**
- * @import {Info, State} from 'mdast-util-to-markdown'
- * @import {Image, Parents} from 'mdast'
- */
- import {checkQuote} from '../util/check-quote.js'
- image.peek = imagePeek
- /**
- * @param {Image} node
- * @param {Parents | undefined} _
- * @param {State} state
- * @param {Info} info
- * @returns {string}
- */
- export function image(node, _, state, info) {
- const quote = checkQuote(state)
- const suffix = quote === '"' ? 'Quote' : 'Apostrophe'
- const exit = state.enter('image')
- let subexit = state.enter('label')
- const tracker = state.createTracker(info)
- let value = tracker.move('![')
- value += tracker.move(
- state.safe(node.alt, {before: value, after: ']', ...tracker.current()})
- )
- value += tracker.move('](')
- subexit()
- if (
- // If there’s no url but there is a title…
- (!node.url && node.title) ||
- // If there are control characters or whitespace.
- /[\0- \u007F]/.test(node.url)
- ) {
- subexit = state.enter('destinationLiteral')
- value += tracker.move('<')
- value += tracker.move(
- state.safe(node.url, {before: value, after: '>', ...tracker.current()})
- )
- value += tracker.move('>')
- } else {
- // No whitespace, raw is prettier.
- subexit = state.enter('destinationRaw')
- value += tracker.move(
- state.safe(node.url, {
- before: value,
- after: node.title ? ' ' : ')',
- ...tracker.current()
- })
- )
- }
- subexit()
- if (node.title) {
- subexit = state.enter(`title${suffix}`)
- value += tracker.move(' ' + quote)
- value += tracker.move(
- state.safe(node.title, {
- before: value,
- after: quote,
- ...tracker.current()
- })
- )
- value += tracker.move(quote)
- subexit()
- }
- value += tracker.move(')')
- exit()
- return value
- }
- /**
- * @returns {string}
- */
- function imagePeek() {
- return '!'
- }
|