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 ?:
Note
The conditional operator is left-associative, unlike
in Java where it is right-associative. In CSS, the expression a
? b : c ? d : e
is equivalent to (a ?
b : c) ? d : e
, whereas in Java it is equivalent to a
? b : (c ? d : e)
.
In conditional expressions such as A ? 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. |