@Nonnull private CSSExpressionMemberFunction _createExpressionFunction(@Nonnull final CSSNode aNode) { _expectNodeType(aNode, ECSSNodeType.FUNCTION); final int nChildCount = aNode.jjtGetNumChildren(); if (nChildCount > 1) _throwUnexpectedChildrenCount(aNode, "Expected 0 or 1 children but got " + nChildCount + "!"); final String sFunctionName = aNode.getText(); CSSExpressionMemberFunction aFunc; if (nChildCount == 1) { // Parameters present final CSSNode aFirstChild = aNode.jjtGetChild(0); final CSSExpression aFuncExpr = _createExpression(aFirstChild); aFunc = new CSSExpressionMemberFunction(sFunctionName, aFuncExpr); } else { // No parameters aFunc = new CSSExpressionMemberFunction(sFunctionName); } aFunc.setSourceLocation(aNode.getSourceLocation()); return aFunc; }
protected void convertBackgroundProperties(CSSDeclaration cssDeclaration) { CSSExpression cssExpression = cssDeclaration.getExpression(); List<ICSSExpressionMember> icssExpressionMembers = cssExpression.getAllMembers(); for (ICSSExpressionMember icssExpressionMember : icssExpressionMembers) { if (icssExpressionMember instanceof CSSExpressionMemberFunction) { CSSExpressionMemberFunction cssExpressionMemberFunction = (CSSExpressionMemberFunction) icssExpressionMember; reverseValue(cssExpressionMemberFunction.getExpression()); } else if (icssExpressionMember instanceof CSSExpressionMemberTermSimple) { CSSExpressionMemberTermSimple cssExpressionMemberTermSimple = (CSSExpressionMemberTermSimple) icssExpressionMember; cssExpressionMemberTermSimple.setValue(reverse(cssExpressionMemberTermSimple.getValue())); } else if (icssExpressionMember instanceof CSSExpressionMemberTermURI) { CSSExpressionMemberTermURI cssExpressionMemberTermURI = (CSSExpressionMemberTermURI) icssExpressionMember; String uri = cssExpressionMemberTermURI.getURIString(); int index = uri.lastIndexOf("/") + 1; String fileName = reverse(uri.substring(index)); cssExpressionMemberTermURI.setURIString(uri.substring(0, index) + fileName); } } List<CSSExpressionMemberTermSimple> cssExpressionMemberTermSimples = cssExpression.getAllSimpleMembers(); if (cssExpressionMemberTermSimples.size() == 1) { CSSExpressionMemberTermSimple cssExpressionMemberTermSimple = cssExpressionMemberTermSimples.get(0); String value = cssExpressionMemberTermSimple.getValue(); Matcher matcher = _percentOrLengthPattern.matcher(value); if (matcher.matches()) { cssExpression.addTermSimple(value); cssExpressionMemberTermSimple.setValue("right"); } } else if (cssExpressionMemberTermSimples.size() == 2) { CSSExpressionMemberTermSimple cssExpressionMemberTermSimple = cssExpressionMemberTermSimples.get(0); String value = cssExpressionMemberTermSimple.getValue(); Matcher matcher = _percentPattern.matcher(value); if (matcher.matches()) { int delta = Integer.valueOf(value.replaceAll("[^\\d]", ""), 10); value = (100 - delta) + "%"; cssExpressionMemberTermSimple.setValue(value); } } }