Пользователь

Добро пожаловать,

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

Меню сайта




Ваше мнение
Какой браузер Вы предпочитаете?

Internet Explorer
Mozilla Firefox
Opera
Netscape
Chrome
Другой


Результаты
Другие опросы

Всего голосов: 1673
Комментарии: 10


Наши партнеры



Статистика




Programming books  Download software  Documentation  Scripts  Content Managment Systems(CMS)  Templates  Icon Sets  Articles  Contacts  Voting  Site Search




Книги-online



Объекты Форматирования
 

Назад

Оглавление

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

Вперёд

Краткое Содержание
6 Объекты Форматирования (ОФ)
    6.1 Введение
    6.2 Содержимое ОФ
    6.3 ОФ. Резюме.
    6.4 Объявление и Разбивка на Страницы и Структура ОФ
    6.5 ОФ уровня блока
    6.6 ОФ инлайн-уровня
    6.7 ОФ для Таблиц
    6.8 ОФ для Списков
    6.9 Динамические Эффекты: Объекты Форматирования Link и Multi
    6.10 Внестрочные/Out-of-Line ОФ
    6.11 Прочие ОФ


6 Объекты Форматирования


6.1 Введение

Очищенное дерево ОФ описывает одно или более предполагаемых представлений информации внутри этого дерева. Форматирование это процесс конвертации описания в представление. См. [3 Форматирование. Введение.]. Представление изображается абстрактно деревом областей, как определено в модели областей (см. [4 Модель Области]). Каждое возможное представление представлено (опять...) одним или более деревьев областей, в котором(-ых) информация в очищенном дереве ОФ позиционирована в двух с половиной мерной плоскости/two and one-half dimensional surface.

Есть три вида ОФ:
(1) те, которые генерируют области,
(2) те, которые возвращают области, но не генерируют их, и
(3) те, которые используются при генерации областей.
Первый и второй виды обычно называются объекты потока/flow objects. Третий вид это либо объект структуры/layout object, либо вспомогательный объект/auxiliary object. Вид ОФ обозначен в терминах объекта. ОФ первого вида "генерируют одну или более областей". ОФ второго вида "возвращают одну или более областей". ОФ первого вида могут и возвращать, и генерировать области. ОФ третьего вида "используются при генерации областей": то есть они работают как параметры процесса генерации.


6.1.1 Определения, Общие для Многих ОФ

Эта категоризация ведёт к определению двух уточнений, характеризующих соотношение между областью и генерирующим и возвращающим её ОФ. Это уточнения generated-by и returned-by.

Значением уточнения generated-by является одиночный ОФ. ОФ F определён генерировать область A, если семантика F специфицирует генерацию одной или более области и A это одна из этих генерируемых областей или является замещаемой формой одной из этих генерируемых областей, как специфицировано в разделе [4.7.2 Конструирование Строк].

В случае с замещаемыми глиф-областями предполагается, что ОФ генерирует глиф-область, которая появляется первой в последовательности замещаемых глиф-областей.
В случае со вставляемой глиф-областью (например, автоматически генерируемый дефис переноса) предполагается, что ОФ генерирует последнюю глиф-область, предшествующую вставляемой глиф-области в предупорядоченном пересечении/pre-order traversal дерева областей.

Значением уточнения returned-by является набор из пар значений, где каждая пара состоит из ОФ и позитивного целого числа. Целое число представляет позицию области относительно порядка расположения всех областей, возвращаемых объектом форматирования.

ОФ F возвращает последовательность областей A, B, C, ... , если пара (F,1) является членом уточнения returned-by в A, пара (F,2) является членом уточнения returned-by в B, пара (F,3) является членом уточнения returned-by в C, ...

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

Набор узлов дерева является lineage/разбитым построчно, если:

  • в наборе имеется такой узел N, что все узлы набора являются предками N, и

  • для каждого узла N набора, если набор содержит предка N, узел также содержит родителя N.

Набор объектов форматирования, которыми была возвращена область, является lineage/разбитым построчно.

Области, возвращаемые объектом форматирования, могут быть normal/нормальными или out-of-line/внестрочными. Нормальные области представляют области "нормального потока текста"; то есть они становятся областями-потомками областей, сгенерированных ОФ, которому они возвращаются. Нормальные области имеют построчную разбивку returned-by размера 1. Существует только один тип нормальной области.

Области out-of-line это области, используемые вне нормального потока текста, или потому что они являются позиционированными абсолютно, или потому что являются частью поплавка или сноски. Области out-of-line могут иметь построчное выравнивание returned-by большего размера, чем 1.

Уточнение area-class/класс-области указывает, к какому классу - normal или out-of-line - принадлежит область. Для областей out-of-line оно обозначает также подкласс области out-of-line. Значениями этого уточнения могут быть: "xsl-normal", "xsl-absolute", "xsl-footnote", "xsl-side-float" или "xsl-before-float". Область является normal/нормальной, если, и только если, уточнение area-class имеет значение "xsl-normal"; в других случаях область является областью out-of-line. (См. раздел [4.2.5 Ограничения Стэкирования].)

Области, возвращаемые/returned-by данным ОФ, упорядочиваются так, как описано выше. Это упорядочивание определяет порядок субпоследовательности областей данного area-class, таких как субпоследовательность нормальных областей. Область A предшествует области B в субпоследовательности, если, и только если, область A предшествует области B среди областей, возвращаемых/returned-by объектами форматирования.

Цепь областей-ссылок/reference-area chain определена как последовательность областей-ссылок, сгенерированных одним ОФ, не являющимся ОФ последовательности страниц/page-sequence, или как состоящая из региона областей-ссылок или областей-ссылок-нормального-потока/normal-flow-reference-areas (см. [6.4.13 fo:region-body]), генерируемого с использованием ОФ региона, назначенных тому же самому потоку (см. [6.4.1.4 Потоки и Отображение Потоков]). Области-ссылки последовательности называются "содержащимися" в цепи областей-ссылок и имеют в последовательности тот же порядок расположения одна относительно другой, который они имеют в дереве областей, используя предупорядоченное пересечение дерева областей.


6.2 Содержимое Объекта Форматирования (Форматирующего Объекта)

Содержимое ОФ описано с использованием синтаксиса модели содержимого XML. В некоторых случаях дополнительные ограничения, не выражаемые в моделях содержимого XML, даются текстуально.

Экземпляр параметра "%block;" в моделях содержимого содержит следующие ОФ:

     block
     block-container
     table-and-caption
     table
     list-block

Экземпляр параметра "%inline;" в моделях содержимого содержит следующие ОФ:

     bidi-override
     character
     external-graphic
     instream-foreign-object
     inline
     inline-container
     leader
     page-number
     page-number-citation
     basic-link
     multi-toggle

Следующие ОФ являются  "нейтральными" контейнерами и могут использоваться, в предположении, что выдерживаются дополнительные ограничения, перечисленные в каждом ОФ, в любом месте, где допускаются #PCDATA, %block; или %inline;:

     multi-switch
     multi-properties
     wrapper
     retrieve-marker

Следующие ОФ "out-of-line" могут использоваться в любом месте, где допускаются #PCDATA, %block; или %inline; (но только не как потомки любых ОФ "out-of-line"):

     float

Следующие ОФ "out-of-line" могут использоваться в любом месте, где допускаются #PCDATA или %inline; (но только не как потомки любых ОФ "out-of-line"):

     footnote


6.3 Объекты Форматирования. Резюме.

basic-link

fo:basic-link используется для представления стартового ресурса простой ссылки.

bidi-override

Инлайн-ОФ fo:bidi-override используется там, где необходимо обойти направление по умолчанию алгоритма Unicode-bidirectional для различных (или вложенных) инлайн-скриптов в документах смешанных языков.

block

ОФ fo:block обычно используется при форматировании параграфов, заголовков, названий рисунков и таблиц и т.п.

block-container

Объект потока fo:block-container используется для генерации области-ссылки уровня блока.

character

Объект потока fo:character представляет символ, отображаемый в глиф для презентации.

color-profile

Используется для объявления профиля цвета для таблицы стилей.

conditional-page-master-reference

ОФ fo:conditional-page-master-reference используется для идентификации мастер-страницы/page-master, используемой тогда, когда соблюдены условия её использования.

declarations

Используется для глобальных объявлений в таблице стилей.

external-graphic

Объект потока fo:external-graphic используется для графики в тех случаях, когда графические данные находятся вне результирующего дерева XML в пространстве имён fo.

float

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

flow

Содержимое ОФ fo:flow это последовательность всплывающих объектов (поплавков), представляющая всплывающее текстовое содержимое, распределённое по страницам.

footnote

fo:footnote используется для производства цитирования и сносок.

footnote-body

fo:footnote-body используется для генерации содержимого сноски.

initial-property-set

fo:initial-property-set специфицирует свойства форматирования для первой строки в fo:block.

inline

ОФ fo:inline обычно используется для форматирования участка текста с фоном или в рамке.

inline-container

Поплавок fo:inline-container используется для генерации ссылочной инлайн-области.

instream-foreign-object

Объект-поплавок fo:instream-foreign-object используется для инлайн-графики или другого "общего/generic" объекта, где данные объекта расположены как потомки fo:instream-foreign-object.

layout-master-set

fo:layout-master-set это оболочка для всех мастеров, используемых в документе.

leader

ОФ fo:leader используется для генерации заполнителей/leaders, состоящих из линейки или ряда повторяющихся символов или циклически повторяющегося патэрна символов, которые могут использоваться для соединения двух текстовых ОФ.

list-block

Поплавок fo:list-block используется при форматировании списка.

list-item

ОФ fo:list-item содержит лэйбл и тело элемента списка.

list-item-body

ОФ fo:list-item-body - это содержимое тела list-item.

list-item-label

ОФ fo:list-item-label - это содержимое лэйбла для list-item; обычно используется для нумерации, идентификации или украшения тела list-item.

marker

fo:marker используется в сочетании с fo:retrieve-marker для создания фиксированных "шапок" и футеров.

multi-case

fo:multi-case используется как контейнер (внутри fo:multi-switch) каждого альтернативного поддерева объектов форматирования, из которых родительский fo:multi-switch выберет один для показа и скроет все остальные.

multi-properties

fo:multi-properties используется для переключения между двумя или более наборами свойств, ассоциированными с данной частью содержимого.

multi-property-set

fo:multi-property-set используется для специфицирования альтернативного набора свойств форматирования, которые, в зависимости от статуса пользовательского агента (ПА), применяются к содержимому.

multi-switch

fo:multi-switch служит оболочкой спецификации альтернативных поддеревьев ОФ (каждое из поддеревьев - внутри fo:multi-case) и управляет переключением альтернатив (активируемым посредством fo:multi-toggle).

multi-toggle

fo:multi-toggle используется внутри fo:multi-case для переключения на другой fo:multi-case.

page-number

ОФ fo:page-number используется для представления номера текущей страницы.

page-number-citation

fo:page-number-citation используется для ссылки на номер страницы для страницы, содержащей первую нормальную область, возвращаемую цитируемым ОФ.

page-sequence

ОФ fo:page-sequence используется для спецификации того, как создавать (суб-)последовательность страниц внутри документа; например, главу репортажа. Содержимое этих страниц получается из потомков поплавков от fo:page-sequence.

page-sequence-master

fo:page-sequence-master специфицирует последовательности страниц-мастеров, используемых для генерации последовательностей страниц.

region-after

Этот регион определяет порт просмотра, размещённый на стороне "after" региона fo:region-body.

region-before

Этот регион определяет порт просмотра, размещённый на стороне "before" региона fo:region-body.

region-body

Этот регион определяет пару порт просмотра/ссылка, размещённую "center" в fo:simple-page-master.

region-end

Этот регион определяет порт просмотра, размещённый на стороне "end" тела региона fo:region-body.

region-start

Этот регион определяет порт просмотра, размещённый на стороне "start" тела региона fo:region-body.

repeatable-page-master-alternatives

fo:repeatable-page-master-alternatives специфицирует субпоследовательность, состоящую из повторяющихся экземпляров поднабора альтернативных мастер-страниц. Количество повторений может быть ограниченным или потенциально неограниченным.

repeatable-page-master-reference

fo:repeatable-page-master-reference специфицирует субпоследовательность, состоящую из повторяющихся экземпляров одной мастер-страницы. Количество повторений может быть ограниченным или потенциально неограниченным.

retrieve-marker

 fo:retrieve-marker используется в сочетании с fo:marker при создании бегущих "шапок" и футеров.

root

Узел fo:root это корневой верхний узел результирующего дерева XSL. Это дерево состоит из ОФ.

simple-page-master

fo:simple-page-master используется для генерации страниц и специфицирует геометрию страницы. Страница может быть подразделена на несколько регионов (до5).

single-page-master-reference

fo:single-page-master-reference специфицирует субпоследовательность, состоящую из одного экземпляра одной мастер-страницы.

static-content

ОФ fo:static-content содержит последовательность или дерево ОФ, которые существуют в одном регионе или повторяются в одинаково называющихся регионах на одной или более страницах в последовательности страниц. Чаще всего используется для создания повторяющихся или "бегущих" шапок и футеров.

table

Объект потока fo:table используется для форматирования табличного материала.

table-and-caption

Объект потока fo:table-and-caption используется для форматирования таблицы с заголовком.

table-body

ОФ fo:table-body имеет в качестве содержимого тело таблицы.

table-caption

ОФ fo:table-caption используется в качестве контейнера ОФ блок-уровня и содержит заголовок таблицы только тогда, когда используется fo:table-and-caption.

table-cell

ОФ fo:table-cell используется для группирования содержимого, размещая его в ячейке таблицы.

table-column

ОФ fo:table-column специфицирует характеристики ячеек таблицы, находящихся в одном столбце и имеющих общий захват/span.

table-footer

ОФ fo:table-footer используется как контейнер содержимого футера таблицы.

table-header

ОФ fo:table-header используется как контейнер содержимого "шапки"/header таблицы.

table-row

ОФ fo:table-row используется для группирования ячеек таблицы в ряды.

title

ОФ fo:title используется для ассоциирования заголовка с данной последовательностью страниц. Этот заголовок может использоваться интерактивным пользовательским агентом для идентификации страниц. Например, содержимое fo:title может быть отформатировано и отображено в окне "title" или в "tool tip".

wrapper

ОФ fo:wrapper используется для специфицирования наследуемых свойств для группы ОФ. Он не имеет дополнительной семантики форматирования.



6.4 Объявление и Разбивка на Страницы и Структура Объектов Форматирования

6.4.1 Введение

Корневой узел дерева объектов форматирования обязан быть ОФ fo:root. Потомками ОФ fo:root являются отдельные fo:layout-master-set, необязательные fo:declarations и последовательность из одного или более fo:page-sequences. ОФ fo:layout-master-set определяет геометрию и последовательность страниц; дочерние fo:page-sequences, называемые потоками/flows (содержащимися в fo:flow и fo:static-content), предоставляют содержимое, распределяемое по страницам. Объект fo:declarations является оболочкой для объектов форматирования, чьё содержимое используется в качестве ресурса процесса форматирования. Процесс генерации страниц выполняется автоматически процессором XSL, форматирующим результирующее дерево.

Потомки fo:layout-master-set являются спецификациями разбивки на страницы и структуры. Имена этих спецификаций оканчиваются на "-master". Есть два типа спецификаций разбивки на страницы и структуры: мастер-страницы/page-masters и мастер-последовательности-страниц/page-sequence-masters. Мастер-страницы описывают предполагаемое подразделение страницы и геометрию этого подразделения. Мастера-последовательности-страниц описывают последовательность мастер-страниц, используемых для генерации страниц в ходе форматирования fo:page-sequence.


6.4.1.1 Мастера-последовательности-страниц

Каждый fo:page-sequence-master характеризует набор возможных последовательностей мастер-страниц. Для каждого данного fo:page-sequence будет использоваться только один из возможных наборов последовательностей. Используемая последовательность - это любая последовательность, удовлетворяющая ограничениям, определяемым отдельными мастер-страницами, потоками, генерирующими страницы на основе мастер-страниц и самим fo:page-sequence-master.

fo:page-sequence-master используется для определения того, какие мастер-страницы используются и в каком порядке. Потомки fo:page-sequence-master это последовательность спецификаций субпоследовательностей. Мастер-страницы в субпоследовательности могут быть специфицированы ссылкой на одну мастер-страницу или как повторение одной или более мастер-страниц. Например, последовательность может начинаться несколькими явно определёнными мастер-страницами и продолжаться повторением какой-то другой мастер-страницы (или нескольких).

fo:single-page-master-reference используется для специфицирования субпоследовательности, состоящей из одной мастер-страницы.

Есть два способа специфицировать последовательность-повторение. fo:repeatable-page-master-reference специфицирует повторение одной мастер-страницы. fo:repeatable-page-master-alternatives специфицирует повторение набора мастер-страниц. То, какая из альтернативных мастер-страниц используется в данном месте субпоследовательности обусловлено тем, чётный или нечётный номер имеет страница, первая ли это страница, последняя ли, или она пустая. Свойство "maximum-repeats" в спецификации повторений управляет числом повторений. Если это свойство не специфицировано, ограничение на количество повторений отсутствует.


6.4.1.2 Мастер-страницы

Мастер-страница это шаблон, используемый при генерации страницы. Страница это пара "порт просмотра/ссылка", в которой область порта просмотра является потомком области корня дерева.
Область-порта-просмотра/page-viewport-area определена как порт просмотра страницы, а область -страницы/page-area определена как единственный потомок от page-viewport-area.

page-viewport-area определяется носителем вывода; page-area содержит содержимое страницы и размещает содержимое страницы в носителе вывода.

Одна мастер-страница может использоваться неоднократно. Каждый раз, когда она используется, она генерирует одну страницу; например, мастер-страница, на которую имеется ссылка из fo:repeatable-page-master-reference, будет использована в fo:page-sequence для генерации одной страницы для каждого вхождения ссылки в специфицированной субпоследовательности.

ПРИМЕЧАНИЕ:

Если страницы используются Пользовательским Агентом (ПА), таким как Web-браузер, то обычно каждый документ имеет одну страницу. Порт просмотра, используемый для просмотра страницы, определяет её размер. Когда страницы размещаются на неинтерактивном носителе, таком как лист бумаги, страницы соответствуют одному или более листам бумаги. Размер бумаги определяет размер страницы.

В данной спецификации имеется только один вид мастер-страниц - fo:simple-page-master. В будущих версиях данной спецификации могут быть введены дополнительные виды мастер-страниц.

fo:simple-page-master имеет в качестве потомков спецификации одного или более регионов.

Спецификация региона используется как мастер, мастер-регион/region-master, при генерации пары порт-просмотра/ссылка, состоящей из region-viewport-area и region-reference-area. region-viewport-area всегда является потомком page-area, генерируемой с использованием предка region-master'а.

ПРИМЕЧАНИЕ:

Регионы страницы аналогичны "фрэймам" в документах HTML. Обычно как минимум один из этих регионов имеет бесконечный размер по одному из своих параметров. Для языков с режимом письма lr-tb (или rl-tb) этот регион обычно имеет бесконечный размер в направлении сверху-вниз. Порт просмотра представляет видимую часть фрэйма. Поток, назначенный региону, просматривается путём прокрутки reference-area региона в порте просмотра.

Каждый регион определяется ОФ региона. Каждый ОФ региона имеет имя и определённую позицию. Кроме того, высота или ширина региона фиксирована, а другие размеры могут быть фиксированными или бесконечными. Например, регион - тело Web-страницы может иметь бесконечную высоту.

Спецификация региона определяет размер и положение областей region-viewport-areas, генерируемых с использованием ОФ региона. Положение порта просмотра является относительным к его родительской page-area.

В версии 1.0 данных Рекомендаций мастер-страница состоит из не более чем пяти регионов: "region-body" и четырёх других регионов, по одному с каждой стороны тела/body. Для того чтобы регионы по сторонам соответствовали текущему режиму письма, эти регионы именуются "region-before/регион-до" (соотносимый с "header" в режиме письма "lr-tb"), "region-after/регион-после" (соотносимый с "footer" в режиме "lr-tb"), "region-start" (соотносимый с "left-sidebar" в режиме "lr-tb") и "region-end" (соотносимый с "right-sidebar" в режиме "lr-tb"). Ожидается, что в будущих версиях Рекомендаций будет введён механизм, позволяющий мастер-странице содержать произвольное количество произвольно позиционированных регионов произвольных размеров.

Некоторые типы регионов имеют обусловленные субрегионы, ассоциированные с ними, и ассоциированные области region-reference-areas делятся так, чтобы содержать области-потомки, соответствующие субрегионам, включая "main-reference-area" для региона.
В мастер-регионах, к которым применяется свойство column-count, область main-reference-area затем подразделяется так, что имеет области-потомки, обозначаемые как "span-reference-areas", количество которых зависит от количества захватов/spans (т.е. блок-областей с span="all"), имеющихся на странице. Они, в свою очередь, подразделяются так, чтобы иметь области-потомки, обозначаемые как "normal-flow-reference-areas", количество которых зависит от количества специфицированных столбцов.


6.4.1.3 Генерация Страницы

Страницы генерируются при обработке форматировщиком последовательностей fo:page-sequences. Как уже было сказано, каждая страница - это пара порт-просмотра/ссылка, где область порта просмотра является потомком корня дерева областей. Каждая страница генерируется с использованием мастер-страницы, чтобы определить области region-viewport-areas и region-reference-areas, соответствующие регионам, специфицированным этой мастер-страницей.

Каждый ОФ fo:page-sequence ссылается или на fo:page-sequence-master, или на мастер-страницу. Если ссылка делается на мастер-страницу, это интерпретируется так, как если бы имелась ссылка на fo:page-sequence-master, повторяющий эту мастер-страницу неограниченное число раз.
fo:page-sequence ссылается на мастер-страницу, если fo:page-sequence прямо ссылается на мастер-страницу через свойство "master-reference", или если это свойство ссылается на fo:page-sequence-master, который ссылается на мастер-страницу.


6.4.1.4 Потоки

Имеются два типа потоков/flows: fo:static-content и fo:flow. Поток fo:static-content несёт в себе содержимое, такое как текст шапок и футеров, повторяющееся на большинстве страниц. Поток fo:flow несёт в себе содержимое, распределяемое в последовательности страниц. Обработка потока fo:flow состоит в том, чтобы определить, сколько страниц генерируется для вмещения fo:page-sequence.
fo:page-sequence-master используется в качестве генератора последовательности мастер-страниц, в которых будет распределяться содержимое потоков потомков.

Потомки потока это последовательность объектов блок-уровня. Каждый поток имеет имя, заданное в его свойстве "flow-name". Два потока не могут иметь одинаковые имена.

Назначение потоков регионам мастер-страницы определяется отображением-потоков/flow-map. flow-map это ассоциация между потомком потока fo:page-sequence и регионами, определёнными внутри мастер-страниц, на которые ссылается этот fo:page-sequence.

В версии 1.0 данных Рекомендаций flow-map подразумевается. Свойство "flow-name" потока специфицирует, какому региону данный поток назначен. Каждый регион имеет свойство "region-name". Неявное flow-map назначает поток региону с тем же именем. В будущих версиях XSL ожидается, что отображение flow-map станет отдельным ОФ.

Чтобы избавить пользователей от необходимости генерировать имена регионов, все регионы имеют значения по умолчанию для свойства "region-name".
region-body, region-before, region-after, region-start и region-end имеют имена по умолчанию "xsl-region-body", "xsl-region-before", "xsl-region-after", "xsl-region-start" и "xsl-region-end".

Кроме того, ОФ fo:static-content может иметь значение свойства "flow-name" - "xsl-before-float-separator" или "xsl-footnote-separator". Если обусловленный субрегион в region-body используется для генерации reference-area на определённой странице, fo:static-content, чьё имя соответствует обусловленному субрегиону, будет форматироваться в reference-area, ассоциированную с  этим субрегионом, как специфицировано в разделе [6.10.1.3 Обусловленные Субрегионы].


6.4.1.5 Ограничения при Генерации Страницы

Области, являющиеся потомками page-area, содержатся в мастер-странице, используемой для генерации page-area и потоков, назначаемых регионам, специфицированным в мастер-странице. Для потоков fo:flow, области, генерируемые потомками потока, распределяются на страницы в той последовательности, которая была сгенерирована с использованием мастер-страниц, имеющих регион, которому назначен это поток.
Для потоков fo:static-content процесс обработки повторяется для каждой страницы, генерируемой с использованием мастер-страницы, имеющей регион, которому назначен этот поток, с двумя исключениями: для fo:static-content с именем-потока/flow-name  xsl-before-float-separator обработка повторяется только для тех областей page-reference-areas, которые имеют области-потомки с классом area-class  xsl-before-float, а для fo:static-content с flow-name  xsl-footnote-separator обработка повторяется только для тех областей page-reference-areas, которые имеют области-потомки с классом area-class  xsl-footnote.


6.4.1.6 Разбивка по Страницам Структуры Дерева

Структура результирующего дерева изображена ниже.


6.4.2 fo:root

Обычное Использование:

Это верхний узел дерева объектов форматирования. Он содержит ОФ fo:layout-master-set (который содержит все мастера, используемые в документе), необязательные fo:declarations и один или несколько объектов fo:page-sequence. Каждый fo:page-sequence представляет последовательность страниц, являющуюся результатом форматирования потомков содержимого fo:page-sequence.

ПРИМЕЧАНИЕ:

Документ может содержать несколько fo:page-sequence. Например, каждая глава документа может быть отдельным fo:page-sequence; это позволит иметь специфическое для каждой главы содержимое, такое как название главы, размещаемое в шапке или футере.

Области:

Области page-viewport-areas возвращаются объектами fo:page-sequence - потомками ОФ fo:root.
fo:root не генерирует никаких областей.

Ограничения:

Потомки корня дерева областей являются исключительно областями page-viewport-areas, возвращаемыми fo:page-sequence - потомками fo:root. Набор всех областей, возвращаемый объекту потомками fo:page-sequence, является правильно упорядоченным. (См. раздел [4.7.1 Общие Ограничения Упорядочивания].)

Содержимое:

(layout-master-set,declarations?,page-sequence+)

Следующие свойства применяются к данному ОФ:


6.4.3 fo:declarations

Обычное Использование:

ОФ fo:declarations используется для группирования глобальных объявлений в таблице стилей.

Области:

ОФ fo:declarations не генерирует и не возвращает никаких областей.

Ограничения:

Отсутствуют.

Содержимое:

(color-profile)+

Объект потока fo:declarations может иметь дополнительные элементы-потомки в не-XSL пространстве имён. Их наличие, однако, не изменяет семантики объектов и свойств пространства имён XSL. Разрешённая структура этих элементов из не-XSL пространства имён определена для их пространства(-в) имён.


6.4.4 fo:color-profile

Обычное Использование:

ОФ fo:color-profile используется для объявления ICC Color Profile/Цветового Профиля таблицы стилей.
На color-profile ссылка делается по имени, специфицированному в свойстве "color-profile-name".

color-profile идентифицируется по URI, специфицированному в значении свойства "src". Этот URI может идентифицировать внутренне распознаваемый color-profile или может указывать на кодировку ICC Color Profile, которая должна быть загружена и интерпретирована.

Если на color-profile сделана ссылка (например, в функции rgb-icc [5.10.2 Функции Цвета]), применяются следующие правила:

  • Если color-profile доступен, должно использоваться значение, идентифицируемой из color-profile.

  • Если color-profile недоступен, должно использоваться sRGB ([sRGB]).

  • Области:

    ОФ fo:color-profile  не генерирует и не возвращает никаких областей.

    Ограничения:

    Отсутствуют.

    Содержимое:

    EMPTY
    

    Следующие свойства применяются к данному ОФ:


    6.4.5 fo:page-sequence

    Обычное Использование:

    ОФ fo:page-sequence используется для спецификации создания (суб-)последовательности страниц внутри документа: например, главы репортажа. Содержимое этих страниц получается из потомков потока (состоящих из объектов потока: одного fo:flow и любого количества fo:static-content) fo:page-sequence. Структура этих страниц получается из fo:page-sequence-master или page-master, на которые ссылается уточнение master-reference в fo:page-sequence. Последовательности областей, возвращаемых каждым объектом потока - потомком fo:page-sequence, становятся потомками генерируемых страниц, как описано далее.

    Области:

    ОФ fo:page-sequence генерирует последовательность пар viewport/reference и возвращает области page-viewport-area. Для каждой области page-reference-area и каждого региона, специфицированного в мастер-странице, используемой для генерации этих page-reference-area, объект fo:page-sequence генерирует также пары viewport/reference для вхождения этого региона в этой области page-reference-area и может генерировать области before-float-reference-area, footnote-reference-area и main-reference-area и одну или более областей normal-sequence-reference-area. Генерация этих последующих областей дана в описаниях мастеров fo:simple-page-master и мастер-регионов. Он может генерировать также область-заголовка/title-area.

    Все области, генерируемые fo:page-sequence, имеют класс области "xsl-absolute".

    Ограничения:

    Каждая пара page-viewport-area/page-reference-area генерируется с использованием мастер-страницы, удовлетворяющей ограничениям page-sequence-master, идентифицируемого уточнением master-reference для fo:page-sequence, или с использованием мастер-страницы,  которая прямо идентифицируется уточнением master-reference. Области region-viewport-area, потомки такой области page-reference-area, обязаны соответствовать регионам, которые являются потомками данной мастер-страницы.

    Области, генерируемые fo:page-sequence, имеют в качестве своих потомков области, возвращаемые потоками, которые являются потомками fo:page-sequence.

    Области, возвращаемые объекту fo:page-sequence потоком, обязаны удовлетворять 4 типам ограничений:

    • Completeness\Завершённость. Все области, возвращаемые потомками дочерних потоков объекта fo:page-sequence, становятся потомками областей, генерируемых объектом fo:page-sequence, за исключением глиф-областей, подлежащих удалению или замещению, как описано в разделах [4.7.2 Конструирование Строк] и [4.7.3 Инлайн-Конструирование].

    • Flow-map association\Ассоциирование с отображением потока. Все области, возвращаемые потоками-потомками объекта fo:page-sequence, становятся потомками областей region-reference-area, генерируемых из областей column-area, ассоциированных с потоком действующим отображением потока/flow-map, за исключением областей, возвращаемых из объекта fo:static-content с именем-потока/flow-name  xsl-before-float-separator или xsl-footnote-separator.

      Области, возвращаемые из fo:static-content с flow-name  xsl-before-float-separator, становятся дочерними для области before-float-reference-area области, ассоциированной с fo:region-body, следующей после всех областей-родственников, имеющих класс области xsl-before-float.
      Области, возвращаемые из fo:static-content с flow-name xsl-footnote-separator, становятся дочерними для области footnote-reference-area области, ассоциированной с fo:region-body, предшествующей всем областям-родственникам, имеющим класс области xsl-footnote.

    • Area-class association\Ассоциация с классом области. Области, возвращаемые потомками потока объекта fo:page-sequence, распределяются так: все области класса области xsl-footnote обязаны быть потомками области footnote-reference-area; области класса области xsl-before-float обязаны быть потомками области before-float-reference-area; все другие области (включая нормальные области) обязаны быть потомками области main-reference-area в регионе.

    • Stacking\Стэкирование (Упаковка). Упаковываемые области данного класса, возвращаемые потомками каждого потока, соответствующим образом стэкируются в подходящей области reference-area, как описано выше.

    Если генерируется title-area, то должны выполняться следующие ограничения:

    • Завершённость. Все области, возвращаемые потомками объекта fo:title, потомка объекта fo:page-sequence, становятся потомками области title-area, генерируемой объектом fo:page-sequence, за исключением глиф-областей, подлежащих удалению или замещению, как описано в разделах [4.7.2 Конструирование Строк] и [4.7.3 Инлайн-Конструирование].

    • Стэкирование. Области, возвращаемые потомками объекта fo:title, соответствующим образом стэкируются в title-area.

    Ограничение упорядочивания по умолчанию из раздела [4.7.1 Общие Ограничения Упорядочивания] не применяется к fo:page-sequence. Ограничения упорядочивания по умолчанию применяются к объектам-потокам потока внутри отдельного fo:flow; специальные ограничения упорядочивания применяются к объектам - потомкам fo:static-content.

    Содержимое:

    (title?,static-content*,flow)
    

    Следующие свойства применяются к данному ОФ:


    6.4.6 fo:layout-master-set

    Обычное Использование:

    fo:layout-master-set является оболочкой вокруг всех мастеров, используемых в документе. Сюда входят мастера page-sequence-master, мастер-страницы, мастер-регионы.

    Области:

    ОФ fo:layout-master-set не генерирует области непосредственно. Для генерации страниц fo:page-sequence использует мастера - потомки набора fo:layout-master-set.

    Ограничения:

    Значение уточнения master-name/мастер-имя в каждом потомке набора fo:layout-master-set обязано быть уникальным в пределах данного набора.

    Содержимое:

    (simple-page-master|page-sequence-master)+
    


    6.4.7 fo:page-sequence-master

    Обычное Использование:

    fo:page-sequence-master используется для специфицирования ограничений и порядка, в котором данный набор мастер-страниц будет использоваться при генерации последовательности страниц. Страницы автоматически генерируются, когда fo:page-sequence-master используется при форматировании fo:page-sequence.

    ПРИМЕЧАНИЕ:

    Есть несколько способов специфицирования потенциальную последовательность страниц.
    Можно специфицировать последовательность ссылок на определённые мастер-страницы. Это даёт ограниченную последовательность потенциальных страниц.
    Можно также специфицировать повторяющуюся субпоследовательность из одной или более мастер-страниц. Эта последовательность может быть ограниченной или неограниченной.
    Наконец, можно смешивать эти два типа спецификаторов субпоследовательностей.

    Области:

    ОФ fo:page-sequence-master не генерирует области непосредственно. Он используется объектом форматирования fo:page-sequence для генерации страниц.

    Ограничения:

    Потомки мастера fo:page-sequence-master это последовательности спецификаторов субпоследовательностей. Последовательность страниц удовлетворяет ограничению, определённому мастером fo:page-sequence-master, если:
    (a) она может быть поделена на последовательность субпоследовательностей страниц, которая отображается один к одному в начальную субпоследовательность последовательности спецификаторов субпоследовательности, являющихся потомками мастера fo:page-sequence-master, и
    (b) для каждой субпоследовательности страниц в разделе/partition, эта субпоследовательность удовлетворяет ограничениям соответствующих спецификаторов субпоследовательностей.
    Последовательность субпоследовательностей страниц может быть короче, чем последовательность спецификаторов субпоследовательностей.

    Будет считаться ошибкой, если вся последовательность потомков спецификаторов субпоследовательностей будет исчерпана, а некоторые области, возвращённые fo:flow, ещё не размещены. В реализациях данная ситуация может обрабатываться путём повторного использования спецификатора субпоследовательности, использованного при последней генерации страницы.

    Содержимое:

    (single-page-master-reference|repeatable-page-master-reference|repeatable-page-master-alternatives)+
    

    Следующее свойство применяется к данному ОФ:


    6.4.8 fo:single-page-master-reference

    Обычное Использование:

    fo:single-page-master-reference это простейший спецификатор субпоследовательности. Он специфицирует субпоследовательность, состоящую из одного экземпляра мастер-страницы. Специфицирует использование определённой мастер-страницы в данной точке последовательности страниц, которая может генерироваться с использованием мастера fo:page-sequence-master, являющегося родителем мастера fo:single-page-master-reference.

    Области:

    ОФ fo:single-page-master-reference не генерирует области непосредственно. Он используется объектом форматирования fo:page-sequence для генерации страниц.

    Ограничения:

    fo:single-page-master-reference содержит ссылку на мастер fo:simple-page-master, имеющий то же мастер-имя/master-name, что и уточнение master-reference в fo:single-page-master-reference.

    Субпоследовательность страниц, отображаемая в этот спецификатор субпоследовательности, удовлетворяет ограничениям данного спецификатора субпоследовательности, если
    (a) субпоследовательность страниц состоит из одной страницы, и
    (b) эта страница ограничена как генерируемая с использованием мастера fo:simple-page-master, на который есть ссылка в fo:single-page-master-reference.

    Содержимое:

    EMPTY
    

    Следующее свойство применяется к данному ОФ:


    6.4.9 fo:repeatable-page-master-reference

    Обычное Использование:

    fo:repeatable-page-master-reference это следующий простейший спецификатор субпоследовательности. Он специфицирует субпоследовательность, состоящую из повторяющихся экземпляров одной мастер-страницы. Количество повторений может быть ограниченным или потенциально неограниченным.

    Области:

    ОФ fo:repeatable-page-master-reference не генерирует области непосредственно. Он используется объектом форматирования fo:page-sequence для генерации страниц.

    Ограничения:

    fo:repeatable-page-master-reference содержит ссылку на мастер fo:simple-page-master, имеющий то же мастер-имя/master-name, что и уточнение master-reference в fo:repeatable-page-master-reference.

    Субпоследовательность страниц, отображаемая в этот спецификатор субпоследовательности, удовлетворяет ограничениям данного спецификатора субпоследовательности, если
    (a) субпоследовательность страниц состоит из нуля или более страниц,
    (b) каждая страница генерируется с использованием мастера fo:simple-page-master, на который имеется ссылка в fo:repeatable-page-master-reference, и
    (c) размер последовательности меньше чем или равен значению maximum-repeats/максимального количества повторений.

    Если ни один мастер-регион, потомок fo:repeatable-page-master, не имеет имени региона/region-name, ассоциированного с каким либо потоком в последовательности fo:page-sequence, тогда субпоследовательность ограничивается как имеющая нулевую длину.

    Содержимое:

    EMPTY
    

    Следующие свойства применяются к данному ОФ:


    6.4.10 fo:repeatable-page-master-alternatives

    Обычное Использование:

    ОФ fo:repeatable-page-master-alternatives является самым сложным спецификатором субпоследовательности. Он специфицирует субпоследовательность, состоящую из повторяющихся экземпляров набора альтернативных мастер-страниц. Количество повторений может быть ограниченным или потенциально неограниченным. То, какая из альтернативных мастер-страниц используется в любой точке последовательности, зависит от вычисления условия при использовании альтернативы. Обычно условия тестируют, является ли генерируемая с использованием альтернативы страница первой или последней страницей в последовательности страниц и пустая ли это страница. Полный набор условий позволяет использовать различные мастер-страницы для первой, чётных и нечётных и пустых страниц.

    ПРИМЕЧАНИЕ:

    Поскольку условия тестируются от начала последовательности потомков, последняя альтернатива в последовательности обычно имеет условие, которое всегда верно, и эта альтернатива ссылается на мастер-страницу, которая используется для всех страниц, не получающих какой-либо специализированной структуры вывода.

    Области:

    ОФ fo:repeatable-page-master-alternatives не генерирует области непосредственно. Он используется объектом форматирования fo:page-sequence для генерации страниц.

    Ограничения:

    Потомками fo:repeatable-page-master-alternatives являются объекты fo:conditional-page-master-reference. Эти потомки будут называться альтернативами.

    Субпоследовательность страниц, отображаемая в этот спецификатор субпоследовательности, удовлетворяет ограничениям этого спецификатора субпоследовательности, если
    (a) субпоследовательность страниц состоит из 0 или более станиц,
    (b) каждая страница генерируется с использованием fo:simple-page-master и имеет на себя ссылку одной из альтернатив, которые являются потомками объектов fo:repeatable-page-master-alternative,
    (c) условия в данной альтернативе имеют значение true,
    (d) эта альтернатива является первой альтернативой последовательности потомков, для которой все условия - true, и
    (e) размер субпоследовательности меньше чем или равен значению maximum-repeats/максимального-количества-повторений.

    Содержимое:

    (conditional-page-master-reference+)
    

    Следующие свойства применяются к данному ОФ:

    6.4.11 fo:conditional-page-master-reference

    Обычное Использование:

    fo:conditional-page-master-reference используется для идентификации мастер-страницы, которая используется тогда, когда выполняются условия её использования. Это позволяет использовать разные мастер-страницы, например, для чётных и нечётных страниц, для первой страницы последовательности страниц или для пустых страниц. Такое использование типично для глав книги или доклада, где первая страница имеет другую структуру и шапки и футеры могут также различаться.

    Области:

    ОФ fo:conditional-page-master-reference не генерирует области непосредственно. Он используется объектом форматирования fo:page-sequence для генерации страниц.

    Ограничения:

    fo:conditional-page-master-reference содержит ссылку на fo:simple-page-master, который имеет то же мастер-имя, что и уточнение master-reference в fo:conditional-page-master-reference.

    Имеется три уточнения - page-position, odd-or-even и blank-or-not-blank - специфицирующие подусловия при использовании на ссылаемую мастер-страницу. Все три подусловия обязаны быть true, чтобы условие в fo:conditional-page-master-reference было true. Поскольку свойства, из которых выводятся эти уточнения, не наследуются и начальное значение всех свойств делает соответствующее подусловие true, это на практике означает, что поднабор уточнений, выводимых из свойств со специфицированным значением, обязан делать соответствующее подусловие true.

    Подусловие, соответствующее уточнению page-position, является true, если страница, сгенерированная с использованием fo:conditional-page-master-reference, имеет специфицированную позицию в последовательности страниц, генерируемых ссылающейся последовательностью страниц, именующихся "first", "last", "rest" (не первая и не последняя) или "any" (все предыдущие). Ссылающаяся последовательность страниц/page-sequence это fo:page-sequence, имеющая ссылку на fo:page-sequence-master, потомком  которого является fo:conditional-page-master-reference.

    Подусловие, соответствующее уточнению odd-or-even, является true, если значением уточнения odd-or-even является "any" или если это значение имеет чётность номера страницы, генерируемой с использованием fo:conditional-page-master-reference.

    Подусловие, соответствующее уточнению blank-or-not-blank, является true, если
    (1) значение уточнения является "непустым/not-blank" и станица, сгенерированная с использованием объекта fo:conditional-page-master-reference, имеет области, генерируемые потомками ОФ fo:flow; если
    (2) значение уточнения является "пустым/blank" и страница, сгенерированная с использование fo:conditional-page-master-reference, такова, что отсутствуют области из fo:flow, помещённые на этой странице (чтобы, например, (a) поддерживать соответствующую чётность страниц при (i) значении break-after или break-before - "even-page" или "odd-page" или (ii) в начале или в конце последовательности страниц, или (b), поскольку ограничения областей, сгенерированных потомками ОФ fo:flow, не будут выполнены, если они (области) будут являться потомками с этой страницы; или если
    (3) значением уточнения является "any".

    ПРИМЕЧАНИЕ:

    Если любая мастер-страница, на которую имеется ссылка из conditional-page-master-reference/ссылки-условной-мастер-страницы с blank-or-not-blank="true", предоставляет регион для размещения содержимого fo:flow, то никакое содержимое не помещается в этот регион.

    Содержимое:

    EMPTY
    

    Следующие свойства применяются к данному ОФ:

    6.4.12 fo:simple-page-master

    Обычное Использование:

    fo:simple-page-master используется при генерации страниц и специфицирует геометрию страницы. Страница может подразделяться на регионы (до пяти): region-body, region-before, region-after, region-start и region-end.

    ПРИМЕЧАНИЕ:

    Например, если режим письма fo:simple-page-master установлен в "lr-tb", тогда регионы, соответствующие телу документа: шапка/header, футер/footer, левая полоса/left sidebar и правая полоса/right sidebar.

    ПРИМЕЧАНИЕ:

    Простая мастер-страница/simple-page-master предназначена для систем, предоставляющих возможность создания страниц с упрощённой структурой. Будущие версии данных Рекомендаций будут поддерживать более сложные структуры страницы, создаваемые с помощью ОФ fo:page-master.

    Области:

    ОФ fo:simple-page-master не генерирует области непосредственно. Он используется объектом форматирования fo:page-sequence для генерации страниц.

    Когда fo:simple-page-master используется для генерации страницы, генерируется пара порт-просмотра/ссылка, состоящая из области порта просмотра и области ссылки на страницу. Область порта просмотра/page-viewport-представляет физические границы носителя вывода. Область ссылки на страницу/page-reference-area представляет часть страницы, на которой предполагается разместить содержимое; то есть область в рамках полей страницы.

    Кроме того, если fo:simple-page-master используется для генерации страницы, пары порт/ссылка, соответствующие регионам, являющимся потомками объекта fo:simple-page-master, также генерируются. (См. детальную информацию о генерации областей в спецификации ОФ для этих пяти регионов ([6.4.13 fo:region-body], [6.4.14 fo:region-before], [6.4.15 fo:region-after], [6.4.16 fo:region-start] и [6.4.17 fo:region-end]).)


    Области порта просмотра региона/Region-viewport-areas

    Пространство между внешним краем четырёх регионов и fo:region-body определяется путём вычитания соответствующего уточнения расширения для каждого края региона из свойств "margin-x" объекта fo:region-body.

    Получение Уточнения:

    В версии 1.0 данных Рекомендаций рамки и заполнение не допускаются для области-ссылки-на-страницу/page-reference-area. Остальные уточнения для page-reference-area устанавливаются в соответствии с нормальными правилами определения значений уточнений.

    Ограничения:

    Если при генерации страницы используется мастер-страница, block-progression-dimension/размер-блок-прогрессии и inline-progression-dimension/размер-инлайн-прогрессии прямоугольника содержимого области порта просмотра определяются с использованием вычисленных значений свойств "page-height" и "page-width".

    Уточнения, полученные из свойств полей, определяют размер и положение прямоугольника содержимого области порта просмотра. Уточнения, получаемые из свойств "margin-top", "margin-bottom", "margin-left" и "margin-right", используются для установки отступов прямоугольника содержимого области page-reference от соответствующих краёв прямоугольника содержимого области порта просмотра. Здесь "top", "bottom", "left" и "right" определяются по вычисленным значениям свойств "page-height" и "page-width". Для страничных носителей эти значения определяют ориентацию листа; "page-height" измеряется от "top" до "bottom". Для экранных носителей - окно дисплея всегда начинается сверху; верх экрана дисплея - это "top".

    ПРИМЕЧАНИЕ:

    Названия точек прямоугольника содержимого области порта просмотра даны как "top", "bottom", "left" и "right", а не "before-edge", "after-edge", "start-edge" и "end-edge", поскольку пользователи видят носитель относительно его ориентации, а не относительно используемого режима письма.

    Значение уточнения page-number/номер-страницы для первой страницы, возвращаемое объектом fo:page-sequence, ограничивается как равное значению уточнения initial-page-number/номер-начальной-страницы. Значение уточнения page-number последующих страниц ограничивается как большее, чем значение предыдущей страницы.

    Уточнения format, letter-value, grouping-separator, grouping-size, country и language используются для форматирования номера в строковую форму, как специфицировано в XSLT, раздел 7.7.1. Этот отформатированный номер используется как значение объекта fo:page-number.

    Ограничения, применяемые к регионам:

    Имеется несколько ограничений, применяемых ко всем регионам, специфицированным в данном fo:simple-page-master.

    Если размер block-progression-dimension правильно стэкированной области region-reference-area больше, чем block-progression-dimension области порта просмотра, являющейся её родителем, тогда ограничения на взаимоотношения между областями region-viewport-area и region-reference-area зависят от значений уточнения overflow/переполнение в мастер-регионе и вида потока, назначенного региону.

    Если поток, назначенный соответствующему региону, является объектом потока fo:static-content, тогда ограничение для block-progression-dimension области region-reference-area отсутствует.

    Если поток, назначенный соответствующему региону, является ОФ fo:flow, тогда

    • Если значением уточнения media-usage является paginate или значением уточнения overflow является visible, hidden или error-if-overflow, тогда block-progression-dimension области region-reference-area ограничено как "не больше, чем block-progression-dimension области region-viewport-area".

    • Если значением уточнения media-usage является bounded-in-one-dimension или unbounded или значением уточнения overflow является scroll или auto, тогда ограничение для block-progression-dimension области region-reference-area отсутствует.

    Содержимое:

    (region-body,region-before?,region-after?,region-start?,region-end?)
    

    Следующие свойства применяются к данному ОФ:


    6.4.13 fo:region-body

    Обычное Использование:

    Используется при конструировании простой мастер-страницы/simple-page-master. Этот регион специфицирует пару порт-просмотра/ссылка, которая находится в "center" объекта fo:simple-page-master. Уточнение overflow контролирует то, сколько нижележащих областей region-reference-area видно; то есть, обрезается ли область region-reference-area своей родительской областью region-viewport-area.

    ПРИМЕЧАНИЕ:

    Обычно, для страничных носителей, области, возвращаемые ОФ fo:flow в объект fo:page-sequence, становятся потомками последовательности областей region-reference, соответствующей телу-региона/region-body. Все эти области region-reference-areas являются потомками страничных областей, для которых мастер-страница включила (содержит) fo:region-body. Если поток fo:flow назначен какому-то другому региону, тогда области, возвращённые объектом fo:flow, ограничены быть потомками областей region-reference-areas, генерируемых  с использованием назначенного мастер-региона.

    ПРИМЕЧАНИЕ:

    Тело региона должно получить размеры и быть позиционировано внутри fo:simple-page-master так, чтобы осталось пространство для областей, возвращаемых потоком, назначенным объекту fo:region-body, и для любых необходимых регионов сторон/side regions, то есть fo:region-before, fo:region-after, fo:region-start и fo:region-end, размещаемых на той же странице. Эти регионы сторон позиционируются внутри прямоугольника содержимого области page-reference-area. Поля fo:region-body используются для позиционирования области порта просмотра региона для объекта fo:region-body и как пространство для других регионов, окружающих fo:region-body.

    Расстояние между последними четырьмя регионами и fo:region-body определяется путём вычитания соответствующего уточнения extent/расширения по сторонам региона из уточнения, соответствующего свойству "margin-x" ОФ fo:region-body.

    fo:region-body может также использоваться для вывода нескольких столбцов. Если уточнение column-count больше единицы, тогда тело региона подразделяется на несколько столбцов.

    Области:

    ОФ fo:region-body используется для генерации одной области region-viewport-area и одной области region-reference-area везде, где fo:simple-page-master, имеющий fo:region-body в качестве дочернего объекта, используется для генерации страницы. Должен предоставляться механизм прокрутки, если значением уточнения overflow является "scroll".

    Позиция и размер области region-viewport-area специфицируется относительно прямоугольника содержимого области page-reference-area, генерируемой объектом fo:simple-page-master. Прямоугольник содержимого области region-viewport-area имеет отступ от прямоугольника содержимого области page-reference-area на значения свойств "margin-top", "margin-bottom", "margin-left" и "margin-right". В версии 1.0 данных Рекомендаций значения уточнений padding и border-width обязаны быть "0".

    Область  region-reference-area, генерируемая с использованием fo:region-body, является дочерней относительно области region-viewport-area. Уточнение reference-orientation для fo:region-body используется для ориентации системы координат области region-reference-area, генерируемой объектом fo:region-body, относительно системы координат области page-reference-area, генерируемой объектом fo:simple-page-master (и, следовательно, относительно порта просмотра, позиционированного в этой последней системе координат).

    В дополнение к паре порт-просмотра/ссылка: если тело региона используется для генерации областей, то генерируется от одной до трёх дополнительных областей reference-area. Эти reference-areas являются необязательными областями before-float-reference-area, footnote-reference-area и main-reference-area. Последняя содержит в себе пространство, оставшееся после распределения пространства для двух других областей reference-areas. Область main-reference-area не имеет ассоциированных с ней заполнения, рамки или пространства/space.

    ПРИМЕЧАНИЕ:

    Если область before-float-reference-area или область footnote-reference-area - потомок области region-reference-area, тогда прямоугольник содержимого области main-reference-area имеет общую границу с  прямоугольником содержимого области region-reference-area.

    Область main-reference-area имеет в качестве потомков последовательность областей span-reference-area. Это блок-области в области reference-area с нулевыми рамкой и заполнением, чьи размеры inline-progression-dimension равны аналогичным в области main-reference-area и которые нормально стэкируются внутри области main-reference-area.

    Каждая область span-reference-area имеет в качестве потомков одну или более областей reference-area, созданных как области-ссылки с нормальным потоком/normal-flow-reference-areas. Количество и размещение этих потомков области span-reference-area зависит от уточнения column-count/количество столбцов в области span-reference-area. В свою очередь, форматировщик обязан генерировать достаточное количество этих областей span-reference-areas и устанавливать их уточнения column-count так, чтобы блок-области, возвращаемые из fo:flow со span равным "all", были потомками областей span-reference-areas с column-count равным 1, а блок-области, возвращаемые из fo:flow со span равным "none", были потомками областей span-reference-areas с column-count равным очищенному значению свойства column-count ассоциированной области region-reference-area.

    Для каждой области span-reference-area, количество N областей-потомков normal-flow-reference-area равно значению уточнения column-count.

    Является ошибкой, если специфицируется column-count, отличное от 1, когда свойство "overflow" имеет значение "scroll". В конкретной реализации может выполняться обработка ошибки так, будто специфицирована "1".

    Размер inline-progression-dimension каждой из этих областей normal-flow-reference-areas определяется путём вычитания (N-1) раз уточнения column-gap из inline-progression-dimension области main-reference-area и деления полученного результата на N. Используя "body-in-size" для именования inline-progression-dimension области span-reference-area и "column-in-size" для именования размера областей normal-flow-reference-areas с направлением inline-progression-direction, получим такую формулу:

    column-in-size = (body-in-size - (N - 1)*column-gap)/N

    Размер block-progression-dimension областей normal-flow-reference-areas такой же, что и у родительской области span-reference-area.

    ПРИМЕЧАНИЕ:

    Как указывалось выше, block-progression-dimension области span-reference-area может быть меньше,  чем размер области region-reference-area, если область before-float-reference-area или footnote-reference-area имеется в наличии, или если имеется более одной области span-reference-area  - потомка области main-reference-area.

    Области normal-flow-reference-areas позиционируются внутри области span-reference-area таким образом:
    первый столбец позиционируется с краями before-edge и start-edge своего прямоугольника содержимого, совпадающими с before-edge и start-edge прямоугольника содержимого области span-reference-area. Прямоугольник содержимого J-ной области normal-flow-reference-area - потомка области span-reference-area - позиционируется с before-edge, совпадающим с before-edge прямоугольника содержимого области span-reference-area и со start-edge в положении ((J-1)*(column-in-size + column-gap)) в направлении inline-progression-direction. Это даёт в результате end-edge прямоугольника содержимого N-ной области normal-flow-reference-area, совпадающий с end-edge прямоугольника содержимого области span-reference-area.

    ПРИМЕЧАНИЕ:

    Если writing-mode/режим письма установлен в "rl-tb", вышеприведённое описание означает, что столбцы упорядочены справа-налево, как и можно было предположить. Это является следствием того, что start-edge находится справа в режиме письма "rl-tb".

    Все области, генерируемые с использованием fo:region-body, имеют класс области "xsl-absolute".

    Получение Уточнения:

    Ориентация reference-orientation области порта просмотра региона берётся из значения уточнения reference-orientation в мастер-регионе, специфицирующем данный регион. reference-orientation области region-reference-area устанавливается в "0" и является, следовательно, такой же, как и ориентация, устанавливаемая областью порта просмотра региона/region-viewport-area.

    Остальные уточнения областей region-viewport-area и region-reference-area устанавливаются в соответствии с нормальными правилами определения значений уточнений.

    Уточнения областей span-reference-area и normal-flow-reference-area определяются тем же способом (как описано в разделе [5 Очистка/Разрешение Свойств]) - из набора свойств, где каждое свойство имеет начальное значение, за исключением reference-orientation, writing-mode и display-align, которые имеют свои значения из fo:region-body.

    Ограничения:

    Все ограничения применяются ко всем регионам (см. [6.4.12 fo:simple-page-master]).

    Направление inline-progression-dimension области region-viewport-area определяется направлением inline-progression-dimension прямоугольника содержимого области page-reference-area минус значения уточнений start-indent и end-indent мастер-региона. Start-edge и end-edge прямоугольника содержимого области region-viewport-area определяются уточнением reference-orientation в мастер-странице.

    Направление block-progression-dimension области region-viewport-area определяется направлением block-progression-dimension прямоугольника содержимого области page-reference-area минус значения уточнений space-before и space-after мастер-региона. Before-edge и after-edge прямоугольника содержимого области region-viewport-area определяются уточнением reference-orientation мастер-страницы.

    Значения уточнений space-before и start-indent используются для позиционирования области region-viewport-area относительно before-edge и start-edge прямоугольника содержимого области page-reference-area.

    Ограничения на размер и положение области region-reference-area, генерируемой с использованием fo:region-body, разъясняются в "Ограничениях, применяемых к регионам", в разделе [6.4.12 fo:simple-page-master].

    Содержимое:

    EMPTY
    

    Следующие свойства применяются к данному ОФ:


    6.4.14 fo:region-before

    Обычное Использование:

    Используется при конструировании простой мастер-страницы/simple-page-master. Этот регион специфицирует пару порт-просмотра/ссылка, которая размещается на стороне "before" области page-reference-area. В режиме письма  lr-tb этот регион соответствует региону шапки. Уточнение overflow управляет тем, насколько видна нижележащая область region-reference-area; то есть, усекается ли область region-reference-area своей родительской областью region-viewport-area.

    Области:

    ОФ fo:region-before используется для генерации одной области region-viewport-area и одной области region-reference-area.

    В версии1.0 данных Рекомендаций значения уточнений padding и border-width обязаны быть "0".

    Край before-edge прямоугольника содержимого этой области region-viewport-area позиционируется с краем before-edge прямоугольника содержимого области page-reference-area, генерируемой родительским объектом fo:simple-page-master. Размер block-progression-dimension области region-viewport-area определяется уточнением extent в ОФ fo:region-before.

    Размер inline-progression-dimension области region-viewport-area определяется уточнением precedence объекта fo:region-before. Если значение уточнения precedence равно true, тогда размер inline-progression-dimension увеличивается до краёв start-edge и end-edge прямоугольника содержимого области page-reference-area. В этом случае область region-viewport-area региона region-before действует подобно поплавку в областях, генерируемых регионами region-start и region-end. Если значение уточнения precedence в объекте fo:region-before равно false, тогда эти смежные регионы всплывают в области, генерируемой объектом fo:region-before, а расширение fo:region-before (значительно) уменьшается воздействием смежных регионов.

    Область region-reference-area расположена на "канве"/canvas ниже области region-viewport-area. Уточнение reference-orientation используется для ориентации системы координат области region-reference-area относительно области page-reference-area.

    Размер области region-reference-area зависит от установки уточнения overflow для региона. Если значение этого уточнения равно "auto", "hidden", "error-if-overflow", "paginate" или "visible", то размер области reference-area будет тем же, что и размер порта просмотра. Если значение уточнения overflow равно "scroll", размер области reference-area равен размеру порта просмотра в направлении inline-progression-direction режима письма для этого региона и не будет иметь ограничения в направлении block-progression-direction (что предполагает, что область будет расти до тех пор, пока не вместит всё содержимое региона).

    Получение Уточнения:

    Уточнение reference-orientation области region-viewport-area берётся из значения уточнения reference-orientation мастер-региона, специфицирующего данный регион. reference-orientation области region-reference-area устанавливается в "0" и является, следовательно, таким же, как и ориентация, устанавливаемая областью region-viewport-area.

    Остальные уточнения областей region-viewport-area и region-reference-area устанавливаются в соответствии с нормальными правилами определения значений уточнений.

    Ограничения:

    Ограничения на размер и позицию области region-reference-area, генерируемой с использованием объекта fo:region-before, разъясняются в "Ограничениях, применяемых к регионам", в разделе [6.4.12 fo:simple-page-master].

    Содержимое:

    EMPTY
    

    Следующие свойства применяются к данному ОФ:


    6.4.15 fo:region-after

    Обычное Использование:

    Используется при конструировании мастер-страницы simple-page-master. Этот регион специфицирует пару  viewport/reference, размещённую у стороны "after" области page-reference-area. В режиме письма lr-tb этот регион соответствует региону футера. Уточнение overflow управляет видимостью нижележащей области region-reference-area; то есть, усекается ли область region-reference-area своей родительской областью region-viewport-area.

    Области:

    ОФ fo:region-after используется для генерации одной области region-viewport-area и одной области region-reference-area.

    В версии 1.0 данных Рекомендаций значения уточнений padding и border-width обязаны быть "0".

    Край after-edge прямоугольника содержимого этой области region-viewport-area позиционируется вместе с краем after-edge прямоугольника содержимого области page-reference-area, генерируемой с использованием объекта fo:simple-page-master. Размер block-progression-dimension области region-viewport-area определяется уточнением extent ОФ fo:region-after.

    Размер inline-progression-dimension области region-viewport-area определяется уточнением precedence объекта fo:region-after. Если значение уточнения precedence равно true, то размер inline-progression-dimension расширяется до краёв start-edge и end-edge прямоугольника содержимого области page-reference-area. В этом случае область region-viewport-area региона region-after действует подобно поплавку в областях, генерируемых регионами region-start и region-end. Если значение уточнения precedence объекта fo:region-after равно false, тогда эти смежные регионы всплывают в области, генерируемой объектом fo:region-after, а расширение fo:region-after (значительно) уменьшается воздействием смежных регионов.

    Область region-reference-area расположена на канве ниже области region-viewport-area. Уточнение reference-orientation используется для ориентации системы координат области region-reference-area относительно области page-reference-area.

    Размер области region-reference-area зависит от установки уточнения overflow данного региона. Если это уточнение имеет значение "auto", "hidden", "error-if-overflow", "paginate" или "visible", тогда размер области reference-area будет тем же самым, что и размер порта просмотра. Если уточнение overflow имеет значение "scroll", размер области reference-area равен размеру порта просмотра в направлении inline-progression-direction writing-mode/режима письма региона и не имеет ограничений в направлении block-progression-direction (что предполагает, что область будет расти до тех пор, пока не вместит всё содержимое региона).

    Получение Уточнения:

    Уточнение reference-orientation области region-viewport-area берётся из значения уточнения reference-orientation местер-региона, специфицирующего этот регион. Уточнение reference-orientation области region-reference-area устанавливается в "0" и является, следовательно, таким же, как и ориентация, устанавливаемая областью region-viewport-area.

    Остальные уточнения областей region-viewport-area и region-reference-area устанавливаются в соответствии с нормальными правилами определения значений уточнений.

    Ограничения:

    Ограничения на размер и позицию области region-reference-area, генерируемой с использованием объекта fo:region-after, разъясняются в "Ограничениях, применяемых к регионам", раздел [6.4.12 fo:simple-page-master].

    Содержимое:

    EMPTY
    

    Следующие свойства применяются к данному ОФ:


    6.4.16 fo:region-start

    Обычное Использование:

    Используется при конструировании мастера simple-page-master. Этот регион специфицирует пару  viewport/reference, размещённую у стороны "start" области page-reference-area. В режиме письма lr-tb этот регион соответствует левой полосе/left sidebar. Уточнение overflow управляет видимостью region-reference-area; то есть тем, усекается ли область region-reference-area своей родительской областью region-viewport-area.

    Области:

    ОФ fo:region-start используется для генерации одной области region-viewport-area и одной области region-reference-area.

    В версии 1.0 данных Рекомендаций значения уточнений padding и border-width обязаны быть "0".

    Край start-edge прямоугольника содержимого этой области region-viewport-area позиционируется вместе со start-edge прямоугольника содержимого области page-reference-area, генерируемой с использованием родительского объекта fo:simple-page-master. Размер inline-progression-dimension области region-viewport-area определяется уточнением extent ОФ fo:region-after.

    Величина block-progression-dimension области region-viewport-area определяется уточнением precedence в смежных fo:region-before и fo:region-after, если они имеются; иначе - определяется так, будто значение уточнения precedence равно false. Если значение уточнения precedence объекта fo:region-before (или, соответственно, fo:region-after) равно false, тогда величина block-progression-dimension расширяется до края before- (или, соответственно, after-) прямоугольника содержимого области page-reference-area. В этом случае регион region-start действует подобно поплавку в областях, генерируемых регионом region-before (соответственно, region-after). Если значение уточнения precedence в смежных регионах равно true, тогда эти смежные регионы всплывают в области, генерируемой объектом fo:region-start, а расширение объекта fo:region-start (значительно) уменьшается под воздействием прилегающих регионов со значением уточнения precedence, равным true.

    Область region-reference-area расположена на канве ниже области region-viewport-area. Уточнение reference-orientation используется для ориентации системы координат области region-reference-area относительно области page-reference-area.

    Размер области region-reference-area зависит от установки значения уточнения overflow в этом регионе. Если уточнение имеет значение "auto", "hidden", "error-if-overflow", "paginate" или "visible", то размер области reference-area будет таким же, что и размер порта просмотра. Если уточнение overflow имеет значение "scroll", размер области reference-area равен размеру порта просмотра в направлении inline-progression-direction режима письма этого региона и не имеет ограничений в направлении block-progression-direction (что предполагает, что область будет расти до тех пор, пока не вместит всё содержимое региона).

    Получение Уточнения:

    Уточнение reference-orientation области region-viewport-area берётся из значения уточнения reference-orientation местер-региона, специфицирующего этот регион. Уточнение reference-orientation области region-reference-area устанавливается в "0" и является, следовательно, таким же, как и ориентация, устанавливаемая областью region-viewport-area.

    Остальные уточнения областей region-viewport-area и region-reference-area устанавливаются в соответствии с нормальными правилами определения значений уточнений.

    Ограничения:

    Ограничения на размер и позицию области region-reference-area, генерируемой с использованием объекта fo:region-start, разъясняются в "Ограничениях, применяемых к регионам", раздел [6.4.12 fo:simple-page-master].

    Содержимое:

    EMPTY
    

    Следующие свойства применяются к данному ОФ:


    6.4.17 fo:region-end

    Обычное Использование:

    Используется при конструировании мастера simple-page-master. Этот регион специфицирует пару  viewport/reference, размещённую у стороны "end" области page-reference-area. В режиме письма lr-tb этот регион соответствует правой полосе/right sidebar. Уточнение overflow управляет видимостью region-reference-area; то есть тем, усекается ли область region-reference-area своей родительской областью region-viewport-area.

    Области:

    ОФ fo:region-end используется для генерации одной области region-viewport-area и одной области region-reference-area.

    В версии 1.0 данных Рекомендаций значения уточнений padding и border-width обязаны быть "0".

    Край end-edge прямоугольника содержимого этой области region-viewport-area позиционируется вместе с end-edge прямоугольника содержимого области page-reference-area, генерируемой с использованием родительского объекта fo:simple-page-master. Размер inline-progression-dimension области region-viewport-area определяется уточнением extent ОФ fo:region-after.

    Величина block-progression-dimension области region-viewport-area определяется уточнением precedence в смежных fo:region-before и fo:region-after, если они имеются; иначе - определяется так, будто значение уточнения precedence равно false. Если значение уточнения precedence объекта fo:region-before (или, соответственно, fo:region-after) равно false, тогда величина block-progression-dimension расширяется до края before- (или, соответственно, after-) прямоугольника содержимого области page-reference-area. В этом случае регион region-end действует подобно поплавку в областях, генерируемых регионом region-before (соответственно, region-after). Если значение уточнения precedence в смежных регионах равно true, тогда эти смежные регионы всплывают в области, генерируемой объектом fo:region-end , а расширение объекта fo:region-end (значительно) уменьшается под воздействием прилегающих регионов со значением уточнения precedence, равным true.

    Область region-reference-area расположена на канве ниже области region-viewport-area. Уточнение reference-orientation используется для ориентации системы координат области region-reference-area относительно области page-reference-area.

    Размер области region-reference-area зависит от установки значения уточнения overflow в этом регионе. Если уточнение имеет значение "auto", "hidden", "error-if-overflow", "paginate" или "visible", то размер области reference-area будет таким же, что и размер порта просмотра. Если уточнение overflow имеет значение "scroll", размер области reference-area равен размеру порта просмотра в направлении inline-progression-direction режима письма этого региона и не имеет ограничений в направлении block-progression-direction (что предполагает, что область будет расти до тех пор, пока не вместит всё содержимое региона).

    Получение Уточнения:

    Уточнение reference-orientation области region-viewport-area берётся из значения уточнения reference-orientation местер-региона, специфицирующего этот регион. Уточнение reference-orientation области region-reference-area устанавливается в "0" и является, следовательно, таким же, как и ориентация, устанавливаемая областью region-viewport-area.

    Остальные уточнения областей region-viewport-area и region-reference-area устанавливаются в соответствии с нормальными правилами определения значений уточнений.

    Ограничения:

    Ограничения на размер и позицию области region-reference-area, генерируемой с использованием объекта fo:region-end разъясняются в "Ограничениях, применяемых к регионам", раздел [6.4.12 fo:simple-page-master].

    Ограничения:

    EMPTY
    

    Следующие свойства применяются к данному ОФ:


    6.4.18 fo:flow

    Обычное Использование:

    Содержимым ОФ fo:flow является последовательность всплывающих объектов, отображающая содержимое текстового потока, распределённого по страницам.

    Области:

    ОФ fo:flow не генерирует никаких областей. ОФ fo:flow возвращает последовательность областей, создаваемую путём стыковки последовательностей областей каждого из потомков fo:flow. Порядок стыковки  - то же, что и порядок, в котором потомки расположены под объектом fo:flow.

    Ограничения:

    (Неявное) отображение потока/flow-map определяет назначение содержимого объекта fo:flow региону.

    Содержимое:

    (%block;)+
    

    Этот ОФ дополнительно может содержать последовательность из нуля или более fo:marker в качестве его начальных потомков.

    Следующие свойства применяются к данному ОФ:


    6.4.19 fo:static-content

    Обычное Использование:

    ОФ fo:static-content содержит последовательность или дерево ОФ, которое представлено в одном регионе или повторяется в одинаково именованных регионах на одной или более страницах в последовательности page-sequence. Обычно используется для повторяющихся или статичных шапок и футеров.

    Это содержимое повторяется полностью на каждой странице, которой оно назначено.

    Области:

    ОФ fo:static-content не генерирует никаких областей. ОФ fo:static-content возвращает последовательность областей, создаваемую путём стыковки последовательностей областей каждого из потомков объекта fo:static-content. Порядок стыковки  - то же, что и порядок, в котором потомки расположены под объектом fo:static-content.

    Ограничения:

    (Неявное) отображение потока/flow-map определяет назначение содержимого объекта fo:static-content региону.

    fo:static-content может обрабатываться несколько раз, и, таким образом, ограничение упорядочивания по умолчанию в разделе [4.7.1 Общие Ограничения Упорядочивания] не применяется к объекту fo:static-content. Вместо этого он обязан выполнять ограничение на постраничном базисе. Точнее, если P это область page-reference-area, C это класс области и S это набор всех потомков области P класса области C, возвращаемая потомку объекта fo:static-content, тогда S обязан быть правильно упорядоченным/properly-ordered.

    Содержимое:

    (%block;)+
    

    Следующие свойства применяются к данному ОФ:


    6.4.20 fo:title

    Обычное Использование:

    ОФ fo:title используется для ассоциирования заголовка с данной последовательностью страниц. Этот заголовок может использоваться интерактивным пользовательским агентом (ПА) для идентификации страниц. Например, содержимое объекта fo:title может быть сформатировано и отображено в окне "title/заголовок" или в "tool tip/подсказка".

    Области:

    Этот ОФ возвращает последовательность областей, возвращаемых потомками этого ОФ.

    Ограничения:

    Последовательность возвращаемых областей обязана быть связкой субпоследовательностей областей, возвращаемых каждым потомком потока ОФ fo:title, расположенных в том же порядке, в котором появляются потомки.

    Содержимое:

    (#PCDATA|%inline;)*
    

    fo:title не может иметь fo:float, fo:footnote или fo:marker в качестве потомков.

    Кроме того, fo:title не может иметь в качестве потомка fo:block-container, который генерирует абсолютно позиционированную область.

    Следующие свойства применяются к данному ОФ:


    6.5 Объекты Форматирования Уровня Блока

    6.5.1 Введение

    ОФ fo:block используется для форматирования параграфов, заголовков, подписей к рисункам, заголовков таблиц и т.д. Следующий пример иллюстрирует использование fo:block в таблице стилей.

    6.5.1.1 Пример 6.5.1.1.1 Заголовки Главы и Раздела, Параграфы

    Исходный код:

    <doc>
      <chapter>
        <title>Chapter title</title>
        <section>
          <title>First section title</title>
          <paragraph>Section one's first paragraph.</paragraph>
          <paragraph>Section one's second paragraph.</paragraph>
        </section>
        <section>
          <title>Second section title</title>
          <paragraph>Section two's only paragraph.</paragraph>
        </section>
      </chapter>
    </doc>
    

    В этом примере заголовок главы появляется в верхней части страницы (её "space-before" отбрасывается).

    Пространство между заголовком главы и заголовком первого раздела равно (8pt,8pt,8pt): "space-after" заголовка главы имеет более высокий приоритет, чем "space-before" заголовка раздела (принимающий нулевое начальное значение), так что последний отбрасывается.

    Пространство между заголовком первого раздела и первым параграфом раздела one равно (6pt,6pt,6pt):
    "space-after" заголовка раздела имеет более высокий приоритет, чем "space-before" параграфа, так что последний отбрасывается.

    Пространство между двумя параграфами равно (6pt,8pt,10pt): "space-after" первого параграфа отбрасывается, поскольку его приоритет равен приоритету "space-before" следующего параграфа, а optimum для "space-after" первого параграфа больше, чем optimum для "space-before" второго параграфа.

    Пространство между вторым параграфом первого раздела и заголовком второго раздела равно (12pt,12pt,12pt): "space-after" параграфа отбрасывается, поскольку его приоритет равен приоритету "space-before" заголовка раздела, а optimum для "space-after" параграфа меньше, чем optimum для "space-before" заголовка раздела.

    Отступ в первой строке первого параграфа первого раздела one и единственного параграфа раздела two равен нулю; отступ первой строки второго параграфа раздела one равен 2pc.

    Таблица стилей XSL:

    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:fo="http://www.w3.org/1999/XSL/Format">
    
    <xsl:template match="chapter">
      <fo:block break-before="page">
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
    
    <xsl:template match="chapter/title">
      <fo:block text-align="center" space-after="8pt"
                space-before="16pt" space-after.precedence="3">
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
    
    <xsl:template match="section">
      <xsl:apply-templates/>
    </xsl:template>
    
    <xsl:template match="section/title">
      <fo:block text-align="center" space-after="6pt"
                space-before="12pt" space-before.precedence="0"
                space-after.precedence="3">
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
    
    <xsl:template match="paragraph[1]" priority="1">
      <fo:block text-indent="0pc" space-after="7pt"
                space-before.minimum="6pt" space-before.optimum="8pt"
                space-before.maximum="10pt">
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
    
    <xsl:template match="paragraph">
      <fo:block text-indent="2pc" space-after="7pt"
                space-before.minimum="6pt" space-before.optimum="8pt"
                space-before.maximum="10pt">
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
    
    </xsl:stylesheet>
    

    Результирующий Экземпляр: элементы и атрибуты в пространстве имён fo:

    <fo:block break-before="page">
    
      <fo:block text-align="center" space-after="8pt"
        space-before="16pt"
        space-after.precedence="3">Chapter title
      </fo:block>
    
      <fo:block text-align="center" space-after="6pt"
        space-before="12pt" space-before.precedence="0"
        space-after.precedence="3">First section title
      </fo:block>
    
      <fo:block text-indent="0pc" space-after="7pt"
        space-before.minimum="6pt" space-before.optimum="8pt"
        space-before.maximum="10pt">Section one's first paragraph.
      </fo:block>
    
      <fo:block text-indent="2pc" space-after="7pt"
        space-before.minimum="6pt" space-before.optimum="8pt"
        space-before.maximum="10pt">Section one's second paragraph.
      </fo:block>
    
      <fo:block text-align="center" space-after="6pt"
        space-before="12pt" space-before.precedence="0"
        space-after.precedence="3">Second section title
      </fo:block>
    
      <fo:block text-indent="0pc" space-after="7pt"
        space-before.minimum="6pt" space-before.optimum="8pt"
        space-before.maximum="10pt">Section two's only paragraph.
      </fo:block>
    
    </fo:block>
    


    6.5.2 fo:block

    Обычное Использование:

    ОФ fo:block обычно используется для форматирования параграфов, заголовков, колонтитулов, подписей к рисункам и таблицам и т.д.

    Области:

    ОФ fo:block генерирует одну или более normal/нормальных блок-областей. fo:block возвращает эти области, любые области page-level-out-of-line и любые области reference-level-out-of-line, возвращаемые потомками объекта fo:block.
    fo:block также генерирует нуль или более строчных областей/line-areas в качестве потомков нормальных блок-областей, возвращаемых им, в соответствии с [4.7.2 Конструирование Строк].

    Получение Уточнения:

    Компоненты .minimum, .optimum и .maximum уточнения half-leading устанавливаются в 1/2 от разности вычисленного значения свойства line-height, вычисленного значения суммы свойств text-altitude и text-depth. Компоненты .precedence и .conditionality копируются из свойства line-height.

    ПРИМЕЧАНИЕ:

    Использование half-leading описано в разделе [4.5 Строчные Области/Line-areas].

    Ограничения:

    Никакая область не может иметь более одной нормальной области-потомка, возвращаемой одним ОФ fo:block.

    Потомки каждой нормальной области, генерируемой объектом fo:block, обязаны удовлетворять ограничениям, специфицированным в разделе [4.7.2 Конструирование Строк].

    В дополнение к этому, обязаны выполняться ограничения, вводимые уточнениями, получаемыми из свойств, применимых к данному ОФ. Геометрические ограничения жёстко определены в разделе [4 Модель Области].

    Содержимое:

    (#PCDATA|%inline;|%block;)*
    

    Дополнительно этот ОФ может содержать последовательность из нуль или более fo:marker как начальных потомков, после которых может следовать fo:initial-property-set.

    Следующие свойства применяются к данному ОФ:


    6.5.3 fo:block-container

    Обычное Использование:

    Объект потока fo:block-container используется для генерации области reference-area  блок-уровня, содержащих обычно блоки текста с различными режимами письма. Кроме того он может также использоваться с различными ориентациями reference-orientation для разворота своего содержимого.

    ПРИМЕЧАНИЕ:

    Не рекомендуется только использовать этот объект потока/flow object для изменения направления inline-progression-direction; в этом случае достаточно алгоритма Unicode bidi и fo:bidi-override.

    Области:

    ОФ fo:block-container генерирует одну или более пар viewport/reference. fo:block-container возвращает эти области и любые области page-level-out-of-line, возвращённые потомками объекта fo:block-container.

    Получение Уточнения:

    Области, генерируемые объектом fo:block-container, имеют значение "true" для уточнения is-reference-area.

    Размер viewport-area и reference-area должен фиксироваться в направлении inline-progression-direction. Он обязан быть специфицирован, если только направление inline-progression-direction не параллельно inline-progression-direction области reference-area, в которую помещаются области, генерируемые этим всплывающим объектом.

    Ограничения:

    Потомки каждой области reference-area, генерируемой объектом fo:block-container, обязаны быть нормальными block-area/блок-областями, возвращаемыми потомками объекта fo:block-container, обязаны быть properly stacked/правильно стэкированы и properly ordered/правильно упорядоченными.

    Любые области reference-level-out-of-line, возвращаемые потомками объекта fo:block-container, обрабатываются так, как это описано в разделе [6.10.2 fo:float].

    Содержимое:

    (%block;)+
    

    Дополнительно объект fo:block-container, не генерирующий абсолютно позиционированной области, может содержать последовательность из нуль или более fo:marker в качестве начальных потомков.

    Следующие свойства применяются к данному ОФ:



    6.6 Объекты Форматирования Инлайн-Уровня

    6.6.1 Введение

    ОФ инлайн-уровня чаще всего используются для форматирования кусков текста или генерации линий и заполнителей. Имеются и многие другие способы использования. Следующие примеры иллюстрируют варианты использования ОФ инлайн-уровня:

    • Перевод первой строки параграфа в малые заглавные,

    • перевод нормального инлайн-ОФ, fo:external-graphic, в блок путём "wrapping/окружения" объектом fo:block,

    • форматирование фиксированного футера, содержащего слово "Page" и номер страницы.


    6.6.1.1 Примеры 6.6.1.1.1 Первая строка параграфа выводится малыми заглавными

    Код:

    <doc>
    <p>Это текст параграфа, первая строка которого
    будет представлена малыми заглавными буквами.</p>
    </doc>
    

    Таблица стилей XSL:

    <?xml version='1.0'?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                    xmlns:fo="http://www.w3.org/1999/XSL/Format"
                    version='1.0'>
    
    <xsl:template match="p">
      <fo:block>
        <fo:initial-property-set font-variant="small-caps"/>
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
    
    </xsl:stylesheet>
    

    Результирующий Экземпляр: элементы и атрибуты в пространстве имён fo:

    <fo:block>
      <fo:initial-property-set font-variant="small-caps">
      </fo:initial-property-set>This is the text of a paragraph that is going to be
    presented with the first line in small-caps.
    </fo:block>
    

    6.6.1.1.2Рисунок с Фотографией

    Код:

    <doc>
      <figure>
        <photo image="TH0317A.jpg"/>
        <caption>C'ieng Tamlung of C'ieng Mai</caption>
      </figure>
    </doc>
    

    В этом примере изображение (fo:external-graphic) помещено как центрированный объект уровня блока.
    Заголовок центрируется с 10мм отступами.

    Таблица стилей XSL:

    <?xml version='1.0'?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                    xmlns:fo="http://www.w3.org/1999/XSL/Format"
                    version='1.0'>
    
    <xsl:template match="figure">
      <fo:block>
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
    
    <xsl:template match="photo">
      <fo:block text-align="center">
        <fo:external-graphic src="books/html/xsl_spec/{@image}"/>
      </fo:block>
    </xsl:template>
    
    <xsl:template match="caption">
      <fo:block space-before="3pt" text-align="center"
        start-indent="10mm" end-indent="10mm">
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
    
    </xsl:stylesheet>
    

    Элемент fo: и дерево атрибутов:

    <fo:block>
      <fo:block text-align="center">
        <fo:external-graphic src="books/html/xsl_spec/TH0317A.jpg"/>
      </fo:block>
    
      <fo:block space-before="3pt" text-align="center" start-indent="10mm"
        end-indent="10mm">C'ieng Tamlung of C'ieng Mai</fo:block>
    </fo:block>
    

    6.6.1.1.3 Нумерация страниц и ссылка на номер страницы

    Код:

    <!DOCTYPE doc SYSTEM "pgref.dtd">
    <doc>
      <chapter id="x"><title>Chapter</title>
        <p>Text</p>
      </chapter>
      <chapter><title>Chapter</title>
        <p>For a description of X see <ref refid="x"/>.</p>
      </chapter>
    </doc>
    

    В этом примере каждая страница имеет фиксированный футер, содержащий слово "Page" с последующим номером страницы. Элемент "ref" генерирует слово "page" с последующим номером страницы, на которой размещается атрибут, имеющий на себя ссылку в "refid".

    Таблица стилей XSL:

    <?xml version='1.0'?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                    xmlns:fo="http://www.w3.org/1999/XSL/Format"
                    version='1.0'>
    
    <xsl:template match="doc">
      <fo:root>
        <fo:layout-master-set>
          <fo:simple-page-master master-name="page"
            page-height="297mm" page-width="210mm"
            margin-top="20mm" margin-bottom="10mm"
            margin-left="25mm" margin-right="25mm">
            <fo:region-body
              margin-top="0mm" margin-bottom="15mm"
              margin-left="0mm" margin-right="0mm"/>
            <fo:region-after extent="10mm"/>
          </fo:simple-page-master>
        </fo:layout-master-set>
        <fo:page-sequence master-reference="page">
          <fo:static-content flow-name="xsl-region-after">
            <fo:block>
              <xsl:text>Page </xsl:text>
              <fo:page-number/>
            </fo:block>
          </fo:static-content>
          <fo:flow flow-name="xsl-region-body">
            <xsl:apply-templates/>
          </fo:flow>
        </fo:page-sequence>
      </fo:root>
    </xsl:template>
    
    <xsl:template match="chapter/title">
      <fo:block id="{generate-id(.)}">
        <xsl:number level="multiple" count="chapter" format="1. "/>
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
    
    <xsl:template match="p">
      <fo:block>
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
    
    <xsl:template match="ref">
      <xsl:text>page </xsl:text>
      <fo:page-number-citation refid="{generate-id(id(@refid)/title)}"/>
    </xsl:template>
    
    </xsl:stylesheet>
    

    Результирующий Экземпляр: элементы и атрибуты в пространстве имён fo:

    <fo:root>
      <fo:layout-master-set>
        <fo:simple-page-master master-name="page"
          page-height="297mm" page-width="210mm"
          margin-top="20mm" margin-bottom="10mm"
          margin-left="25mm" margin-right="25mm">
          <fo:region-body margin-top="0mm" margin-bottom="15mm"
            margin-left="0mm" margin-right="0mm"/>
          <fo:region-after extent="10mm"/>
        </fo:simple-page-master>
      </fo:layout-master-set>
      <fo:page-sequence master-reference="page">
        <fo:static-content flow-name="xsl-region-after">
          <fo:block>Page <fo:page-number/>
          </fo:block>
        </fo:static-content>
        <fo:flow flow-name="xsl-region-body">
          <fo:block id="N5">1. Chapter</fo:block>
          <fo:block>Text</fo:block>
          <fo:block id="N13">2. Chapter</fo:block>
          <fo:block>For a description of X see page <fo:page-number-citation refid="N5"/>
          </fo:block>
        </fo:flow>
      </fo:page-sequence>
    </fo:root>
    

    6.6.1.1.4 Оглавление с Заполнителями

    Код:

    <doc>
      <chapter><title>Chapter</title>
        <p>Text</p>
        <section><title>Section</title>
        <p>Text</p>
        </section>
        <section><title>Section</title>
        <p>Text</p>
        </section>
      </chapter>
      <chapter><title>Chapter</title>
        <p>Text</p>
        <section><title>Section</title>
        <p>Text</p>
        </section>
        <section><title>Section</title>
        <p>Text</p>
        </section>
      </chapter>
    </doc>
    

    В этом примере оглавление форматируется с точками-заполнителями между текстом заголовка и номером страницы.

    Таблица стилей XSL:

    <?xml version='1.0'?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                    xmlns:fo="http://www.w3.org/1999/XSL/Format"
                    version='1.0'>
    
    <xsl:template match="doc">
      <!-- создаётся оглавление -->
      <xsl:apply-templates select="chapter/title" mode="toc"/>
      <!-- создаётся документ -->
      <xsl:apply-templates/>
    </xsl:template>
    
    <xsl:template match="chapter/title" mode="toc">
      <fo:block text-align-last="justify">
        <fo:simple-link internal-destination="{generate-id(.)}">
          <xsl:number level="multiple" count="chapter" format="1. "/>
          <xsl:apply-templates/>
        </fo:simple-link>
        <xsl:text> </xsl:text>
        <fo:leader leader-length.minimum="12pt" leader-length.optimum="40pt"
                   leader-length.maximum="100%" leader-pattern="dots"/>
        <xsl:text> </xsl:text>
        <fo:page-number-citation ref-id="{generate-id(.)}"/>
      </fo:block>
      <xsl:apply-templates select="section/title" mode="toc"/>
    </xsl:template>
    
    <xsl:template match="section/title" mode="toc">
      <fo:block start-indent="10mm" text-align-last="justify">
        <fo:simple-link internal-destination="{generate-id(.)}">
          <xsl:number level="multiple" count="chapter|section" format="1.1 "/>
          <xsl:apply-templates/>
        </fo:simple-link>
        <xsl:text> </xsl:text>
        <fo:leader leader-length.minimum="12pt" leader-length.optimum="40pt"
                   leader-length.maximum="100%" leader-pattern="dots"/>
        <xsl:text> </xsl:text>
        <fo:page-number-citation ref-id="{generate-id(.)}"/>
      </fo:block>
    </xsl:template>
    
    <xsl:template match="chapter/title">
      <fo:block id="{generate-id(.)}">
        <xsl:number level="multiple" count="chapter" format="1. "/>
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
    
    <xsl:template match="section/title">
      <fo:block id="{generate-id(.)}">
        <xsl:number level="multiple" count="chapter|section" format="1.1 "/>
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
    
    <xsl:template match="p">
      <fo:block>
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
    
    </xsl:stylesheet>
    

    Результирующий Экземпляр: элементы и атрибуты в пространстве имён fo:

    <fo:block text-align-last="justify">
      <fo:simple-link internal-destination="N4">1. Chapter
      </fo:simple-link>
      <fo:leader leader-length.minimum="12pt" leader-length.optimum="40pt"
        leader-length.maximum="100%" leader-pattern="dots">
      </fo:leader>
      <fo:page-number-citation ref-id="N4">
      </fo:page-number-citation>
    </fo:block>
    <fo:block start-indent="10mm" text-align-last="justify">
      <fo:simple-link internal-destination="N11">1.1 Section
      </fo:simple-link>
      <fo:leader leader-length.minimum="12pt" leader-length.optimum="40pt"
        leader-length.maximum="100%" leader-pattern="dots">
      </fo:leader>
      <fo:page-number-citation ref-id="N11">
      </fo:page-number-citation>
    </fo:block>
    <fo:block start-indent="10mm" text-align-last="justify">
      <fo:simple-link internal-destination="N19">1.2 Section
      </fo:simple-link>
      <fo:leader leader-length.minimum="12pt" leader-length.optimum="40pt"
        leader-length.maximum="100%" leader-pattern="dots">
      </fo:leader>
      <fo:page-number-citation ref-id="N19">
      </fo:page-number-citation>
    </fo:block>
    <fo:block text-align-last="justify">
      <fo:simple-link internal-destination="N28">2. Chapter
      </fo:simple-link>
      <fo:leader leader-length.minimum="12pt" leader-length.optimum="40pt"
        leader-length.maximum="100%" leader-pattern="dots">
      </fo:leader>
      <fo:page-number-citation ref-id="N28">
      </fo:page-number-citation>
    </fo:block>
    <fo:block start-indent="10mm" text-align-last="justify">
      <fo:simple-link internal-destination="N35">2.1 Section
      </fo:simple-link>
      <fo:leader leader-length.minimum="12pt" leader-length.optimum="40pt"
        leader-length.maximum="100%" leader-pattern="dots">
      </fo:leader>
      <fo:page-number-citation ref-id="N35">
      </fo:page-number-citation>
    </fo:block>
    <fo:block start-indent="10mm" text-align-last="justify">
      <fo:simple-link internal-destination="N43">2.2 Section
      </fo:simple-link>
      <fo:leader leader-length.minimum="12pt" leader-length.optimum="40pt"
        leader-length.maximum="100%" leader-pattern="dots">
      </fo:leader>
      <fo:page-number-citation ref-id="N43">
      </fo:page-number-citation>
    </fo:block>
    
    <fo:block id="N4">1. Chapter
    </fo:block>
    
    <fo:block>Text
    </fo:block>
    
    <fo:block id="N11">1.1 Section
    </fo:block>
    
    <fo:block>Text
    </fo:block>
    
    <fo:block id="N19">1.2 Section
    </fo:block>
    
    <fo:block>Text
    </fo:block>
    
    <fo:block id="N28">2. Chapter
    </fo:block>
    
    <fo:block>Text
    </fo:block>
    
    <fo:block id="N35">2.1 Section
    </fo:block>
    
    <fo:block>Text
    </fo:block>
    
    <fo:block id="N43">2.2 Section
    </fo:block>
    
    <fo:block>Text
    </fo:block>
    


    6.6.2 fo:bidi-override

    Обычное Использование:

    ОФ fo:bidi-override используется при несрабатывании алгоритма Unicode-bidi. Он форсирует написание строки текста в определённом направлении.

    Области:

    ОФ fo:bidi-override генерирует одну или более областей normal inline-area. fo:bidi-override возвращает эти области, любые области page-level-out-of-line и reference-level-out-of-line, возвращаемые потомками fo:bidi-override.

    Получение Уточнения:

    Уточнения направления получаются из свойств "writing-mode", "direction" и "unicode-bidi", как описано в разделе [5.5.3 Свойства Writing-mode и Direction].

    Ограничения:

    Никакая область не может иметь более одной нормальной области-потомка, возвращаемой одним объектом fo:bidi-override.

    Потомки каждой нормальной области, возвращаемой объектом fo:bidi-override, обязаны удовлетворять ограничениям, специфицированным в разделе [4.7.3 Инлайн-Конструирование].

    Содержимое:

    (#PCDATA|%inline;|%block;)*
    

    Этот ОФ может дополнительно содержать последовательность из нуля или более fo:marker в качестве своих начальных потомков.

    fo:bidi-override, потомок объекта fo:leader, или объект fo:inline, потомок объекта fo:footnote, могут не иметь потомков блок-уровня, если только не имеется ближайший предок - контейнер fo:inline-container.

    Следующие свойства применяются к данному ОФ:


    6.6.3 fo:character

    Обычное Использование:

    Объект потока fo:character представляет символ, отображаемый в глиф для представления. Это атомарная единица форматировщика.

    Когда результирующее дерево интерпретируется как дерево объектов форматирования, символ в результирующем дереве интерпретируется так, как если бы он был пустым элементом типа fo:character с атрибутом символа, равным представлению данного символа в Unicode. Семантика значения "auto" для свойств символов, которое (значение) является обычно начальным значением, базируется на кодовой точке Unicode. В реализациях может предусматриваться переопределение.

    ПРИМЕЧАНИЕ:

    В таблице стилей явное создание fo:character может использоваться для явного переопределения отображения/mapping по умолчанию.

    Символы Unicode/Tag могут не поддерживаться.

    ПРИМЕЧАНИЕ:

    Unicode Version 3.1 фактически утверждает, что они не используются с "любыми протоколами, которые предоставляют альтернативные значения для тэгов языка, такого как HTML или XML.". Unicode TR20 ([UNICODE TR20]) также объявляет совершенно чётко, что они не совместимы с разметкой.

    Области:

    ОФ fo:character генерирует и возвращает одну или более областей normal inline-area.

    ПРИМЕЧАНИЕ:

    Случаи, когда генерируется одна или более областей inline-area, вычисляются в скриптах, где одиночный символ генерирует и префикс, и суффикс глифа для какого-то другого символа.

    Ограничения:

    Размеры областей определяются метриками шрифта для глифа.

    При форматировании fo:character с "treat-as-word-space", имеющим значение "true", Пользовательский Агент может использовать различные методы для определения величины inline-progression-dimension для области.

    ПРИМЕЧАНИЕ:

    Такие методы обычно используют значение межсловного расстояния/word space, хранимое в шрифте, или значение word space определяет форматировщик.

    Содержимое:

    EMPTY
    

    Следующие свойства применяются к данному ОФ:


    6.6.4 fo:initial-property-set

    Обычное Использование:

    Вспомогательный ОФ fo:initial-property-set специфицирует свойства форматирования для первой строки объекта fo:block.

    ПРИМЕЧАНИЕ:

    Аналогичен псевдоэлементу first-line в CSS.

    В будущих версиях данных Рекомендаций может быть введено свойство, контролирующее количество строк или "глубину" применения этих начальных свойств.

    Области:

    ОФ fo:initial-property-set не генерирует и не возвращает никаких областей. Он просто содержит набор уточнений, применяемых к первой строчной области в той области, которая имеет значение "true" уточнения is-first и которая была сгенерирована родительским объектом fo:block набора fo:initial-property-set.

    Получение Уточнения:

    Уточнения в первоначальном наборе fo:initial-property-set принимаются в расчёт как уточнения, ограничивающие первую строку, как если бы дочерние инлайн-ОФ объекта fo:block или часть из них, в случае с line-break, использованные при форматировании первой строки, были заключены внутри fo:wrapper как прямого потомка объекта fo:block с теми же ограничениями.

    Ограничения:

    Отсутствуют.

    Содержимое:

    EMPTY
    

    Следующие свойства применяются к данному ОФ:


    6.6.5 fo:external-graphic

    Обычное Использование:

    Объект потока fo:external-graphic используется для графики, когда данные графики находятся вне дерева fo:element.

    Области:

    ОФ fo:external-graphic генерирует и возвращает одну инлайн-область viewport-area и одну область reference-area, содержащую внешнюю графику. Область инлайн-уровня использует прямоугольник large-allocation-rectangle, как определено в разделе [4.2.3 Геометрические Определения].

    ПРИМЕЧАНИЕ:

    fo:external-graphic может быть размещён на уровне блока путём включения его в fo:block.

    "line-stacking-strategy" со значением "max-height" или "line-height" обычно используется для стэкирования одной или более строк с содержимым fo:external-graphic.

    Ограничения:

    Размер порта просмотра определяется уточнениями block-progression-dimension и inline-progression-dimension. Для значений "auto" используется размер содержимого графики.

    Размер содержимого графики определяется путём взятия размера графики и масштабирования его, как специфицировано в уточнениях content-height, content-width и scaling. Если content-height или content-width не установлены в "auto", тот же самый фактор масштабирования (подсчитанный из не-auto значения) применяется одинаково в обоих направлениях.

    После масштабирования область reference-area выравнивается относительно области порта просмотра с использованием уточнений text-align и display-align. Если графика слишком велика для области порта просмотра, она выравнивается так, как если бы она вмещалась и уточнение overflow управляло усечением, полосами прокрутки и т.д.

    В том случае, если формат графики не специфицирует её размер, он определяется способом, зависящим от конкретной реализации.

    ПРИМЕЧАНИЕ:

    Например, размер 1/96" может использоваться как размер одного пиксела для растровых изображений.

    Содержимое:

    EMPTY
    

    Следующие свойства применяются к данному ОФ:


    6.6.6 fo:instream-foreign-object

    Обычное Использование:

    Объект потока fo:instream-foreign-object используется для инлайн-графики или других "родовых" объектов, где данные объекта расположены как потомки fo:instream-foreign-object, обычно как элемент-поддерево XML в не-XSL пространстве имён.

    ПРИМЕЧАНИЕ:

    Общий формат - SVG.

    Области:

    ОФ fo:instream-foreign-object генерирует и возвращает одну инлайн-область viewport-area и одну область reference-area, содержащую instream-foreign-object. Область инлайн-уровня использует large-allocation-rectangle как определено в [4.2.3 Геометрических Определениях].

    Ограничения:

    Размер порта просмотра определяется уточнениями block-progression-dimension и inline-progression-dimension. Для значений "auto" используется размер содержимого постороннего объекта/instream foreign входного потока.

    Размер содержимого объекта instream-foreign-object определяется путём взятия размера объекта и масштабирования его так, как специфицировано в уточнениях content-height, content-width и scaling. Если content-height или content-width не установлены в "auto", тот же самый фактор масштабирования (подсчитанный из не-auto значения) применяется одинаково в обоих направлениях.

    После масштабирования область reference-area выравнивается относительно области порта просмотра с использованием уточнений text-align и display-align. Если instream-foreign-object слишком велик для области порта просмотра, он выравнивается так, как если бы он вмещался и уточнение overflow управляло усечением, полосами прокрутки и т.д.

    В том случае, если instream-foreign-object не специфицирует размер объекта, он определяется способом, зависящим от конкретной реализации.

    Содержимое:

    Объект потока fo:instream-foreign-object имеет потомка из не-XSL пространства имён. Разрешённой структурой этого потомка является структура, определённая для данного пространства имён.

    Объект потока fo:instream-foreign-object может иметь дополнительные атрибуты в не-XSL пространства имён. Они, также как и определяемые XSL свойства, сделаны доступными для процессора содержимого объекта потока. Их семантика определяется этим пространством имён.

    Следующие свойства применяются к данному ОФ:


    6.6.7 fo:inline

    Обычное Использование:

    ОФ fo:inline обычно используется для форматирования участка текста с фоном или в рамке.

    Области:

    ОФ fo:inline генерирует одну или более нормальных инлайн-областей. fo:inline возвращает эти области - любые области page-level-out-of-line - и любые области reference-level-out-of-line, возвращаемые потомками объекта fo:inline.

    Ограничения:

    Никакая область не может иметь более одной нормальной области-потомка, возвращаемой тем же самым ОФ fo:inline.

    Потомки каждой нормальной области, возвращаемой объектом fo:inline, обязаны удовлетворять ограничениям, специфицированным в разделе [4.7.3 Инлайн-Конструирование].

    Дополнительно обязаны выполняться ограничения, вводимые уточнениями, полученными из свойств, применяемых в данном ОФ. Геометрические ограничения строго определены в [4 Модели Области].

    Содержимое:

    (#PCDATA|%inline;|%block;)*
    

    Этот ОФ может содержать дополнительно последовательность из нуль или более fo:marker как своих начальных потомков.

    fo:inline, являющийся потомком fo:footnote, не может иметь потомков уровня блока.
    fo:inline, являющийся потомком fo:leader или fo:inline, потомка fo:footnote, не может иметь потомков уровня блока, если только он не имеет ближайшего предка, являющегося контейнером fo:inline-container.

    Следующие свойства применяются к данному ОФ:


    6.6.8 fo:inline-container

    Обычное Использование:

    Объект потока fo:inline-container используется для генерации инлайн-областей reference-area, обычно содержащих блоки текста с различным режимом (направлением) письма.

    ПРИМЕЧАНИЕ:

    Использование этого объекта потока не требуется для двунаправленного текста; в данном случае в данном случае достаточно алгоритма Unicode BIDI и объекта fo:bidi-override.

    Области:

    ОФ fo:inline-container генерирует одну или более пар viewport/reference (порт просмотра/ссылка). Области viewport-area, генерируемые объектом fo:inline-container, являются нормальными инлайн-областями, использующими прямоугольник large-allocation-rectangle, как определено в [4.2.3 Геометрических Определениях]. fo:inline-container возвращает эти области и любые области page-level-out-of-line, возвращаемые потомками fo:inline-container.

    Получение Уточнения:

    Области, генерируемые ОФ fo:inline-container, имеют для is-reference-area значение "true".

    Размер областей viewport-area и reference-area должен быть фиксированным в направлении inline-progression-direction. Он обязан быть специфицированным, если только направление inline-progression-direction не параллельно inline-progression-direction области reference-area, в которую помещаются области, генерируемые этим объектом потока.

    Значения в таблице baseline-table этого объекта вычисляются так:

    baseline

    Если режим письма имеет направление block-progression-direction, параллельное block-progression-direction родителя: точка выравнивания находится в позиции доминантной базовой линии/dominant-baseline первой строчной области-потомка. Если такой строчной области нет, точка выравнивания/alignment-point находится в позиции after-edge прямоугольника размещения.

    Если режим письма имеет направление block-progression-direction, не параллельное block-progression-direction родителя: точка выравнивания находится в позиции, равной половине расстояния от before-edge до after-edge прямоугольника содержимого.

    before-edge

    Точка выравнивания находится в позиции before-edge прямоугольника размещения.

    text-before-edge

    Точка выравнивания находится в позиции, ближайшей к before-edge прямоугольника размещения, выбираемого из двух краёв-кандидатов. Если режим письма имеет направление block-progression-direction, параллельное block-progression-direction родителя, краями-кандидатами являются before-edge и after-edge прямоугольника содержимого; если это не так (не параллельно), краями-кандидатами являются start-edge и end-edge прямоугольника содержимого.

    middle

    Точка выравнивания находится в позиции, равной половине расстояния от before-edge до after-edge прямоугольника размещения.

    after-edge

    Точка выравнивания/alignment-point находится в позиции after-edge прямоугольника размещения.

    text-after-edge

    Точка выравнивания находится в позиции, ближайшей к after-edge прямоугольника размещения, выбираемого из двух краёв-кандидатов. Если режим письма имеет направление block-progression-direction, параллельное block-progression-direction родителя, краями-кандидатами являются before-edge и after-edge прямоугольника содержимого; если это не так (не параллельно), краями-кандидатами являются start-edge и end-edge прямоугольника содержимого.

    ideographic

    Точка выравнивания находится в позиции на расстоянии 7/10 дистанции от before-edge прямоугольника размещения до after-edge прямоугольника размещения.

    alphabetic

    Точка выравнивания находится в позиции на расстоянии 6/10 дистанции от before-edge прямоугольника размещения до after-edge прямоугольника размещения.

    hanging

    Точка выравнивания находится в позиции на расстоянии 2/10 дистанции от before-edge прямоугольника размещения до after-edge прямоугольника размещения..

    mathematical

    Точка выравнивания находится в позиции на расстоянии 5/10 дистанции от before-edge прямоугольника размещения до after-edge прямоугольника размещения..

    Ограничения:

    Никакая область не может иметь более одной нормальной области-потомка, возвращаемой тем же самым ОФ fo:inline-container.

    Потомки каждой области reference-area, генерируемой ОФ fo:inline-container, обязаны быть нормальными блок-областями, возвращаемыми потомками объекта fo:inline-container, обязаны быть properly stacked/правильно стэкированы обязаны быть properly ordered/правильно упорядоченными.

    Любые области reference-level-out-of-line, возвращаемые потомками объекта fo:inline-container, обрабатываются так, как описано в разделе [6.10.2 fo:float].

    Содержимое:

    (%block;)+
    

    Этот ОФ дополнительно может содержать последовательность из нуль или более fo:marker в качестве начальных потомков.

    Следующие свойства применяются к данному ОФ:


    6.6.9 fo:leader

    Обычное Использование:

    ОФ fo:leader часто используется:

    • в оглавлении для генерации последовательностей глифов "." , разделяющих заголовки и номера страниц

    • для создания полей ввода в формах in fill-in-the-blank (бланк-для-заполнения)

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

    Области:

    ОФ fo:leader генерирует и возвращает одну нормальную инлайн-область.

    Получение Уточнения:

    Если значение патэрна leader-pattern равно "use-content", то направление block-progression-dimension прямоугольника содержимого определяется тем же способом, что и для строчных областей; в ином случае оно определяется уточнением rule-thickness.

    Ограничения:

    Если заполнитель/leader имеет минимальную длину слишком большую, чтобы разместиться в строчной области, заполнитель начнёт новую строку. Если он слишком велик, чтобы разместиться в одной строке, он будет переполнять строку и потенциально переполнять область reference-area в соответствии с уточнением overflow контейнера.

    ОФ fo:leader может иметь любые инлайн- ОФ и символы в качестве потомков, за исключением того, что fo:leaders не может вкладываться. Потомки игнорируются, если только значение уточнения leader-pattern не равно "use-content".

    ПРИМЕЧАНИЕ:

    Если значение уточнения leader-pattern равно "use-content" и fo:leader не имеет потомков, заполнение будет сделано пустым пространством.

    Инлайн-область, генерируемая fo:leader, имеет размер в направлении inline-progression-direction, который будет равен минимально leader-length.minimum и максимально leader-length.maximum.

    Для строчных областей, специфицированных с выравниванием по формату/justify, выравниваемая по формату строчная область обязана учитывать уточнение leader-alignment, любой инлайн-области, генерируемой fo:leader'ами.

    Если значением уточнения leader-pattern является "dots" или "use-content", применяются следующие ограничения:

    Инлайн-область, генерируемая объектом fo:leader, имеет в качестве потомков области, возвращаемые потомками объекта fo:leader или получаемые путём форматирования патэрна, специфицированного в уточнении leader-pattern, повторяемого интегральное количество раз. Если ширина даже одного повторения больше размера инлайн-области в направлении inline-progression-direction, инлайн-область должна быть заполнена пустым пространством.
    space-start и space-end областей потомков устанавливается для вычисления ограничений, специфицируемых в уточнениях leader-pattern-width и leader-alignment.

    ПРИМЕЧАНИЕ:

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

    ПРИМЕЧАНИЕ:

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

    ПРИМЕЧАНИЕ:

    fo:leader может быть "обёрнут" в fo:block, давая в результате блок-область со строчной областью, содержащей заполнитель, для создания линий, разделяющих или обрамляющих блок-области.

    Содержимое:

    (#PCDATA|%inline;)*
    

    Содержимое не может содержать fo:leader, fo:inline-container, fo:block-container, fo:float, fo:footnote или fo:marker иначе, как прямых дочерних элементов или потомков.

    Следующие свойства применяются к данному ОФ:


    6.6.10 fo:page-number

    Обычное Использование:

    ОФ fo:page-number используется для получения инлайн-области, чьим содержимым будет номер страницы, на которой инлайн-область размещена.

    Области:

    ОФ fo:page-number генерирует и возвращает одну нормальную инлайн-область/inline-area.

    Ограничения:

    Дочерние области этой инлайн-области будут теми же, что и в результате форматирования фрагмента результирующего дерева, состоящего из объектов потока fo:character; одного для каждого символа в строке page-number и с единственным специфицированным свойством "character".

    Строка page-number/номер страницы получается путём конвертации номера страницы, на которой инлайн-область размещена в соответствии со свойствами конверсии чисел в строки родительского объекта fo:page-sequence.

    ПРИМЕЧАНИЕ:

    Свойствами конверсии являются: [7.24.1 "format"], [7.24.2 "grouping-separator"], [7.24.3 "grouping-size"], [7.24.4 "letter-value"], [7.9.1 "country"] и [7.9.2 "language"].

    Содержимое:

    EMPTY
    

    Следующие свойства применяются к данному ОФ:


    6.6.11 fo:page-number-citation

    Обычное Использование:

    fo:page-number-citation используется как ссылка на page-number страницы, содержащей первую нормальную область, возвращаемую цитируемым ОФ.

    ПРИМЕЧАНИЕ:

    Может использоваться для предоставления номеров страниц в оглавлениях, перекрёстных ссылках и вхождениях индексов.

    Области:

    ОФ fo:page-number-citation генерирует и возвращает одну нормальную инлайн-область.

    Ограничения:

    Цитируемый номер страницы/page-number это номер страницы, содержащей, в качестве потомка, первую нормальную область, возвращаемую объектом форматирования с уточнением id, соответствующим уточнению ref-id объекта fo:page-number-citation (ОФ, на который ссылаются).

    Строка цитируемого номер страницы получается путём конвертации цитируемого page-number в соответствии со свойствами конверсии чисел в строки родительского fo:page-sequence ОФ, на который ссылаются.

    ПРИМЕЧАНИЕ:

    Свойствами конверсии являются: [7.24.1 "format"], [7.24.2 "grouping-separator"], [7.24.3 "grouping-size"], [7.24.4 "letter-value"], [7.9.1 "country"] и [7.9.2 "language"].

    Дочерние области, генерируемой инлайн-области - те же, что и получаемые в результате форматирования фрагмента результирующего дерева, состоящего из объектов потока fo:character; одного для каждого символа в цитируемой строке page-number и с единственным специфицированным свойством "character".

    Содержимое:

    EMPTY
    
     

    Следующие свойства применяются к данному ОФ:



    6.7 Объекты Форматирования для Таблиц

    6.7.1 Введение

    Имеется 9 ОФ, используемых при конструировании таблиц: fo:table-and-caption, fo:table, fo:table-column, fo:table-caption, fo:table-header, fo:table-footer, fo:table-body, fo:table-row и fo:table-cell.
    Структура результирующего дерева показана ниже.

    6.7.1.1 Примеры 6.7.1.1.1 Простая центрированная таблица с отступами

    Код:

    <doc>
    <table>
    <caption><p>Caption for this table</p></caption>
    <tgroup cols="3" width="325pt">
    <colspec colwidth="100pt"/>
    <colspec colwidth="150pt"/>
    <colspec colwidth="75pt"/>
    <tbody>
    <row>
    <entry><p>Cell 1</p></entry>
    <entry><p>Cell 2</p></entry>
    <entry><p>Cell 3</p></entry>
    </row>
    </tbody>
    </tgroup>
    </table>
    </doc>
    

    Таблица и её заголовок центрированы в доступном пространстве между следующими отступами: start-indent="100pt" и end-indent="0pt". Центровка и установка отступов нежелательны для содержимого заголовка и ячеек.

    Таблица стиля XSL:

    <?xml version='1.0'?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                    xmlns:fo="http://www.w3.org/1999/XSL/Format"
                    version='1.0'>
    
    <xsl:attribute-set name="inside-table">
      <xsl:attribute name="start-indent">0pt</xsl:attribute>
      <xsl:attribute name="text-align">start</xsl:attribute>
    </xsl:attribute-set>
    
    <xsl:template match="p">
      <fo:block>
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
    
    <xsl:template match="table">
      <fo:table-and-caption text-align="center" start-indent="100pt">
        <xsl:apply-templates/>
      </fo:table-and-caption>
    </xsl:template>
    
    <xsl:template match="caption">
      <fo:table-caption xsl:use-attribute-sets="inside-table">
        <xsl:apply-templates/>
      </fo:table-caption>
    </xsl:template>
    
    <xsl:template match="tgroup">
      <fo:table width="{@width}" table-layout="fixed">
        <xsl:apply-templates/>
      </fo:table>
    </xsl:template>
    
    <xsl:template match="colspec">
      <fo:table-column column-width="{@colwidth}">
        <xsl:attribute name="column-number">
          <xsl:number count="colspec"/>
        </xsl:attribute>
      </fo:table-column>
    </xsl:template>
    
    <xsl:template match="tbody">
      <fo:table-body xsl:use-attribute-sets="inside-table">
        <xsl:apply-templates/>
      </fo:table-body>
    </xsl:template>
    
    <xsl:template match="row">
      <fo:table-row>
        <xsl:apply-templates/>
      </fo:table-row>
    </xsl:template>
    
    <xsl:template match="entry">
      <fo:table-cell>
        <xsl:apply-templates/>
      </fo:table-cell>
    </xsl:template>
    
    </xsl:stylesheet>
    

    Результирующий Экземпляр: элементы и атрибуты в пространстве имён fo:

    <fo:table-and-caption text-align="center" start-indent="100pt">
    
      <fo:table-caption start-indent="0pt" text-align="start">
        <fo:block>Caption for this table
        </fo:block>
      </fo:table-caption>
    
      <fo:table width="325pt" table-layout="fixed">
    
        <fo:table-column column-width="100pt" column-number="1">
        </fo:table-column>
        <fo:table-column column-width="150pt" column-number="2">
        </fo:table-column>
        <fo:table-column column-width="75pt" column-number="3">
        </fo:table-column>
    
        <fo:table-body start-indent="0pt" text-align="start">
    
        <fo:table-row>
    
        <fo:table-cell>
        <fo:block>Cell 1
        </fo:block>
        </fo:table-cell>
        <fo:table-cell>
        <fo:block>Cell 2
        </fo:block>
        </fo:table-cell>
        <fo:table-cell>
        <fo:block>Cell 3
        </fo:block>
        </fo:table-cell>
    
        </fo:table-row>
    
        </fo:table-body>
    
      </fo:table>
    
    </fo:table-and-caption>
    

    6.7.1.1.2 Простая таблица с относительной спецификацией ширины столбцов

    В этом примере для элементов таблицы использована простая разметка типа табличной модели "Oasis".
    Ширина столбцов специфицирована путём использования полной спецификации относительной ширины столбцов.

    Код:

    <doc>
    <table>
    <tgroup cols="3">
    <colspec colname="col1" colwidth="1*"/>
    <colspec colname="col2" colwidth="2*+2pi"/>
    <colspec colname="col3" colwidth="72"/>
    <tbody>
    <row>
    <entry colnum="1" valign="top"><p>Cell 1</p></entry>
    <entry colnum="2" valign="middle" align="center"><p>Cell 2</p></entry>
    <entry colnum="3" align="center"><p>Cell 3</p></entry>
    </row>
    </tbody>
    </tgroup>
    </table>
    </doc>
    

    Таблица стилей XSL:

    <?xml version='1.0'?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                    xmlns:fo="http://www.w3.org/1999/XSL/Format"
                    version='1.0'>
    
    <xsl:template match="p">
      <fo:block>
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
    
    <xsl:template match="table">
      <fo:table width="12cm" table-layout="fixed">
        <xsl:apply-templates/>
      </fo:table>
    </xsl:template>
    
    <xsl:template match="colspec">
      <fo:table-column>
        <xsl:attribute name="column-number">
          <xsl:number count="colspec"/>
        </xsl:attribute>
        <xsl:attribute name="column-width">
          <xsl:call-template name="calc.column.width">
            <xsl:with-param name="colwidth">
              <xsl:value-of select="@colwidth"/>
            </xsl:with-param>
          </xsl:call-template>
        </xsl:attribute>
      </fo:table-column>
    </xsl:template>
    
    <xsl:template match="tbody">
      <fo:table-body>
        <xsl:apply-templates/>
      </fo:table-body>
    </xsl:template>
    
    <xsl:template match="row">
      <fo:table-row>
        <xsl:apply-templates/>
      </fo:table-row>
    </xsl:template>
    
    <xsl:template match="entry">
      <fo:table-cell column-number="{@colnum}">
        <xsl:if test="@valign">
          <xsl:choose>
            <xsl:when test="@valign='middle'">
              <xsl:attribute name="display-align">center</xsl:attribute>
            </xsl:when>
            <xsl:otherwise>
              <xsl:attribute name="display-align">
                <xsl:value-of select="@valign"/>
              </xsl:attribute>
            </xsl:otherwise>
          </xsl:choose>
        </xsl:if>
        <xsl:if test="@align">
          <xsl:attribute name="text-align">
            <xsl:value-of select="@align"/>
          </xsl:attribute>
        </xsl:if>
        <xsl:apply-templates/>
      </fo:table-cell>
    </xsl:template>
    
    
    <xsl:template name="calc.column.width">
    <!-- **
         * <p>Высчитывается спецификация ОФ XSL ширины столбцов из
         * полной спецификации относительной ширины столбцов.</p>
         *
         * <p>Ширина столбцов таблицы имеет следующие базовые формы: </p>
         *
         * <ul>
         * <li><b>99.99units</b>, фиксированный спецификатор длины.</li>
         * <li><b>99.99</b>, фиксированный спецификатор длины без указания единиц измерения.</li>
         * <li><b>99.99*</b>, спецификатор относительной длины.</li>
         * <li><b>99.99*+99.99units</b>, комбинация из обоих.</li>
         * </ul>
         *
         * <p>Единицами измерения являются пункты (pt), пики (pi), сантиметры (cm),
         * миллиметры (mm) и дюймы (in). Это те же единицы, что и в XSL,
         * за исключением того, что аббревиатура XSL для пик - "pc" вместо "pi". Если
         * спецификатор длины не имеет единиц измерения, по умолчанию принимаются (pt).</p>
         *
         * <p>Спецификаторы относительной длины представлены в XSL функцией
         * proportional-column-width().</p>
         *
         * <p>Вот несколько примеров:</p>
         *
         * <ul>
         * <li>"36pt" становится "36pt"</li>
         * <li>"3pi" становится "3pc"</li>
         * <li>"36" становится "36pt"</li>
         * <li>"3*" становится "proportional-column-width(3)"</li>
         * <li>"3*+2pi" становится "proportional-column-width(3)+2pc"</li>
         * <li>"1*+2" становится "proportional-column-width(1)+2pt"</li>
         * </ul>
         *
         * @param colwidth Спецификация ширины столбцов.
         *
         * @returns Спецификация XSL ширины столбцов.
         * -->
      <xsl:param name="colwidth">1*</xsl:param>
    
      <!-- Ok, colwidth может иметь любую из следующих форм: -->
      <!--        1*       = пропорциональная ширина -->
      <!--     1unit       = 1.0 единиц ширины -->
      <!--         1       = 1pt ширины -->
      <!--  1*+1unit       = пропорциональная ширина + некоторая фиксированная ширина -->
      <!--      1*+1       = пропорциональная ширина + некоторая фиксированная ширина -->
    
      <!-- Если имеется пропорциональная ширина, транслируйте её в XSL -->
      <xsl:if test="contains($colwidth, '*')">
        <xsl:text>proportional-column-width(</xsl:text>
        <xsl:value-of select="substring-before($colwidth, '*')"/>
        <xsl:text>)</xsl:text>
      </xsl:if>
    
      <!-- теперь получаем непропорциональную часть спецификации -->
      <xsl:variable name="width-units">
        <xsl:choose>
          <xsl:when test="contains($colwidth, '*')">
            <xsl:value-of
                 select="normalize-space(substring-after($colwidth, '*'))"/>
          </xsl:when>
          <xsl:otherwise>
            <xsl:value-of select="normalize-space($colwidth)"/>
          </xsl:otherwise>
        </xsl:choose>
      </xsl:variable>
    
      <!-- Теперь единицы ширины могут иметь любую из следующих форм: -->
      <!--                 = <пустая строка> -->
      <!--     1unit       = 1.0 единиц ширины -->
      <!--         1       = 1pt ширины -->
      <!-- с возможным ведущим значком -->
    
      <!-- Получаем часть ширины путём стирания части единиц и отбрасывания -->
      <!-- white space. -->
      <xsl:variable name="width"
           select="normalize-space(translate($width-units,
                                             '+-0123456789.abcdefghijklmnopqrstuvwxyz',
                                             '+-0123456789.'))"/>
    
      <!-- Получаем часть ширины путём стирания части ширины и отбрасывания -->
      <!-- white space. -->
      <xsl:variable name="units"
           select="normalize-space(translate($width-units,
                                             'abcdefghijklmnopqrstuvwxyz+-0123456789.',
                                             'abcdefghijklmnopqrstuvwxyz'))"/>
    
      <!-- Вывод ширины -->
      <xsl:value-of select="$width"/>
    
      <!-- Вывод единиц, оттранслированных соответствующим образом -->
      <xsl:choose>
        <xsl:when test="$units = 'pi'">pc</xsl:when>
        <xsl:when test="$units = '' and $width != ''">pt</xsl:when>
        <xsl:otherwise><xsl:value-of select="$units"/></xsl:otherwise>
      </xsl:choose>
    </xsl:template>
    
    </xsl:stylesheet>
    

    Результирующий Экземпляр: элементы и атрибуты пространства имён fo:

    <fo:table width="12cm" table-layout="fixed">
      <fo:table-column column-number="1" column-width="proportional-column-width(1)">
      </fo:table-column>
      <fo:table-column column-number="2" column-width="proportional-column-width(2)+2pc">
      </fo:table-column>
      <fo:table-column column-number="3" column-width="72pt">
      </fo:table-column>
      <fo:table-body>
        <fo:table-row>
          <fo:table-cell column-number="1" display-align="top">
            <fo:block>Cell 1
            </fo:block>
          </fo:table-cell>
          <fo:table-cell column-number="2" display-align="center" text-align="center">
            <fo:block>Cell 2
            </fo:block>
          </fo:table-cell>
          <fo:table-cell column-number="3" text-align="center">
            <fo:block>Cell 3
            </fo:block>
          </fo:table-cell>
        </fo:table-row>
      </fo:table-body>
    </fo:table>
    


    6.7.2 fo:table-and-caption

    Обычное Использование:

    Объект потока fo:table-and-caption используется для форматирования таблицы вместе с её заголовком.

    ПРИМЕЧАНИЕ:

    fo:table-and-caption может размещаться инлайн путём заключения его в контейнер fo:inline-container.

    ПРИМЕЧАНИЕ:

    Этот ОФ соответствует анонимному боксу CSS, содержащему заголовок таблицы и саму таблицу.

    Области:

    ОФ fo:table-and-caption генерирует одну или более нормальных блок-областей.
    fo:table-and-caption возвращает эти области, любые области page-level-out-of-line и reference-level-out-of-line, возвращаемые потомками объекта fo:table-and-caption.

    Ограничения:

    Никакая область не может иметь более одной дочерней области, возвращаемой тем же самым ОФ fo:table-and-caption.

    Потомки областей, генерируемых объектом fo:table-and-caption, это одна из двух областей: одна для заголовка таблицы и одна для самой таблицы. Они позиционируются друг относительно друга так, как это специфицировано уточнением caption-side. Они размещаются относительно прямоугольника содержимого генерируемой области, как специфицировано уточнением text-align.

    Содержимое:

    (table-caption?,table)
    

    Этот ОФ дополнительно может содержать последовательность из нуль или более объектов fo:marker в качестве начальных дочерних объектов.

    Следующие свойства применяются к данному ОФ:


    6.7.3 fo:table

    Обычное Использование:

    Объект потока fo:table используется для форматирования табличного материала таблицы.

    Объект потока fo:table flow и его дочерние объекты потока моделируют визуальную структуру таблицы в манере "row primary/первичность рядов?". Таблица в целом может рассматриваться как состоящая из решётки рядов и столбцов, где каждая ячейка занимает одну или более единиц решётки в направлениях row-progression-direction и column-progression-direction.

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

    Области:

    ОФ fo:table генерирует и возвращает одну или более нормальных блок-областей. Кроме того, fo:table возвращает любые области page-level-out-of-line и reference-level-out-of-line, возвращаемые дочерними объектами объекта fo:table.

    Области, генерируемые и возвращаемые ОФ fo:table, имеют в качестве дочерних:

    • Области, с одним фоном, соответствующие шапке, футеру, телу таблицы, захваченным рядам, столбцам и рядам.

      ПРИМЕЧАНИЕ:

      Захватывающие столбцы (fo:table-column со значением "number-columns-spanned" больше 1) используются  тем же путём, что и "группы столбцов/column groups" в CSS2 при определении фона.

    • Области, возвращаемые объектами fo:table-cell.

    Эти области имеют z-индеус, контролирующий порядок представления в соответствии со спецификацией раздела 17.5.1 в CSS2 (http://www.w3.org/TR/REC-CSS2/tables.html#table-layers").

    ПРИМЕЧАНИЕ:

    Захватывающая ячейка может иметь свой фон для каждой единицы решётки, занимаемой ею.

    Получение Уточнения:

    Области, генерируемые и возвращаемые ОФ  fo:table, имеют значение "true" для is-reference-area.

    Направления column-progression-direction и row-progression-direction определяются уточнением writing-mode/режим письма. Столбцы используют направление inline-progression-direction, а ряды - направление block-progression-direction.

    Метод получения уточнений рамки таблицы специфицируется свойством "border-collapse".

    Если свойство "border-collapse" имеет значение "separate", рамка составляется из двух компонентов. Первый, размещаемый с внутренним краем, прилегающим к линии внешней границы решётки таблицы, имеет ширину в половину значения свойства "border-separation". Он заполняется в соответствии со свойством "background" объекта fo:table. Второй, снаружи от линии внешней границы решётки таблицы, размещает, по каждой стороне таблицы, рамку на базе рамки, специфицированной для таблицы.

    Если свойство "border-collapse" имеет значение "collapse" или "collapse-with-precedence", рамка определяется для каждого сегмента на уровне ячейки.

    ПРИМЕЧАНИЕ:

    Специфицировав  "collapse-with-precedence" и подходящий высокий приоритет в спецификации рамки для fo:table, можно быть уверенным, что именно эта спецификация будет использоваться во всех сегментах рамки.

    Ограничения:

    Никакая область не может иметь более одной нормальной дочерней области, возвращаемой тем же самым ОФ fo:table.

    Размер inline-progression-dimension прямоугольника содержимого таблицы - это сумма направлений inline-progression-dimension столбцов решётки таблицы. Метод используемый для определения этих размеров inline-progression-dimension, управляется значениями уточнений table-layout и inline-progression-dimension следующим образом:

    inline-progression-dimension="auto" table-layout="auto"

    Будет использоваться автоматическое структурирование таблицы.

    inline-progression-dimension="auto" table-layout="fixed"

    Будет использоваться автоматическое структурирование таблицы.

    inline-progression-dimension=<length> or <percentage> table-layout="auto"

    Будет использоваться автоматическое структурирование таблицы.

    inline-progression-dimension=<length> or <percentage> table-layout="fixed"

    Будет использоваться фиксированное структурирование таблицы.

    Автоматическое и фиксированное структурирование таблицы определено в разделе 17.5.2 спецификации CSS2 (http://www.w3.org/TR/REC-CSS2/tables.html#width-layout").

    Метод определения размера block-progression-dimension таблицы управляется уточнением block-progression-dimension.

    ПРИМЕЧАНИЕ:

    Спецификация CSS2 явно не специфицирует нужное поведение в случае несоответствия между явно специфицированным размером block-progression-dimension таблицы и размерами block-progression-dimension содержимого.

    ПРИМЕЧАНИЕ:

    Если используется фиксированная структура таблицы, разрешается использовать только функцию "proportional-column-width()".

    Если необходимо использовать пропорциональную ширину столбцов в таблице с неизвестной явно установленной шириной, то размер inline-progression-dimension не может специфицироваться как "auto". Вместо этого, ширина обязана быть специфицирована как процентное значение. Например, установки table-layout="fixed" и inline-progression-dimension="100%" дадут столбцы пропорциональной ширины, одновременно создавая таблицу, максимально широкую в данном контексте.

    ПРИМЕЧАНИЕ:

    Результат подобного использования процентных значений может быть непредсказуемым, особенно при использовании автоматического структурирования таблицы.

    Если две ячейки таблицы перекрываются, это ошибка.

    ПРИМЕЧАНИЕ:

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

    Содержимое:

    (table-column*,table-header?,table-footer?,table-body+)
    

    Этот ОФ дополнительно может содержать последовательность из нуль или более объектов fo:marker в качестве начальных дочерних объектов.

    Следующие свойства применяются к данному ОФ:


    6.7.4 fo:table-column

    Обычное Использование:

    Вспомогательный ОФ fo:table-column специфицирует характеристики, применяемые в ячейках таблицы, имеющих общий столбец и захват. Наиболее важным является свойство "column-width".

    Области:

    ОФ fo:table-column не генерирует и не возвращает областей. Он содержит набор уточнений, предоставляющих ограничения на ширину столбцов и спецификацию некоторых характеристик представления, таких как фон, которые влияют на области, генерируемые объектом fo:table (см. [6.7.3 fo:table]).
    Наследуемые свойства также могут быть специфицированы в fo:table-column. На них можно ссылаться в выражениях через функцию from-table-column().

    Ограничения:

    Отсутствуют.

    Содержимое:

    EMPTY
    

    Следующие свойства применяются к данному ОФ:


    6.7.5 fo:table-caption

    Обычное Использование:

    ОФ fo:table-caption используется как контейнер объектов форматирования, содержащих заголовок таблицы, только в том случае, если используется fo:table-and-caption.

    Области:

    ОФ fo:table-caption генерирует одну или более нормальных областей reference-area.
    fo:table-caption возвращает эти области reference-area и любые области page-level-out-of-line, возвращаемые дочерними объектами объекта fo:table-caption.

    Получение Уточнения:

    Области, генерируемые ОФ fo:table-caption, имеют для is-reference-area значение "true".

    Ограничения:

    Для случая, когда значение уточнения caption-side равно "before" или "after", размер inline-progression-dimension прямоугольника содержимого генерируемой области reference-area равен inline-progression-dimension прямоугольника содержимого области reference-area, которая содержит её в себе.

    Если значение равно "start" или "end", размер inline-progression-dimension генерируемой области reference-area ограничивается значением уточнения inline-progression-dimension.

    Если значение равно "top", "bottom", "left" или "right", это значение отображается тем же способом, что и для соответствующих свойств (см. [5.3 Вычисление Значений Соответствующих Свойств]), и свойство рассматривается тогда так, как если бы соответствующее значение было специфицировано.

    Если заголовок позиционируется перед таблицей, области, генерируемые объектом fo:table-caption, будут размещены в дереве областей, хотя fo:table-caption и имеет свойство "keep-with-next" со значением "always".

    Если заголовок позиционируется после таблицы, области, генерируемые объектом fo:table-caption, будут размещены в дереве областей, хотя fo:table-caption и имеет свойство "keep-with-previous" со значением "always".

    Никакая область не может иметь более одной нормальной дочерней области, возвращаемой одним и тем же ОФ fo:table-caption.

    Потомки каждой нормальной области, возвращаемой объектом fo:table-caption, обязаны быть нормальными блок-областями, возвращаемыми дочерними объектами объекта fo:table-caption, обязаны быть правильно стэкированы и обязаны быть правильно упорядоченными.

    Любые области reference-level-out-of-line, возвращаемые потомками объекта fo:table-caption, обрабатываются так, как описано в разделе [6.10.2 fo:float].

    Содержимое:

    (%block;)+
    

    Этот ОФ дополнительно может содержать последовательность из нуль или более объектов fo:marker в качестве начальных дочерних объектов.

    Следующие свойства применяются к данному ОФ:


    6.7.6 fo:table-header

    Обычное Использование:

    ОФ fo:table-header используется для вмещения содержимого шапки таблицы.

    Области:

    ОФ fo:table-header не генерирует никаких областей. ОФ fo:table-header возвращает последовательность областей, создаваемую путём соединения последовательностей областей, возвращаемых каждым потомком объекта fo:table-header.

    Ограничения:

    Порядок объединения последовательностей областей, возвращаемых потомками объекта fo:table-header, тот же, что и порядок расположения потомков под fo:table-header.

    Содержимое:

    (table-row+|table-cell+)
    

    fo:table-header имеет fo:table-row (одного или более) в качестве потомков или, альтернативно, fo:table-cell (одного или более). В последнем случае ячейки группируются в ряды с использованием свойств starts-row и ends-row.

    Этот ОФ дополнительно может содержать последовательность из нуль или более объектов fo:marker в качестве начальных дочерних объектов.

    Следующие свойства применяются к данному ОФ:

    ПРИМЕЧАНИЕ:

    Из этого набора применяются только свойства фона. Если значение border-collapse равно "collapse" или "collapse-with-precedence" для таблицы, применяются также свойства рамки.


    6.7.7 fo:table-footer

    Обычное Использование:

    ОФ fo:table-footer используется как контейнер для футера таблицы.

    Области:

    ОФ fo:table-footer не генерирует никаких областей. ОФ fo:table-footer возвращает последовательность областей, создаваемую путём соединения последовательностей областей, возвращаемых каждым потомком объекта fo:table-footer.

    Ограничения:

    Порядок объединения последовательностей областей, возвращаемых потомками объекта fo:table-footer, тот же, что и порядок расположения потомков под fo:table-footer.

    Содержимое:

    (table-row+|table-cell+)
    

    fo:table-footer имеет fo:table-row (одного или более) в качестве потомков или, альтернативно, fo:table-cell (одного или более). В последнем случае ячейки группируются в ряды с использованием свойств starts-row и ends-row.

    Этот ОФ дополнительно может содержать последовательность из нуль или более объектов fo:marker в качестве начальных дочерних объектов.

    Следующие свойства применяются к данному ОФ:

    ПРИМЕЧАНИЕ:

    Из этого набора применяются только свойства фона. Если значение border-collapse равно "collapse" или "collapse-with-precedence" для таблицы, применяются также свойства рамки.


    6.7.8 fo:table-body

    Обычное Использование:

    ОФ fo:table-body используется как контейнер тела таблицы.

    Области:

    ОФ fo:table-body не генерирует никаких областей. ОФ fo:table-body возвращает последовательность областей, создаваемую путём соединения последовательностей областей, возвращаемых каждым потомком объекта fo:table-body.

    Ограничения:

    Порядок объединения последовательностей областей, возвращаемых потомками объекта fo:table-body, тот же, что и порядок расположения потомков под fo:table-body.

    Содержимое:

    (table-row+|table-cell+)
    

    fo:table-body имеет fo:table-row (одного или более) в качестве потомков или, альтернативно, fo:table-cell одного или более). В последнем случае ячейки группируются в ряды с использованием свойств starts-row и ends-row.

    Этот ОФ дополнительно может содержать последовательность из нуль или более объектов fo:marker в качестве начальных дочерних объектов.

    Следующие свойства применяются к данному ОФ:

    ПРИМЕЧАНИЕ:

    Из этого набора применяются только свойства фона. Если значение border-collapse равно "collapse" или "collapse-with-precedence" для таблицы, применяются также свойства рамки.


    6.7.9 fo:table-row

    Обычное Использование:

    ОФ fo:table-row используется для группирования ячеек таблицы в ряды: все ячейки ряда таблицы начинаются в одном геометрическом ряду решётки таблицы.

    Области:

    ОФ fo:table-row не генерирует никаких областей. ОФ fo:table-row возвращает последовательность областей, создаваемую путём соединения последовательностей областей, возвращаемых каждым потомком объекта fo:table-row.
    fo:table-row содержит спецификацию некоторых презентационных характеристик, таких как фон, которые влияют на области, генерируемые fo:table (см. [6.7.3 fo:table]).

    Ограничения:

    Порядок объединения последовательностей областей, возвращаемых потомками объекта fo:table-row, тот же, что и порядок расположения потомков под fo:table-row.

    Метод определения высоты ряда решётки управляется уточнением row-height.

    Содержимое:

    (table-cell+)
    

    Следующие свойства применяются к данному ОФ:

    ПРИМЕЧАНИЕ:

    Из этого набора применяются только свойства фона. Если значение border-collapse равно "collapse" или "collapse-with-precedence" для таблицы, применяются также свойства рамки.


    6.7.10 fo:table-cell

    Обычное Использование:

    ОФ fo:table-cell используется для группирования ячейки таблицы.

    Свойства "starts-row" и "ends-row" могут использоваться, если вводимые данные не содержат элементов, содержащих ячейки в каждом ряду, а, вместо этого, например, каждый ряд начинается с элементов определённого типа.

    Области:

    ОФ fo:table-cell генерирует одну или более нормальных областей reference-area. fo:table-cell возвращает эти области reference-area и любые области page-level-out-of-line, возвращаемые потомками fo:table-cell.

    Получение Уточнения:

    Области, генерируемые ОФ fo:table-cell, имеют для is-reference-area уточнение "true".

    Метод получения рамки ячейки специфицируется уточнением border-collapse.

    Если уточнение border-collapse имеет значение "separate", рамка составляется из двух компонентов. Первый, прилегающий своим внешним краем к линии границы решётки таблицы, имеет ширину в половину значения уточнения border-separation. Он заполняется в соответствии с уточнением background объекта fo:table. Внутри него рамка размещается, по каждой стороне ячейки, как рамка на базе специфицированной рамки ячейки или наследуется.

    Если уточнение border-collapse имеет значение "collapse-with-precedence", рамка для каждой стороны ячейки определяется выбором, для каждого сегмента рамки, из всех спецификаций рамки для данного сегмента рамки с наивысшим приоритетом. Будет считаться ошибкой, если имеются две рамки с одинаковым приоритетом, но не идентичные. Каждый сегмент рамки размещается центрированно по граничной линии решётки таблицы. Для устройств, не поддерживающих субпикселное отображение, если эффективная ширина рамки определяется как нечётное количество пикселов, реализацией будет определяться, на какой стороне граничной линии решётки будет размещаться это нечётное количество пикселов.

    Если уточнение border-collapse имеет значение "collapse", рамка на каждой стороне ячейки определяется выбором, для каждого сегмента рамки, из всех спецификаций рамки для данного сегмента, рамки, имеющей самый "привлекательный" стиль рамки, см. ниже детали. Каждый сегмент рамки размещается центрированно по граничной линии решётки таблицы. Для устройств, не поддерживающих субпикселное отображение, если эффективная ширина рамки определяется как нечётное количество пикселов, реализацией будет определяться, на какой стороне граничной линии решётки будет размещаться это нечётное количество пикселов.
    Если имеется конфликт между стилями сжимающихся сегментов рамки, следующие правила определяют, какой стиль рамки "побеждает":

  • Рамки со значением 'border-style', равным 'hidden', имеют приоритет над всеми другими конфликтующими рамками. Любые рамки с таким значением подавляют все рамки в данном месте.

  • Рамки со стилем 'none' имеют низший приоритет. Только в том случае, когда свойства рамок всех элементов, встречающихся у этого края, равны 'none', рамка будет отсутствовать (но имейте в виду, что 'none' - это значение по умолчанию для стиля рамки.)

  • Если ни один из стилей не скрыт/'hidden' и не менее одного из них - не 'none', тогда более узкие рамки отбрасываются в пользу более широких.

  • Если стили оставшихся рамок имеют одну 'border-width', эти стили имеют предпочтение в таком порядке: 'double', 'solid', 'dashed', 'dotted', 'ridge', 'outset', 'groove' и - самый низкий - 'inset'.

  • Если стили рамок различаются только цветом, тогда набор стилей ячейки берёт верх над набором ряда, который берёт верх над набором группы рядов, столбцов, групп столбцов и, наконец, таблицы.

  • Ограничения:

    Ячейка таблицы занимает одну или более единиц решётки в направлениях row-progression-direction и column-progression-direction. Прямоугольник содержимого ячейки имеет размер части решётки, занимаемой ячейкой, минус, для каждой из 4 сторон:

    • Если уточнение border-collapse имеет значение "separate": половина уточнения border-separation; иначе - 0.

    • Если уточнение border-collapse имеет значение  "separate": толщина рамки ячейки; иначе - половина толщины действующей рамки.

    • Заполнение ячейки.

    Метод определения размера block-progression-dimension ячейки в решётке управляется уточнением row-height.

    Никакая область не может иметь более одной нормальной области-потомка, генерируемой одним и тем же ОФ fo:table-cell.

    Потомки каждой нормальной области, возвращаемой ОФ fo:table-cell, обязаны быть нормальными блок-областями, возвращаемыми потомками fo:table-cell, обязаны правильно стэкироваться и правильно упорядочиваться.

    Любые области reference-level-out-of-line, возвращаемые потомками объекта fo:table-cell, обрабатываются так, как описано в разделе [6.10.2 fo:float].

    Содержимое:

    (%block;)+
    

    Этот ОФ дополнительно может содержать последовательность из нуль или более объектов fo:marker в качестве начальных дочерних объектов.

    Следующие свойства применяются к данному ОФ:


    6.8 Объекты Форматирования для Списков

    6.8.1 Введение

    Имеется 4 ОФ, используемых для построения списков: fo:list-block, fo:list-item, fo:list-item-label и fo:list-item-body.

    Древовидное представление ОФ для Списков.

    ОФ fo:list-block играет роль контейнера полного списка и спецификатора значений, используемых для геометрии списков в направлении inline-progression-direction (см. ниже детали).

    Потомки fo:list-block  - это один или более fo:list-item, каждый из которых содержит пару fo:list-item-label и fo:list-item-body.

    fo:list-item играет роль контейнера каждого элемента списка.

    fo:list-item-label играет роль контейнера содержимого, ОФ блок-уровня, для лэйбла list-item: обычно это fo:block, содержащий число, символ или букву.

    fo:list-item-body играет роль контейнера содержимого, ОФ блок-уровня, для тела list-item: обычно это один или более fo:block.

    Размещение, в направлении block-progression-direction, лэйбла, с учётом тела, выполняется в соответствии со свойством "vertical-align" объекта fo:list-item.

    Спецификация геометрии списка в направлении inline-progression-direction достигается путём:

    • Специфицирования подходящих значений для свойств "provisional-distance-between-starts" и "provisional-label-separation". Свойство "provisional-distance-between-starts" специфицирует желаемое расстояние между начальными отступами/start-indents лэйбла и телом элемента списка. Свойство "provisional-label-separation" специфицирует желаемое расстояние между конечным отступом/end-indent лэйбла и начальным отступом/start-indent тела элемента списка.

    • Спецификации end-indent="label-end()" для объекта fo:list-item-label.

    • Спецификации start-indent="body-start()" для объекта fo:list-item-body.

                ПРИМЕЧАНИЕ:

    Функции, специфичные для списков, определены в разделах [7.28.3 "provisional-label-separation"] и [7.28.4 "provisional-distance-between-starts"].

    Start-indent элемента list-item-label и end-indent элемента list-item-body, если необходимо, специфицируются обычно как длина.


    6.8.1.1 примеры 6.8.1.1.1 Нумерованный список

    Все элементы списка содержатся в элементе "ol". Каждый элемент списка содержится в элементе "item" и содержит текст (в отличие от параграфов).

    Стиль состоит в нумеровании элементов списка в алфавитном порядке с точкой после буквы.

    Код:

    <ol>
    <item>List item 1.</item>
    <item>List item 2.</item>
    <item>List item 3.</item>
    </ol>
    

    Таблица стилей XSL:

    <?xml version='1.0'?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                    xmlns:fo="http://www.w3.org/1999/XSL/Format"
                    version='1.0'>
    
    <xsl:template match="ol">
      <fo:list-block provisional-distance-between-starts="15mm"
       provisional-label-separation="5mm">
        <xsl:apply-templates/>
      </fo:list-block>
    </xsl:template>
    
    <xsl:template match="ol/item">
      <fo:list-item>
        <fo:list-item-label start-indent="5mm" end-indent="label-end()">
          <fo:block>
            <xsl:number format="a."/>
          </fo:block>
        </fo:list-item-label>
        <fo:list-item-body start-indent="body-start()">
          <fo:block>
            <xsl:apply-templates/>
          </fo:block>
        </fo:list-item-body>
      </fo:list-item>
    </xsl:template>
    
    </xsl:stylesheet>
    

    Результирующий Экземпляр: элементы и атрибуты в пространстве имён fo:

    <fo:list-block provisional-distance-between-starts="15mm"
      provisional-label-separation="5mm">
    
      <fo:list-item>
        <fo:list-item-label start-indent="5mm" end-indent="label-end()">
          <fo:block>a.
          </fo:block>
        </fo:list-item-label>
        <fo:list-item-body start-indent="body-start()">
          <fo:block>List item 1.
          </fo:block>
        </fo:list-item-body>
      </fo:list-item>
    
      <fo:list-item>
        <fo:list-item-label start-indent="5mm" end-indent="label-end()">
          <fo:block>b.
          </fo:block>
        </fo:list-item-label>
        <fo:list-item-body start-indent="body-start()">
          <fo:block>List item 2.
          </fo:block>
        </fo:list-item-body>
      </fo:list-item>
    
      <fo:list-item>
        <fo:list-item-label start-indent="5mm" end-indent="label-end()">
          <fo:block>c.
          </fo:block>
        </fo:list-item-label>
        <fo:list-item-body start-indent="body-start()">
          <fo:block>List item 3.
          </fo:block>
        </fo:list-item-body>
      </fo:list-item>
    
    </fo:list-block>
    

    6.8.1.1.2 Списки "dl" в стиле HTML

    В этом примере таблица стилей обрабатывает списки "dl" в стиле HTML, содержащие чередующиеся пары элементов "dt" и "dd", трансформируя их в fo:list-block'и.

    Сбалансированные (полные) пары "dt"/"dd"s конвертируются в элементы fo:list-item. Для несбалансированных "dt"/"dd" таблица стилей принимает следующее:

    • Несколько "dt" группируются в один fo:list-item-label в одном элементе списка.

    • Несколько DD:

      • Выводятся как отдельные ОФ list-item с пустым list-item-label, если переменная $allow-naked-dd таблицы стилей равна true.

      • Группируются в отдельный ОФ list-item-body, если $allow-naked-dd  равно false.

    Другими словами, структура:

    <doc>
    <dl>
      <dt>term</dt>
      <dd>definition</dd>
      <dt>term</dt>
      <dt>term</dt>
      <dd>definition</dd>
      <dt>term</dt>
      <dd>definition</dd>
      <dd>definition</dd>
    </dl>
    </doc>
    

    Если $allow-naked-dd  равно true, в результате даёт экземпляр: элементы и атрибуты в пространстве имён fo:

    <fo:list-block provisional-distance-between-starts="35mm"
      provisional-label-separation="5mm">
      <fo:list-item>
        <fo:list-item-label end-indent="label-end()">
          <fo:block>term
          </fo:block>
        </fo:list-item-label>
        <fo:list-item-body start-indent="body-start()">
          <fo:block>definition
          </fo:block>
        </fo:list-item-body>
      </fo:list-item>
      <fo:list-item>
        <fo:list-item-label end-indent="label-end()">
          <fo:block>term
          </fo:block>
          <fo:block>term
          </fo:block>
        </fo:list-item-label>
        <fo:list-item-body start-indent="body-start()">
          <fo:block>definition
          </fo:block>
        </fo:list-item-body>
      </fo:list-item>
      <fo:list-item>
        <fo:list-item-label end-indent="label-end()">
          <fo:block>term
          </fo:block>
        </fo:list-item-label>
        <fo:list-item-body start-indent="body-start()">
          <fo:block>definition
          </fo:block>
        </fo:list-item-body>
      </fo:list-item>
      <fo:list-item>
        <fo:list-item-label end-indent="label-end()">
        </fo:list-item-label>
        <fo:list-item-body start-indent="body-start()">
          <fo:block>definition
          </fo:block>
        </fo:list-item-body>
      </fo:list-item>
    </fo:list-block>
    

    Если $allow-naked-dd равно false, в результате даёт экземпляр: элементы и атрибуты в пространстве имён fo

    <fo:list-block provisional-distance-between-starts="35mm"
      provisional-label-separation="5mm">
      <fo:list-item>
        <fo:list-item-label end-indent="label-end()">
          <fo:block>term
          </fo:block>
        </fo:list-item-label>
        <fo:list-item-body start-indent="body-start()">
          <fo:block>definition
          </fo:block>
        </fo:list-item-body>
      </fo:list-item>
      <fo:list-item>
        <fo:list-item-label end-indent="label-end()">
          <fo:block>term
          </fo:block>
          <fo:block>term
          </fo:block>
        </fo:list-item-label>
        <fo:list-item-body start-indent="body-start()">
          <fo:block>definition
          </fo:block>
        </fo:list-item-body>
      </fo:list-item>
      <fo:list-item>
        <fo:list-item-label end-indent="label-end()">
          <fo:block>term
          </fo:block>
        </fo:list-item-label>
        <fo:list-item-body start-indent="body-start()">
          <fo:block>definition
          </fo:block>
          <fo:block>definition
          </fo:block>
        </fo:list-item-body>
      </fo:list-item>
    </fo:list-block>
    

    Таблица стилей XSL:

    <?xml version='1.0'?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                    xmlns:fo="http://www.w3.org/1999/XSL/Format"
                    version='1.0'>
    
    <xsl:include href="books-page-html-xsl_spec-dtdd.xsl"/>
    
    <xsl:template match="doc">
      <xsl:apply-templates/>
    </xsl:template>
    
    <xsl:template match="dl">
      <xsl:call-template name="process.dl"/>
    </xsl:template>
    
    <xsl:template match="dt|dd">
      <fo:block>
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
    
    </xsl:stylesheet>
    

    Подключает таблицу стилей "dtdd.xsl"

    <?xml version='1.0'?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                    xmlns:fo="http://www.w3.org/1999/XSL/Format"
                    version='1.0'>
    
    <xsl:variable name="allow-naked-dd" select="true()"/>
    
    <xsl:template name="process.dl">
      <fo:list-block provisional-distance-between-starts="35mm"
       provisional-label-separation="5mm">
        <xsl:choose>
          <xsl:when test="$allow-naked-dd">
            <xsl:call-template name="process.dl.content.with.naked.dd"/>
          </xsl:when>
          <xsl:otherwise>
            <xsl:call-template name="process.dl.content"/>
          </xsl:otherwise>
        </xsl:choose>
      </fo:list-block>
    </xsl:template>
    
    <xsl:template name="process.dl.content.with.naked.dd">
      <xsl:param name="dts" select="force-list-to-be-empty"/>
      <xsl:param name="nodes" select="*"/>
    
      <xsl:choose>
        <xsl:when test="count($nodes)=0">
          <!-- Вне узлов, выводятся любые рассматриваемые DT -->
          <xsl:if test="count($dts)>0">
            <fo:list-item>
              <fo:list-item-label end-indent="label-end()">
                <xsl:apply-templates select="$dts"/>
              </fo:list-item-label>
              <fo:list-item-body start-indent="body-start()"/>
            </fo:list-item>
          </xsl:if>
        </xsl:when>
    
        <xsl:when test="name($nodes[1])='dd'">
          <!-- Находим DD, выводим DT и DD -->
          <fo:list-item>
            <fo:list-item-label end-indent="label-end()">
              <xsl:apply-templates select="$dts"/>
            </fo:list-item-label>
            <fo:list-item-body start-indent="body-start()">
              <xsl:apply-templates select="$nodes[1]"/>
            </fo:list-item-body>
          </fo:list-item>
          <xsl:call-template name="process.dl.content.with.naked.dd">
            <xsl:with-param name="nodes" select="$nodes[position()>1]"/>
          </xsl:call-template>
        </xsl:when>
    
        <xsl:when test="name($nodes[1])='dt'">
          <!-- Если находим DT, добавляем его к списку DT повторяем цикл -->
          <xsl:call-template name="process.dl.content.with.naked.dd">
            <xsl:with-param name="dts" select="$dts|$nodes[1]"/>
            <xsl:with-param name="nodes" select="$nodes[position()>1]"/>
          </xsl:call-template>
        </xsl:when>
    
        <xsl:otherwise>
          <!-- Это не должно произойти -->
          <xsl:message>
            <xsl:text>DT/DD list contained something bogus (</xsl:text>
            <xsl:value-of select="name($nodes[1])"/>
            <xsl:text>).</xsl:text>
          </xsl:message>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:template>
    
    <xsl:template name="process.dl.content">
      <xsl:param name="dts" select="force-list-to-be-empty"/>
      <xsl:param name="dds" select="force-list-to-be-empty"/>
      <xsl:param name="output-on"></xsl:param>
      <xsl:param name="nodes" select="*"/>
    
      <!-- Этот алгоритм выстраивает список из DT и DD, -->
      <!-- выводя их только переносом из DD обратно в DT -->
    
      <xsl:choose>
        <xsl:when test="count($nodes)=0">
          <!-- Вне узлов, выводим любые рассматриваемые элементы -->
          <xsl:if test="count($dts)>0 or count($dds)>0">
            <fo:list-item>
              <fo:list-item-label end-indent="label-end()">
                <xsl:apply-templates select="$dts"/>
              </fo:list-item-label>
              <fo:list-item-body start-indent="body-start()">
                <xsl:apply-templates select="$dds"/>
              </fo:list-item-body>
            </fo:list-item>
          </xsl:if>
        </xsl:when>
    
        <xsl:when test="name($nodes[1])=$output-on">
          <!-- Выполняем перенос из DD обратно в DT -->
          <fo:list-item>
            <fo:list-item-label end-indent="label-end()">
              <xsl:apply-templates select="$dts"/>
            </fo:list-item-label>
            <fo:list-item-body start-indent="body-start()">
              <xsl:apply-templates select="$dds"/>
            </fo:list-item-body>
          </fo:list-item>
    
          <!-- Этот узел перерабатывается (и остаток списка узла) -->
          <!-- восстанавливаем значение состояния output-on в nil -->
          <xsl:call-template name="process.dl.content">
            <xsl:with-param name="nodes" select="$nodes"/>
          </xsl:call-template>
        </xsl:when>
    
        <xsl:when test="name($nodes[1])='dt'">
          <!-- Находим DT, добавляем его к списку и повторяем цикл -->
          <xsl:call-template name="process.dl.content">
            <xsl:with-param name="dts" select="$dts|$nodes[1]"/>
            <xsl:with-param name="dds" select="$dds"/>
            <xsl:with-param name="nodes" select="$nodes[position()>1]"/>
          </xsl:call-template>
        </xsl:when>
    
        <xsl:when test="name($nodes[1])='dd'">
          <!-- Находим DD, добавляем его к списку и повторяем цикл, отмечая, что-->
          <!-- в следующий раз, когда мы возвращаемся к DT's, нам нужно вывести -->
          <!-- текущие DT/DDs. -->
          <xsl:call-template name="process.dl.content">
            <xsl:with-param name="dts" select="$dts"/>
            <xsl:with-param name="dds" select="$dds|$nodes[1]"/>
            <xsl:with-param name="output-on">dt</xsl:with-param>
            <xsl:with-param name="nodes" select="$nodes[position()>1]"/>
          </xsl:call-template>
        </xsl:when>
    
        <xsl:otherwise>
          <!-- Это не должно случиться -->
          <xsl:message>
            <xsl:text>DT/DD list contained something bogus (</xsl:text>
            <xsl:value-of select="name($nodes[1])"/>
            <xsl:text>).</xsl:text>
          </xsl:message>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:template>
    
    </xsl:stylesheet>
    

    Таблица стилей "dtdd.xsl" может изменить значения следующими способами:

    • Установить значение $allow-naked-dd для управления обработкой несбалансированных "dd"s.

    • Изменить "dt" на имя элемента, являющегося термином списка.

    • Изменить "dd" на имя элемента, являющегося в списке определением/definition.

    • В случае, достаточно маловероятном, когда документ может содержать элемент, именованный "force-list-to-be-empty", имя этого элемента должно быть изменено на имя, не используемое в документах.

    В таблицах стилей, использующих таблицу стилей "dtdd.xsl", измените "dl" на имя элемента, который является оболочкой списка.


    6.8.2 fo:list-block

    Обычное Использование:

    Объект потока fo:list-block используется для форматирования списка.

    Области:

    ОФ fo:list-block генерирует одну или более нормальных блок-областей. fo:list-block возвращает эти области, любые области page-level-out-of-line и любые области reference-level-out-of-line, возвращаемые потомками объекта fo:list-block.

    Ограничения:

    Никакая область не может иметь более одной нормальной области-потомка, возвращаемой тем же самым ОФ fo:list-block.

    Потомки каждой нормальной области, возвращаемой объектом fo:list-block, обязаны быть нормальными блок-областями, возвращаемыми потомками объекта fo:list-block, обязаны быть правильно стэкированы и обязаны быть правильно упорядоченными.

    Содержимое:

    (list-item+)
    

    Этот ОФ дополнительно может содержать последовательность из нуль или более объектов fo:marker в качестве начальных дочерних объектов.

    Следующие свойства применяются к данному ОФ:


    6.8.3 fo:list-item

    Обычное Использование:

    ОФ fo:list-item содержит лэйбл и тело элемента списка.

    Области:

    ОФ fo:list-item генерирует одну или более нормальных блок-областей. fo:list-item возвращает эти области, любые области page-level-out-of-line и любые области reference-level-out-of-line, возвращаемые потомками объекта fo:list-item.

    Ограничения:

    Никакая область не может иметь более одной нормальной области-потомка, возвращаемой тем же самым ОФ fo:list-item.

    Потомки каждой нормальной области, возвращаемой объектом fo:list-item обязаны быть нормальными блок-областями, возвращаемыми объектами потока fo:list-item-label и fo:list-item-body, и обязаны быть правильно упорядоченными. Потомки, возвращаемые объектом fo:list-item-label, обязаны быть правильно стэкированы, и возвращаемые объектом fo:list-item-body - также обязаны быть правильно стэкированы.

    Потомки каждой нормальной области, возвращаемой ОФ fo:list-item, возвращаемым объектами fo:list-item-label и fo:list-item-body, позиционируются в направлении block-progression-direction с учётом расположения друг друга в соответствии с уточнением relative-align.

    В направлении inline-progression-direction эти области позиционируются в обычном для правильно стэкированных областей стиле. Будет считаться ошибкой, если прямоугольники содержимого перекрываются.

    Размер block-progression-dimension прямоугольника содержимого области, генерируемой объектом fo:list-item, достаточно велик, чтобы вместить все прямоугольники размещения всех её областей-потомков. Space-before и space-after областей-потомков не оказывают влияния на расположение элементов списка. Для целей ограничений блок-стэкирования, области, генерируемые объектом fo:list-item, рассматриваются так, как если бы они имели предшествующее и последующее ограждение.

    ПРИМЕЧАНИЕ:

    Эти области не являются областями reference-area, следовательно отступы всех объектов внутри них отмеряются относительно области reference-area, вмещающей содержимое объекта fo:list-block.

    Содержимое:

    (list-item-label,list-item-body)
    

    Этот ОФ дополнительно может содержать последовательность из нуль или более объектов fo:marker в качестве начальных дочерних объектов.

    Следующие свойства применяются к данному ОФ:


    6.8.4 fo:list-item-body

    Обычное Использование:

    ОФ fo:list-item-body вмещает содержимое элемента списка.

    Области:

    ОФ fo:list-item-body не генерирует никаких областей. ОФ fo:list-item-body возвращает последовательность областей, создаваемых путём объединения/конкатенации последовательностей областей, возвращаемых каждым потомком объекта fo:list-item-body.

    Ограничения:

    Порядок конкатенации последовательности областей, возвращаемых потомками объекта fo:list-item-body - тот же самый, что и порядок расположения потомков ниже fo:list-item-body.

    Содержимое:

    (%block;)+
    

    Этот ОФ дополнительно может содержать последовательность из нуль или более объектов fo:marker в качестве начальных дочерних объектов.

    Следующие свойства применяются к данному ОФ:


    6.8.5 fo:list-item-label

    Обычное Использование:

    ОФ fo:list-item-label вмещает содержимое лэйбла элемента списка, обычно используется для нумерации, идентификации или украшения тела list-item.

    Области:

    ОФ fo:list-item-label не генерирует никаких областей. ОФ fo:list-item-label возвращает последовательность областей, создаваемых путём объединения/конкатенации последовательностей областей, возвращаемых каждым потомком объекта fo:list-item-label.

    Ограничения:

    Порядок конкатенации последовательности областей, возвращаемых потомками объекта fo:list-item-label - тот же самый, что и порядок расположения потомков ниже fo:list-item-label.

    Содержимое:

    (%block;)+
    

    Этот ОФ дополнительно может содержать последовательность из нуль или более объектов fo:marker в качестве начальных дочерних объектов.

    Следующие свойства применяются к данному ОФ:


    6.9 Динамические Эффекты: Объекты Форматирования Link и Multi

    6.9.1 Введение

    Динамические эффекты, когда действия пользователя (включая состояние Пользовательского Агента/ПА) могут влиять на поведение и/или представление части документа, могут быть достигнуты через использование ОФ, включённые в данный раздел:

    • Однонаправленные одноцелевые ссылки.

    • Возможность переключения между дисплеями двух или более поддеревьев ОФ. Это можно использовать для, например, раскрывающихся/сжимающихся оглавлений, отображения иконок или полной таблицы или графики.

    • Возможность переключения между различными значениями свойств, таких как цвет или размер шрифта, в зависимости от состояния ПА, такого как "hover".

    Переключение между поддеревьями достигается путём использования следующих трёх ОФ: fo:multi-switch, fo:multi-case и fo:multi-toggle. Структура результирующего дерева показана ниже.

    Представление Объектов Форматирования Multi в Виде Дерева

    Роль fo:multi-switch в создании оболочки для объектов fo:multi-case, каждый из которых содержит поддерево. Каждому поддереву дано имя в ОФ fo:multi-case. Активация, реализуемая, например, щелчком мыши, объекта fo:multi-toggle вызывающая отображение именованного поддерева, предыдущего, следующего или "любого" поддерева, управляется свойством "switch-to". Для "любого" - реализация обычно будет выводить список выбора с элементами, помеченными с использованием свойства "case-title" объекта fo:multi-case. начальное отображаемое поддерево управляется свойством "starting-state" объекта fo:multi-case.

    Переключение между различными значениями свойства достигается использованием ОФ fo:multi-properties и fo:multi-property-set и функции merge-property-values(). Например, fo:multi-property-set может использоваться для спецификации различных свойств для каждого из возможных значений свойства active-state, а merge-property-values() может использоваться для применения их к данному ОФ.


    6.9.1.1 Примеры 6.9.1.1.1 разворачиваемое/Свёртываемое Оглавление

    Код:

    <doc>
      <chapter><title>Chapter</title>
        <p>Text</p>
        <section><title>Section</title>
        <p>Text</p>
        </section>
        <section><title>Section</title>
        <p>Text</p>
        </section>
      </chapter>
      <chapter><title>Chapter</title>
        <p>Text</p>
        <section><title>Section</title>
        <p>Text</p>
        </section>
        <section><title>Section</title>
        <p>Text</p>
        </section>
      </chapter>
    </doc>
    

    В этом примере заголовки глав и разделов извлекаются в оглавление, размещаемое впереди результата. Заголовкам глав предшествует иконка, обозначающая сжатое или раскрытое состояние.
    Заголовки разделов видны только в раскрытом состоянии. Помимо этого, сделаны ссылки из заголовков оглавления на соответствующие заголовки в теле документа.

    Два состояния достигаются, для заголовка каждой главы, путём использования fo:multi-switch и fo:multi-case для каждого состояния. Иконка содержится в fo:multi-toggle с соответствующим fo:multi-case свойством "switch-to" для выбора другого состояния.

    Ссылки оглавления устанавливаются путём добавления уникальных id заголовкам текста в теле документа и использовании в качестве оболочки текста заголовка в оглавлении объекта fo:basic-link, ссылающегося на этот id.

    Таблица стилей XSL:

    <?xml version='1.0'?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                    xmlns:fo="http://www.w3.org/1999/XSL/Format"
                    version='1.0'>
    
    <xsl:template match="doc">
      <!-- создаётся оглавление -->
      <xsl:apply-templates select="chapter/title" mode="toc"/>
      <!-- документ -->
      <xsl:apply-templates/>
    </xsl:template>
    
    <xsl:template match="chapter/title" mode="toc">
      <fo:multi-switch>
        <fo:multi-case case-name="collapsed" case-title="collapsed"
        starting-state="show">
          <fo:block>
            <fo:multi-toggle switch-to="expanded">
              <fo:external-graphic href="books-page-html-xsl_spec-plus-icon.gif"/>
            </fo:multi-toggle>
            <fo:basic-link internal-destination="{generate-id(.)}">
              <xsl:number level="multiple" count="chapter" format="1. "/>
              <xsl:apply-templates mode="toc"/>
            </fo:basic-link>
          </fo:block>
        </fo:multi-case>
        <fo:multi-case case-name="expanded" case-title="expanded"
        starting-state="hide">
          <fo:block>
            <fo:multi-toggle switch-to="collapsed">
              <fo:external-graphic href="books-page-html-xsl_spec-minus-icon.gif"/>
            </fo:multi-toggle>
            <fo:basic-link internal-destination="{generate-id(.)}">
              <xsl:number level="multiple" count="chapter" format="1. "/>
              <xsl:apply-templates mode="toc"/>
            </fo:basic-link>
          </fo:block>
          <xsl:apply-templates select="section/title" mode="toc"/>
        </fo:multi-case>
      </fo:multi-switch>
    </xsl:template>
    
    <xsl:template match="section/title" mode="toc">
      <fo:block start-indent="10mm">
        <fo:basic-link internal-destination="{generate-id(.)}">
          <xsl:number level="multiple" count="chapter|section" format="1.1 "/>
          <xsl:apply-templates/>
        </fo:basic-link>
      </fo:block>
    </xsl:template>
    
    <xsl:template match="chapter/title">
      <fo:block id="{generate-id(.)}">
        <xsl:number level="multiple" count="chapter" format="1. "/>
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
    
    <xsl:template match="section/title">
      <fo:block id="{generate-id(.)}">
        <xsl:number level="multiple" count="chapter|section" format="1.1 "/>
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
    
    <xsl:template match="p">
      <fo:block>
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
    
    </xsl:stylesheet>
    

    Результирующий Экземпляр: элементы и атрибуты в пространстве имён fo:

    <fo:multi-switch>
      <fo:multi-case case-name="collapsed" case-title="collapsed" starting-state="show">
        <fo:block>
          <fo:multi-toggle switch-to="expanded">
            <fo:external-graphic href="books-page-html-xsl_spec-plus-icon.gif">
            </fo:external-graphic>
          </fo:multi-toggle>
          <fo:basic-link internal-destination="N4">1. Chapter
          </fo:basic-link>
        </fo:block>
      </fo:multi-case>
      <fo:multi-case case-name="expanded" case-title="expanded" starting-state="hide">
        <fo:block>
          <fo:multi-toggle switch-to="collapsed">
            <fo:external-graphic href="books-page-html-xsl_spec-minus-icon.gif">
            </fo:external-graphic>
          </fo:multi-toggle>
          <fo:basic-link internal-destination="N4">1. Chapter
          </fo:basic-link>
        </fo:block>
        <fo:block start-indent="10mm">
          <fo:basic-link internal-destination="N11">1.1 Section
          </fo:basic-link>
        </fo:block>
        <fo:block start-indent="10mm">
          <fo:basic-link internal-destination="N19">1.2 Section
          </fo:basic-link>
        </fo:block>
      </fo:multi-case>
    </fo:multi-switch>
    <fo:multi-switch>
      <fo:multi-case case-name="collapsed" case-title="collapsed" starting-state="show">
        <fo:block>
          <fo:multi-toggle switch-to="expanded">
            <fo:external-graphic href="books-page-html-xsl_spec-plus-icon.gif">
            </fo:external-graphic>
          </fo:multi-toggle>
          <fo:basic-link internal-destination="N28">2. Chapter
          </fo:basic-link>
        </fo:block>
      </fo:multi-case>
      <fo:multi-case case-name="expanded" case-title="expanded" starting-state="hide">
        <fo:block>
          <fo:multi-toggle switch-to="collapsed">
            <fo:external-graphic href="books-page-html-xsl_spec-minus-icon.gif">
            </fo:external-graphic>
          </fo:multi-toggle>
          <fo:basic-link internal-destination="N28">2. Chapter
          </fo:basic-link>
        </fo:block>
        <fo:block start-indent="10mm">
          <fo:basic-link internal-destination="N35">2.1 Section
          </fo:basic-link>
        </fo:block>
        <fo:block start-indent="10mm">
          <fo:basic-link internal-destination="N43">2.2 Section
          </fo:basic-link>
        </fo:block>
      </fo:multi-case>
    </fo:multi-switch>
    
    <fo:block id="N4">1. Chapter
    </fo:block>
    <fo:block>Text
    </fo:block>
    <fo:block id="N11">1.1 Section
    </fo:block>
    <fo:block>Text
    </fo:block>
    <fo:block id="N19">1.2 Section
    </fo:block>
    <fo:block>Text
    </fo:block>
    <fo:block id="N28">2. Chapter
    </fo:block>
    <fo:block>Text
    </fo:block>
    <fo:block id="N35">2.1 Section
    </fo:block>
    <fo:block>Text
    </fo:block>
    <fo:block id="N43">2.2 Section
    </fo:block>
    <fo:block>Text
    </fo:block>
    

    6.9.1.1.2 Стилизация и XLink на базе активного состояния

    Код:

    <p>Follow this <xlink:mylink xmlns:xlink="http://www.w3.org/1999/xlink"
            xlink:href="index.php?name=go&url=http%3A%2F%2Fwww.w3.org%2FTR"
            xlink:title="An Example"
            xlink:show="new"
            xlink:actuate="onRequest">link</xlink:mylink> to access all
    TRs of the W3C.</p>
    

    В этом примере fo:basic-link содержит серии наборов fo:multi-property-set, специфицирующих различные цвета оформления текста, в зависимости от активного состояния, и оболочку вокруг fo:basic-link, которая позволяет сращивать свойства объектов fo:multi-propertie со свойствами подходящих наборов fo:multi-property-set.

    Таблица стилей XSL:

    <?xml version='1.0'?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                    xmlns:fo="http://www.w3.org/1999/XSL/Format"
                    version='1.0'>
    
    <xsl:template match="p">
        <fo:block>
            <xsl:apply-templates/>
        </fo:block>
    </xsl:template>
    
    <xsl:template match="xlink:mylink" xmlns:xlink="http://www.w3.org/1999/xlink">
        <xsl:variable name="show"><xsl:value-of select="@xlink:show"/>
        </xsl:variable>
         <fo:multi-properties text-decoration="underline">
            <fo:multi-property-set active-state="link" color="blue"/>
            <fo:multi-property-set active-state="visited" color="red"/>
            <fo:multi-property-set active-state="active" color="green"/>
            <fo:multi-property-set active-state="hover" text-decoration="blink"/>
            <fo:multi-property-set active-state="focus" color="yellow"/>
            <fo:wrapper color="merge-property-values()"
                        text-decoration="merge-property-values()">
                  <fo:basic-link external-destination="http://www.w3.org/TR"
                                  show-destination="{$show}">
                      <xsl:attribute name="role">
                          <xsl:value-of select="@xlink:title"/>
                      </xsl:attribute>
                      <xsl:apply-templates/>
                  </fo:basic-link>
            </fo:wrapper>
          </fo:multi-properties>
    </xsl:template>
    
    </xsl:stylesheet>
    

    Результирующий Экземпляр: элементы и атрибуты в пространстве имён fo:

    <fo:block">Follow this
      <fo:multi-properties text-decoration="underline">
        <fo:multi-property-set active-state="link" color="blue">
        </fo:multi-property-set>
        <fo:multi-property-set active-state="visited" color="red">
        </fo:multi-property-set>
        <fo:multi-property-set active-state="active" color="green">
        </fo:multi-property-set>
        <fo:multi-property-set active-state="hover" text-decoration="blink">
        </fo:multi-property-set>
        <fo:multi-property-set active-state="focus" color="yellow">
        </fo:multi-property-set>
        <fo:wrapper color="merge-property-values()"
          text-decoration="merge-property-values()">
          <fo:basic-link external-destination="http://www.w3.org/TR"
            show-destination="new" role="An Example">link
          </fo:basic-link>
        </fo:wrapper>
      </fo:multi-properties> to access all
    TRs of the W3C.
    </fo:block>
    


    6.9.2 fo:basic-link

    Обычное Использование:

    fo:basic-link используется для представления начального ресурса простой однонаправленной одноцелевой ссылки. Этот объект позволяет выполнять пересечение ресурса назначения, обычно путём щелчка мыши на любой из содержащих областей.

    Области:

    ОФ fo:basic-link генерирует одну или более нормальных инлайн--областей. fo:basic-link возвращает эти области, любые области page-level-out-of-line и любые области reference-level-out-of-line, возвращаемые потомками объекта fo:basic-link.

    ПРИМЕЧАНИЕ:

    fo:basic-link может быть заключена в fo:block для создания области дисплея.

    Ограничения:

    Никакая область не может иметь более одной нормальной области-потомка, возвращаемой тем же самым ОФ fo:basic-link.

    Потомки, каждой нормальной области, возвращаемые объектом fo:basic-link, обязаны удовлетворять ограничениям, специфицированным в разделе [4.7.3 Инлайн-Конструирование].

    Содержимое:

    (#PCDATA|%inline;|%block;)*
    

    Этот ОФ дополнительно может содержать последовательность из нуль или более объектов fo:marker в качестве начальных дочерних объектов.

    Следующие свойства применяются к данному ОФ:


    6.9.3 fo:multi-switch

    Обычное Использование:

    fo:multi-switch служит оболочкой для спецификации альтернативных поддеревьев ОФ (каждое поддерево находится внутри fo:multi-case) и управляет переключением (активируемым через fo:multi-toggle) альтернатив.

    Прямые потомки объекта fo:multi-switch  - это объекты fo:multi-case. Только один fo:multi-case может быть видимым в данный момент времени. Пользователь может переключаться между имеющимися multi-case.

    Каждый fo:multi-case может содержать один или более объектов fo:multi-toggle, контролирующих переключение fo:multi-case объектом fo:multi-switch.

    ПРИМЕЧАНИЕ:

    fo:multi-switch можно использовать для различных интерактивных задач, таких как просмотр различных видов оглавления/table-of-content views, внедрения целей ссылок или обобщённых (даже иерархических многослойных) просмотров следующий/предыдущий. Последние на сегодняшний день нормально обрабатываются в HTML ссылками next/previous а другие документы, форсируя полную смену документа, если пользователь решил сделать переход.

    Области:

    ОФ fo:multi-switch не генерирует никаких областей. ОФ fo:multi-switch возвращает последовательность областей, возвращаемых видимым в данный момент fo:multi-case. Если видимые в данный момент объект fo:multi-case отсутствует, не возвращается никаких областей.

    Получение Уточнения:

    Уточнение currently-visible-multi-case имеет в качестве начального значения ссылку на первого потомка fo:multi-case, имеющего значение "show" в уточнении starting-state. Если такого потомка нет, оно имеет значение, обозначающее, что нет видимых в данный момент fo:multi-case. Когда fo:multi-toggle актуализируется, значение уточнения currently-visible-multi-case его ближайшего объекта-предка fo:multi-switch изменяется на ссылку на объект fo:multi-case, выбранный значением свойства "switch-to" объекта fo:multi-toggle. Как только уточнение currently-visible-multi-case получает значение, обозначающее отсутствие видимого в данный момент fo:multi-case, становится невозможным привести в действие fo:multi-toggle в этом fo:multi-switch.

    Ограничения:

    Порядок в последовательности областей, возвращаемых объектом fo:multi-switch тот же, что и порядок областей, возвращаемых видимым в данный момент объектом fo:multi-case.

    Содержимое:

    (multi-case+)
    

    Следующие свойства применяются к данному ОФ:


    6.9.4 fo:multi-case

    Обычное Использование:

    fo:multi-case используется как контейнер (внутри fo:multi-switch) каждого альтернативного поддерева ОФ, среди которых родительский fo:multi-switch выберет одно для показа и скроет остальные.

    Области:

    ОФ fo:multi-case не генерирует никаких областей. ОФ fo:multi-case возвращает последовательность областей, создаваемую путём конкатенации последовательностей областей, возвращаемых каждым из потомков объекта fo:multi-case.

    Ограничения:

    Порядок конкатенации последовательностей областей, возвращаемых потомками объекта fo:multi-case, тот же, что и порядок расположения потомков под fo:multi-case.

    Содержимое:

    (#PCDATA|%inline;|%block;)*
    

    fo:multi-case допускает только таких потомков, которые допускаются как потомки родительского fo:multi-switch, являющегося предком fo:multi-case, за исключением того, что fo:multi-case не может содержать потомков fo:marker. В частности, он может содержать объекты fo:multi-toggle (на любой глубине), контролирующие переключение fo:multi-case.

    Эти ограничения применяются рекурсивно.

    ПРИМЕЧАНИЕ:

    Например, fo:multi-case, чей родитель fo:multi-switch является потомком другого fo:multi-case, может иметь только таких потомков, которые допускаются на вместо внешнего fo:multi-switch родительского fo:multi-case.

    Следующие свойства применяются к данному ОФ:


    6.9.5 fo:multi-toggle

    Обычное Использование:

    fo:multi-toggle обычно используется для установки области, которая, после активации (например, реализованной как "clicked"), осуществляет переключение от одного fo:multi-case к другому. Значение свойства "switch-to" объекта fo:multi-toggle обычно совпадает со значением свойства "case-name" объекта fo:multi-case, на который происходит переключение.

    Области:

    ОФ fo:multi-toggle не генерирует никаких областей. ОФ fo:multi-toggle возвращает последовательность областей, создаваемую путём конкатенации последовательностей областей, возвращаемых каждым из потомков объекта fo:multi-toggle. Каждая их областей, возвращаемых объектом fo:multi-toggle, имеет уточнение switch-to с тем же значением, что и у возвращающего объекта fo:multi-toggle.

    Ограничения:

    Порядок конкатенации последовательностей областей, возвращаемых потомками объекта fo:multi-toggle, тот же, что и порядок расположения потомков под fo:multi-toggle.

    Активация области, возвращаемой объектом fo:multi-toggle, вызывает изменение значения currently-visible-multi-case ближайшего предка-fo:multi-switch. (См. в [7.22.11 "switch-to"], как значение switch-to выбирает объект fo:multi-case.)

    Содержание:

    (#PCDATA|%inline;|%block;)*
    

    fo:multi-toggle допускается только в качестве потомка объекта fo:multi-case.

    Следующие свойства применяются к данному ОФ:


    6.9.6 fo:multi-properties

    Обычное Использование:

    fo:multi-properties используется для переключения между двумя или более наборами, ассоциированными с данной частью содержимого.

    ПРИМЕЧАНИЕ:

    ОФ fo:multi-properties может использоваться для создания различных представлений данной части содержимого. Например, если ссылка изменяет состояние из "непосещённой" в "посещённую", это может изменить набор свойств, которые могут использоваться для форматирования содержимого. Дизайнеры должны быть внимательны при выборе изменяемого свойства, поскольку изменение многих свойств может вызвать перерисовку текста, что может быть нежелательно во многих случаях. Изменение таких свойств, как "color" или "text-decoration", не должно требовать перерисовки текста.

    Прямые потомки ОФ fo:multi-properties это упорядоченный набор объектов fo:multi-property-set, после которого идёт один fo:wrapper. Свойства, специфицированные в fo:wrapper, который специфицирован со значением "merge-property-values()", будут принимать значение, объединяющее значение в fo:multi-properties и специфицированные значения в ОФ fo:multi-property-set, которые используются.

    Области:

    ОФ fo:multi-properties не генерирует никаких областей. ОФ fo:multi-properties возвращает последовательность областей, создаваемую путём конкатенации последовательностей областей, возвращаемых каждым из потомков объекта fo:multi-properties.

    Ограничения:

    Порядок конкатенации последовательностей областей, возвращаемых потомками объекта fo:multi-properties, тот же, что и порядок расположения потомков под fo:multi-properties.

    Содержимое:

    (multi-property-set+,wrapper)
    

    Свойства, которые должны принимать объединённое значение, должны будут специфицироваться в "merge-property-values()". Эта функция, применённая к fo:wrapper, являющемуся прямым потомком объекта fo:multi-properties, объединяет имеющиеся определения свойств родственных объектов fo:multi-property-set.

    Следующие свойства применяются к данному ОФ:


    6.9.7 fo:multi-property-set

    Обычное Использование:

    Вспомогательный ОФ fo:multi-property-set используется для специфицирования альтернативного набора свойств форматирования, который используется для предоставления альтернативного представления дочерних объектов потока объекта fo:wrapper - потомка родителя этого fo:multi-property-set.

    Области:

    ОФ fo:multi-property-set не генерирует и не возвращает никаких областей. Он просто содержит набор уточнений, которые могут использоваться в выражениях.

    Ограничения:

    Отсутствуют.

    Содержимое:

    EMPTY
    

    Следующие свойства применяются к данному ОФ:



    6.10 Внестрочные/Out-of-Line Объекты Форматирования

    6.10.1 Введение

    6.10.1.1 Поплавки

    ОФ fo:float используется для достижения двух различных целей.
    Первая: в процессе нормального размещения содержимого, некоторое содержимое форматируется в отдельной области в начале страницы, где есть возможность прочитать его без непосредственного навязывания пользователю. области, генерируемые этим типом объекта fo:float, называются before-floats/до-поплавки. fo:float специфицируется для генерации до-поплавков, если его свойство "float" имеет значение "before". Ограничения на размещение до-поплавков на странице описаны в разделе [6.10.1.3 Условные Субрегионы] данного введения и в описании ОФ fo:float.

    Вторая: ОФ fo:float используется, когда предполагается всплывание области к одной из сторон с нормальным обтеканием содержимого вдоль всплывающей области. Области, генерируемые этим типом fo:float, называются side-floats/боковые поплавки. side-float всегда является потомком ближайшей области-предка reference-area. Край области reference-area, к которому всплывает side-float, контролируется значением свойства "float".

    Обтекание нормального содержимого вдоль поплавков side-float реализуется путём увеличения дополнений start-intrusion-adjustment или end-intrusion-adjustment нормальных областей - потомков родительской reference-area поплавка side-float.

    Свойство "clear" применяется к любому ОФ блок-уровня. Если значение этого свойства для конкретного ОФ отличается от "none", тогда области, сгенерированные блоком, будут позиционированы так, чтобы гарантировать, что их прямоугольники рамок не перекроют прямоугольники размещения существующих поплавков side-float, как определено значением свойства "clear".


    6.10.1.2 Сноски

    ОФ fo:footnote используется для генерации сносок и цитирования. fo:footnote имеет двух потомков, которые оба должны присутствовать. Первый - это ОФ fo:inline, который форматируется для создания цитаты-ссылки на сноску. Второй - ОФ fo:footnote-body - генерирует содержимое (или тело) сноски.

    Реальные области, генерируемые потомками ОФ fo:footnote-body, определяются теми ОФ, которые содержат в себе дерево потомков. Например, сноска может быть сформатирована с лэйблом и отступами путём использования ОФ fo:list-block внутри fo:footnote-body.


    6.10.1.3 Условные Субрегионы

    Тело региона имеет два условных субрегиона, которые неявно специфицируют соответствующие области reference-area, называемые before-float-reference-area и footnote-reference-area. Эти области reference-area обусловленно генерируются как потомки области region-reference-area. Область before-float-reference-area генерируется только тогда, когда страница содержит одну или более областей с классом области "xsl-before-float". Область footnote-reference-area генерируется только тогда, когда страница содержит одну или более областей с классом области "xsl-footnote".

    Обусловленно генерируемые области занимают пространство размером block-progression-dimension (это "height" в режиме письма "lr-tb") внутри области region-reference-area за счёт main-reference-area. Генерируется ли в действительности условно генерируемая область, зависит, кроме того, от наличия достаточного оставшегося свободного пространства в main-reference-area.

    Могут иметься ограничения на количество пространства, которое условно генерируемые области могут занимать в region-reference-area. Определение этих лимитов оставлено на усмотрение Пользовательского Агента (ПА).

    Размер block-progression-dimension области main-reference-area устанавливается равным block-progression-dimension прямоугольника размещения области region-reference-area минус сумма размеров block-progression-dimension прямоугольников размещения условно генерируемых reference-areas, которые реально генерировались. Область main-reference-area позиционируется сразу за краем after-edge прямоугольника размещения области before-float-reference-area. Это помещает after-edge области main-reference-area так, чтобы совместить его с before-edge прямоугольника размещения области footnote-reference-area. В дополнение к ограничениям, нормально определяемым областью region-reference-area, inline-progression-dimension (это "width" при режиме письма "lr-tb") условно генерируемой области reference-area ограничивается до совпадения с размером inline-progression-dimension области main-reference-area.

    Каждая условно генерируемая область reference-area может содержать дополнительно последовательность областей, используемую для отделения reference-area от main-reference-area. Последовательность областей это последовательность, возвращаемая при форматировании fo:static-content, специфицированного в последовательности страниц, используемой при форматировании данной страницы.

    Если в последовательности страниц имеется fo:static-content, чьё значение свойства "flow-name" равно "xsl-before-float-separator", то области, возвращаемые при форматировании fo:static-content, вставляются в подходящем порядке как последние потомки области before-float-reference-area, генерируемой с использованием той же мастер-страницы, предполагая, что main-reference-area на странице не является пустой.

    Если в последовательности страниц имеется fo:static-content, чьё значение свойства "flow-name" равно "xsl-footnote-separator", то области, возвращаемые при форматировании fo:static-content, вставляются в подходящем порядке как начальные потомки области footnote-reference-area, генерируемой с использованием той же мастер-страницы.

    Интерактивный ПА может выбирать между созданием "горячих ссылок" на сноски из цитирования ссылок и созданием "горячих ссылок" на поплавки before-float при неявном цитировании, вместо реализации условных субрегионов.

    Генерация областей с классом области "xsl-before-float" или "xsl-footnote" специфицируется в описании ОФ, которые первоначально возвращают области с этими классами областей/area-classes.


    6.10.1.4 Примеры 6.10.1.4.1 Рисунок-Поплавок

    Код:

    <doc>
      <p>C'ieng pieces were made in northern towns, such as C'ieng Mai.
    They were typically of tamlung weight.</p>
      <figure>
        <photo image="TH0317A.jpg"/>
        <caption>C'ieng Tamlung of C'ieng Mai</caption>
      </figure>
    </doc>
    

    В этом примере рисунки помещаются как поплавки у стороны before (top в режиме письма lr-tb).

    Таблица стилей XSL:

    <?xml version='1.0'?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                    xmlns:fo="http://www.w3.org/1999/XSL/Format"
                    version='1.0'>
    
    <xsl:template match="p">
      <fo:block>
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
    
    <xsl:template match="figure">
      <fo:float float="before">
        <xsl:apply-templates/>
      </fo:float>
    </xsl:template>
    
    <xsl:template match="photo">
      <fo:block text-align="center">
        <fo:external-graphic src="books/html/xsl_spec/{@image}"/>
      </fo:block>
    </xsl:template>
    
    <xsl:template match="caption">
      <fo:block space-before="3pt" text-align="center"
        start-indent="10mm" end-indent="10mm">
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
    
    </xsl:stylesheet>
    

    Результирующий Экземпляр: элементы и атрибуты в пространстве имён fo:

    <fo:block>C'ieng pieces were made in northern towns,
    such as C'ieng Mai. They were typically of tamlung weight.
    </fo:block>
    
    <fo:float float="before">
    
      <fo:block text-align="center">
        <fo:external-graphic src="books/html/xsl_spec/TH0317A.jpg">
        </fo:external-graphic>
      </fo:block>
    
      <fo:block space-before="3pt" text-align="center" start-indent="10mm"
        end-indent="10mm">C'ieng Tamlung of C'ieng Mai
      </fo:block>
    
    </fo:float>
    

    6.10.1.4.2 Сноска

    Код:

    <doc>
      <p>Some Pod Duang were restruck<fn>Berglund, A., Thai Money, from
    Earliest Times to King Rama V, p. 203.</fn> during the reign of King Rama V.</p>
    </doc>
    

    В этом примере сноски последовательно нумеруются по всему документу. Вызов ссылки - это номер ссылки с последующей ")" как надиндекс. Сама ссылка форматируется с использованием ОФ списка как лэйбл, а текст сноски - как тело/body.

    Таблица стилей XSL:

    <?xml version='1.0'?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                    xmlns:fo="http://www.w3.org/1999/XSL/Format"
                    version='1.0'>
    
    <xsl:template match="p">
      <fo:block>
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
    
    <xsl:template match="fn">
      <fo:footnote>
        <fo:inline font-size="0.83em" baseline-shift="super">
          <xsl:number level="any" count="fn" format="1)"/>
        </fo:inline>
        <fo:footnote-body>
          <fo:list-block provisional-distance-between-starts="20pt"
              provisional-label-separation="5pt">
            <fo:list-item>
              <fo:list-item-label end-indent="label-end()">
                <fo:block  font-size="0.83em"
                           line-height="0.9em">
                  <xsl:number level="any" count="fn" format="1)"/>
                </fo:block>
              </fo:list-item-label>
              <fo:list-item-body start-indent="body-start()">
                <fo:block  font-size="0.83em"
                           line-height="0.9em">
                  <xsl:apply-templates/>
                </fo:block>
              </fo:list-item-body>
            </fo:list-item>
          </fo:list-block>
        </fo:footnote-body>
      </fo:footnote>
    </xsl:template>
    
    </xsl:stylesheet>
    

    Результирующий Экземпляр: элементы и атрибуты в пространстве имён fo:

    <fo:block>Some Pod Duang were restruck
      <fo:footnote>
        <fo:inline font-size="0.83em" baseline-shift="super">1)
        </fo:inline>
        <fo:footnote-body>
        <fo:list-block provisional-distance-between-starts="20pt"
          provisional-label-separation="5pt">
        <fo:list-item>
        <fo:list-item-label end-indent="label-end()">
        <fo:block font-size="0.83em" line-height="0.9em">1)
        </fo:block>
        </fo:list-item-label>
        <fo:list-item-body start-indent="body-start()">
        <fo:block font-size="0.83em" line-height="0.9em">Berglund, A.,
    Thai Money, from Earliest Times to King Rama V, p. 203.
        </fo:block>
        </fo:list-item-body>
        </fo:list-item>
        </fo:list-block>
        </fo:footnote-body>
      </fo:footnote> during the reign of King Rama V.
    </fo:block>
    


    6.10.2 fo:float

    Обычное Использование:

    ОФ fo:float обычно используется для позиционирования изображения в отдельной области в начале страницы или для позиционирования изображения у одной из сторон с нормальным содержимым, обтекающим изображение вокруг и по другой стороне.

    Области:

    fo:float генерирует необязательную область с классом области "xsl-anchor" и одну или более блок-областей, разделяющих тот же самый класс областей: "xsl-before-float", "xsl-side-float" или "xsl-normal", как специфицировано в свойстве "float". (fo:float генерирует нормальные блок-области, если его свойство "float" имеет значение "none".)

    Области с классом области "xsl-side-float" являются ссылочными областями/reference areas.

    Область с классом области "xsl-before-float" размещается как потомок области before-float-reference-area.

    Необязательная область с классом области "xsl-anchor" не генерируется, если свойство "float" имеет значение "none" или если из-за ошибки, как описано в разделе ограничений, fo:float будет сформатирован так, как будто его свойство "float" было "none". Иначе будет сгенерирована область с классом области "xsl-anchor".

    Область с классом области "xsl-anchor" не имеет потомков и является инлайн-областью, если только это не нарушает ограничений: (a.) что любой потомок области обязан быть блок-областью или инлайн-областью, но не смешанным, и (b.) что потомки строчной области/line-area не могут состоять только из якорных/anchor областей. В тех случаях когда инлайн-область нарушает эти ограничения, fo:float обязан вместо этого генерировать блок-область.

    Ограничения:

    Нормальная инлайн-область, генерируемая объектом fo:float, будет помещена в дереве областей так, как если бы fo:float имел в свойстве "keep-with-previous" значение "always". Инлайн-область имеет размер нуль для обоих размеров - inline-progression-dimension и block-progression-dimension.

    Термин anchor-area/якорная область используется здесь для обозначения области с классом области "xsl-anchor", генерируемой объектом fo:float. Область с классом области "xsl-side-float" это поплавок side-float.

    Никакая область не может иметь более одной блок-области - потомка с тем же самым классом области, возвращаемой тем же самым ОФ fo:float.

    Области с классом области "xsl-before-float" обязаны быть правильно упорядочены внутри дерева областей относительно других областей с тем же классом области.

    Прямоугольники заполнения, рамки и содержимого блок-областей, генерируемых fo:float, совпадают. То есть заполнение и рамка равны нулю у любого края области.

    Следующие ограничения применяются к объектам fo:float, генерирующим области с классом области "xsl-before-float":

    • Является ошибкой, если fo:float появляется как потомок потока, не назначенного телу региона, или как потомок контейнера fo:block-container, генерирующего абсолютно позиционированные области. В любом случае fo:float будет сформатирован так, будто его свойство "float" имеет значение "none".

    • Блок-область с классом области "xsl-before-float", генерируемая fo:float, может быть только потомком области before-float-reference-area, то есть (a) потомком "region-reference-area", сгенерированной с использованием мастер-региона для региона, которому назначен поток, имеющий fo:float в качестве потомка, и (b) является потомком с той же самой страницы, содержащей якорную область, или со страницы, следующей за данной страницей.

    • fo:float не может генерировать никаких дополнительных блок-областей с классом области "xsl-before-float", если только страница, содержащая предшествующую блок-область, генерируемую объектом fo:float, не содержит других областей с классом области "xsl-before-float", не имеет пустой области main-reference-area и не содержит области footnote-reference-area.

    • Свойство "clear" не применяется.

    Следующие ограничения применяются к объектам fo:float, генерирующим области с классом области "xsl-side-float":

    • Каждый поплавок side-float размещается либо как потомок ближайшей области-предка reference-area якорной области, или как потомок якорной области, или как потомок последней области reference-area в той же цепи областей reference-area.

    • Поплавки side-float - родственники в дереве областей - могут перекрываться своими прямоугольниками содержимого.

    • Описание в разделе 9.5 [CSS2] будет использоваться для определения форматирования fo:float и отображения нормальных строчных областей и поплавков side-float, которые перекрываются инлайн, со следующими изменениями:

      • Все ссылки вправо и влево должны интерпретироваться как соответствующие относительные направления "start" и "end" их режима письма. Свойство "float" будет иметь дополнительно относительные к режиму письма значения "start" и "end".

      • Все ссылки на top/верх и bottom/низ будут интерпретироваться как соответствующие относительные направления "before" и "after" их режима письма.

      • Фраза "current line box/текущий строчный бокс" будет интерпретироваться как означающая строчную область, содержащую якорную область, генерируемую поплавком. Если якорная область это блок-область, тогда "current line box" не существует.

      • Поплавки side-float получают значения своих размеров в размере inline-progression-dimension изначально от своих областей-потомков: размер не определяется явным значением свойства.

      • Поплавок side-float может добавляться для согласования вторжения любой инлайн-перекрывающей блок-области, чья ближайшая область-предок reference-area является родителем поплавка side-float. См. в разделе [4.4.2 Согласование Вторжения] описание подгонки вторжения.

      • ПА может выполнять своё собственное определение, после учёта согласования вторжений, вызываемых одним или более перекрывающими поплавками side-floats, что оставшегося пространства в направлении inline-progression-direction недостаточно для следующего поплавка side-float или нормальной блок-области. ПА может адресовать это, заставляя следующий side-float или нормальную область "clear/очищать" один из поплавков side-floats, как указано в описании свойства "clear", так что согласование вторжения будет существенно сокращено. Из поплавков side-float, которые могут быть очищены, чтобы соответствовать этим ограничениям, реально очищаемый поплавок side-float обязан быть поплавком, чей край after-edge находится ближе всего к before-edge родительской области reference-area.

        ПРИМЕЧАНИЕ:

        ПА может определять достаточное количество пространства , используя фиксированный размер или эвристическими методами, такими как, вмещается ли целое слово в доступное пространство, или некоторой комбинацией, чтобы обрабатывать текст и изображение.

    Содержимое:

    (%block;)+
    

    fo:float не может содержать fo:float, fo:footnote или fo:marker в качестве потомков.

    Кроме того, fo:float не может содержать в качестве потомка контейнер fo:block-container, который генерирует абсолютно позиционируемую область.

    Следующие свойства применяются к данному ОФ:


    6.10.3 fo:footnote

    Обычное Использование:

    fo:footnote обычно используется для производства сносок-цитирования/footnote-citations внутри region-body на странице и соответствующих сносок в отбельной области, ближайшей к краю after-edge этой страницы.

    Области:

    ОФ fo:footnote не генерирует никаких областей. ОФ fo:footnote возвращает области, генерируемые и возвращаемые его потомком объекта fo:inline.

    Дополнительно ОФ fo:footnote возвращает блок-области с классом области "xsl-footnote", генерируемые его потомком объектом fo:footnote-body. Область с классом области "xsl-footnote" размещается как потомок области footnote-reference-area.

    Ограничения:

    Термин anchor-area определён для обозначения последней области, генерируемой м возвращаемой fo:inline - потомком fo:footnote.

    Блок-область, возвращаемая объектом fo:footnote, допускается только как потомок области footnote-reference-area, которая является (a) потомком области "region-reference-area", генерируемой с использованием мастер-региона для региона, которому назначен поток, имеющий fo:footnote в качестве потомка, и (b) является потомком с той же самой страницы, содержащей якорную область, или со страницы, следующей за данной страницей, содержащей якорную область.

    Вторая блок-область и любые дополнительные блок-области, возвращаемые объектом fo:footnote, обязаны разместиться в субпоследовательности страниц, непосредственно следующей за страницей, содержащей первую блок-область, возвращаемую объектом fo:footnote, перед любым другим размещаемым содержимым. Если последующая страница не имеет региона тела/region-body, ПА обязан использовать мастер-регион последней страницы, которая содержала region-body, для размещения дополнительных блок-областей.

    Будет ошибкой, если fo:footnote появится как потомок потока, который не назначен телу региона, или как потомок fo:block-container, генерирующего абсолютно позиционированные области. В любом случае блок-области, генерируемые fo:footnote-body - потомком объекта fo:footnote - должны быть возвращены предку объекта fo:footnote и размещены в дереве областей так, как если бы они были нормальными областями уровня блока.

    Содержимое:

    (inline,footnote-body)
    

    fo:footnote не может иметь в качестве потомков fo:float, fo:footnote или fo:marker.

    Кроме того, fo:footnote не может иметь в качестве потомка контейнер fo:block-container, генерирующий абсолютно позиционированную область.

    Следующие свойства применяются к данному ОФ:


    6.10.4 fo:footnote-body

    Обычное Использование:

    fo:footnote-body используется для генерации содержимого сноски.

    Области:

    fo:footnote-body генерирует и возвращает одну или более областей блок-уровня с классо м области "xsl-footnote".

    Ограничения:

    fo:footnote-body допускается только как потомок fo:footnote.

    никакая область не может иметь более одной блок области - потомка, возвращаемой тем же самым ОФ fo:footnote-body.

    Области с классом области "xsl-footnote" обязаны правильно упорядочиваться внутри дерева областей относительно других областей, имеющих тот же класс области.

    Содержимое:

    (%block;)+
    

    Следующие свойства применяются к данному ОФ:


    6.11 Прочие Объекты Форматирования

    6.11.1 Введение

    В следующих примерах показано использование ОФ fo:wrapper, не имеющего семантики, но действующего как "курьер" для наследуемых свойств.

    6.11.1.1 Пример

    Код:

    <doc>
    <p>This is an <emph>important word</emph> in this
    sentence that also refers to a <code>variable</code>.</p>
    </doc>
    

    Элементы "emph" представлены с использованием полужирного шрифта, и элементы "code" - с использованием шрифта Courier.

    Таблица стилей XSL:

    <?xml version='1.0'?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                    xmlns:fo="http://www.w3.org/1999/XSL/Format"
                    version='1.0'>
    
    <xsl:template match="p">
      <fo:block>
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
    
    <xsl:template match="emph">
      <fo:wrapper font-weight="bold">
        <xsl:apply-templates/>
      </fo:wrapper>
    </xsl:template>
    
    <xsl:template match="code">
      <fo:wrapper font-family="Courier">
        <xsl:apply-templates/>
      </fo:wrapper>
    </xsl:template>
    
    </xsl:stylesheet>
    

    Элемент fo: и дерево атрибутов:

    <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">This is an
    <fo:wrapper font-weight="bold">important word</fo:wrapper>
    in this sentence that also refers to a
    <fo:wrapper font-family="Courier">variable</fo:wrapper>.
    </fo:block>
    


    6.11.2 fo:wrapper

    Обычное Использование:

    ОФ fo:wrapper используется для специфицирования наследуемых свойств для группы ОФ.

    Области:

    ОФ fo:wrapper не генерирует никаких областей. ОФ fo:wrapper возвращает последовательность областей, создаваемую путём конкатенации последовательностей областей, возвращаемых каждым потомком объекта fo:wrapper.

    Получение Уточнения:

    За исключением "id", объект fo:wrapper не имеет свойств, используемых им непосредственно. Однако он служит в качестве курьера, содержащего наследуемые свойства, используемые его потомками.

    Ограничения:

    Порядок конкатенации последовательностей областей, возвращаемых потомками fo:wrapper, такой же, что и порядок расположения потомков под fo:wrapper.

    Содержимое:

    (#PCDATA|%inline;|%block;)*
    

    fo:wrapper может иметь только потомков, которые могут быть потомками родителя объекта fo:wrapper, с двумя исключениями:

    • fo:wrapper всегда может содержать последовательность из нуль или более fo:marker в качестве начальных потомков.

    • Только fo:wrapper - потомок fo:multi-properties - может иметь потомков, которые допускаются вместо fo:multi-properties.

    Это ограничение применяется рекурсивно.

    ПРИМЕЧАНИЕ:

    Например, fo:wrapper - потомок другого fo:wrapper - может иметь только таких потомков, которые допускаются в качестве потомков родительского fo:wrapper.

    Следующие свойства применяются к данному ОФ:


    6.11.3 fo:marker

    Обычное Использование:

    fo:marker используется в сочетании с fo:retrieve-marker для создания фиксированных шапок или футеров.
    Типичные примеры:

    • шапки словарей, показывающие первое и последнее слово, определённые на странице.

    • шапки, показывающие заголовки глав и разделов страницы.

    fo:marker должен быть начальным потомком своего родительского ОФ.

    Области:

    fo:marker прямо не производит областей. Его потомки могут быть запрошены  отформатированы из fo:static-content с использованием fo:retrieve-marker, значение свойства "retrieve-class-name" которого - такое же, как и значение свойства "marker-class-name" этого fo:marker.

    Ограничения:

    fo:marker допускается только в качестве потомка объекта fo:flow.

    Примечание: Значения свойств, установленные в fo:marker или его предках, не будут наследоваться потомками объекта fo:marker, если они запрашиваются объектом fo:retrieve-marker.

    Является ошибкой, если два или более fo:marker, имеющих общего родителя, имеют и общее значение свойства "marker-class-name".

    Содержимое:

    (#PCDATA|%inline;|%block;)*
    

    fo:marker может содержать любые ОФ, разрешённые в качестве замещения для любого fo:retrieve-marker, который запрашивает потомков объекта fo:marker.

    Следующие свойства применяются к данному ОФ:


    6.11.4 fo:retrieve-marker

    Обычное Использование:

    fo:retrieve-marker используется в сочетании с fo:retrieve-marker для создания фиксированных шапок или футеров.
    Типичные примеры:

    • шапки словарей, показывающие первое и последнее слово, определённые на странице.

    • шапки, показывающие заголовки глав и разделов страницы.

    Область:

    fo:retrieve-marker прямо не производит областей. Он (концептуально) замещается потомками объекта fo:marker, который его запрашивает.

    Получение Уточнения:

    Свойства и уточнения, специфицированные в предках объекта fo:retrieve-marker, учитываются при форматировании потомков запрошенного fo:marker так. как если бы потомки имели того же предка, что и fo:retrieve-marker.

    Ограничения:

    fo:retrieve-marker допускается только в качестве потомка объекта fo:static-content.

    fo:retrieve-marker специфицирует, что потомки выбранного fo:marker будут форматироваться так, как если бы они замещали fo:retrieve-marker в дереве форматирования.

    Свойства объекта fo:retrieve-marker вводят иерархию приоритетов для областей в дереве областей. Каждый fo:marker концептуально присоединяется к каждой нормальной области, возвращаемой родительским для fo:marker ОФ. Кроме того, fo:marker концептуально присоединяется к каждой не-нормальной области, генерируемой непосредственно родительским для fo:marker объектом форматирования. В противоположность этому, области, генерируемые любым потомком объекта fo:flow, могут иметь нуль или более объектов fo:marker, концептуально подсоединённых. fo:marker, чьи потомки запрошены, это объект (концептуально), присоединённый к области, находящейся на вершине этой иерархии.

    Каждая область в этой иерархии считается имеющей приоритет, или "лучшей", чем любая область ниже её в этой иерархии. При сравнении двух областей с целью определения, которая из них лучше, термины "first/первая" и "last/последняя" относятся к порядку pre-order traversal (предупорядоченного пересечения) дерева областей.

    Термин "containing page/содержащая страница" используется здесь для обозначения страницы, содержащей первую область, сгенерированную или возвращённую потомками запрошенного объекта fo:marker.

    Область, имеющая присоединённый fo:marker, значение свойства "marker-class-name" которого - то же, что и значение свойства "retrieve-class-name" объекта fo:retrieve-marker, определяется как квалифицирующая область. Только квалифицирующие области имеют позиции в иерархии.

    Квалифицирующая область внутри страницы лучше, чем любая квалифицирующая область внутри предшествующей страницы, за исключением областей, которые не имеют позиции в иерархии, если они находятся внутри страниц, следующих после содержащей страницы. Если свойство "retrieve-boundary" имеет значение "page-sequence", то область не имеет позиции в иерархии, если находится на странице из последовательности страниц, предшествующей той последовательности страниц, которая содержит данную страницу. Если свойство "retrieve-boundary" имеет значение "page", то область не имеет позиции в иерархии, если не находится на содержащей странице.

    Если свойство "retrieve-position" имеет значение "first-starting-within-page", тогда первая квалифицирующая область на содержащей странице, чьё уточнение "is-first" имеет значение "true", - лучше, чем любая другая область. Если такой области нет, тогда первая квалифицирующая область на содержащей странице -  лучше, чем любая другая область.

    Если свойство "retrieve-position" имеет значение "first-including-carryover", тогда первая квалифицирующая область на содержащей странице -  лучше, чем любая другая область.

    Если свойство "retrieve-position" имеет значение "last-starting-within-page", тогда последняя квалифицирующая область на содержащей странице, чьё уточнение "is-first" имеет значение "true", - лучше, чем любая другая область. Если такой области нет, тогда последняя квалифицирующая область на содержащей странице -  лучше, чем любая другая область.

    Если свойство "retrieve-position" имеет значение "last-ending-within-page", тогда последняя квалифицирующая область на содержащей странице, чьё уточнение "is-last" имеет значение "true", - лучше, чем любая другая область. Если такой области нет, тогда последняя квалифицирующая область на содержащей странице -  лучше, чем любая другая область.

    Если иерархия областей пуста, не запрашиваются никакие ОФ.

    Содержимое:

    EMPTY
    

    Следующие свойства применяются к данному ОФ:

     

    Назад

    Оглавление

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

    Вперёд



    Внимание! Если у вас не получилось найти нужную информацию, используйте рубрикатор или воспользуйтесь поиском


    .



    книги по программированию исходники компоненты шаблоны сайтов C++ PHP Delphi скачать