The value in a CSS declaration is usually a
literal. However, it is possible to write an expression in place of
a literal.
If the value begins with
@|
, then the remainder of the value is processed as an expression.
The syntax of the expressions, after the
@|
prefix, is close to the Java syntax. The expression type can be
arithmetic (type
int
,
long
,
float
, or
double
),
Boolean
, or
String
. Examples:
@|3+2*5 -> 13 @|true&&(true||!true) -> true @|start+end -> "startend"
You can use the following regular
arithmetic operators, listed here in decreasing precedence:
- Unary operators
+
,-
,!
- Exponentiation operator
^
- Multiplicative operators
*
,/
,%
- Additive operators
+
,-
- Relational operators
==
,!=
,<
,>
,<=
,>=
- Conditional operators
&&
,||
- Conditional operator
?:
NoteThe conditional operator is left-associative, unlike in Java where it is right-associative. In CSS, the expressiona ? b : c ? d : e
is equivalent to(a ? b : c) ? d : e
, whereas in Java it is equivalent toa ? b : (c ? d : e)
.In conditional expressions such asA ? B : C
, put spaces around the colon because a colon can also be part of a subexpression, for example, when B is@abc
.
An expression can refer to model attributes.
The syntax is the usual one:
@|@speed/100+@drift
-> 1/100 of the value of
speed
plus the value of
drift
.
speed
and
drift
are attributes of the current object.
'@|"name is: " + @name'
-> "name is: Bob", if the value of the current object attribute
name
is
Bob
. Note the use of quotation marks to keep the space characters. You
could use the backslash (\) character instead, directly preceding
the space characters to retain them. The backslash works to quote
any character that directly follows it. The use of the backslash
character makes sure that the character thus quoted is not
interpreted by the expression parser.
For example, when you edit a style sheet
directly and you use double quotation marks for the entire
declaration value specification, you must use escaped double
quotation marks for inner strings of CSS expressions.
node { name: "@|concat(\"Name is \", @name)" ; }
Alternatively, you can use quotation marks:
node { name: '@|concat("Name is ", @name)' ; }
The standard functions
abs()
,
acos()
,
asin()
,
atan()
,
ceil()
,
cos()
,
exp()
,
floor()
,
log()
,
pi
,
rint()
,
round()
,
sin()
,
sqrt()
, and
tan()
are accepted, as in, for example:
@|3+sin(pi/2) -> 4
The following functions are also
available:
Function | Description |
---|---|
concat(arg1,...,argn) |
Returns the concatenation of
the arguments arg1,...,argn as
strings.
|
emptyString() |
Returns an empty string. |
messageFormat(format,arg0,arg1,... |
Returns a formatted string. The formatting is done through the object MessageFormat corresponding to the first argument. See class java.text.MessageFormat for details. |
decimalFormat(format, arg) |
Returns a formatted string. The formatting is done through the object DecimalFormat corresponding to the first argument. See class java.text.DecimalFormat for details. |
simpleDateFormat(format, arg[, locale]) |
Returns a formatted string. The formatting is done through the object SimpleDateFormat corresponding to the first argument. See class java.text.SimpleDateFormat for details. |
customFormat(formatBean,arg0,arg1,...) |
Returns a formatted string. formatBean must be a Java object of type
MessageFormat, NumberFormat, or DateFormat,
usually defined using the @#id
syntax.
|
locale() |
Returns the locale of the object being styled or of the current context. |
localized(resourceBundleName,
resourceName[, locale]) |
Returns the localized value of the designated resource, fetched from a ResourceBundle, as a string. |
id() |
Returns the ID of the object being styled. |
type() |
Returns the CSS type of the object being styled. |
cast(expr,type) |
Casts a value to a type. The second argument can be a fully qualified class name (entered as a string) or a class object. |
double(expr) |
Evaluates the argument as an expression. The result is a number of type Double. |
float(expr) |
Evaluates the argument as an expression. The result is a number of type Float. |
int(expr) |
Evaluates the argument as an expression. The result is a number of type Integer. |
long(expr) |
Evaluates the argument as an expression. The result is a number of type Long. |
min(arg0,arg1, ...) |
Returns the smallest number among the arguments. All arguments must be numbers. Unless otherwise specified, the arguments are interpreted as numbers of type Double. |
max(arg0,arg1, ...) |
Returns the largest number among the arguments. All arguments must be numbers. Unless otherwise specified, the arguments are interpreted as numbers of type Double. |
invoke(obj,methodname,signature,arg...) |
Invokes a method on the object
by introspection. The signature string specifies the argument
types of the method as a comma separated list of (fully
qualified) type names. The object and the arguments must be
cast accordingly. For example, the specification @|invoke(cast(@val,java.lang.String),substring,"int,int",int(3),int(6))
corresponds to the call ((String)@val).substring(3,6) .
|
invokeStatic(classname,methodname,signature,arg...) |
Invokes a static method on the
specified class by introspection. The signature string
specifies the argument types of the method as a comma
separated list of (fully qualified) type names. The arguments
must be cast accordingly. For example, the specification @|invokeStatic("java.lang.Math","atan2","double,double",double(0.6),double(0.4))
corresponds to the call java.lang.Math.atan2(0.6,0.4) .
|
new(classname,signature,arg...) |
Invokes a constructor on the
specified class by introspection. The signature string
specifies the argument types of the method as a comma
separated list of (fully qualified) type names. The arguments
must be cast accordingly. For example, the specification @|new("java.util.Date","long",long(1293840000000))
corresponds to the call java.util.Date(1293840000000L) .
|
random() |
Returns a random number between 0 (inclusive) and 1 (exclusive). |
random(n) |
Returns a random number between 0 (inclusive) and n (exclusive). |
point(x, y) |
Returns a point of type IlvPoint. |
rect(x, y, w, h) |
Returns a rectangle of type IlvRect. |
blinkingColor(onColor, offColor) |
Returns a blinking color with the timing specified in the IlvBlinkingRenderer. |
blinkingColor(onColor, offColor, onTime,
offTime) |
Returns a blinking color with the timing onTime and offTime specified in milliseconds. |
brighterColor(color) |
Returns a brighter color. Corresponds to Color.brighter. |
darkerColor(color) |
Returns a darker color. Corresponds to Color.darker. |
styleSheetURL() |
Returns the URL of the current style sheet, if any. |
styleSheetURL(path) |
Returns a URL specified by a path relative to the location of the style sheet. |
getGraphicFromId(id) |
Returns the graphic object that corresponds to the SDM model object with the specified ID. |
childrenCount() |
Returns the number of children in the SDM model for the current node, for instance if the current node is a subgraph. |
childrenCount(tag) |
Returns the number of children with a given tag in the SDM model for the current node, for instance if the current node is a subgraph. |
depends(expr, prop1, ...,propn) |
Returns the value of the expression argument. The expression is declared to depend on the mode properties prop1 to propn. When these properties change, the expression is re-evaluated. |