друг!
ЯндексЯндекс. ДеньгиХочу такую же кнопку

Очистка/Разрешение свойств-1

 

Назад

Оглавление

В конец страницы

Вперёд

 

Краткое содержание раздела
5 Очистка/Разрешение Свойств
    5.1 Специфицированные, Вычисленные и Реальные Значения и Наследование
    5.2 Развёртывание Сокращений
    5.3 Вычисление Значений Подобных Свойств
    5.4 Отображение Простого Свойства в Уточнение
    5.5 Отображение Сложного Свойства в Уточнение
    5.6 Генерация Уточнений не на Базе Свойств
    5.7 Трансформации на Базе Свойств
    5.8 Обработка Unicode BIDI
    5.9 Выражения
    5.10 Библиотека Основных Функций
    5.11 Типы Данных Свойства

В процессе очистки набор свойств, применяемых в объекте форматирования (ОФ), трансформируется в набор уточнений, определяющих ограничения для результата форматирования. Для многих уточнений имеется соответствие один-к-одному со свойствами; для других уточнений - трансформация сложнее. Детали трансформации описаны ниже.

Первым этапом очистки для конкретного ОФ является получение действующего значения каждого свойства, которые применяются к объекту. Любое сокращённое свойство, специфицированное для ОФ, расширяется до конкретных свойств. Это описывается далее в разделе [5.2 Развёртывание Сокращений]. Для любого свойства, не специфицированного в объекте, унаследованное (см. [5.1.4 Наследование]) или начальное значение, как применяемое, используется в качестве действующего значения.
Вторым этапом является трансформация набор свойств в уточнения.

ПРИМЕЧАНИЕ:

Хотя процесс очистки описан серией этапов, это делается лишь с демонстрационными целями и не означает, что они (этапы) обязаны реализовываться как отдельные шаги в какой-либо соответствующей реализации. Соответствующая реализация обязана лишь достигать того же эффекта.

5.1 Специфицированные, вычисленные и реальные значения и наследование

Для каждого свойства, применимого к данному ОФ, нужно определить значение свойства. Различают три варианта значения свойства: специфицированное, вычисленное и реальное значение. "Специфицированное значение" это то, которое помещено в ОФ процессе конструирования дерева. Специфицированное значение может не иметь форму, пригодную для непосредственного использования; например, оно может быть процентным или другим выражением, которое сначала необходимо конвертировать в абсолютное значение. Значение, полученное в результате такой конвертации, называется "вычисленным значением". Наконец, вычисленное значение может не реализоваться на носителе вывода и может потребовать приспособления, прежде чем его можно будет использовать для отображения. Например, ширина строки может быть переведена в интегральное число пикселов носителя вывода. Это уточнённое значение называется "реальное значение."

5.1.1 Специфицированные значения

Специфицированное значение свойства определяется путём использования следующих механизмов (в порядке убывания приоритета):

  1. Если в процессе конструирования дерева свойство помещается в ОФ, используется значение этого свойства как специфицированное значение. Это называется "явная спецификация".

  2. Иначе, если свойство может наследоваться, используется значение этого свойства из родительского ОФ, обычно - вычисленное значение (см. ниже).

  3. Иначе, используется начальное значение свойства, если установлено. Начальное значение каждого свойства указывается в определении свойства. Если начальное значение отсутствует, то данное свойство не специфицируется в ОФ. Как правило, это является ошибкой.

Поскольку корень результирующего дерева не имеет предков, он не может использовать значения своих родительских ОФ; в данном случае используется, если это необходимо, начальное значение.

5.1.2 Вычисленные значения

Специфицированные значения могут быть абсолютными (т.е. не специфицированными относительно другого значения, как "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.3 Реальные значения

Вычисленное значение в принципе готово к использованию, но пользовательский агент (ПА) может не иметь возможности использовать значение в данной среде окружения. Например, ПА может лишь отображать рамки с шириной, выраженной в пикселах, и должен будет, следовательно, уточнить вычисленную ширину до интегрального количества пикселов носителя. Реальное значение это вычисленное значение после применения такого уточнения.

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 определяет такой порядок:

  1. "border-style", "border-color" и "border-width" имеют меньший приоритет, чем

  2. "border-top", "border-bottom", "border-right" и "border-left".

Концептуально процесс разбит на следующие этапы:

  1. Установка действующих значений всех свойств в их начальные значения.

  2. Обработка всех сокращений по возрастающему приоритету.

    Если сокращение установлено в "inherit": действующее значение каждого свойства, которое может быть установлено сокращением, устанавливается в вычисленное значение соответствующего свойства родителя. Если значение сокращения - не "inherit": определяется, какие свойства устанавливаются, и начальное значение замещается вычисленным значением, полученным из специфицированного значения.

  3. Обработка всех свойств.

  4. Выполнение наследования для свойств, не получивших иных значений, кроме тех, которые были получены на первом этапе.

ПРИМЕЧАНИЕ:

К примеру, если свойства "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- очищается в уточнение 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" конвертируется до размера, как специфицировано в определении свойства.

5.4.2 Свойство column-number

Если значение не специфицировано в ОФ, к которому это свойство применяется, то начальное значение вычисляется так, как специфицировано в определении свойства.

5.4.3 Свойство text-align

Значение "left" или "right" конвертируется до относительного значения writing-mode/режима письма, как специфицировано в определении свойства.

5.4.4 Свойство text-align-last

Значение "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".

5.7 Трансформации на Базе Свойств

5.7.1 Свойство text-transform

Изменения регистра, специфицируемые этим свойством, выполняются в процессе очистки путём подходящего изменения значения свойства "character".

ПРИМЕЧАНИЕ:

Использование свойства "text-transform" не рекомендуется в XSL из-за жёстких требований к вопросам интернационализации.

5.8 Обработка Unicode BIDI

В некоторых видах письма символы записываются горизонтально справа налево. В определённых документах, некоторые из которых написаны на арабском или еврейском, и в некоторых контекстах смешения языков, текст в едином (визуально отображённом) блоке может иметь смешанное направление письма. Этот феномен называется bidirectionality/двунаправленность или сокращённо - "BIDI".

Стандарт Unicode [UNICODE] определяет сложный алгоритм, Unicode BIDI algorithm [UNICODE UAX #9], для определения необходимого направления текста. Этот алгоритм базируется на подразумеваемой части, базирующейся на свойствах символов, и на явном управлении внедрением и переопределением (направления текста -перев.).

Заключительный этап очистки использует этот алгоритм и тип Unicode bidirectional каждого символа для конвертации неявного направления текста в явную разметку в терминах ОФ. Например, последовательность арабских символов в окружении английских параграфов может вызвать создание инлайн-ОФ с арабскими символами в качестве содержимого со свойством "direction", установленным в "rtl", и свойством "unicode-bidi", установленным в "bidi-override". ОФ делает явным ранее неявное позиционирование справа-налево для арабских букв.

Как определено в [UNICODE UAX #9], алгоритм Unicode BIDI берёт на входе поток текста и обрабатывает его в три фазы:

  1. Разделение текста на параграфы. Остальная часть алгоритма действует только на текст между разделителя параграфов.

  2. Разрешение внедряемых уровней текста. На данном этапе двунаправленные типы символов, плюс коды двунаправленного форматирования Unicode, используются для производства разрешённых связанных уровней. Нормативные двунаправленные типы символов для каждого символа специфицированы в Базе Данных Символов Unicode [UNICODE Character Database].

  3. Построчное переупорядочивание текста для отображения, используя разрешённые связанные уровни, после того как текст будет разбит на строки.

Этот алгоритм, как описано выше, требует некоторой адаптации, чтобы "вместиться" в модель процессинга 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" вставляются во фрагмент дерева ОФ, который выравнивается в ограниченном диапазоне текста так, что выполняются следующие ограничения:

  1. Для любого символа в ограниченном диапазоне текста inline-progression-direction символа обязано совпадать с его разрешённым уровнем внедрения.

  2. Для каждого разрешённого уровня внедрения L от уровня внедрения параграфа до максимального разрешённого уровня внедрения и для каждой максимальной непрерывной последовательности символов S, для которых разрешённый уровень внедрения каждого символа больше или равен L,

    1. Имеется инлайн-ОФ F, имеющий в качестве своего содержимого фрагмент дерева ОФ, который выравнивается с S, и имеет свойство "direction", соединённое с разрешённым уровнем внедрения L.

      ПРИМЕЧАНИЕ:

      F не должен быть вставляемым ОФ, если ограничение выполняется существующим ОФ или путём спецификации значений для свойств "direction" и "unicode-bidi" в существующем ОФ.

    2. Все ОФ, содержащие любую часть последовательности 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+" было использовано для иллюстрации.

  3. Не меньшее число ОФ fo:bidi-override может быть вставлено и может удовлетворять вышеприведённому ограничению. То есть, к очищенному дереву ОФ добавляется ровно столько ОФ fo:bidi-override, помимо ОФ, созданных в процессе конструирования дерева, сколько необходимо для представления существующих в документе уровней внедрения..

5.9 Выражения

Все спецификации значений свойств в атрибуте в таблице стилей XSL могут быть выражениями. Эти выражения представляют значение специфицированного свойства. Выражение сначала вычисляется, а затем значение-результат используется для определения значения свойства.

5.9.1 Контекст Свойства

Свойства вычисляются относительно специфического для данного свойства контекста. Этот контекст предоставляет:

  • Список допустимых типов результата для значения свойства.

  • Конверсию типов значений результирующих выражений к допустимому типу свойства.

  • Текущее значение 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 для всех контекстов свойств и всех значений выражений, которые будут далее вычисляться.


 

Назад

Оглавление

В начало страницы

Вперёд

 

Pyramidin.Narod.RU