@@ -19,71 +19,75 @@ export default function rehypeLineNumbers(options: Options = {}) {
1919 } = options ;
2020
2121 return ( tree : Root ) => {
22- visit ( tree , "element" , ( node : Element , index : number | undefined , parent : Parent | undefined ) => {
23- // pre > code のパターンを探す(バグ修正: 元のコードは条件式が間違っていた)
24- if (
25- node . tagName !== "pre" ||
26- node . children ?. [ 0 ] ?. type !== "element" ||
27- ( node . children [ 0 ] as Element ) . tagName !== "code"
28- ) {
29- return ;
30- }
22+ visit (
23+ tree ,
24+ "element" ,
25+ ( node : Element , index : number | undefined , parent : Parent | undefined ) => {
26+ // pre > code のパターンを探す(バグ修正: 元のコードは条件式が間違っていた)
27+ if (
28+ node . tagName !== "pre" ||
29+ node . children ?. [ 0 ] ?. type !== "element" ||
30+ ( node . children [ 0 ] as Element ) . tagName !== "code"
31+ ) {
32+ return ;
33+ }
3134
32- const codeNode = node . children [ 0 ] as Element ;
35+ const codeNode = node . children [ 0 ] as Element ;
3336
34- // hast-util-to-stringを使用して安全にテキストを抽出
35- const code = toString ( codeNode ) ;
36- // 空の行を保持しながら分割
37- const lines = code . split ( / \r ? \n / ) ;
38- const startNumber = startFrom1 ? 1 : 0 ;
37+ // hast-util-to-stringを使用して安全にテキストを抽出
38+ const code = toString ( codeNode ) ;
39+ // 空の行を保持しながら分割
40+ const lines = code . split ( / \r ? \n / ) ;
41+ const startNumber = startFrom1 ? 1 : 0 ;
3942
40- // 行番号要素の作成
41- const lineNumbers : Element = {
42- type : "element" ,
43- tagName : "div" ,
44- properties : {
45- className : [ className ] ,
46- } ,
47- children : lines . map ( ( _ , i ) => ( {
48- type : "element" as const ,
49- tagName : "span" ,
43+ // 行番号要素の作成
44+ const lineNumbers : Element = {
45+ type : "element" ,
46+ tagName : "div" ,
5047 properties : {
51- className : [ `${ className } -item` ] ,
52- "data-line-number" : startNumber + i ,
48+ className : [ className ] ,
5349 } ,
54- children : [
55- {
56- type : "text" as const ,
57- value : String ( startNumber + i ) ,
50+ children : lines . map ( ( _ , i ) => ( {
51+ type : "element" as const ,
52+ tagName : "span" ,
53+ properties : {
54+ className : [ `${ className } -item` ] ,
55+ "data-line-number" : startNumber + i ,
5856 } ,
59- ] ,
60- } ) ) ,
61- } ;
57+ children : [
58+ {
59+ type : "text" as const ,
60+ value : String ( startNumber + i ) ,
61+ } ,
62+ ] ,
63+ } ) ) ,
64+ } ;
6265
63- // コードコンテンツをdiv要素でラップ
64- const codeWrapper : Element = {
65- type : "element" ,
66- tagName : "div" ,
67- properties : {
68- className : [ "code-content" ] ,
69- } ,
70- children : [ node ] ,
71- } ;
66+ // コードコンテンツをdiv要素でラップ
67+ const codeWrapper : Element = {
68+ type : "element" ,
69+ tagName : "div" ,
70+ properties : {
71+ className : [ "code-content" ] ,
72+ } ,
73+ children : [ node ] ,
74+ } ;
7275
73- // メインラッパーの作成
74- const wrapper : Element = {
75- type : "element" ,
76- tagName : "div" ,
77- properties : {
78- className : [ wrapperClassName ] ,
79- } ,
80- children : [ lineNumbers , codeWrapper ] ,
81- } ;
76+ // メインラッパーの作成
77+ const wrapper : Element = {
78+ type : "element" ,
79+ tagName : "div" ,
80+ properties : {
81+ className : [ wrapperClassName ] ,
82+ } ,
83+ children : [ lineNumbers , codeWrapper ] ,
84+ } ;
8285
83- // 親ノードの子要素を更新
84- if ( parent && typeof index === "number" ) {
85- parent . children [ index ] = wrapper ;
86+ // 親ノードの子要素を更新
87+ if ( parent && typeof index === "number" ) {
88+ parent . children [ index ] = wrapper ;
89+ }
8690 }
87- } ) ;
91+ ) ;
8892 } ;
8993}
0 commit comments