@@ -74,18 +74,20 @@ function flattenTokens(tokens) {
7474 for ( var i = 0 ; i < tokens . length ; i ++ ) {
7575 var token = tokens [ i ] ;
7676 if ( typeof token === 'string' ) {
77- result . push ( { type : null , text : token } ) ;
77+ result . push ( { type : null , alias : null , text : token } ) ;
7878 } else if ( token . content ) {
79+ var alias = token . alias || null ;
7980 if ( typeof token . content === 'string' ) {
80- result . push ( { type : token . type , text : token . content } ) ;
81+ result . push ( { type : token . type , alias : alias , text : token . content } ) ;
8182 } else {
82- // Nested tokens - flatten and inherit type for untyped children
83+ // Nested tokens - flatten and inherit type/alias for untyped children
8384 var nested = flattenTokens (
8485 Array . isArray ( token . content ) ? token . content : [ token . content ]
8586 ) ;
8687 for ( var j = 0 ; j < nested . length ; j ++ ) {
8788 result . push ( {
8889 type : nested [ j ] . type || token . type ,
90+ alias : nested [ j ] . alias || alias ,
8991 text : nested [ j ] . text
9092 } ) ;
9193 }
@@ -124,12 +126,12 @@ function splitAtBounds(segments, bounds) {
124126 var lastCut = 0 ;
125127 for ( var c = 0 ; c < cuts . length ; c ++ ) {
126128 if ( cuts [ c ] > lastCut ) {
127- result . push ( { type : seg . type , text : seg . text . substring ( lastCut , cuts [ c ] ) } ) ;
129+ result . push ( { type : seg . type , alias : seg . alias , text : seg . text . substring ( lastCut , cuts [ c ] ) } ) ;
128130 }
129131 lastCut = cuts [ c ] ;
130132 }
131133 if ( lastCut < seg . text . length ) {
132- result . push ( { type : seg . type , text : seg . text . substring ( lastCut ) } ) ;
134+ result . push ( { type : seg . type , alias : seg . alias , text : seg . text . substring ( lastCut ) } ) ;
133135 }
134136 }
135137
@@ -149,14 +151,22 @@ function buildNodes(segments, matchStart, matchEnd) {
149151 var segEnd = pos + seg . text . length ;
150152 var inMatch = ( pos >= matchStart && segEnd <= matchEnd ) ;
151153
152- if ( ! seg . type && ! inMatch ) {
154+ var hasType = seg . type || seg . alias ;
155+ if ( ! hasType && ! inMatch ) {
153156 nodes . push ( document . createTextNode ( seg . text ) ) ;
154157 } else {
155158 var span = document . createElement ( 'span' ) ;
156159 var classes = [ ] ;
157- if ( seg . type ) {
160+ if ( hasType ) {
158161 classes . push ( 'token' ) ;
159- classes . push ( seg . type ) ;
162+ if ( seg . type ) classes . push ( seg . type ) ;
163+ if ( seg . alias ) {
164+ if ( Array . isArray ( seg . alias ) ) {
165+ for ( var a = 0 ; a < seg . alias . length ; a ++ ) classes . push ( seg . alias [ a ] ) ;
166+ } else {
167+ classes . push ( seg . alias ) ;
168+ }
169+ }
160170 }
161171 if ( inMatch ) {
162172 classes . push ( 'matchstr' ) ;
0 commit comments