1
1
import type { ShikijiTransformer } from 'shikiji'
2
2
import { addClassToHast } from 'shikiji'
3
3
import { createCommentNotationTransformer } from '../utils'
4
+ import { transformerNotationMap } from './notation-map'
4
5
5
6
export interface TransformerNotationDiffOptions {
6
7
/**
7
8
* Class for added lines
8
9
*/
9
- classAdded ?: string
10
+ classLineAdd ?: string
10
11
/**
11
12
* Class for removed lines
12
13
*/
13
- classRemoved ?: string
14
+ classLineRemove ?: string
14
15
/**
15
- * Class added to the root element when the current code has diff
16
+ * Class added to the <pre> element when the current code has diff
16
17
*/
17
- classRootActive ?: string
18
+ classActivePre ?: string
18
19
}
19
20
20
21
/**
@@ -24,27 +25,19 @@ export function transformerNotationDiff(
24
25
options : TransformerNotationDiffOptions = { } ,
25
26
) : ShikijiTransformer {
26
27
const {
27
- classAdded = 'diff add' ,
28
- classRemoved = 'diff remove' ,
29
- classRootActive = 'has-diff' ,
28
+ classLineAdd = 'diff add' ,
29
+ classLineRemove = 'diff remove' ,
30
+ classActivePre = 'has-diff' ,
30
31
} = options
31
32
32
- return createCommentNotationTransformer (
33
- 'shikiji-transformers:notation-diff' ,
34
- / \[ ! c o d e ( \- \- | \+ \+ ) ( : \d + ) ? \] / ,
35
- function ( [ _ , match , range = ':1' ] , _line , _comment , lines , index ) {
36
- const className = match === '--'
37
- ? classRemoved
38
- : classAdded
39
- const lineNum = Number . parseInt ( range . slice ( 1 ) , 10 )
40
- lines
41
- . slice ( index , index + lineNum )
42
- . forEach ( ( line ) => {
43
- addClassToHast ( line , className )
44
- } )
45
- if ( classRootActive )
46
- addClassToHast ( this . pre , classRootActive )
47
- return true
33
+ return transformerNotationMap (
34
+ {
35
+ classMap : {
36
+ '++' : classLineAdd ,
37
+ '--' : classLineRemove ,
38
+ } ,
39
+ classActivePre,
48
40
} ,
41
+ 'shikiji-transformers:notation-diff' ,
49
42
)
50
43
}
0 commit comments