49 lines
1.2 KiB
JavaScript
49 lines
1.2 KiB
JavaScript
|
/**
|
|||
|
* @typedef {import('mdast').Parents} Parents
|
|||
|
* @typedef {import('mdast').Strong} Strong
|
|||
|
* @typedef {import('../types.js').Info} Info
|
|||
|
* @typedef {import('../types.js').State} State
|
|||
|
*/
|
|||
|
|
|||
|
import {checkStrong} from '../util/check-strong.js'
|
|||
|
|
|||
|
strong.peek = strongPeek
|
|||
|
|
|||
|
// To do: there are cases where emphasis cannot “form” depending on the
|
|||
|
// previous or next character of sequences.
|
|||
|
// There’s no way around that though, except for injecting zero-width stuff.
|
|||
|
// Do we need to safeguard against that?
|
|||
|
/**
|
|||
|
* @param {Strong} node
|
|||
|
* @param {Parents | undefined} _
|
|||
|
* @param {State} state
|
|||
|
* @param {Info} info
|
|||
|
* @returns {string}
|
|||
|
*/
|
|||
|
export function strong(node, _, state, info) {
|
|||
|
const marker = checkStrong(state)
|
|||
|
const exit = state.enter('strong')
|
|||
|
const tracker = state.createTracker(info)
|
|||
|
let value = tracker.move(marker + marker)
|
|||
|
value += tracker.move(
|
|||
|
state.containerPhrasing(node, {
|
|||
|
before: value,
|
|||
|
after: marker,
|
|||
|
...tracker.current()
|
|||
|
})
|
|||
|
)
|
|||
|
value += tracker.move(marker + marker)
|
|||
|
exit()
|
|||
|
return value
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @param {Strong} _
|
|||
|
* @param {Parents | undefined} _1
|
|||
|
* @param {State} state
|
|||
|
* @returns {string}
|
|||
|
*/
|
|||
|
function strongPeek(_, _1, state) {
|
|||
|
return state.options.strong || '*'
|
|||
|
}
|