Skip to content

Commit 99db32b

Browse files
committed
Add support for "if" function. see #53
1 parent 95a4d88 commit 99db32b

File tree

3 files changed

+41
-4
lines changed

3 files changed

+41
-4
lines changed

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

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,8 @@ public String unit( CssFormatter formatter ) {
174174
case "luma":
175175
case "luminance":
176176
return "%";
177+
case "if":
178+
return get( 1 ).unit( formatter );
177179
}
178180
for( int i = 0; i < parameters.size(); i++ ) {
179181
String unit = parameters.get( i ).unit( formatter );
@@ -302,6 +304,9 @@ public void appendTo( CssFormatter formatter ) {
302304
SelectorUtils.appendToWithPlaceHolder( formatter, get( 0 ).stringValue( formatter ), 0, false, this );
303305
formatter.append( ')' );
304306
return;
307+
case "if":
308+
get( get( 0 ).booleanValue( formatter ) ? 1 : 2 ).appendTo( formatter );
309+
return;
305310
}
306311
if( type == UNKNOWN ) {
307312
eval( formatter );
@@ -347,10 +352,7 @@ private void eval( CssFormatter formatter ) {
347352
if( parameters.size() > 1 ) {
348353
throw ((LessObject)get( 0 )).createException( "Unrecognized input" );
349354
}
350-
type = get( 0 ).getDataType( formatter );
351-
if( type != STRING ) {
352-
doubleValue = getDouble( 0, formatter );
353-
}
355+
evalParam( 0, formatter );
354356
return;
355357
case "percentage":
356358
type = PERCENT;
@@ -722,6 +724,9 @@ private void eval( CssFormatter formatter ) {
722724
param = get( 0 );
723725
booleanValue = param.unit( formatter ).equals( unit );
724726
return;
727+
case "if":
728+
evalParam( get( 0 ).booleanValue( formatter ) ? 1 : 2, formatter );
729+
return;
725730
case "default":
726731
if( formatter.isGuard() ) {
727732
type = BOOLEAN;
@@ -751,6 +756,28 @@ private void eval( CssFormatter formatter ) {
751756
return;
752757
}
753758

759+
/**
760+
* Evaluate a parameter as this function.
761+
*
762+
* @param idx
763+
* the index of the parameter starting with 0
764+
* @param formatter
765+
* the current formation context
766+
*/
767+
private void evalParam( int idx, CssFormatter formatter ) {
768+
Expression expr = get( idx );
769+
type = expr.getDataType( formatter );
770+
switch( type ) {
771+
case BOOLEAN:
772+
booleanValue = expr.booleanValue( formatter );
773+
break;
774+
case STRING:
775+
break;
776+
default:
777+
doubleValue = expr.doubleValue( formatter );
778+
}
779+
}
780+
754781
/**
755782
* Implements the format function "%"
756783
*
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
div {
2+
margin: 0;
3+
color: black;
4+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
@some: foo;
2+
3+
div {
4+
margin: if((2 > 1), 0, 3px);
5+
color: if((iscolor(@some)), darken(@some, 10%), black);
6+
}

0 commit comments

Comments
 (0)