根据W3C对级联样式表的定义:
设置字体属性将是样式表最常见的用途之一。但是,目前还没有一个定义良好且普遍接受的分类法来对字体进行分类,适用于一个字体系列的术语可能不适用于其他字体系列。例如,“斜体”通常用于标记倾斜文本,但倾斜文本也可以标记为倾斜、倾斜、倾斜、草书或Kursiv。因此,将典型字体选择属性映射到特定字体并不是一个简单的问题。
字体匹配
因为没有公认的、通用的字体属性分类法,所以必须小心地将属性与字体面进行匹配。属性按定义良好的顺序进行匹配,以确保此匹配过程的结果在用户代理之间尽可能一致(假设每个代理都有相同的字体库)。
①用户代理制作(或访问)一个数据库,其中包含UA知道的所有字体的相关CSS1属性。UA可能知道某个字体,因为它已在本地安装或以前已通过web下载。如果有两种字体具有完全相同的属性,则忽略其中一种。
②对于给定的元素和该元素中的每个字符,UA组装适用于该元素的字体属性。UA使用完整的属性集,使用“字体系列”属性来选择一个暂定字体系列。其余的属性将根据每个属性描述的匹配标准针对族进行测试。如果所有剩余属性都匹配,那么这就是给定元素的匹配字体。
③如果第2步处理的“字体系列”中没有匹配的字体,并且字体集中有下一个可选的“字体系列”,则使用下一个可选的“字体系列”重复第2步。
④如果有一个匹配的字体面,但它不包含当前字符的字形,并且如果字体集中有下一个可选的“字体系列”,则使用下一个可选的“字体系列”重复步骤2。
⑤如果在2中选择的系列中没有字体,则使用依赖于UA的默认“字体系列”,并重复步骤2,使用可在默认字体中获得的最佳匹配。
(可以优化上述算法,以避免重新访问每个字符的CSS1属性。)
上面(2)中的每个属性匹配规则如下:
①首先尝试“字体样式”如果UA的字体数据库中有一张标有CSS关键字“italic”(首选)或“oblique”的人脸,则“italic”将得到满足。否则,值必须完全匹配,否则字体样式将失败。
②下一步将尝试使用“字体变体”“normal”匹配未标记为“small caps”的字体;“small caps”匹配
(1)标记为“small caps”的字体,
(2)合成小大写的字体,
(3)将所有小写字母替换为大写字母的字体。小型大写字体可以通过电子缩放普通字体的大写字母来合成。
④“font-weight”下一步匹配,它将永远不会失败。(请参阅下面的“字体粗细”。)
⑤“字体大小”必须在UA相关公差范围内匹配。(通常,可缩放字体的大小四舍五入到最接近的整像素,而位图字体的公差可能高达20%。)进一步的计算是基于使用的“字体大小”值,而不是指定的值。
继承的名称属性用于定义字体名称,特别是在没有提供字体系列(列表)的情况下。
注:对应的CSS1定义是字体属性('Font-family'、'Font-style'、'Font-variant'、'Font-weight')。
IFC2x3中增加的新实体。
Formal Propositions
Rule | Description |
MeasureOfFontSize | 尺寸应该用正的长度来表示。 |
Attribute inheritance
# | Attribute | Type | Cardinality | Description | C |
1 | Name | [1:1] | 用来标识预定义项的字符串。字符串的允许值在子类型级别声明。 | X | |
2 | FontFamily | L[1:?] | 该值是按优先级排列的字体系列名称和/或通用系列名称列表。第一个列表项具有最高优先级,如果此字体失败,则使用下一个列表项。最后一个列表项(如果可能)应该是泛型族。
| X | |
3 | FontStyle | [0:1] | font style属性在字体系列中的普通(有时称为“罗马”或“直立”)、斜体和斜体之间进行选择。 | X | |
4 | FontVariant | [0:1] | font variant属性在普通大写和小写之间进行选择。 注意,它的引入是为了以后能够完全支持CSS1。 | X | |
5 | FontWeight | [0:1] | font weight属性选择字体的权重。 注:除了“normal”和“bold”之外,还引入了其他值,以便以后完全符合CSS1支持。 | X | |
6 | FontSize | [1:1] | 字体大小提供文本字体的大小或高度。 注意:允许使用以下值,<IfcLengthMeasure,对于正值,长度单位在IfcUnitAssignment处全局定义。 | X |
EXPRESS Specification
ENTITY IfcTextStyleFontModel
SUBTYPE OF (IfcPreDefinedTextFont);
FontFamily : LIST [1:?] OF IfcTextFontName;
FontStyle : OPTIONAL IfcFontStyle;
FontVariant : OPTIONAL IfcFontVariant;
FontWeight : OPTIONAL IfcFontWeight;
FontSize : IfcSizeSelect;
WHERE
MeasureOfFontSize : ('IFCMEASURERESOURCE.IFCLENGTHMEASURE' IN TYPEOF(SELF.FontSize)) AND (SELF.FontSize > 0.);
END_ENTITY;