@@ -91,11 +91,30 @@ export class TextMateLoader {
91
91
return ;
92
92
}
93
93
94
- const bracketToId = new Map < string , { open : boolean , key : number } > ( ) ;
94
+ const bracketToId = new Map < string , { open : boolean , key : number , pairsWith : Array < number > } > ( ) ;
95
95
for ( let i = 0 ; i < brackets . length ; i ++ ) {
96
96
const bracket = brackets [ i ] ;
97
- bracketToId . set ( bracket [ 0 ] , { open : true , key : i } ) ;
98
- bracketToId . set ( bracket [ 1 ] , { open : false , key : i } ) ;
97
+
98
+ var openBracket = bracketToId . get ( bracket [ 0 ] ) ;
99
+ var closeBracket = bracketToId . get ( bracket [ 1 ] ) ;
100
+
101
+ // Create new keys if brackets don't exist.
102
+ if ( openBracket === undefined ) {
103
+ openBracket = { open : true , key : i , pairsWith : [ ] } ;
104
+ }
105
+ if ( closeBracket === undefined ) {
106
+ closeBracket = { open : false , key : i , pairsWith : [ ] } ;
107
+ }
108
+ // Link open and close brackets.
109
+ if ( openBracket . pairsWith . indexOf ( closeBracket . key ) < 0 ) {
110
+ openBracket . pairsWith . push ( closeBracket . key ) ;
111
+ }
112
+ if ( closeBracket . pairsWith . indexOf ( openBracket . key ) < 0 ) {
113
+ closeBracket . pairsWith . push ( openBracket . key ) ;
114
+ }
115
+ // Create or update bracket definitions
116
+ bracketToId . set ( bracket [ 0 ] , openBracket ) ;
117
+ bracketToId . set ( bracket [ 1 ] , closeBracket ) ;
99
118
}
100
119
101
120
let maxBracketLength = 0 ;
0 commit comments