Объекты Форматирования-6
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="plus-icon.gif"/>
</fo:multi-toggle>
<fo:basic-link internal-destination="">
<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="minus-icon.gif"/>
</fo:multi-toggle>
<fo:basic-link internal-destination="">
<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="">
<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="">
<xsl:number level="multiple" count="chapter" format="1. "/>
<xsl:apply-templates/>
</fo:block>
</xsl:template>
<xsl:template match="section/title">
<fo:block 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="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="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="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="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="http://www.w3.org/TR"
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="">
<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=""/>
</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="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>
Pyramidin.Narod.RU
|