@property-value allows to defined a named, possibly parametrized, property value. The syntax for defining such named property value is:
@property-valuename(param1, ...,paramN)value...value;
Including a @property-value in a property is possible by using the usual pseudo-function syntax:
propertyName:value ... name(argument1, ...,argumentN) ... value;
Simple example:
@property-value generated-icon-color() gray;
indexterm:after {
content: icon(right-half-disc);
color: generated-icon-color();
}
anchor {
content: icon(right-target);
color: generated-icon-color();
}The above example is equivalent to:
indexterm:after {
content: icon(right-half-disc);
color: gray;
}
anchor {
content: icon(right-target);
color: gray;
}A @property-value can have formal parameters. When a @property-value is included in a property, these formal parameters are replaced by actual arguments. Example:
@property-value attributes-editor(margin, bg)
attributes(margin-top, margin,
margin-bottom, margin,
margin-left, margin,
margin-right, margin,
background-color, bg);
@namespace foo "http://foo.com/ns";
foo|target {
content: attributes-editor(2, #C0E0E0);
}The above example is equivalent to:
foo|target {
content: attributes(margin-top, 2,
margin-bottom, 2,
margin-left, 2,
margin-right, 2,
background-color, #C0E0E0);
}Using the argument-list() pseudo-function, it is possible to replace a single formal parameter by a sequence of several actual arguments. Example:
foo|target {
content: attributes-editor(2, argument-list(#C0E0E0, color, navy));
}The above example is equivalent to:
foo|target {
content: attributes(margin-top, 2,
margin-bottom, 2,
margin-left, 2,
margin-right, 2,
background-color, #C0E0E0,
color, navy);
}The argument-list() pseudo-function may have no arguments at all, which is sometimes useful to suppress a formal parameter. Example:
@property-value attributes-editor(margin, args)
attributes(margin-top, margin,
margin-bottom, margin,
margin-left, margin,
margin-right, margin,
args);
@namespace bar "http://bar.com/ns";
bar|target {
content: attributes-editor(2, argument-list());
}The above example is equivalent to:
bar|target {
content: attributes(margin-top, 2,
margin-bottom, 2,
margin-left, 2,
margin-right, 2);
}A @property-value can include other @property-values. Example:
@property-value header(title, bg)
division(content(paragraph(content(collapser(collapsed-icon,
icon(pop-right),
expanded-icon,
icon(pop-down)), " ",
title,
replace-button(), " ",
insert-before-button(), " ",
insert-button(), " ",
insert-after-button(), " ",
convert-button(), " ",
delete-button(), " ",
add-attribute-button(
check-has-attributes, yes,
color, navy)),
background-color, bg,
padding-left, 4),
attributes-editor(2, bg)));
@namespace xs "http://www.w3.org/2001/XMLSchema";
xs|schema > xs|complexType:before,
xs|schema > xs|simpleType:before {
content: header(argument-list(element-name(), " "),
#C0E0E0);
}The above example is equivalent to:
xs|schema > xs|complexType:before,
xs|schema > xs|simpleType:before {
content: division(content(paragraph(content(collapser(collapsed-icon,
icon(pop-right),
expanded-icon,
icon(pop-down)), " ",
element-name(), " ",
replace-button(), " ",
insert-before-button(), " ",
insert-button(), " ",
insert-after-button(), " ",
convert-button(), " ",
delete-button(), " ",
add-attribute-button(
check-has-attributes, yes,
color, navy)),
background-color, #C0E0E0,
padding-left, 4),
attributes-editor(2, #C0E0E0)));
}A @property-value can even include a reference to itself. This simply means that the new definition specializes the old one. Example:
@property-value header(bg)
header(argument-list(element-name(), " ",
label(attribute, name, font-weight, bold), " "),
bg);
xs|schema > xs|element:before {
content: header(#E0C0C0);
}The above example is equivalent to:
xs|schema > xs|element:before {
content: division(content(paragraph(content(collapser(collapsed-icon,
icon(pop-right),
expanded-icon,
icon(pop-down)), " ",
element-name(), " ",
label(attribute, name,
font-weight, bold), " "
replace-button(), " ",
insert-before-button(), " ",
insert-button(), " ",
insert-after-button(), " ",
convert-button(), " ",
delete-button(), " ",
add-attribute-button(
check-has-attributes, yes,
color, navy)),
background-color, #E0C0C0,
padding-left, 4),
attributes-editor(2, #E0C0C0)));
}