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

Модель области-1

 

Назад

Оглавление

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

Вперёд

 

Краткое Содержание
4 Модель Области
    4.1 Введение
    4.2 Прямоугольные Области
    4.3 Пространство и Обусловленность
    4.4 Блок-Области
    4.5 Строчные Области
    4.6 Инлайн-Области
    4.7 Ограничения Упорядочивания
    4.8 Условия Keeps и Breaks
    4.9 Модель Представления
    4.10 Образец Дерева Областей

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

4.1 Введение

Форматировщик генерирует упорядоченное дерево, дерево областей, которое описывает геометрическое структурирование для носителя вывода. Термины потомок, родственный, предок, и родитель(ский) относятся к структуре дерева. В дереве имеется корневой узел/root node.

Каждый узел дерева областей, кроме root, называется областью и ассоциирован с прямоугольным участком устройства вывода. Области не являются ОФ; напротив, ОФ генерирует ноль или более прямоугольных областей, и обычно каждая область генерируется уникальным объектом в дереве ОФ.

ПРИМЕЧАНИЕ:

Исключением является лишь тот случай, когда несколько узлов "листьев" дерева ОФ комбинируются для генерации единой области, например, когда несколько символов последовательности генерируют одиночный лигатурный глиф. В таких случаях соответствующие свойства, такие как font-family и font-size, одинаковы для всех генерирующих объектов форматирования (см. раздел [4.7.2 Конструирование Строк]).

Область имеет content-rectangle/прямоугольник содержимого, часть которого назначается его дочерним областям, и необязательные padding/заполнение и border/рамку. На диаграмме показано, как эти участки соотносятся. Внешняя граница рамки называется border-rectangle/прямоугольник рамки, а внешний край заполнения называется padding-rectangle/прямоугольник заполнения.

Каждая область имеет набор уточнений, отображение имён в значения, - способ, которым элементы имеют атрибуты, а ОФ имеют свойства. Уточнения используются для вывода области или для определения ограничений для результата форматирования, или для того и другого. Уточнения используются строго для целей форматирования или для определения ограничений, которые могут называться уточнения форматирования, а уточнения, используемые для вывода/отображения, могут, в свою очередь, называться уточнения отображения. Уточнения, чьи значения копируются или происходят из свойства с тем же или соответствующим именем, перечислены в разделах [C Свойства. Резюме.] и [5 Очистка/Разрешение Свойств]; другие уточнения перечислены ниже.

ПРИМЕЧАНИЕ:

Уточнения также ассоциируются с ОФ в процессе очистки. Некоторые уточнения получают значение в ходе форматирования, а другие уже существуют после очистки.

Семантика каждого типа объекта форматирования (ОФ), генерирующего области, дана в терминах генерируемых областей и их места в иерархии дерева областей/area-tree. В дальнейшем это может подвергнуться изменениям путём взаимодействия между различными типами ОФ. Свойства ОФ определяют, какие области генерируются и как содержимое ОФ распределено между ними. (Например, слово, которое не переносится, может не иметь глифов, распределённых по областям на двух отдельных строчных областях/line-areas.) Уточнения области могут быть:

directly-derived/прямо происходящими: значениями уточнений directly-derived являются вычисленные значения свойства с тем же или соответствующим именем в генерирующем ОФ, или

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

Данное описание принимает, что очищенные значения вычислены для всех свойств объектов форматирования в результирующем дереве, т.е., все относительные и связанные значения вычисляются, а наследуемые значения публикуются, как описано в разделе [5 Очистка/Разрешение Свойств]. Это позволяет процессу наследования быть описанным лишь однократно и исключает необходимость повторения информации при вычислении значений в данном описании.

Уточнения indirectly-derived: block-progression-direction, inline-progression-direction, shift-direction, glyph-orientation, is-reference-area, is-viewport-area, left-position, right-position, top-position, bottom-position, left-offset, top-offset, is-first, is-last, alignment-point, area-class, start-intrusion-adjustment, end-intrusion-adjustment, generated-by, returned-by, page-number, blink, underline-score, overline-score, through-score, underline-score-color, overline-score-color, through-score-color, alignment-baseline, baseline-shift, nominal-font, dominant-baseline-identifier, actual-baseline-table и script.

4.2 Прямоугольные области

4.2.1 Типы областей

Имеются области двух типов: block-areas/блок-области и inline-areas/инлайн-области. Они различаются тем, как они обычно упаковываются форматировщиком. Область может иметь блок области или инлайн-области в качестве потомков, как определено генерирующим объектом форматирования, но все потомки данной области обязаны быть одного типа. Хотя блок- и инлайн-области обычно упакованы, некоторые области могут быть позиционированы явно.

Строчная область/line-area это особый вид блок-области, все потомки которой являются инлайн-областями. Область глифа/glyph-area это особый вид инлайн-области, не имеющей дочерних областей и имеющей в качестве содержимого одиночное изображение глифа.

Типичные примеры областей: параграф, отображённый с использованием ОФ fo:block, генерирующего блок-области, и символ, отображённый с использованием ОФ fo:character, генерирующего инлайн-область (фактически, область глифа/glyph-area).

4.2.2 Обычные уточнения

Ассоциированными с любой областью являются два направления, получаемые из свойств writing-mode и reference-orientation генерирующего объекта форматирования: block-progression-direction - это направление для упаковки дочерних для данной области блок-областей, а inline-progression-direction - это направление для упаковки дочерних для данной области инлайн-областей. Ещё одно уточнение, shift-direction, имеется в инлайн-областях и относится к направлению, в котором осуществляются смещения базовой линии. glyph-orientation определяет ориентацию избражений-глифов в результирующем отображении. Если reference-orientation области - 0, тогда верхний, нижний, левый и правый края содержимого параллельны соответствующим краям предка области и согласованы с ними. Иначе края повёрнуты от краёв родителя области, как описано в разделе [7.20.3 "reference-orientation"]. Направления inline-progression-direction и block-progression-direction определяются размещением этих краёв, как описано в разделе [7.27.7 "writing-mode"]. Булево уточнение is-reference-area определяет, устанавливает или нет область систему координат для спецификации отступов. Область, для которой это уточнение - true, называется reference-area/ссылка-область. Только reference-area может иметь направление block-progression-direction, отличающееся от родительского. reference-area может быть блок-областью или инлайн-областью. Булево уточнение is-viewport-area определяет, устанавливает или нет область "окно", через которое можно просматривать её потомков, и может использоваться для представления сжатого или прокручиваемого материала; например, в печатающих приложениях, где нужны "просачивание" и отделка. Область, для которой данное уточнение - true, называется viewport-area/область-порт просмотра. Обычной конструкцией является пара viewport/reference. Имеется порт просмотра V reference-area блок-области R, где R - единственный потомок V и start-edge и end-edge content-rectangle/прямоугольника содержимого R параллельны start-edge и end-edge прямоугольника содержимого V. Каждая область имеет уточнения top-position, bottom-position, left-position и right-position, задающие расстояния от краёв content-rectangle до аналогично именованных краёв ближайшего предка - reference-area (или page-viewport-area - в случае, если области генерируются потомками ОФ, чьи absolute-position установлены в fixed); left-offset и top-offset определяют величину, на которую relatively-positioned/относительно-позиционируемая область сдвигается/shifted при отображении. Эти уточнения получают свои значения в ходе процесса форматирования или в случае с абсолютно позиционируемыми областями, в ходе очистки. block-progression-dimension и inline-progression-dimension области задают расширение прямоугольника содержимого области по двум относительным измерениям. Остальные уточнения включают:

  • is-first и is-last, которые являются булевыми уточнениями, обозначают порядок, в котором области генерируются и возвращаются данным ОФ. (См. [6.1.1 Определения, Обычные для Многих ОФ]. is-first будет true для первой области (или единственной области), генерируемой и возвращаемой объектом форматирования, а is-last будет true для последней области (или единственной области));

  • величина пространства за пределами border-rectangle/прямоугольника рамки: space-before, space-after, space-start и space-end (хотя многие из них должны быть 0/zero в определённых классах области);

    ПРИМЕЧАНИЕ:

    "Before", "after", "start" и "end" обозначают относительные направления и описаны ниже.

  • толщина заполнения каждой из 4 сторон: padding-before, padding-after, padding-start и padding-end;

  • style/стиль, thickness/толщина и color/цвет каждой из 4 сторон рамки: border-before, и т.д.;

  • фон области: background-color, background-image и другие уточнения фона; и

  • nominal-font/номинальный шрифт области, как определено свойствами шрифта и символьными потомками ОФ, генерирующего области. (См. [5.5.7 Свойства Шрифта])

Если не специфицировано иное, уточнения ОФ имеются в каждой из генерируемых областей и с одним и тем же значением. (Тем не менее, см. разделы [4.7.2 Построение Строк] и [4.9.4 Рамка, Заполнение и Фон].)

4.2.3 Геометрические определения

Как описано выше, content-rectangle это прямоугольник, ограничивающий внутреннюю часть заполнения и используемый для описания ограничений позиционирования областей-потомков. Бывает и так, что маркировка глифов-потомков или других областей может появиться вне прямоугольника содержимого.

К этому имеет отношение и allocation-rectangle/прямоугольник размещения области, используемый для описания ограничения позиции области внутри области-родителя. Для инлайн-областей это либо normal-allocation-rectangle, либо large-allocation-rectangle. normal-allocation-rectangle расширяется до content-rectangle при block-progression-direction и до border-rectangle при inline-progression-direction. large-allocation-rectangle это border-rectangle. Если не специфицировано иное, allocation-rectangle области будет normal-allocation-rectangle.

Normal-allocation-rectangle инлайн-области

Large-allocation-rectangle инлайн-области

Для блок-области allocation-rectangle расширяется до border-rectangle при block-progression-direction и за пределы content-rectangle при inline-progression-direction на величину, равную end-indent, а в противоположном направлении - на величину, равную start-indent.

ПРИМЕЧАНИЕ:

Включение пространства за пределами border-rectangle блок-области при inline-progression-direction не влияет на ограничения размещения и предназначено для обеспечения совместимости с моделью бокса CSS.

Прямоугольники allocation- и content-rectangles блок-области

Края прямоугольника обозначаются так:

  • before-edge это край, появляющийся первым при направлении block-progression-direction и перпендикулярный ему;

  • after-edge это край, противоположный before-edge;

  • start-edge появляющийся первым при направлении inline-progression-direction и перпендикулярный ему;

  • end-edge это край, противоположный start-edge.

Для задач этого определения content-rectangle области использует направления inline-progression-direction и block-progression-direction данной области; но border-rectangle, padding-rectangle и allocation-rectangle используют направления своей области-предка. Таким образом, края, назначенные для content-rectangle, могут не соответствовать так же именованным краям прямоугольников padding-, border- и allocation-rectangles. Это важно в тех случаях, когда вложенные блок-области имеют различные writing-modes/режимы письма. На диаграмме показано соответствие между различными названиями краёв при смешанном writing-mode:

Каждая инлайн-область имеет alignment-point/точку выравнивания, определяемую форматировщиком, на крае start-edge её allocation-rectangle; для glyph-area эта точка будет на start-edge глифа на его базовой линии выравнивания (см. ниже). Это зависит от вида письма и не обязательно соответствует координатной точке (0,0), используемой для данных, описывающих форму глифа.

4.2.4 Упорядочивание дерева

В дереве области набор областей с имеющимся предком расположен упорядоченно. Термины initial, final, preceding и following имеют к этому отношение.

В любом упорядоченном дереве порядок родственных соотношений расширяется до порядка всего дерева в целом по меньшей мере двумя путями:

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

  • В порядке дерева post-order traversal потомки каждого узла предшествуют узлу, но следуют после любых предшествующих родственников узла или его предков.

"Предшествование" и "следование", применённое к не-родственникам, будет зависеть от используемого порядка расширения, который обязан быть специфицирован. Однако, при любом заданном порядке, листья дерева (узлы без потомков) упорядочиваются недвусмысленно/явно.

4.2.5 Ограничения стэкирования

В этом разделе даётся понятие об ограничениях block-stacking и inline-stacking. Они определяются как упорядоченные взаимоотношения, т.е., если A и B имеют ограничения упаковки, это не обязательно означает, что B и A имеют ограничение упаковки. Эти определения рекурсивны по своей природе, и некоторые варианты могут зависеть от более простых вариантов того же самого определения. Здесь нет зацикливания, но только последовательность рекурсий. Задачей определения является идентификация тех областей на любом уровне дерева, которые имеют до себя только пустое пространство.

Уточнение area-class это перечислимое значение, установленное в xsl-normal для области, упакованной вместе с другими областями в последовательность. Область normal это такая область, для которой данное уточнение установлено в xsl-normal. Область page-level-out-of-line это область с area-class/классом xsl-footnote, xsl-before-float или xsl-fixed; размещение этих областей управляется предком fo:page-sequence генерирующего их объекта форматирования. Область reference-level-out-of-line это область с area-class/классом xsl-side-float или xsl-absolute; размещение этих областей управляется ОФ, генерирующим соответствующий reference-area. Область anchor это область с area-class xsl-anchor; размещение этих областей управляется произвольно и не влияет на порядок упаковки в стэк. Области с area-class xsl-normal, xsl-footnote или xsl-before-float определены как stackable/стэкируемые, что означает, что они предположительно должны быть подобающим образом стэкированы.

Ограничения Block-stacking/стэкирования блока.

Если P это блок-область, тогда имеется fence preceding\предшествующее ограждение P, если P является reference-area или если border-before-width или padding-before-width в P являются non-zero/ненулевыми. Аналогично, имеется fence following\последующее ограждение P, если P является reference-area или если border-after-width или padding-after-width в P являются non-zero/ненулевыми.

Если A и B являются стэкируемыми областями и S является последовательностью спецификаторов пробелов (см. [4.3 Заполнение и Обусловленность]), определено, что A и B имеют ограничение block-stacking S, если выдерживается одно из следующих условий:

  1. B это блок-область, являющаяся первым нормальным потомком A, а S это последовательность, состоящая из space-before для B.

  2. A это a block-area блок-область, являющаяся последним нормальным потомком B, а S; это последовательность, состоящая из space-after для A.

  3. A и B оба являются блок-областями, и либо

    a. B является следующей стэкируемой областью-родственником A, а S это последовательность, состоящая из space-after для A и space-before для B;

    b. B это первый нормальный потомок блок-области P, B не является строчной областью, отсутствует предшествующее ограждение P, A и P имеют ограничение стэкирования блока S', а S состоит из S' и последующего space-before для B; или

    c. A является последним нормальным потомком блок-области P, A не является строчной областью, отсутствует последующее ограждение P, P и B имеют ограничение стэкирования блока S'', а S состоит из space-after для A с последующим S''.

    d. A имеет ограничение стэкирования блока S' с блок-областью E, E имеет ограничение стэкирования блока S'' с B, E является empty (т.е. имеет нулевые рамку, заполнение и block-progression-dimension и не имеет нормальных потомков), и S состоит из S' с последующим S''.

ПРИМЕЧАНИЕ:

Использование "stackable" в двух местах в вышеприведённом определении позволяет применять ограничения стэкирования блока между областями area-class/класса-области xsl-before-float или xsl-footnote.

Смежные края с блок-стэкированием

Если A и B имеют ограничения блок-стэкирования, то adjacent edges/смежные края в A и B являются упорядоченной парой, рекурсивно определяемой как:

  • Если 1, before-edge в content-rectangle в A и before-edge в allocation-rectangle в B.

  • Если 2, after-edge в allocation-rectangle в A и after-edge в content-rectangle в B.

  • Если 3a, after-edge в allocation-rectangle в A и before-edge в allocation-rectangle в B.

  • Если 3b, первый из смежных краёв в A и P и before-edge в allocation-rectangle в B.

  • Если 3c, after-edge в allocation-rectangle в A и второй из смежных краёв в P и B.

  • Если 3d, первый из смежных краёв в A и E и второй из смежных краёв в E и B.

Пример. На данной диаграмме каждый узел представляет блок-область. Примем, что ширина всех заполнений и рамок равна 0 ни одна из областей не является reference-area. Тогда P и A имеют ограничение стэкирования блока, как и A и B, A и C, B и C, C и D, D и B, B и E, D и E, E и P; только эти пары на диаграмме имеют ограничения стэкирования блока. Если B имеет ненулевое padding-after, тогда D и E не должны будут иметь какого-либо ограничения стэкирования блока (хотя B и E могут продолжать иметь ограничение стэкирования блока).

Пример ограничения блок-стэкирования

Ограничения инлайн-стэкирования.

В этом разделе рекурсивно определяются ограничения inline-stacking между двумя областями (либо двумя inline-areas/инлайн-областями, либо одной inline-area и одной line-area/строчной областью), а также даются объяснения предшествующего ограждения и последующего ограждения; эти определения тесно взаимосвязаны. Имеется некоторая параллель с определением ограничений block-stacking, но с определённым усложнением, так как мы можем иметь ограничение стэкирования между inline-areas, которые упакованы в противоположных направлениях inline-progression-directions. (Это не проблема для ограничений block-stacking, поскольку блок-область, не являющаяся reference-area, не может иметь block-progression-direction, отличное от своего родителя.)

Если P и Q имеют ограничение инлайн-стэкирования, тогда P имеет fence preceding/предшествующее ограждение Q при условии, что P это reference-area/ссылочная область, или она имеет ненулевую border-width/ширину рамки или padding-width/ширину заполнения у первого смежного края P и Q. Так же, Q имеет fence following/последующее ограждение P при условии, что Q это reference-area, или она имеет ненулевую border-width/ширину рамки или padding-width/ширину заполнения у второго смежного края P и Q.

Если A и B это нормальные области, а S это последовательность space-specifiers/спецификаторов заполнения, определено, что A и B имеют ограничение inline-stacking S, при соблюдении одного из следующих условий:

  1. A это инлайн- или строчная область, B это инлайн-область, являющаяся первым нормальным потомком A, а S это последовательность, состоящая из space-start из B.

  2. B это инлайн или строчная область, A это инлайн-область, являющаяся последним нормальным потомком B, а S это последовательность, состоящая из space-end из A.

  3. Каждая из A и B это либо инлайн, либо строчная область, и либо

    a. обе A и B являются инлайн-областями, B это следующий нормальный родственник A, а S это последовательность, состоящая из space-end из A и space-start из B;

    b. B это инлайн-область, являющаяся первым нормальным потомком инлайн-области P, P не имеет последующего ограждения A, A и P имеют ограничение inline-stacking S', inline-progression-direction в P то же самое, что и inline-progression-direction ближайшей области - общего предка для A и P, а S состоит из S' с последующим space-start из B.

    c. A это инлайн-область, являющаяся последним нормальным потомком инлайн-области P, P не имеет предшествующего ограждения B, P и B имеют ограничение inline-stacking S'', inline-progression-direction в P то же самое, что и inline-progression-direction ближайшей области - общего предка для P и B, а S состоит из space-end из A с последующим S''.

    d. B это инлайн-область, являющаяся последним нормальным потомком инлайн-области P, P не имеет последующего ограждения A, A и P имеют ограничение inline-stacking S', inline-progression-direction в P противоположно inline-progression-direction ближайшей области - общего предка для A и P, а S состоит из S' с последующим space-end из B.

    e. A это инлайн-область, являющаяся первым нормальным потомком инлайн-области P, P не имеет предшествующего ограждения B, P и B имеют ограничение inline-stacking S'', inline-progression-direction в P противоположно inline-progression-direction ближайшей области - общего предка для P и B, а S состоит из space-start из A с последующим S''.

Смежные края с Inline-stacking/инлайн-стэкированием

Смежные края с Inline-stacking, продолжение

Если A и B имеют ограничение inline-stacking, смежные края из A и B являются упорядоченной парой, определённой как:

  • Если 1, start-edge в content-rectangle/прямоугольнике содержимого для A и start-edge в allocation-rectangle/прямоугольнике размещения для B.

  • Если 2, end-edge в allocation-rectangle для A и end-edge в content-rectangle для B.

  • Если 3a, end-edge в allocation-rectangle для A и start-edge в allocation-rectangle для B.

  • Если 3b, первый из смежных краёв A и P и start-edge в allocation-rectangle для B.

  • Если 3c, end-edge в allocation-rectangle для A и второй из смежных краёв P и B.

  • Если 3d, первый из смежных краёв A и P и end-edge в allocation-rectangle для B.

  • Если 3e, start-edge в allocation-rectangle для A и второй из смежных краёв P и B.

Две области являются adjacent/смежными, если они имеют ограничение block-stacking или inline-stacking. Это следует из определений, что области одного типа (inline или block) могут быть смежными только в том случае, если все их не-общие предки - того же самого типа (до, но не включая их ближайшего общего предка). Таким образом, например, две inline-области, расположенные в различных строчных областях, никогда не будут смежными.

Область A начинает область P, если A является потомком P, а P и A имеют ограничение block-stacking или inline-stacking. В этом случае второй из смежных краёв P и A определяется как leading edge/ведущий край в P. Спецификатор пространства/space-specifier, применяемый к ведущему краю, определяется также как begin/начало P.

Аналогично, область A заканчивает область P, если A является потомком P, а A и P имеют ограничение block-stacking или inline-stacking. В этом случае первый из смежных краёв A и P определяется как trailing edge/ведомый край в P. Спецификатор пространства, применяемый к ведомому краю, определяется также как end/конец P.

4.2.6 Таблицы базовых линий шрифта

Каждый вид письма имеет предпочтительную "baseline/базовую линию" для выравнивания глифов. В западном письме обычно используется "alphabetic/алфавитная" базовая линия, которая находится около низа заглавных букв или касается его. Кроме того, для каждого шрифта имеется предпочтительный способ выравнивания внедрённых глифов из других видов письма, например, для западных шрифтов имеются разные базовые линии для выравнивания внедрённых идеографических или индийских глифов.

Каждая блок- и инлайн-область имеет уточнение dominant-baseline-identifier (доминантного идентификатора базовой линии), значением которой является идентификатор базовой линии, соответствующий типу выравнивания, ожидаемому для потомков инлайн-области этой области, и каждая inline-area имеет alignment-baseline/базовую линию выравнивания, которая специфицирует, как эта область выровнена относительно родителя. Эти уточнения интерпретируются так, как описано в разделе [7.8.1 Шрифты и Данные Шрифтов]. Для каждого шрифта actual-baseline-table/таблица текущих базовых линий отображает эти идентификаторы в точке start-edge/начального края области. Злоупотребляя терминологией, строка в inline-progression-direction через точку, соответствующую dominant-baseline-identifier, называется "dominant baseline/доминантной базовой линией."

4.3 Пространство и обусловленность

Спецификатор пространства/space-specifier это составной тип данных, компонентами которого являются minimum, optimum, maximum, conditionality/обусловленность и precedence/приоритет. Minimum, optimum и maximum это размеры, которые могут быть использованы для определения ограничения на расстоянии, то есть расстояние предпочтительно должно быть optimum и в любом случае не меньше minimum и не больше maximum. Любое из этих значений может быть отрицательным, что может вызвать (к примеру) перекрытие областей, но, в любом случае, minimum должен быть меньше чем или равен значению optimum, а optimum - меньше чем или равен значению maximum. Обусловленность это перечислимое значение, которое управляет воздействием space-specifier в начале или в конце ссылочной или строчной области. Возможные значения: retain и discard; условный спецификатор пространства - это тот, для которого данное значение - discard. Приоритет имеет значение - целое число или специальную лексему force. Форсирующий спецификатор пространства - это тот, для которого данное значение - force.

Последовательно введённые спецификаторы пространства могут взаимодействовать друг с другом. Ограничение, вводимое последовательностью спецификаторов пространства, вычисляется путём обсчёта для каждого спецификатора пространства его ассоциированного resolved space-specifier/разрешённого спецификатора пространства в соответствии с их обусловленностью и приоритетом, как показано ниже в правилах разрешения пространства. Ограничение, вводимое дистанционно последовательностью разрешённых спецификаторов пространства, является дополнительным; то есть дистанция ограничена в пределах: не меньше, чем сумма разрешённых минимальных значений, и не больше, чем сумма разрешённых максимальных значений.

4.3.1 Правила разрешения (вычисления) пространства

Чтобы вычислить разрешённый спецификатор пространства данного спецификатора пространства S, примем максимальное ограничение inline-стэкирования или block-стэкирования S', содержащее спецификатор пространства S как элемент последовательности (S' это последовательность спецификаторов пространства; см. [4.2.5 Ограничения Стэкирования]). Разрешённый из S спецификатор пространства является не-условным, форсирующим спецификатором пространства, вычисленным в терминах данной последовательности.

  1. Если любой из спецификаторов пространства в S' является условным и начинает ссылочную область или строчную область, тогда он подавляется, что означает - его разрешённый спецификатор пространства равен нулю. Кроме того, любые условные спецификаторы пространства, следующие непосредственно за ним в последовательности, также подавляются.

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

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

  3. Альтернативно, если все оставшиеся спецификаторы пространства в S' являются нефорсируемыми, то разрешённый спецификатор пространства определяется в терминах тех неподавляемых спецификаторов пространства, приоритет которых в цифровом выражении более высокий, и среди тех, чьё оптимальное выражение является наибольшим. Все другие спецификаторы пространства подавляются. Если имеется только один из них, тогда его значение принимается в качестве разрешённого.

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

  4. Если S является субъектом ослабления ограничений, то его максимальное значение устанавливается в текущий размер block-progression-dimension содержащей блок-области. См. [4.3.2 Переограниченные/Overconstrained Спецификаторы Пространства]

Пример. Предположим, что последовательность значений пространства, вводимых в начале ссылочной области такая:
первое, пространство со значением в 10 пунктов (то есть minimum, optimum и maximum все равны 10 пунктам) и обусловленность discard;
второе, пространство со значением в 4 пункта и обусловленность retain;
и третье, пространство со значением в 5 пунктов и обусловленность discard;
все три пространства имеют нулевой приоритет. Затем первое (10 пунктов) пространство подавляется по правилу 1, а второе (4 пункта) пространство подавляется по правилу 3. Разрешённое значение третьего пространства является не-условным в 5 пунктов, даже если оно первоначально взято из условного пространства.

Заполнение блок-области не взаимодействует с любым спецификатором пространства (за исключением тех, по определению, в которых наличие заполнения у краёв before- или after-edge не даёт областям с любой стороны от себя иметь ограничение стэкирования.)

Рамка заполнения у краёв before-edge или after-edge блок-области B может быть специфицирована как обусловленная. Если это так, то она устанавливается в нуль, если её ассоциированный край является ведущим краем в ссылочной области, а уточнение is-first в B является false, или если её ассоциированный край является ведомым краем ссылочной области, а уточнение is-last в B - false. В любом из этих случаев рамка или заполнение принимаются равными нулю для задач определений ограничения стэкирования.

Рамка или заполнение около start-edge или end-edge инлайн-области I могут быть специфицированы как условные. Если это так, то она устанавливается в нуль, если её ассоциированный край является ведущим краем в строчной области, а уточнение is-first в I - false, или если её ассоциированный край является ведомым краем строчной области, а уточнение is-last в I является false. В любом из этих случаев рамка или заполнение принимаются равными нулю для задач определений ограничения стэкирования.

4.3.2 Переограниченные спецификаторы пространства

Если область P генерируется ОФ, имеющим block-progression-dimension как "auto", то ограничения, включающие before-edge и after-edge содержащего прямоугольника для P, вместе с ограничениями между различными потомками P дают в результате ограничение действующего значения block-progression-dimension. Если block-progression-dimension вместо этого специфицировано как длина, тогда это может в результате дать "переограниченное" дерево областей, например, не полностью заполненный fo:block со специфицированным размером. В этом случае некоторые ограничения между P и его потомками должны быть ослаблены; те, которые подходят для данного использования, называются субъектами для ослабления переограничения и рассматриваются так же, как в предыдущем разделе.

  • Если значение display-align установлено в "after" или "center" и P является первой нормальной областью, сгенерированной ОФ, тогда space-before первого нормального потомка P является субъектом ослабления переограничения.

  • Если значение display-align установлено в "before" или "center" и P является последней нормальной областью, сгенерированной ОФ, тогда space-after последнего нормального потомка P является субъектом ослабления переограничения.

4.4 Блок-области

Блок-области имеют несколько уточнений, которые обычно действуют на размещение своих потомков. line-height используется при расчётах размещения в строках. Уточнение line-stacking-strategy контролирует тип размещения, используемый для строчных областей-потомков, и имеет перечислимое значение (font-height, max-height или line-height). Всё это подробно описано ниже. Все области имеют эти уточнения, но они действуют только на области, имеющие стэкированных строчных областей-потомков. Уточнения space-before и space-after определяют расстояние между блок-областью и окружающими блок-областями. Блок-область, которая обычно не является строчной областью, обычно имеет свои размеры в направлении inline-progression-direction, определяемые её отступами start-indent и end-indent и размерами её ближайшей родительской ссылочной области/reference-area. Блок-область, которая не является строчной областью, обязана быть правильно стэкирована (как определено ниже в разделе [4.4.1 Стэкированные Блок-Области]), если только не определено иное в её генерирующем ОФ. В этом случае её block-progression-dimension будет субъектом ограничений на базе block-progression-dimensions и space-specifiers её потомков. См. [4.3.2 Переограниченные space-specifiers/Спецификаторы Пространства]


 

Назад

Оглавление

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

Вперёд

 

Pyramidin.Narod.RU