Книги-online
Очистка/Разрешение свойств
5 Очистка/Разрешение свойств
В процессе очистки набор свойств, применяемых в объекте форматирования
(ОФ), трансформируется в набор уточнений, определяющих ограничения для
результата форматирования. Для многих уточнений имеется соответствие
один-к-одному со свойствами; для других уточнений - трансформация сложнее.
Детали трансформации описаны ниже.
Первым этапом очистки для конкретного ОФ является получение действующего
значения каждого свойства, которые применяются к объекту. Любое сокращённое
свойство, специфицированное для ОФ, расширяется до конкретных свойств. Это
описывается далее в разделе
[5.2 Развёртывание Сокращений].
Для любого свойства, не специфицированного в объекте, унаследованное (см. [5.1.4
Наследование])
или начальное значение, как применяемое, используется в качестве действующего
значения.
Вторым этапом является трансформация набор свойств в уточнения.
ПРИМЕЧАНИЕ:Хотя процесс очистки описан серией этапов, это делается
лишь с демонстрационными целями и не означает, что они (этапы) обязаны
реализовываться как отдельные шаги в какой-либо соответствующей реализации.
Соответствующая реализация обязана лишь достигать того же эффекта.
5.1 Специфицированные, вычисленные и реальные значения
и наследование
Для каждого свойства, применимого к данному ОФ, нужно определить значение
свойства.
Различают три варианта значения свойства: специфицированное, вычисленное и
реальное значение.
"Специфицированное значение" это то, которое помещено в ОФ процессе
конструирования дерева.
Специфицированное значение может не иметь форму, пригодную для непосредственного
использования; например, оно может быть процентным или другим выражением,
которое сначала необходимо конвертировать в абсолютное значение.
Значение, полученное в результате такой конвертации, называется
"вычисленным значением". Наконец, вычисленное значение может не реализоваться
на носителе вывода и может потребовать приспособления, прежде чем его можно
будет использовать для отображения. Например, ширина строки может быть
переведена в интегральное число пикселов носителя вывода. Это уточнённое
значение называется "реальное значение."
Специфицированное значение свойства определяется путём использования
следующих механизмов
(в порядке убывания приоритета):
Если в процессе конструирования дерева свойство помещается в ОФ, используется
значение этого свойства как специфицированное значение. Это называется "явная
спецификация".
Иначе, если свойство может наследоваться, используется значение этого свойства
из родительского ОФ, обычно - вычисленное значение (см. ниже).
Иначе, используется начальное значение свойства, если установлено.
Начальное значение каждого свойства указывается в определении свойства. Если
начальное значение отсутствует, то данное свойство не специфицируется в ОФ.
Как правило, это является ошибкой.
Поскольку корень результирующего дерева не имеет предков, он не может
использовать значения своих родительских ОФ; в данном случае используется, если
это необходимо, начальное значение.
Специфицированные значения могут быть абсолютными (т.е. не специфицированными
относительно другого значения, как "red" или "2mm"), относительными (т.е.
специфицированными относительно другого значения, как "auto", "2em" и "12%") или
выражениями.
Для большинства абсолютных значений не требуются вычисления при получения
вычисленного значения. Относительные значения,
напротив, обязаны быть трансформированы в вычисленные значения: проценты обязаны
быть помножены на ссылочное значения (каждое свойство определяет, какое это
значение), значения с относительными единицами измерения (em) обязаны стать
абсолютными путём умножения на размер шрифта,
значения "auto" обязаны быть вычислены по формулам, задаваемым для каждого
свойства, некоторые значения свойств ("smaller", "bolder") обязаны быть замещены
в соответствии с их определениями.
Вычисленное значение любого свойства, управляющего шириной рамки там, где стиль
рамки установлен в "none", форсируется до "0pt".
Для некоторых свойств имеется несколько способов спецификации значения свойства.
Простейшим примером может служить свойство, которое можно обозначить либо в
терминах направления относительно режима письма/writing-mode (например, padding-before),
либо как направление в терминах абсолютной геометрической ориентации порта
просмотра
(например, padding-top). Эти два свойства называются относительным и абсолютным
свойствами, соответственно.
Вместе они называются "corresponding/подобными свойствами".
Специфицирование значения для одного свойства определяет и вычисленное
значение специфицируемого свойства, и вычисленное значение подобного свойства.
То, какое относительное свойство подобно абсолютному свойству, зависит от режима
письма/writing-mode. Например, если "writing-mode" на верхнем уровне документа
"lr-tb",
тогда "padding-start" соответствует "padding-left", но если "writing-mode" - "rl-tb",
то "padding-start"
соответствует "padding-right".
Точная спецификация процесса вычисления значений подобных свойств дана в разделе [5.3
Вычисление Значений Подобных Свойств].
В большинстве случаев элементы наследуют вычисленные значения. Однако имеются
свойства, чьи специфицированные значения могут наследоваться (например,
некоторые значения свойства "line-height").
В тех случаях, когда дочерние элементы не наследуют вычисленное значение,
это описывается в определении свойства.
Вычисленное значение в принципе готово к использованию, но пользовательский
агент (ПА) может не иметь возможности использовать значение в данной среде
окружения. Например, ПА может лишь отображать рамки с шириной, выраженной в
пикселах, и должен будет, следовательно,
уточнить вычисленную ширину до интегрального количества пикселов носителя.
Реальное значение это вычисленное значение после применения такого уточнения.
5.1.4 Наследование
Некоторые свойства, применяемые к объектам форматирования (ОФ) являются "наследуемыми/inheritable."
Такие свойства идентифицируются в описании свойства.
Наследуемые свойства могут помещаться в любой ОФ. Наследуемые свойства
помещаются в дереве ОФ вниз от родителя к каждому потомку. (Эти свойства
получают свои начальные значения в корне результирующего дерева.)
Для данного наследуемого свойства, если это свойство потомка, то значение
свойства используется для данного потомка
(и его потомков до момента явной переустановки в нижнем потомке);
иначе специфицированное значение данного свойства в потомке - это вычисленное
значение данного свойства из родительского ОФ. Следовательно, всегда имеется
специфицированное значение, определённое для каждого наследуемого свойства для
каждого ОФ.
5.2 Развёртывание сокращений
В XSL есть два вида сокращённых свойств: происходящие из CSS, такие как "border",
и выводимые при разделении и/или комбинировании свойств CSS, такие как "page-break-inside".
В XSL оба типа сокращений обрабатываются одинаково.
ПРИМЕЧАНИЕ:Сокращения включаются только на высшем уровне соответствия XSL: "complete" (см.
раздел
[8 Соответствие]).
Уровень соответствия каждого свойства показан в разделе
[C.3 Таблица Свойств: Часть II].
Сокращённые свойства не наследуются от сокращений из родителя. Вместо этого
могут наследоваться отдельные свойства, в которые сокращение развёртывается.
Некоторые сокращения CSS наследуются; они развёртываются обычно в одно или
более свойств.
CSS указывает, что пользователь обязан специфицировать процесс обработки
нескольких взаимосвязанных сокращений и нескольких взаимосвязанных свойств. В XML
атрибуты определяются как неупорядоченные.
Для решения этой проблемы XSL определяет приоритетный порядок при спецификации
нескольких взаимосвязанных сокращенных свойств или сокращённого свойства и
связанного с ним свойства:
Процесс обработки идёт по возрастанию приоритета (т.е. "border" имеет меньший
приоритет, нежели "border-top", который, в свою очередь, имеет меньший
приоритет, чем "border-top-color").
Конкретные свойства всегда имеют больший приоритет, чем любое сокращение.
Для остальных неоднозначных вариантов XSL определяет такой порядок:
"border-style", "border-color" и "border-width"
имеют меньший приоритет, чем
"border-top", "border-bottom", "border-right" и "border-left".
Концептуально процесс разбит на следующие этапы:
Установка действующих значений всех свойств в их начальные значения.
Обработка всех сокращений по возрастающему приоритету.
Если сокращение установлено в "inherit": действующее значение каждого
свойства, которое может быть установлено сокращением, устанавливается в
вычисленное значение соответствующего свойства родителя.
Если значение сокращения - не "inherit": определяется, какие свойства
устанавливаются, и начальное значение замещается вычисленным значением,
полученным из специфицированного значения.
Обработка всех свойств.
Выполнение наследования для свойств, не получивших иных значений, кроме тех,
которые были получены на первом этапе.
ПРИМЕЧАНИЕ:К примеру,
если свойства "background"
и "background-color" специфицированы в данном ОФ:
обрабатывается сокращение "background", затем - свойство
"background-color".
5.3 Вычисление значений подобных свойств
Там, где имеются подобные свойства, такие как "padding-left"
и "padding-start", вычисленное значение определяется для всех подобных свойств.
То, как вычисленное значение определяется для данного ОФ, зависит от того,
которые из подобных свойств специфицированы в объекте. См. описание ниже.
Отображение подобия от абсолютного к относительному свойству производится так:
Если "writing-mode" специфицирует направление block-progression-direction как
"top-to-bottom": "top" отображается в "before", а "bottom" - в "after".
Если "writing-mode" специфицирует направление block-progression-direction как
"bottom-to-top": "top" отображается в "after", а "bottom" - в "before".
Если "writing-mode" специфицирует направление block-progression-direction как
"left-to-right": "left" отображается в "before", а "right" - в "after".
Если "writing-mode" специфицирует направление block-progression-direction как
"right-to-left": "left" отображается в "after", а "right" - в "before".
Если "writing-mode" специфицирует направление inline-progression-direction
как
"left-to-right": "left" отображается в "start", а "right" - в "end".
Если "writing-mode" специфицирует направление inline-progression-direction
как
"right-to-left": "left" отображается в "end", а "right" - в "start".
Если "writing-mode" специфицирует направление inline-progression-direction
как
"top-to-bottom": "top" отображается в "start", а "bottom" - в "end".
Если "writing-mode" специфицирует направление inline-progression-direction
как
"bottom-to-top": "top" отображается в "end", а "bottom" - в "start".
Если "writing-mode" специфицирует направление inline-progression-direction
как
"left-to-right" для нечётно нумерованных/odd-numbered строк и "right-to-left" -
для чётно нумерованных: "left" отображается в "start", а "right" - в "end".
ПРИМЕЧАНИЕ:"reference-orientation" это ротация, не влияющая на
отображение подобия.
5.3.1 Свойства рамки и заполнения
Класс простейших свойств - это такие свойства, для которых есть только два
варианта соответствия -абсолютное свойство и относительное свойство - и имена
свойств отличаются только выбором абсолютного или относительного назначения;
например, "border-left-color" и
"border-start-color".
Для этого класса свойств вычисленные значения подобных свойств определяются
так:
Если в ОФ специфицирован абсолютный подобный вариант свойства, его вычисленное
значение используется для установки вычисленного значения подобного
относительного свойства.
Если абсолютное подобное свойство явно не специфицировано, тогда вычисленное
значение абсолютного свойства устанавливается в вычисленное значение подобного
относительного свойства.
Если в ОФ специфицировано относительное подобное свойство, а абсолютное свойство
специфицируется только при развёртывании сокращения, тогда вычисленное значение
абсолютного свойства устанавливается в вычисленное значение подобного
относительного свойства (второе - в первое).
Заметьте, что, если и абсолютное, и относительное свойства не специфицированы
явно, то правила определения специфицированного значения будут использовать
наследование, если оно определено для свойства, или начальное значение.
Начальное значение должно быть тем же самым для всех возможных подобных свойств.
Если абсолютное и подобное относительное свойства специфицированы явно, тогда
вышеуказанные правила отдают приоритет абсолютному свойству, а специфицированное
значение подобного относительного свойства игнорируется при определении
вычисленного значения подобных свойств.
Свойства (подобные), использующие вышеприведённые правила для определения
вычисленного значения:
-
border-after-color
-
border-before-color
-
border-end-color
-
border-start-color
-
border-after-style
-
border-before-style
-
border-end-style
-
border-start-style
-
border-after-width
-
border-before-width
-
border-end-width
-
border-start-width
-
padding-after
-
padding-before
-
padding-end
-
padding-start
5.3.2
Свойства Margin, Space
и Indent
Свойства "space-before" и "space-after" (ОФ уровня блока), "space-start" и "space-end"
(ОФ инлайн-уровня) обрабатываются так же, как и только что описанные свойства,
но подобные абсолютные свойства находятся в наборе: "margin-top",
"margin-bottom", "margin-left" и "margin-right".
Компонент .conditionality для space-before или space-after, определённый из
свойства margin/поле, устанавливается в "retain".
ПРИМЕЧАНИЕ:Обработка компонента .conditionality введена для
обеспечения совместимости с CSS2.
ПРИМЕЧАНИЕ:Вычисленное значение поля CSS2 в направлении
block-progression-dimension, специфицированное как "auto", равно 0pt.
Space-before или space-after, определённое из значения
поля "auto", устанавливается в 0pt.
Имеются ещё два свойства, "end-indent"
и "start-indent" (ОФ уровня блока), подобные различным абсолютным свойствам "margin".
Для данных свойств подобие является более сложным и включает подобные свойства
"border-X-width" и "padding-X",
где X - это одно из: "left", "right", "top" или "bottom".
Вычисленные значения этих подобных свойств определяются так:
Если подобное абсолютное свойство "margin" специфицировано в ОФ и ОФ
генерирует ссылочную область, то вычисленное значение "margin" используется при
расчёте вычисленного значения подобного свойства "Y-indent",
где Y равно "start" или "end".
Формулами для "start-indent"
и "end-indent" являются":
start-indent/начальный-отступ = margin-corresponding/поле-подобное
+ padding-corresponding/заполнение-подобное + border-corresponding-width/ширина-подобной-рамки
end-indent/конечный отступ = margin-corresponding
+ padding-corresponding + border-corresponding-width
Если подобное абсолютное свойство "margin" специфицировано в ОФ и ОФ не
генерирует ссылочную область, то вычисленное значение margin и вычисленные
значения подобных свойств "border-X-width" и "padding-X" используются при
расчёте вычисленного значения подобного свойства "Y-indent".
Формулами для "start-indent"
и "end-indent" являются":
start-indent = inherited_value_of/наследуемое_значение_из(start-indent) +
margin-corresponding + padding-corresponding +
border-corresponding-width
end-indent = inherited_value_of/наследуемое_значение_из(end-indent) +
margin-corresponding + padding-corresponding +
border-corresponding-width
Если подобное абсолютное свойство margin не специфицировано явно или если
подобное относительное свойство специфицировано в ОФ и абсолютное свойство
специфицировано только при расширении сокращения,
то подобное абсолютное свойство margin рассчитывается по следующим формулам:
margin-corresponding = start-indent -
inherited_value_of(start-indent) - padding-corresponding -
border-corresponding-width
margin-corresponding = end-indent -
inherited_value_of(end-indent) - padding-corresponding -
border-corresponding-width
ПРИМЕЧАНИЕ:Если свойства "start-indent" или "end-indent" не
специфицированы, то их наследуемое значение используется в этих формулах.
5.3.3
Свойства Height и Width
Базируясь на действующем в ОФ режиме письма,
свойства "height", "min-height" и "max-height" или свойства "width", "min-width"
и "max-width" конвертируются в подобные размеры block-progression-dimension или
inline-progression-dimension.
Свойства "height" являются абсолютными и обозначают размер от "top" до "bottom";
свойства "width" - размеры от
"left" до "right".
Если "writing-mode" специфицирует направление block-progression-direction для
"top-to-bottom" или "bottom-to-top", то конверсия происходит так:
-
Если специфицирована "height", или "min-height" или "max-height":
-
Если "height" специфицирована, то сначала устанавливаются:
block-progression-dimension.minimum=<height>
block-progression-dimension.optimum=<height>
block-progression-dimension.maximum=<height>
-
Если "height" не специфицирована, то сначала устанавливаются:
block-progression-dimension.minimum=auto
block-progression-dimension.optimum=auto
block-progression-dimension.maximum=auto
-
Тогда, если "min-height" специфицирована, переустанавливается:
block-progression-dimension.minimum=<min-height>
-
Тогда, если "max-height" специфицирована, переустанавливается:
block-progression-dimension.maximum=<max-height>
-
Однако, если "max-height" специфицирована как "none", переустанавливается:
block-progression-dimension.maximum=auto
-
Если "width", или "min-width" или "min-width" специфицирована:
-
Если "width" специфицирована, то сначала устанавливаются:
inline-progression-dimension.minimum=<width>
inline-progression-dimension.optimum=<width>
inline-progression-dimension.maximum=<width>
-
Если "width" не специфицирована, то сначала устанавливаются:
inline-progression-dimension.minimum=auto
inline-progression-dimension.optimum=auto
inline-progression-dimension.maximum=auto
-
Тогда, если "min-width" специфицирована, переустанавливается:
inline-progression-dimension.minimum=<min-width>
-
Тогда, если "max-width" специфицирована, переустанавливается:
inline-progression-dimension.maximum=<max-width>
-
Однако, если "max-width" специфицирована как "none", переустанавливается:
inline-progression-dimension.maximum=auto
Если "writing-mode" специфицирует направление block-progression-direction для
"left-to-right" или "right-to-left", то конверсия производится так:
-
Если специфицирована "height", или "min-height" или "max-height":
-
Если "height" специфицирована, то сначала устанавливаются:
inline-progression-dimension.minimum=<height>
inline-progression-dimension.optimum=<height>
inline-progression-dimension.maximum=<height>
-
Если "height" не специфицирована, то сначала устанавливаются:
inline-progression-dimension.minimum=auto
inline-progression-dimension.optimum=auto
inline-progression-dimension.maximum=auto
-
Тогда, если "min-height" специфицирована, переустанавливается:
inline-progression-dimension.minimum=<min-height>
-
Тогда, если "max-height" специфицирована, переустанавливается:
inline-progression-dimension.maximum=<max-height>
-
Однако, если "max-height" специфицирована как "none", переустанавливается:
inline-progression-dimension.maximum=auto
-
Если специфицирована "width", или "min-width" или "min-width":
-
Если "width" специфицирована, то сначала устанавливаются:
block-progression-dimension.minimum=<width>
block-progression-dimension.optimum=<width>
block-progression-dimension.maximum=<width>
-
Если "width" не специфицирована, то сначала устанавливаются:
block-progression-dimension.minimum=auto
block-progression-dimension.optimum=auto
block-progression-dimension.maximum=auto
-
Тогда, если "min-width" специфицирована, переустанавливается:
block-progression-dimension.minimum=<min-width>
-
Тогда, если "max-width" специфицирована, переустанавливается:
block-progression-dimension.maximum=<max-width>
-
Однако, если "max-width" специфицирована как "none", переустанавливается:
block-progression-dimension.maximum=auto
5.3.4 Переограниченная Геометрия
Сумма start-indent, end-indent и inline-progression-dimension прямоугольника
содержимого области должна быть равна
inline-progression-dimension прямоугольника содержимого ближайшей ссылочной
области-предка. В случае, если спецификация приводит к тому, что эти значения
различны, end-indent (и, соответственно, соответствующее поле/margin)
уточняется так, чтобы равенство было верным.
5.4 Отображение
Простого Свойства в
Уточнение
Большая часть свойств отображается в уточнения с тем же именем.
Большинство из них также копируют значение из свойства.
Они классифицируются в таблице свойств как "Rendering/Отображение", "Formatting/Форматирование", "Specification/Спецификация",
"Font selection/Выбор Шрифта", "Reference/Ссылка" и "Action/Действие" в
[C.3 Таблице Свойств: Часть II].
Например, свойство font-style="italic" очищается в уточнение font-style
со значением "italic".
Некоторые уточнения имеют значение, отличающееся от значения свойства. Это
классифицируется как "Value change/Изменение значения"
в таблице свойств.
Например, свойство background-position-horizontal="left" очищается
до уточнения background-position-horizontal со значением "0pt".
Отображение значений для таких уточнений дано ниже.
5.4.1
Свойства background-position-horizontal и background-position-vertical
Значение "top", "bottom", "left", "right" или "center" конвертируется до
размера, как специфицировано в определении свойства.
Если значение не специфицировано в ОФ, к которому это свойство применяется,
то начальное значение вычисляется так, как специфицировано в определении свойства.
Значение "left" или "right" конвертируется до относительного значения writing-mode/режима
письма, как специфицировано в определении свойства.
Значение "left" или "right" конвертируется до относительного значения writing-mode,
как специфицировано в определении свойства.
5.4.5 Свойство z-index
Значение конвертируется до абсолютного; т.е., очищенное значение это
специфицированное значение плюс очищенное значение z-index родительского ОФ,
если он есть.
5.5
Отображение
Сложного Свойства в Уточнение
Небольшое количество свойств влияет на уточнения более сложным способом.
Детали даны ниже.
5.5.1
Свойства
межсловных и межбуквенных расстояний
Эти свойства могут устанавливать значения для уточнений start-space и end-space,
как описано в определениях свойств.
5.5.2 Свойство reference-orientation
Уточнение reference-orientation копируется из свойства reference-orientation
в процессе очистки. При этом определятся абсолютная ориентация
(см. [4.2.2 Обычные Уточнения]).
5.5.3 Свойства writing-mode
и direction
Уточнения writing-mode,
direction и
unicode-bidi копируются в процессе очистки из свойств с тем же
именем.
При составлении они используются при определении абсолютной ориентации для
уточнений
block-progression-direction,
inline-progression-direction и
shift-direction в соответствии с [4.2.2
Обычными Уточнениями].
5.5.4 Свойство absolute-position
Если absolute-position = "absolute" или "fixed", значения уточнений
left-position, top-position и т.д. копируются непосредственно из
значений свойств "left", "top" и т.д. В противном случае эти значения уточнений
остаются неопределёнными в процессе очистки и определяются в процессе композиции.
5.5.5 Свойство relative-position/относительное
позиционирование
Если relative-position = "relative", то значения уточнений
left-offset и
top-offset копируются непосредственно из свойств "left" и "top". Если
свойство "right" специфицировано, а "left" - нет,
тогда left-offset устанавливается в отрицательное значение свойства "right".
Если ни
"left", ни "right" не специфицированы, left-offset равен 0.
Если свойство "bottom"
специфицировано, а "top" -нет, тогда
top-offset устанавливается в отрицательное значение свойства "bottom".
Если ни "top", ни "bottom" не специфицированы, top-offset равен 0.
5.5.6 Свойство text-decoration
Свойство "text-decoration" предоставляет значения для уточнения blink
и набор уточнений
score и score-color. specified color имеет значение уточнения color
объекта форматирования, для которого очищается свойство "text-decoration".
Значение свойства, содержащее лексему "underline", устанавливает значение
"true" для уточнения underline-score и значение
specified color - для уточнения underline-score-color.
Значение свойства, содержащее лексему "overline", устанавливает значение
"true" для уточнения overline-score и значение
specified color - для уточнения overline-score-color.
Значение свойства, содержащее лексему "line-through", устанавливает значение
"true" для уточнения through-score и значение
specified color - для уточнения through-score-color.
Значение свойства, содержащее лексему "blink", устанавливает значение
"true" для уточнения blink.
Значение свойства, содержащее лексему "no-underline", устанавливает значение
"false" для уточнения underline-score и значение
specified color - для уточнения underline-score-color.
Значение свойства, содержащее лексему "no-overline", устанавливает значение
"false" для уточнения overline-score и значение
specified color - для уточнения overline-score-color.
Значение свойства, содержащее лексему "no-line-through", устанавливает
значение
"false" для уточнения through-score и значение
specified color - для уточнения through-score-color.
Значение свойства, содержащее лексему "no-blink", устанавливает значение
"false" для уточнения blink.
5.5.7 Свойства Шрифта
Уточнения для шрифта области косвенно выводятся из комбинации свойств шрифта,
используемых при выборе шрифта, и таблиц шрифта из данного шрифта.
Абстрактная модель, принимаемая XSL для шрифта, описана в разделе [7.8.1
Шрифты и Данные Шрифтов].
В XSL отсутствует механизм спецификации конкретного шрифт; вместо этого,
selected font/выбранный шрифт выбирается из доступных для
пользовательского агента (ПА) шрифтов на базе набора критериев выбора.
Критериями выбора/selection
criteria являются следующие свойства шрифта:
"font-family",
"font-style",
"font-variant",
"font-weight",
"font-stretch" и
"font-size",
плюс, для некоторых ОФ, один или более символов.
Детали использования критериев выбора специфицированы в описании свойства
"font-selection-strategy" (см. [7.8.3 "font-selection-strategy"]).
Уточнение nominal-font устанавливается в выбранный шрифт. В том случае,
если выбранный шрифт отсутствует и отображается глиф 'отсутствующий символ',
уточнение nominal-font устанавливается в шрифт, содержащий этот глиф,
иначе
(т.е. были использованы некоторые другие механизмы для указания на то, что
данный символ не может быть отображён) nominal-font является системным
шрифтом.
Уточнения dominant-baseline-identifier и
actual-baseline-table выводятся из значения свойства "dominant-baseline".
Значение этого свойства состоит из трёх компонентов: baseline-identifier для dominant-baseline, baseline-table
и font-size для baseline-table. dominant-baseline-identifier
устанавливается из первого компонента. font-size для baseline-table используется
при измерении позиции базовых линий из таблицы базовых линий и затем - позиция dominant-baseline
вычитается из позиций других базовых линий, чтобы дать в результате таблицу
смещений относительно доминантной базовой линии. Эта таблица является значением
уточнения
actual-baseline-table.
5.6
Генерация
Уточнений не на Базе Свойств
Уточнение is-reference-area устанавливается в "true" для следующих ОФ:
"simple-page-master", "title",
"region-body", "region-before","region-after", "region-start", "region-end",
"block-container", "inline-container",
"table", "table-caption" и
"table-cell".
Для всех других ОФ оно устанавливается в "false".
Изменения регистра, специфицируемые этим свойством, выполняются в процессе
очистки путём подходящего изменения значения свойства "character".
ПРИМЕЧАНИЕ:Использование свойства "text-transform" не рекомендуется в XSL
из-за жёстких требований к вопросам интернационализации.
В некоторых видах письма символы записываются горизонтально справа налево. В
определённых документах, некоторые из которых написаны на арабском или еврейском,
и в некоторых контекстах смешения языков, текст в едином (визуально отображённом)
блоке может иметь смешанное направление письма. Этот феномен называется bidirectionality/двунаправленность
или сокращённо - "BIDI".
Стандарт Unicode [UNICODE] определяет
сложный алгоритм, Unicode BIDI algorithm [UNICODE UAX #9],
для определения необходимого направления текста. Этот алгоритм базируется на
подразумеваемой части, базирующейся на свойствах символов, и на явном управлении
внедрением и переопределением (направления текста -перев.).
Заключительный этап очистки использует этот алгоритм и тип Unicode
bidirectional каждого символа для конвертации неявного направления текста в
явную разметку в терминах ОФ. Например, последовательность арабских символов в
окружении английских параграфов может вызвать создание инлайн-ОФ с арабскими
символами в качестве содержимого со свойством
"direction", установленным в "rtl", и свойством "unicode-bidi", установленным в
"bidi-override". ОФ делает явным ранее неявное позиционирование справа-налево
для арабских букв.
Как определено в [UNICODE UAX #9],
алгоритм Unicode BIDI берёт на входе поток текста и обрабатывает его в три фазы:
Разделение текста на параграфы. Остальная часть алгоритма действует только на
текст между разделителя параграфов.
Разрешение внедряемых уровней текста. На данном этапе двунаправленные типы
символов, плюс коды двунаправленного форматирования Unicode, используются для
производства разрешённых связанных уровней. Нормативные двунаправленные
типы символов для каждого символа специфицированы в Базе Данных Символов Unicode [UNICODE Character Database].
Построчное переупорядочивание текста для отображения, используя разрешённые
связанные уровни, после того как текст будет разбит на строки.
Этот алгоритм, как описано выше, требует некоторой адаптации, чтобы
"вместиться" в модель процессинга XSL.
Во-первых, заключительный этап переупорядочивания текста не выполняется во время
очистки. Вместо этого XSL-эквивалент переупорядочивания выполняется во время
форматирования.
inline-progression-direction каждого глифа используется для управления
упаковкой/стэкированием глифов, как описано в разделе [4.2.5
Ограничения Стэкирования].
inline-progression-direction определяется на уровне блока свойством "writing-mode"
и внутри инлайн-объектов форматирования внутри блока свойствами "direction" и "unicode-bidi",
которые были специфицированы или в инлайн-ОФ, сгенерированных при
конструировании дерева, или в инлайн-ОФ, введённых на данном этапе очистки (детали
- ниже).
Во-вторых, алгоритм применяется к последовательности символов, полученных из
одного или более ОФ. Последовательность символов создаётся при обработке
фрагмента дерева ОФ. Фрагмент это любая протяжённая последовательность
потомков некоторого ОФ в дереве. Эта последовательность создаётся путём
предупорядоченного пересечения/pre-order traversal фрагмента до уровня
fo:character. В процессе предупорядоченного пересечения каждый ОФ fo:character
добавляет символ к последовательности. Кроме того,
если предупорядоченное сканирование обнаруживает где-либо узел со свойством "unicode-bidi"
со значением "embed" или "override", символ Unicode RLO/LRO или RLE/LRE
добавляется к последовательности символов в соответствии со значением свойств "direction"
и "unicode-bidi". При возвращении к этому узлу после просмотра-пересечения его
содержимого, добавляется символ Unicode PDF. Таким способом фрагмент дерева ОФ
выравнивается в последовательности символов. Эта последовательность символов
называется далее
flattened sequence of characters/выровненная последовательность символов.
В-третьих, в XSL алгоритм применяется к разграниченным участкам/диапазонам
текста, а не просто к параграфам. Ограниченный диапазон текста это
максимально выровненная последовательность символов, не содержащая никаких
ограничителей. Любой ОФ, генерирующий блок-области, является ограничителем. Он
действует как ограничитель для своего содержимого. Он также действует как
ограничитель для содержимого своего предка. То есть, если предок имеет
символьное содержимое, его дочерние ОФ, генерирующие блок-области, разбивают это
символьное содержимое на анонимные блоки, каждый из которых является
разграниченным диапазоном текста. Подобным же образом ОФ fo:multi-case действует
как ограничитель для своего содержимого и для содержимого своего предка. Наконец,
текст с ориентацией, не перпендикулярной доминантной базовой линии, действует
как ограничитель на текст с ориентацией, перпендикулярной доминантной базовой
линии. Мы говорим, что текст имеет ориентацию, перпендикулярную доминантной
базовой линии, если все глифы, соответствующие символам текста,
ориентированы перпендикулярно доминантной базовой линии.
ПРИМЕЧАНИЕ:В большинстве случаев ограниченный диапазон текста это
максимально возможная последовательность символов, которая будет форматироваться
в последовательность из одной или более строчных областей. Для fo:multi-case и
текста, с ориентацией, перпендикулярной доминантной базовой линии, ограниченный
диапазон может быть субпоследовательностью строки или последовательностью строк.
Например, в японском письме, сформатированном в вертикальном режиме письма,
латинский и арабский текст будет ограничен вертикальными японскими символами,
непосредственно окружающими латинский и арабский текст. Любые ОФ, генерирующие
строчные области, не будут влиять на определение диапазона разграниченного
текста.
Для каждого диапазона разграниченного текста inline-progression-direction
ОФ - ближайшего предка (включая самого себя), генерирующего блок-области,
определяет уровень внедрения параграфов, используемый в алгоритме Unicode BIDI.
Это уровень внедрения по умолчанию для ограниченного диапазона текста.
Уровни внедрения это числа, обозначающие то, насколько глубоко текст
вложен, и направление текста по умолчанию для данного уровня. Минимальный
уровень внедрения текста равен нулю, а максимальный - 61. Наличие более 61
уровня внедрения приводит к ошибке. Процессор XSL может сигнализировать об
ошибке. Если он не сообщает об ошибке, он обязан её обработать, допустив
максимально высокий уровень внедрения.
Второй этап алгоритма BIDI помечает каждый символ ограниченного диапазона
текста разрешённым уровнем внедрения.
Разрешённый уровень внедрения каждого символа будет больше или равен уровню
внедрения параграфа. Текст справа-налево всегда будет иметь нечётный уровень, а
текст слева-направо и цифровой текст всегда будет иметь чётный уровень. Кроме
того, цифровой текст всегда будет иметь уровень более высокий, чем параграф.
После того, как разрешённые уровни внедрения для разграниченного диапазона
текста определены, новые ОФ fo:bidi-override с соответствующими значениями для
свойств "direction" и "unicode-bidi" вставляются во фрагмент дерева ОФ, который
выравнивается в ограниченном диапазоне текста так, что выполняются следующие
ограничения:
Для любого символа в ограниченном диапазоне текста
inline-progression-direction символа обязано совпадать с его разрешённым
уровнем внедрения.
Для каждого разрешённого уровня внедрения L от уровня внедрения параграфа до максимального разрешённого уровня
внедрения и для каждой
максимальной непрерывной последовательности символов S, для которых
разрешённый уровень внедрения каждого символа больше или равен
L,
Имеется инлайн-ОФ F, имеющий в качестве своего содержимого
фрагмент дерева ОФ, который выравнивается с
S, и имеет свойство "direction", соединённое с разрешённым уровнем
внедрения L.
ПРИМЕЧАНИЕ:
F не должен быть вставляемым ОФ, если ограничение выполняется
существующим ОФ или путём спецификации значений для свойств "direction" и "unicode-bidi"
в существующем ОФ.
Все ОФ, содержащие любую часть последовательности
S, правильно вложены в F и сохраняют отношения
вложенности, которые они имели в дереве ОФ до вставки новых ОФ.
ПРИМЕЧАНИЕ:Выполнение этого ограничения может потребовать одного или
более существующих ОФ в дереве ОФ на пары ОФ, каждый из которых имеет тот же
самый набор вычисленных значений свойств, что и оригинальный, неразделённый ОФ.
Каждый элемент пары будет оканчиваться перед началом F или начинаться
после конца F, а другой, соответственно, будет начинаться после
начала
F или заканчиваться перед концом F. Созданные пары должны
продолжать оставаться правильно вложенными, чтобы удовлетворять этому
ограничению.
Например, предположим, что текст слева-направо представлен символом "L" и текст
справа-налево - символом "R".
В поддереве
<fo:block>
LL
<fo:inline ID="A">LLLRRR</fo:inline>
RR
</fo:block>
примем наличие уровня внедрения параграфа, равный "0", разрешённые уровни
внедрения будут требовать следующей структуры (вставленной и размноженной):
<fo:block>
LL
<fo:inline ID="A">LLL</fo:inline>
<fo:bidi-override direction="rtl">
<fo:inline ID="A+">RRR</fo:inline>
RR
</fo:bidi-override>
</fo:block>
Заметьте, что fo:inline с ID равным "A" был разделён на два fo:inline с первым,
имеющим оригинальный ID "A", и вторым, имеющим ID "A+". Поскольку ID'ы обязаны
быть уникальными, вычисленное значение любого свойства ID или Key обязано
не повторяться во втором члене пары. Значение "A+" было использовано для
иллюстрации.
Не меньшее число ОФ fo:bidi-override может быть вставлено и может
удовлетворять вышеприведённому ограничению. То есть, к очищенному дереву ОФ
добавляется ровно столько ОФ fo:bidi-override, помимо ОФ, созданных в процессе
конструирования дерева, сколько необходимо для представления существующих в
документе уровней внедрения..
Все спецификации значений свойств в атрибуте в таблице стилей XSL могут быть
выражениями. Эти выражения представляют значение специфицированного свойства.
Выражение сначала вычисляется, а затем значение-результат используется для
определения значения свойства.
Свойства вычисляются относительно специфического для данного свойства
контекста.
Этот контекст предоставляет:
-
Список допустимых типов результата для значения свойства.
-
Конверсию типов значений результирующих выражений к допустимому типу свойства.
-
Текущее значение font-size.
-
Конверсию типа относительных числовых значений к абсолютным числовым
значениям внутри аддитивных выражений.
ПРИМЕЧАНИЕ:Не обязательно, чтобы конверсия была предоставлена для всех
типов. Если не специфицировано никакой конверсии, это является ошибкой.
Если экземпляр типа (например, string, keyword, число и т.п.) обнаружен в
выражении, он вычисляется относительно контекста свойства. Это даёт возможность
конвертировать специфические значения по специфическому для контекста свойства
алгоритму или использовать конверсии при вычислении выражения в целом.
Например, перечислимая лексема "auto" в некоторых свойствах является
вычисляемым выражением. Такая лексема будет конвертирована в объект
специфического типа по алгоритму, специфицированному в определении свойства.
В таком случае результирующее значение может быть абсолютным размером,
специфицирующим ширину некоторых аспектов ОФ.
Кроме того, это позволяет разрешать некоторые типы, вроде относительных
чисел, в абсолютные числа до проведения математических операций.
Все контексты свойств допускают конверсию так, как описано в разделе
[5.9.12 Конверсия Значений Выражений].
5.9.2
Порядок вычисления
Если набор свойств вычисляется для конкретного ОФ в дереве ОФ, то выполняется
определённый порядок, в котором свойства обязаны вычисляться.
Самое основное: свойство "font-size" обязано быть вычислено первым, до всех
других свойств. После того, как свойство "font-size" вычислено,
все остальные свойства могут вычисляться в любом порядке.
Когда свойство "font-size" вычислено, текущий
font-size, используемый при вычислениях, это font-size родительского
элемента.
После того как свойство "font-size" вычислено,
полученное значение используется как текущий font-size для всех контекстов
свойств и всех значений выражений, которые будут далее вычисляться.
5.9.3 Basics/Базовые (значения
- перев.)
5.9.5 Числовые (значения)
Числовое значение представляет все типы чисел в выражении XSL.
Некоторые из этих чисел являются абсолютными значениями. Другие -
относительными к некоторым другим наборам значений. Все эти значения используют
числа с плавающей точкой для представления частей числа по их определениям.
Числа с плавающей точкой могут иметь любое значение двойной точности 64-битного
формата IEEE 754 [IEEE 754].
Сюда входит также специальное значение "Not-a-Number/не-число" (NaN),
положительная и отрицательная бесконечности и положительный и отрицательный нуль.
См. в
Разделе 4.2.3 [JLS] резюме по ключевым
правилам стандарта IEEE 754.
Следующие операторы могут использоваться с числами:
+
Сложение.
-
Вычитание или перемена знака.
*
Умножение.
div
Деление с плавающей точкой в соответствии с IEEE 754.
mod
Возвращает остаток от деления.
ПРИМЕЧАНИЕ:Поскольку XML допускает это в именах, перед оператором
"-" (если не используется как унарное отрицание/UnaryExpr) обычно
необходим предшествующий пробел. Например, выражение 10pt - 2pt
означает вычитание 2 пунктов из 10 пунктов. Выражение 10pt-2pt
будет означать значение размера 10 в единицах "pt-2pt".
ПРИМЕЧАНИЕ:Вот примеры оператора mod:
-
5 mod 2
возвращает 1
-
5 mod -2 возвращает 1
-
-5 mod 2 возвращает -1
-
-5 mod -2 возвращает -1
ПРИМЕЧАНИЕ:Оператор mod это тот же оператор, что и %
в Java и
ECMAScript, и не тот же, что операция остатка IEEE, которая возвращает остаток
округляющего деления.
Числовые Выражения
ПРИМЕЧАНИЕ:Данная грамматика действует по таким приоритетам (низший
идёт первым):
и все операторы лево-ассоциативны. Например, 2*3 + 4 div 5 эквивалентно (2*3) + (4 div 5).
Если нечисловое значение используется в AdditiveExpr
и нет конверсии контекста свойства из этого типа в абсолютное числовое значение,
выражение является неверным и считается ошибкой.
5.9.6
Абсолютные Числовые Значения
Абсолютное число это абсолютный размер, состоящий из пары Number
и UnitName, увеличенный на порядок
(возведённый в степень). Если абсолютный размер записан без единиц измерения, то
порядок единиц измерения принимается равным нулю. Следовательно, все числа с
плавающей точкой являются размерами с порядком нуль.
Каждое имя единиц измерения ассоциировано с внутренней пропорцией к
некоторой общей внутренней единице измерения величин (например, метр). Если
значение записано в выражении свойства, оно сначала конвертируется к внутренней
единице измерения, а затем выполняются математические операции.
Кроме того, только операторы mod,
сложения и вычитания требуют, чтобы числа на каждой стороне операции были
абсолютными числами единиц одного порядка.
Для других операций единицы порядка могут быть разными, и результат должен быть
математически последовательным, как при работе с порядками в алгебре.
Определение свойства может ограничивать абсолютный размер конкретного порядка.
Например, при специфицировании font-size, ожидаемый порядок значения "one".
То есть ожидается, что оно имеет однократно увеличенный порядок
специфицированной единицы измерения (например, 10pt).
При вычислении окончательного значения свойства результирующий порядок
абсолютного числа обязан быть нулём или единицей. Если специфицирован
какой-либо другой порядок,
значение будет считаться ошибкой.
Относительные величины это значения, вычисляемые относительно некоторого
набора других значений. Если относительные величины записаны как часть выражения,
они либо конвертируются в контексте свойства в абсолютные числовые значения,
либо передаются без изменений как значение свойства.
Будет ошибкой, если контекст свойства не имеет возможности конверсии для
относительных числовых значений, а конверсия необходима для вычисления выражения (например,
в операции сложения).
5.9.7.1 Проценты
Процентными являются значения, вычисляемые в единицах 1/100. то есть, 10%
как процентное значение - это 0.10 как число с плавающей точкой.
При конвертировании к абсолютному значению процентное значение определяется в
определении свойства как процент от какого-то известного значения свойства. Если
процентное значение вычисляется до
"auto", полное выражение вычисляется до "auto".
Например, значение "110%" свойства "font-size"
будет вычислено как 1.1 раз от текущего размера шрифта.
такое определение допустимой конверсии для процентных значений специфицируется в
определении свойства. Если конверсия не специфицирована, результирующее
значение будет процентным.
5.9.7.2 Относительные Размеры
Относительная величина это значение на базе каких-либо единиц измерения,
определяемое относительно текущего значения свойства font-size.
Имеется только одна относительная единица измерения, "em". По определению, "1em"
равно текущему размеру шрифта. Например, "1.25em" равно 1.25 раза от текущего
значения размера шрифта.
Если единица измерения "em" используется в выражении, она конвертируется в
соответствии со значением font-size текущего контекста свойства.
Результатом выражения будет абсолютный размер.
См. [7.8.4 "font-size"].
Строки представлены либо как литералы, либо как
лексема перечисления.
Контексты всех свойств позволяют проводить конверсию от лексем перечисления к
строкам.
См. [5.9.12 Конвертирование Значения
Выражения].
Цвет это набор значений, используемый для идентификации определённого цвета
из палитры.
В данные Рекомендации включены только цвета RGB [sRGB]
(Red, Green, Blue)
и ICC (International Color Consortium)
[ICC].
Цвета RGB непосредственно представлены в языке выражения с использованием
16-ричной нотации. Доступ к цветам ICC может быть получен через функцию rgb-icc.
Цвета могут также быть специфицированы функцию system-color
или через конверсию от
EnumerationToken в контексте свойства.
Ключевые слова это специальные лексемы грамматики, которые дают доступ к
вычисляемым или другим значениям свойства.
Допустимые ключевые слова определены в последующих подразделах.
5.9.10.1 inherit/наследуется
Это свойство принимает то же самое вычисленное значение, что и
свойство объекта-предка объекта форматирования.
ПРИМЕЧАНИЕ:"inherit" не допускается как выражение в сочетании с
операциями.
Та же самая функциональность предоставляется функцией from-parent(), которая
может сочетаться с операциями.
При обработке выражения пробел (ExprWhitespace)
допускается перед или после какой-либо лексемы выражения, даже если он явно не
определён в грамматике как таковой. В некоторых случаях пробел необходим для
лексического различения лексем грамматики.
Самое основное - пробел должен рассматриваться так, как если бы он не
существовал после "лексемизации" выражения.
Следующие правила лексемизации обязаны применяться в порядке,
специфицированном для обеспечения недвусмысленности грамматики:
-
Если символ, идущий после
NCName (возможно,
после введения
ExprWhitespace), это
"(",
тогда лексема обязана распознаваться как
FunctionName/ИмяФункции.
-
Число заканчивается при первом вхождении нецифрового символа, отличного от ".".
Это позволяет правильно разобрать лексемы единиц измерения размеров.
-
Если NCName
непосредственно следует после
Number, оно должно распознаваться как
UnitName/Имя ЕдиницИзмерения, или будет
считаться ошибкой.
-
Значения Keyword имеют приоритет над
EnumerationToken.
-
Если NCName
следует после
numeric,
оно должно распознаваться как OperatorName/ИмяОператора,
или будет считаться ошибкой.
Лексическая Структура Выражения
[14] | ExprToken/ЛексемаВыражения | ::= | '(' | ')' | '%' | |
| | | | Operator/Оператор | |
| | | | FunctionName/ИмяФункции | |
| | | | EnumerationToken/ЛексемаПеречисления | |
| | | | Number/Число | |
[15] | Number/Число | ::= | FloatingPointNumber/ЧислоСПлавающейТочкой | |
[16] | FloatingPointNumberЧислоСПлавающейТочкой | ::= | Digits ('.' Digits?)?
/Цифры | |
| | | | '.' Digits/Цифры | |
[17] | Digits/Цифры | ::= | [0-9]+ | |
[18] | Color/Цвет | ::= | '#' AlphaOrDigits/БуквыИлиЦифры | |
[19] | AlphaOrDigits/БуквыИлиЦифры | ::= | [a-fA-F0-9]+ | |
[20] | Literal/Литерал | ::= | '"' [^"]* '"' | |
| | | | "'" [^']* "'" | |
[21] | Operator/Оператор | ::= | OperatorName/ИмяОператора | |
| | | | MultiplyOperator/ОператорУмножения | |
| | | | '+' | '-' | |
[22] | OperatorName/ИмяОператора | ::= | 'mod' | 'div' | |
[23] | MultiplyOperator/ОператорУмножения | ::= | '*' | |
[24] | Keyword/КлючевоеСлово | ::= | 'inherit' | |
[25] | FunctionName/ИмяФункции | ::= |
NCName | |
[26] | EnumerationToken/ЛексемаПеречисления | ::= | NCName | |
[27] | AbsoluteUnitName/НазваниеАбсолютных
ЕдиницИзмерения | ::= | 'cm' | 'mm' | 'in' | 'pt' | 'pc' | 'px' | |
[28] | RelativeUnitName/НазваниеОтносительных
ЕдиницИзмерения | ::= | 'em' | |
[29] | ExprWhitespace/Пробел | ::= | S | |
5.9.12 Конверсия Значения Выражения
Значения, являющиеся результатом вычисления выражения, могут быть
конвертированы в типы значений свойства. В некоторых случаях это может быть
простая проверка установленного членства (например, является ли значение верным
кодом страны). В других случаях ожидается значение простого типа, такого как
целочисленный, и обязано быть конвертировано.
Не обязательно, чтобы все допустимые типы конвертировались. Если значение
выражения не может быть конвертировано к нужному типу значения свойства,
это является ошибкой.
В следующей таблице указаны допустимые конверсии.
Тип |
Допустимы Конверсии |
Ограничения |
NCName |
-
Color, через функцию system-color().
-
Перечисляемое значение, как определено в определении свойства.
-
К строковому литералу.
| Значение может быть проверено
относительно набора разрешённых значений, в зависимости от свойства. |
AbsoluteNumeric
,АбсолютноеЧисловое |
-
Целое, через функцию round().
-
Color, как значение цвета RGB.
|
Если конвертируется до значения цвета RGB, обязано быть реальным значением цвета
из пространства цветов. |
RelativeLength
/ОтносительныйРазмер |
|
|
Специфическая применяемая конверсия зависит от свойства и может быть найдена
в определении каждого свойства.
ПРИМЕЧАНИЕ:Конверсии сложных значений свойств не допускается; таким
образом, например,
space-before.optimum="inherited-property-value(space-before)" является неверным.
Разрешены, к примеру,
space-before="inherited-property-value(space-before)" и
space-before.optimum="inherited-property-value(space-before.optimum)", поскольку
они не требуют конверсии.
5.9.13
Определения
Единиц Измерения
Единицы измерения в данных Рекомендациях имеют следующие определения:
5.9.13.1 Пикселы
XSL интерпретирует единицу 'px' как запрашиваемую форматировщиком для выбора
измерения в зависимости от устройства-носителя, соответствующую приблизительно
одному видимому пикселу типичного монитора компьютера.
Интерпретация такова:
Предпочтительное определение одного 'px':
-
Фактическое расстояние, покрываемое наибольшим целым числом точек устройства (размер
точки устройства измеряется как расстояние между центрами точек), охватывающих
расстояние меньше-чем-или-равно расстоянию, специфицированному правилом arc-span
в
http://www.w3.org/TR/REC-CSS2//syndata.html#x39.
В XSL оно принимается равным 0.28mm [приблизительно 1/90"]
для печати, мониторов настольного компьютера и ручных портативных устройств,
видимое с нормального расстояния просмотра.
-
Минимально должен использоваться размер 1 точки устройства.
-
Этот обсчёт выполняется отдельно по каждой оси и может иметь отдельное
значение по каждой оси.
Однако разработчики могут вместо этого просто брать фиксированный фактор
конверсии, рассматривая 'px' как абсолютную единицу измерения (как
1/92" или 1/72").
ПРИМЕЧАНИЕ:Пикселы не должны смешиваться с другими абсолютными
единицами в выражениях, так как это может привести к нежелательным последствиям.
Также особую осторожность следует соблюдать при работе с наследуемыми значениями
свойств, которые могут быть специфицированы в пикселах.
Если пользовательский агент (ПА) выбирает для 'px' единицу измерения, которая
не соответствует целому числу точек устройства по каждой оси, это может дать
нежелательный эффект:
-
moiré/муаровые патэрны в растровой графике
-
неотображаемые перекрывающиеся области, если при выводе размеры шрифтов и
графики округляются в сторону увеличения до действующего значения размера точки
-
большие пространства между областями, если при выводе размеры шрифтов и
графики округляются в сторону уменьшения до действующего значения размера точки
-
нечитаемый результат, включая недопустимо мелкий текст/структуру
(например, структура была рассчитана на разрешение 72 dpi [dots per inch], а
устройство вывода приняло результат, уже специфицированный в точках устройства,
и выводит его с разрешением 600 dpi).
Авторы таблиц стилей должны помнить, что реальный размер пиксела может
отличаться на разных устройствах:
-
таблицы стилей, использующие единицы 'px', могут не давать приемлемого
результата в разных реализациях или на разных устройствах вывода для одной
реализации;
-
даже если таблицы стилей выражены полностью в единицах 'px', результат может
быть разным на разных устройствах.
5.10
Библиотека Основных
Функций
5.10.1
Функции для Работы с Числами
Функция: numeric floor(
numeric)
Функция floor возвращает наибольшее (ближайшее к положительной бесконечности)
целое, которое не больше аргумента.
Числовой аргумент этой функции обязан быть в единицах нулевого порядка/power zero.
ПРИМЕЧАНИЕ:Если необходимо использовать функцию floor для свойства,
когда ожидается порядок единиц 1, то выражение, такое как "floor(1.4in div 1.0in)*1.0in",
обязано использоваться.
Это применяется к ceiling,
round и другим подобным функциям, где необходим нулевой порядок единиц измерения.
Функция: numeric ceiling(numeric)
Функция ceiling возвращает наименьшее (ближайшее к отрицательной
бесконечности) целое, которое не меньше аргумента. Числовой аргумент этой
функции обязан быть нулевого порядка.
Функция: numeric round(numeric)
Функция round возвращает целое, ближайшее к аргументу. Если имеется два
таких числа, то возвращается ближайшее к положительной бесконечности. Числовой
аргумент этой функции обязан быть нулевого порядка.
Функция: numeric min(
numeric
, numeric)
Функция min возвращает минимальный из двух числовых аргументов. Эти
аргументы обязаны иметь один и тот же порядок/мощность единиц измерения.
Функция: numeric max(numeric
, numeric)
Функция max возвращает максимальный из двух числовых аргументов. Эти
аргументы обязаны иметь один и тот же порядок/мощность единиц измерения.
Функция: numeric abs(
numeric)
Функция abs возвращает абсолютное значение числового аргумента.
То есть, если числовой аргумент - отрицательный, возвращается отрицание (+)
аргумента.
5.10.2 Функции Работы с Цветом
Функция: color rgb(numeric
, numeric
, numeric)
Функция rgb возвращает специфический цвет из палитры RGB. Параметры данной
функции должны быть числовыми (реальными числами) с нулевым порядком величины.
Функция: color rgb-icc(numeric
, numeric
, numeric
, NCName
, numeric
, numeric)
Функция rgb-icc возвращает специфический цвет из цветового профиля ICC.
Профиль цвета специфицируется по имени параметра (четвёртый параметр). Этот
профиль цвета обязан быть объявлен в ОФ fo:declarations с использованием ОФ fo:color-profile
Первые три параметра специфицируют резервный цвет из палитры sRGB. Этот цвет
используется, если профиль цвета недоступен.
Цвет специфицируется последовательностью из одного или более значений цвета (реальные
числа), специфицированных после параметра имени. Эти значения специфичны для
профиля цвета.
Функция: color system-color(
NCName)
Функция system-color возвращает определяемый системой цвет с данным именем.
5.10.3 Функции
Шрифта
Функция: object system-font(
NCName
, NCName)
Функция system-font возвращает характеристики системного шрифта. Первый
аргумент - имя системного шрифта, а второй - необязательный - имя свойства,
специфицирующего эти характеристики. Если второй аргумент опущен, то
возвращаемая характеристика - это имя свойства, которому выражение назначено.
Например, выражение
"system-font(heading,font-size)" возвращает характеристики размера шрифта для
системного шрифта, называющегося "heading". Это эквивалент назначения свойства
'font-size="system-font(heading)"'.
5.10.4
Функции Работы со
Значениями Свойств
Функция: object inherited-property-value(NCName)
Функция inherited-property-value возвращает унаследованное значение свойства,
имя которого совпадает именем специфицированного аргумента,
или, если имя отсутствует, - значение свойства, для которого выражение
вычисляется.
Будет считаться ошибкой, если это свойство не будет являться наследуемым
свойством.
Возвращаемое "наследуемое значение" это вычисленное значение данного свойства
в данном предке объекта. Рассмотрим следующий пример:
<fo:list-block>
...
<fo:list-item color="red">
<fo:list-item-body background-color="green">
<fo:block background-color="inherited-property-value(color)">
</fo:block>
</fo:list-item-body>
</fo:list-item>
</fo:list-block>
Свойство background-color в fo:block получает значение "red", поскольку (вычисленное
после наследования)
значение свойства color (не background-color) в
fo:list-item-body, который является предком для fo:block, будет "red".
Функция: numeric label-end()
Функция label-end возвращает вычисленное значение
label-end для списков. См. определение в разделе
[7.28.3 "provisional-label-separation"].
Функция: numeric body-start()
Функция body-start возвращает вычисленное значение body-start для
списков.
См. определение в разделе
[7.28.4 "provisional-distance-between-starts"].
ПРИМЕЧАНИЕ:Если эта функция используется вне списка, она возвращает
вычисленное значение, как специфицировано.
Функция: object from-parent(
NCName)
Функция from-parent возвращает вычисленное значение свойства, имя которого
совпадает со специфицированным аргументом,
или, если аргумент опущен, - значение свойства, для которого выражение
вычисляется.
Возвращаемое значение это значение для родителя ОФ, для которого выражения
вычисляется.
Если родитель отсутствует, возвращается начальное значение. Если аргумент
специфицирует сокращённое свойство и если выражение состоит только из функции from-parent
с аргументом, совпадающим с вычисляемым свойством, он (аргумент)
интерпретируется как развёртывание сокращения с каждым свойством, в которое
сокращение развёртывается, и каждое свойство имеет значение from-parent с
аргументом, совпадающим со свойством.
Является ошибкой использование аргумента, совпадающего с сокращённым свойством,
каким-либо иным способом.
Функция:
object from-nearest-specified-value(
NCName)
Функция from-nearest-specified-value возвращает вычисленное значение
свойства, чьё имя совпадает со специфицированным аргументом,
или, если аргумент опущен, - значение свойства, для которого выражение
вычисляется.
Возвращаемое значение это значение для ближайшего предка ОФ, для которого
выражения вычисляется, в котором (выражении?) имеется назначение свойства в
результирующем дереве XML в пространстве имён
fo.
Если такой предок отсутствует, возвращается начальное значение.
Если аргумент специфицирует сокращённое свойство и если выражение состоит только
из функции from-nearest-specified-value с аргументом, совпадающим с вычисляемым
свойством, он (аргумент) интерпретируется как развёртывание сокращения с каждым
свойством, в которое сокращение развёртывается, и каждое свойство имеет значение from-nearest-specified-value
с аргументом, совпадающим со свойством.
Является ошибкой использование аргумента, совпадающего с сокращённым свойством,
каким-либо иным способом.
Функция:
object from-table-column(
NCName)
Функция from-table-column возвращает наследуемое значение свойства, чьё имя
совпадает со специфицированным аргументом,
или, если аргумент опущен, - значение свойства, для которого выражение
вычисляется,
из fo:table-column, чьё column-number совпадает со столбцом, для которого это
выражение вычисляется и чьё number-columns-spanned также совпадает с любым span.
Если для number-columns-spanned нет совпадений, оно совпадает со span, равным 1.
Если совпадение всё ещё не достигнуто, возвращается начальное значение.
Ошибкой является использование этой функции в ОФ, не являющихся fo:table-cell
или его потомками.
Функция:
numeric proportional-column-width(
numeric)
Функция proportional-column-width возвращает N единиц
пропорционального измерения, где N это передаваемый данной функции
аргумент.
Ширина каждого столбца определяется вначале с игнорированием пропорционального
измерения. Разница между table-width и суммой ширины столбцов является доступной
пропорциональной шириной. Одна единица пропорционального измерения равна
доступной пропорциональной ширине, разделённой на сумму пропорциональных
факторов/factors.
Ошибкой будет использование этой функции для других ОФ, кроме fo:table-column.
Ошибкой будет также использование этой функции, если не используется
фиксированная структура таблицы.
Функция:
object merge-property-values(
NCName)
Функция merge-property-values возвращает значение свойства, чьё имя совпадает
со специфицированным аргументом,
или, если аргумент опущен, - значение свойства, для которого выражение
вычисляется.
Возвращается специфицированное значение последнего
fo:multi-property-set, предка fo:multi-properties,
который применён к данному статусу пользовательского агента (ПА).
Если такого значения нет, возвращается вычисленное значение родительского fo:multi-properties.
ПРИМЕЧАНИЕ:Проверка применимости статуса ПА специфицируется с
использованием свойства "active-state".
Ошибкой является использование этой функции для других ОФ, кроме fo:wrapper,
являющегося дочерним относительно fo:multi-properties.
5.11
Типы Данных Свойства
Значения некоторых свойств описаны в терминах комплексных типов данных, в
терминах ограничений на допустимые числовые значения или строками с определённой
семантикой.
Комплексные типы данных, такие как space, представлены в результирующем
дереве как множественные атрибуты. Имена этих атрибутов состоят из имени
свойства с последующим дефисом и имени компонента.
Например, свойство "space-before" может быть специфицировано так:
space-before.minimum="2.0pt"
space-before.optimum="3.0pt"
space-before.maximum="4.0pt"
space-before.precedence="0"
space-before.conditionality="discard"
Может использоваться сокращённая форма спецификации комплексного значения, в
тех случаях, когда тип данных имеет некоторые компоненты <length>, и для
типа данных
<keep>. В первом случае спецификация состоит из заданного значения <length>
для атрибута с именем, совпадающим с именем свойства. Такая спецификация задаёт
это значение каждому компоненту <length>, а начальное значение - всем
компонентам не-<length>. Например:
space-before="4.0pt"
эквивалентно спецификации
space-before.minimum="4.0pt"
space-before.optimum="4.0pt"
space-before.maximum="4.0pt"
space-before.precedence="0"
space-before.conditionality="discard"
ПРИМЕЧАНИЕ:Поскольку значение <percentage>,
не интерпретируемое как "auto",
является верным значением <length>, оно может использоваться в сокращённой
форме.
Для типа данных <keep> спецификация задаёт значение, являющееся верным
для компонента, атрибуту с именем, совпадающим с именем свойства. Такая
спецификация задаёт такое значение каждому компоненту.
Например:
keep-together="always"
эквивалентно спецификации
keep-together.within-line="always"
keep-together.within-colums="always"
keep-together.within-page="always"
Сокращённые формы могут использоваться вместе с полными формами; полные формы
имеют приоритет перед расширением сокращённых форм.
Например:
space-before="4.0pt"
space-before.maximum="6.0pt"
эквивалентно спецификации
space-before.minimum="4.0pt"
space-before.optimum="4.0pt"
space-before.maximum="6.0pt"
space-before.precedence="0"
space-before.conditionality="discard"
Комплексные значения свойств наследуются как модуль, а не как отдельные
компоненты.
После наследования любая полная форма спецификации компонента используется для
установки его значения.
Далее определён синтаксис специфицирования типов данных, используемых в
значениях свойств:
<integer>
Знаковое целое значение, состоящее из необязательного символа '+' или '-'
и последовательности цифр.
Свойство может определять дополнительные ограничения для значения.
ПРИМЕЧАНИЕ:Знак '+' разрешён для обеспечения совместимости с CSS2.
<number>
Реальное число со знаком, состоящее из необязательного символа '+' или '-'
и последовательности цифр и необязательного символа точки '.'
и последовательности цифр.
Свойство может определять дополнительные ограничения для значения.
<length>
Значение размера со знаком, где 'length' это реальное число, плюс
квалификация единиц измерения.
Свойство может определять дополнительные ограничения для значения.
<length-range>
Комплексный тип данных с компонентами:
minimum, optimum, maximum. Каждый компонент это <length>.
Если "minimum" больше, чем optimum, он будет рассматриваться как установленный в
значение "optimum".
Если "maximum" меньше, чем optimum, он будет рассматриваться как установленный в
значение "optimum".
Свойство может определять дополнительные ограничения для значений.
<length-conditional>
Комплексный тип данных с компонентами:
length, conditionality. Компонент length - это <length>.
Компонент conditionality это "discard" либо "retain".
Свойство может определять дополнительные ограничения для значений.
<length-bp-ip-direction>
Комплексный тип данных с компонентами:
block-progression-direction и inline-progression-direction.
Каждый компонент это <length>.
Свойство может определять дополнительные ограничения для значений.
<space>
Комплексный тип данных с компонентами:
minimum, optimum, maximum, precedence и conditionality.
Компоненты minimum, optimum и maximum это <length>'ы.
Компонент приоритета - это либо "force", либо <integer>.
Компонент conditionality - это "discard" или "retain".
Если "minimum" больше, чем optimum, он будет рассматриваться как установленный в
значение "optimum".
Если "maximum" меньше, чем optimum, он будет рассматриваться как установленный в
значение "optimum".
<keep>
Комплексный тип данных с компонентами:
within-line, within-column и within-page. Значением каждого компонента является "auto", "always"
или <integer>.
<angle>
Представление угла, состоящее из необязательного знака '+' или '-' и
непосредственно следующего <number> и идентификатора угловых единиц
измерения.
Идентификаторы угловых единиц измерения:
'deg' (для степени/degrees),
'grad' (для градусов) и
'rad' (для радиан).
Специфицированные значения нормализуются до диапазона от 0deg до 360deg.
Свойство может определять дополнительные ограничения для значения.
<percentage>
Реальное число со знаком, состоящее из необязательного символа '+' или '-'
и последовательности цифр, необязательного символа '.'
и последовательности цифр и '%'.
Свойство может определять дополнительные ограничения для значения.
<character>
Одиночный символ Unicode.
<string>
Последовательность символов.
<name>
Строка символов, представляющая имя.
Обязана соответствовать
NCName из
[XML Names].
<family-name>
Строка символов, идентифицирующая шрифт.
<color>
Строка символов, представляющая ключевое слово, или функция color,
определённая в разделе [5.10.2
Функции Работы с Цветом].
Список ключевых слов - названий цветов:
aqua, black, blue, fuchsia, gray, green, lime, maroon, navy, olive,
purple, red, silver, teal, white и yellow.
<country>
Строка символов, соответствующая коду страны ISO 3166.
<language>
Строка символов, соответствующая 3х-буквенному коду языка
ISO 639.
<script>
Строка символов, соответствующая коду письма
ISO 15924.
<id>
Строка символов, соответствующая определению
NCName из
[XML Names], уникальная внутри данной таблицы
стилей.
<idref>
Строка символов, соответствующая определению
NCName из
[XML Names] и совпадающая со значением ID
свойства, используемого внутри таблицы стилей.
<uri-specification>
Последовательность символов -
"url(", с необязательным пробелом, необязательной одинарной кавычкой
(') или двойной кавычкой ("), ссылкой URI, как определено в разделе [RFC2396],
необязательной одинарной кавычкой (') или двойной кавычкой ("), необязательным
пробелом и
")". Знаки кавычек обязаны быть одного типа, одинарные или двойные, и быть в
паре или отсутствовать. Если ссылка URI содержит одиночную кавычку, два знака
кавычки обязаны присутствовать и должны быть двойными кавычками.
<time>
<number>/Число с непосредственно следующим за ним идентификатором
единиц измерения времени.
Идентификаторы единиц измерения времени: 'ms' (миллисекунды) и 's' (секунды).
<frequency>
<number>/Число с непосредственно следующим за ним идентификатором
частоты.
Идентификаторы единиц измерения частоты: 'Hz' (герцы) и 'kHz' (килогерцы).