Skip to content

Commit 91a64a6

Browse files
committed
add support for inline style css functions
1 parent a90d65b commit 91a64a6

File tree

2 files changed

+65
-1
lines changed

2 files changed

+65
-1
lines changed

src/main/java/org/owasp/validator/css/CssValidator.java

+14-1
Original file line numberDiff line numberDiff line change
@@ -361,10 +361,23 @@ public String lexicalValueToString(LexicalUnit lu) {
361361
return "inherit";
362362
case LexicalUnit.SAC_OPERATOR_COMMA:
363363
return ",";
364+
case LexicalUnit.SAC_FUNCTION:
365+
final StringBuffer builder = new StringBuffer();
366+
builder.append(lu.getFunctionName());
367+
builder.append("(");
368+
LexicalUnit params = lu.getParameters();
369+
while (params != null) {
370+
builder.append(lexicalValueToString(params));
371+
params = params.getNextLexicalUnit();
372+
if (params != null) {
373+
builder.append(", ");
374+
}
375+
}
376+
builder.append(")");
377+
return builder.toString();
364378
case LexicalUnit.SAC_ATTR:
365379
case LexicalUnit.SAC_COUNTER_FUNCTION:
366380
case LexicalUnit.SAC_COUNTERS_FUNCTION:
367-
case LexicalUnit.SAC_FUNCTION:
368381
case LexicalUnit.SAC_RECT_FUNCTION:
369382
case LexicalUnit.SAC_SUB_EXPRESSION:
370383
case LexicalUnit.SAC_UNICODERANGE:
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package org.owasp.validator.css;
2+
3+
import org.apache.batik.css.parser.CSSLexicalUnit;
4+
import org.junit.Test;
5+
import org.w3c.css.sac.LexicalUnit;
6+
7+
import static org.junit.Assert.assertEquals;
8+
import static org.junit.Assert.assertNull;
9+
10+
public class CssValidatorTest {
11+
@Test
12+
public void testLexicalValueToStringSacFunction() {
13+
CssValidator cssValidator = new CssValidator(null);
14+
15+
final CSSLexicalUnit param =
16+
CSSLexicalUnit.createString(LexicalUnit.SAC_STRING_VALUE, "--ds-text-purple", null);
17+
final CSSLexicalUnit varFunc = CSSLexicalUnit.createFunction("var", param, null);
18+
19+
assertEquals("var(--ds-text-purple)", cssValidator.lexicalValueToString(varFunc));
20+
21+
final CSSLexicalUnit hslaParam = CSSLexicalUnit.createInteger(100, null);
22+
final CSSLexicalUnit hslaParam1 = CSSLexicalUnit.createDimension(98, "%", hslaParam);
23+
final CSSLexicalUnit hslaParam2 = CSSLexicalUnit.createDimension(50, "%", hslaParam1);
24+
CSSLexicalUnit.createFloat(LexicalUnit.SAC_REAL, 0.3f, hslaParam2);
25+
26+
final CSSLexicalUnit hslaFunc = CSSLexicalUnit.createFunction("hsla", hslaParam, null);
27+
assertEquals("hsla(100, 98.0%, 50.0%, 0.3)", cssValidator.lexicalValueToString(hslaFunc));
28+
}
29+
30+
@Test
31+
public void testLexicalValueToStringSacFunctionTwoParams() {
32+
CssValidator cssValidator = new CssValidator(null);
33+
34+
final CSSLexicalUnit param =
35+
CSSLexicalUnit.createString(LexicalUnit.SAC_STRING_VALUE, "--ds-text-purple", null);
36+
CSSLexicalUnit.createString(LexicalUnit.SAC_STRING_VALUE, "#FFFFFF", param);
37+
final CSSLexicalUnit func = CSSLexicalUnit.createFunction("var", param, null);
38+
39+
assertEquals("var(--ds-text-purple, #FFFFFF)", cssValidator.lexicalValueToString(func));
40+
}
41+
42+
@Test
43+
public void testLexicalValueToStringUnsupported() {
44+
CssValidator cssValidator = new CssValidator(null);
45+
final CSSLexicalUnit param =
46+
CSSLexicalUnit.createString(LexicalUnit.SAC_STRING_VALUE, "section", null);
47+
final CSSLexicalUnit func =
48+
CSSLexicalUnit.createPredefinedFunction(LexicalUnit.SAC_COUNTER_FUNCTION, param, null);
49+
assertNull(cssValidator.lexicalValueToString(func));
50+
}
51+
}

0 commit comments

Comments
 (0)