66import { association } from '../util/association.js'
77import { checkQuote } from '../util/check-quote.js'
88import { safe } from '../util/safe.js'
9+ import { track } from '../util/track.js'
910
1011/**
1112 * @type {Handle }
1213 * @param {Definition } node
1314 */
14- export function definition ( node , _ , context ) {
15- const marker = checkQuote ( context )
16- const suffix = marker === '"' ? 'Quote' : 'Apostrophe'
15+ export function definition ( node , _ , context , safeOptions ) {
16+ const quote = checkQuote ( context )
17+ const suffix = quote === '"' ? 'Quote' : 'Apostrophe'
1718 const exit = context . enter ( 'definition' )
1819 let subexit = context . enter ( 'label' )
19- let value =
20- '[' + safe ( context , association ( node ) , { before : '[' , after : ']' } ) + ']: '
20+ const tracker = track ( safeOptions )
21+ let value = tracker . move ( '[' )
22+ value += tracker . move (
23+ safe ( context , association ( node ) , {
24+ before : value ,
25+ after : ']' ,
26+ ...tracker . current ( )
27+ } )
28+ )
29+ value += tracker . move ( ']: ' )
2130
2231 subexit ( )
2332
@@ -28,22 +37,36 @@ export function definition(node, _, context) {
2837 / [ \0 - \u007F ] / . test ( node . url )
2938 ) {
3039 subexit = context . enter ( 'destinationLiteral' )
31- value += '<' + safe ( context , node . url , { before : '<' , after : '>' } ) + '>'
40+ value += tracker . move ( '<' )
41+ value += tracker . move (
42+ safe ( context , node . url , { before : value , after : '>' , ...tracker . current ( ) } )
43+ )
44+ value += tracker . move ( '>' )
3245 } else {
3346 // No whitespace, raw is prettier.
3447 subexit = context . enter ( 'destinationRaw' )
35- value += safe ( context , node . url , { before : ' ' , after : ' ' } )
48+ value += tracker . move (
49+ safe ( context , node . url , {
50+ before : value ,
51+ after : node . title ? ' ' : '\n' ,
52+ ...tracker . current ( )
53+ } )
54+ )
3655 }
3756
3857 subexit ( )
3958
4059 if ( node . title ) {
4160 subexit = context . enter ( 'title' + suffix )
42- value +=
43- ' ' +
44- marker +
45- safe ( context , node . title , { before : marker , after : marker } ) +
46- marker
61+ value += tracker . move ( ' ' + quote )
62+ value += tracker . move (
63+ safe ( context , node . title , {
64+ before : value ,
65+ after : quote ,
66+ ...tracker . current ( )
67+ } )
68+ )
69+ value += tracker . move ( quote )
4770 subexit ( )
4871 }
4972
0 commit comments