@@ -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 *
0 commit comments