Skip to content

Commit e4b6739

Browse files
committed
The "all" keyword with multiple extends must/can be set for every single
extends. This is not global.
1 parent 4f8d1bf commit e4b6739

File tree

4 files changed

+74
-58
lines changed

4 files changed

+74
-58
lines changed

src/com/inet/lib/less/LessExtend.java

Lines changed: 48 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -38,27 +38,55 @@ class LessExtend extends LessObject implements Formattable {
3838

3939
private boolean all;
4040

41-
private String[] extendingSelectors;
41+
private String extendingSelector;
4242

4343
/**
44-
* Create a new instance.
45-
* @param obj another LessObject with parse position.
46-
* @param extendSelector the completely selector like "foo:extends(bar all)"
44+
* Parse the extendSelector,create the needed LessExtend objects and add it to the container.
45+
*
46+
* @param container
47+
* the container that should add the created LessExtend
48+
* @param obj
49+
* another LessObject with parse position.
50+
* @param extendSelector
51+
* the completely selector like "foo:extends(bar all)"
52+
* @return the base selector
4753
*/
48-
LessExtend( LessObject obj, String extendSelector ) {
49-
super( obj );
50-
54+
static String addLessExtendsTo( FormattableContainer container, LessObject obj, String extendSelector ) {
5155
int idx1 = extendSelector.indexOf( ":extend(" );
5256
int idx2 = extendSelector.indexOf( ')', idx1 );
53-
String param = extendSelector.substring( idx1 + 8, idx2 ).trim();
54-
all = param.endsWith( " all" );
55-
if( all ) {
56-
param = param.substring( 0, param.length() - 4 ).trim();
57+
String selector = extendSelector.substring( 0, idx1 );
58+
String[] baseSelector = new String[] { selector };
59+
String params = extendSelector.substring( idx1 + 8, idx2 ).trim();
60+
61+
for( String param : params.split( "," ) ) {
62+
boolean all = param.endsWith( " all" );
63+
if( all ) {
64+
param = param.substring( 0, param.length() - 4 ).trim();
65+
}
66+
container.add( new LessExtend( obj, baseSelector, param, all ) );
5767
}
58-
extendingSelectors = param.split( "," );
68+
return selector;
69+
}
70+
71+
/**
72+
* Create a new instance.
73+
*
74+
* @param obj
75+
* another LessObject with parse position.
76+
* @param baseSelector
77+
* the base selector as single size array.
78+
* @param extendingSelector
79+
* selector to extends
80+
* @param all
81+
* If keyword "all" was set
82+
*/
83+
private LessExtend( LessObject obj, String[] baseSelector, String extendingSelector, boolean all ) {
84+
super( obj );
5985

60-
this.selector = extendSelector.substring( 0, idx1 );
61-
baseSelector = new String[] { this.selector };
86+
this.selector = baseSelector[0];
87+
this.baseSelector = baseSelector;
88+
this.extendingSelector = extendingSelector;
89+
this.all = all;
6290
}
6391

6492
/**
@@ -78,19 +106,19 @@ String getSelector() {
78106
}
79107

80108
/**
81-
* Get the base selectors as single size array.
109+
* Get the base selector as single size array.
82110
* @return the selector
83111
*/
84112
String[] getSelectors() {
85113
return baseSelector;
86114
}
87115

88116
/**
89-
* Get the list of selectors to extends
90-
* @return the selector list
117+
* Get selector to extends.
118+
* @return the selector
91119
*/
92-
String[] getExtendingSelectors() {
93-
return extendingSelectors;
120+
String getExtendingSelector() {
121+
return extendingSelector;
94122
}
95123

96124
/**
@@ -107,12 +135,7 @@ public String toString() {
107135
builder.append( baseSelector[i] );
108136
}
109137
builder.append( ":extend(" );
110-
for( int i=0; i<extendingSelectors.length; i++ ) {
111-
if( i > 0 ) {
112-
builder.append( ' ' );
113-
}
114-
builder.append( extendingSelectors[i] );
115-
}
138+
builder.append( extendingSelector );
116139
if( all ) {
117140
builder.append( " all" );
118141
}

src/com/inet/lib/less/LessExtendMap.java

Lines changed: 18 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -57,23 +57,19 @@ void add( LessExtend lessExtend, String[] mainSelector ) {
5757
//TODO handling of scope
5858
return;
5959
}
60-
String[] extendingSelectors = lessExtend.getExtendingSelectors();
60+
String extendingSelector = lessExtend.getExtendingSelector();
6161
if( lessExtend.isAll() ) {
62-
LessExtendResult extend = new LessExtendResult( mainSelector, extendingSelectors );
63-
for( String selector : extendingSelectors ) {
64-
SelectorTokenizer tokenizer = new SelectorTokenizer( selector );
65-
do {
66-
String token = tokenizer.next();
67-
if( token == null ) {
68-
break;
69-
}
70-
all.add( token, extend );
71-
} while( true );
72-
}
62+
LessExtendResult extend = new LessExtendResult( mainSelector, extendingSelector );
63+
SelectorTokenizer tokenizer = new SelectorTokenizer( extendingSelector );
64+
do {
65+
String token = tokenizer.next();
66+
if( token == null ) {
67+
break;
68+
}
69+
all.add( token, extend );
70+
} while( true );
7371
} else {
74-
for( String selector : extendingSelectors ) {
75-
exact.add( selector, mainSelector );
76-
}
72+
exact.add( extendingSelector, mainSelector );
7773
}
7874
}
7975

@@ -140,14 +136,13 @@ private void concatenateExtendsRecursive( String selector, boolean isReference )
140136
List<LessExtendResult> results = all.get( token );
141137
if( results != null ) {
142138
for( LessExtendResult lessExtend : results ) {
143-
for( String extendingSelector : lessExtend.getExtendingSelectors() ) {
144-
if( selector.contains( extendingSelector ) ) {
145-
for( String replace : lessExtend.getSelectors() ) {
146-
String replacedSelector = selector.replace( extendingSelector, replace );
147-
boolean needRecursion = selectorList.add( replacedSelector );
148-
if( needRecursion && !replacedSelector.contains( extendingSelector ) ) {
149-
concatenateExtendsRecursive( replacedSelector, isReference );
150-
}
139+
String extendingSelector = lessExtend.getExtendingSelector();
140+
if( selector.contains( extendingSelector ) ) {
141+
for( String replace : lessExtend.getSelectors() ) {
142+
String replacedSelector = selector.replace( extendingSelector, replace );
143+
boolean needRecursion = selectorList.add( replacedSelector );
144+
if( needRecursion && !replacedSelector.contains( extendingSelector ) ) {
145+
concatenateExtendsRecursive( replacedSelector, isReference );
151146
}
152147
}
153148
}

src/com/inet/lib/less/LessExtendResult.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,16 @@ class LessExtendResult {
3333

3434
private final String[] mainSelector;
3535

36-
private final String[] extendingSelectors;
36+
private final String extendingSelector;
3737

3838
/**
3939
* Create a new instance.
4040
* @param mainSelector the main selectors of the extend
41-
* @param extendingSelectors the extends selectors
41+
* @param extendingSelector the extends selector
4242
*/
43-
LessExtendResult( String[] mainSelector, String[] extendingSelectors ) {
43+
LessExtendResult( String[] mainSelector, String extendingSelector ) {
4444
this.mainSelector = mainSelector;
45-
this.extendingSelectors = extendingSelectors;
45+
this.extendingSelector = extendingSelector;
4646
}
4747

4848
/**
@@ -57,7 +57,7 @@ String[] getSelectors() {
5757
* Get the extending selectors.
5858
* @return the selectors.
5959
*/
60-
String[] getExtendingSelectors() {
61-
return extendingSelectors;
60+
String getExtendingSelector() {
61+
return extendingSelector;
6262
}
6363
}

src/com/inet/lib/less/LessParser.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ private void parseSemicolon( FormattableContainer currentRule ) {
227227
}
228228
if( selector != null ) {
229229
if( selector.contains( ":extend(" ) ) {
230-
currentRule.add( new LessExtend( reader, selector ) );
230+
LessExtend.addLessExtendsTo( currentRule, reader, selector );
231231
} else {
232232
Mixin mixin = new Mixin( reader, selector, params, mixins );
233233
currentRule.add( mixin );
@@ -269,9 +269,7 @@ void parseBlock( FormattableContainer currentRule ) {
269269
break;
270270
}
271271
if( selector.contains( ":extend(" ) ) {
272-
LessExtend lessExtend = new LessExtend( reader, selector );
273-
currentRule.add( lessExtend );
274-
selector = lessExtend.getSelector();
272+
selector = LessExtend.addLessExtendsTo( currentRule, reader, selector );
275273
}
276274
Rule rule = rule( selector, expr, guard );
277275
currentRule.add( rule );

0 commit comments

Comments
 (0)