Модель области-2
4.4.1 Стэкированные блок-области
Блок-области - потомки области - обычно стэкируются в block-progression-direction внутри своей родительской области, и это является методом по умолчанию при позиционировании блок-областей. В то же время объекты форматирования свободны при специфицировании других методов позиционирования дочерних областей у тех областей, которые ими генерируются, например, элементы списка или таблицы.
Для родительской области P, потомки которой являются блок-областями, P определено как properly stacked/правильно стэкированное, если соблюдаются все нижеследующие условия:
-
Для каждой блок-области B, являющейся потомком P, выдерживается следующее:
-
before-edge и after-edge её прямоугольника размещения параллельны before-edge и after-edges прямоугольника содержимого P,
-
start-edge её прямоугольника размещения параллелен start-edge прямоугольника содержимого R (где R это ближайшая ссылочная область-предок для B), а смещение от него внутрь эквивалентно расстоянию start-indent блок-области плюс её start-intrusion-adjustment (описано далее) минус значения её border-start, padding-start и space-start, и
-
end-edge её прямоугольника размещения параллелен end-edge прямоугольника содержимого R, а смещение от него внутрь эквивалентно расстоянию end-indent блок-области плюс её end-intrusion-adjustment (определено ниже) минус значения её border-end, padding-end и space-end.

ПРИМЕЧАНИЕ:
Предполагается применять значение отступа к прямоугольнику содержимого, но ограничение записано в терминах прямоугольника размещения, поскольку, как описано ранее ([4.2.3 Геометрические Определения]), края прямоугольника содержимого могут не соответствовать аналогично именованным краям прямоугольника размещения.
Уточнения start-intrusion-adjustment и end-intrusion-adjustment используются при работе с вторжениями поплавков в направлении inline-progression-direction.
-
Для каждой пары нормальных областей B и B' в поддереве ниже P, если B и B' имеют ограничение стэкирования блока S и B не является пустой (см. [4.2.5 Ограничения Стэкирования]), тогда расстояние между смежными краями B и B' составляется из ограничения, вводимого разрешёнными значениями спецификаторов пространства в S.

Пример. На данной диаграмме, если область A имеет значение space-after в 3 пункта, B - space-before в 1 пункт, C - space-before в 2 points, все с приоритетом force и с нулевыми рамками и заполнением, тогда ограничения разместят прямоугольник размещения для B на 4 пункта ниже, чем прямоугольник размещения для A, и прямоугольник размещения для C на 6 пунктов ниже, чем прямоугольник размещения для A. Таким образом, 4-пунктовый зазор получает цвет фона от P, а 2-пунктовый зазор перед C получает цвет фона от B.
4.4.2 Подгонка вторжений
Подгонка вторжений (start- и end-) определяется для вычисления отступов, которые появляются как результат всплывания "поплавков".
Если A и B это области, имеющие одного ближайшего предка - ссылочную область, тогда A и B определены как inline-overlapping/инлайн-перекрывающиеся, если имеется некоторая строка, параллельная inline-progression-direction, которая пересекает прямоугольники размещения для A и B.
Если A это область класса xsl-side-float с float="start" и B это блок-область, а A и B имеют одного ближайшего предка - ссылочную область, тогда A определена как encroach(/вдающаяся?) в B, если A и B являются inline-перекрывающимися и start-indent в B меньше, чем сумма start-indent в A и inline-progression-dimension в A. start-encroachment(/вдавливание?) A в B определяется как величина, на которую start-indent в B меньше, чем сумма start-indent в A и inline-progression-dimension в A.
Если A это область класса xsl-side-float с float="end" и B это блок-область, а A и B имеют одного ближайшего предка - ссылочную область, тогда A определена как encroach(/вдающаяся?) в B, если A и B являются inline-перекрывающимися и end-indent в B меньше, чем сумма end-indent в A и inline-progression-dimension в A. end-encroachment для A в B определяется тогда как величина, на которую end-indent в B меньше, чем сумма end-indent в A и inline-progression-dimension в A.
Если B это блок-область, не являющаяся строчной областью, тогда её local-start-intrusion-adjustment вычисляется как максимум следующих размеров:
-
zero/нуль;
-
если предок для B не является ссылочной областью: start-intrusion-adjustment родителя для B; и
-
если B имеет float-displace="block", тогда для каждой области A класса xsl-side-float с float="start" такой, что генерирующий ОФ для A не является потомком генерирующего ОФ для B и A вдаётся в некоторую строчную область - потомок B: start-encroachment для A в B; и
-
если B имеет float-displace = "block", тогда для каждой области A класса xsl-side-float; с float="start" такой, что A и B являются inline-перекрывающими, и для каждого предка B блок-области B', который является потомком ближайшей ссылочной области предка для B такой, что A вдаётся/encroaches в строчную область-потомок для B': start-encroachment/углубление для A в B'.
start-intrusion-adjustment/подгонка-начального-"вторжения" блок-области B определяется тогда как максимум local-start-intrusion-adjustments нормальных блок-областей, генерируемых и возвращаемых генерирующим ОФ для B.
Если L это строчная область/line-area, тогда её start-intrusion-adjustment вычисляется как максимум следующих размеров:
-
start-intrusion-adjustment предка для L;
-
для каждой области A класса xsl-side-float с float="start" такой, как A, вдающаяся в L: start-encroachment для A в L; и
-
если предок для L имеет float-displace="indent", тогда для каждой области A класса xsl-side-float с float="start" такой, что A и L являются inline-перекрывающимися, и для каждой блок области-предка B' для L, которая является потомком ближайшей ссылочной области-предка для L такой, что A вдаётся в некоторую дочернюю строчную область L' для B': start-encroachment для A в B'.
end-intrusion-adjustment для блок-области вычисляется точно так же. То есть:
Если B это блок-область и не строчная область, тогда её local-end-intrusion-adjustment вычисляется как максимум следующих размеров:
-
нуль;
-
если для B предок не является ссылочной областью: end-intrusion-adjustment предка для B; и
-
если B имеет float-displace="block", тогда для каждой области A класса xsl-side-float с float="end" такой, что генерирующий ОФ для A не является потомком генерирующего ОФ для B, и такой, что A вдаётся в некоторую строчную область-потомок для B: end-encroachment для A в B; и
-
если B имеет float-displace = "block", тогда для каждой области A класса xsl-side-float с float="end" такой, что A и B являются inline-перекрывающими, и для каждой блок-области - предка B' для B, которая является потомком ближайшей ссылочной области-предка для B, такой, что A вдаётся в дочернюю инлайн- область для B': end-encroachment для A в B'.
end-intrusion-adjustment блок-области B определяется тогда как максимум local-end-intrusion-adjustments нормальных блок-областей, генерируемых и возвращаемых ОФ для B.
Если L это строчная область, тогда её end-intrusion-adjustment вычисляется как максимум следующих размеров:
-
end-intrusion-adjustment родителя для L;
-
для каждой области A класса xsl-side-float с float="end" такой, что A вдаётся в L: end-encroachment для A в L; и
-
если родитель для L имеет float-displace = "indent", тогда для каждой области A класса xsl-side-float с float="end" такой, что A и L являются inline-перекрывающими, и для каждой блок-области - предка B' для L, являющеёся потомком ближайшей ссылочной области - предка для L, такой, что A вдаётся в некоторую дочернюю строчную область L' для B': end-encroachment для A в B'.
4.5 Line-areas/Строчные области
Строчная область это особый тип блок-области, генерируемый тем же самым ОФ, который генерирует и её предка. Строчные области не имеют рамок и заполнения, т.е. border-before-width, padding-before-width, и т.п. все установлены в нуль. Строчные области стэкируются/упаковываются внутри строчной области относительно baseline-start-point/начальной точки базовой линии, которая является точкой, определённой форматировщиком на start-edge прямоугольника содержимого строчной области.
Прямоугольник размещения строки определяется значением уточнения line-stacking-strategy: если имеется значение font-height, прямоугольник размещения будет nominal-requested-line-rectangle, как определено ниже; если имеется значение max-height, прямоугольник размещения будет maximum-line-rectangle, как определено ниже; и если имеется значение line-height, прямоугольник размещения будет per-inline-height-rectangle, как определено ниже. Если уточнение line-stacking-strategy установлено в font-height или max-height, то space-before и space-after оба устанавливаются в половину начального значения; иначе оба они устанавливаются в нуль.
Прямоугольник nominal-requested-line-rectangle строчной области это прямоугольник, чей start-edge параллелен start-edge прямоугольника содержимого ближайшей ссылочной области-предка и смещён от неё на величину, равную сумме start-indent и start-intrusion-adjustment строчной области, чей end-edge параллелен end-edge прямоугольника содержимого ближайшей ссылочной области-предка и смещён от неё на величину, равную сумме end-indent и end-intrusion-adjustment строчной области, чей before-edge отделён от baseline-start-point на высоту текста/text-altitude родительской блок-области и чей after-edge отделён от baseline-start-point на глубину текста/ text-depth родительской блок-области. Он имеет один и тот же block-progression-dimension/размер-прогрессии-блока для каждой дочерней строчной области в блок-области.
maximum-line-rectangle/максимальный-прямоугольник-строки для строчной области это такой прямоугольник, чьи start-edge и end-edge параллельны и прилегают к start-edge и end-edge в nominal-requested-line-rectangle/изначально-запрашиваемом-строчном-прямоугольнике и чьё расширение в направлении block-progression-direction является минимально необходимым для вмещения nominal-requested-line-rectangle и прямоугольников размещения всех строчных областей, стэкированных внутри строчной области; это может варьироваться в зависимости от потомков строчной области.

Номинальный и максимальный строчные прямоугольники
per-inline-height-rectangle/прямоугольник-инлайн-высоты для строчной области это прямоугольник, чьи start-edge и end-edge параллельны и прилегают к start-edge и end-edge в nominal-requested-line-rectangle и чьё расширение в направлении block-progression-dimension определяется так:
Расширяемый прямоугольник/expanded-rectangle строчной области это прямоугольник с start-edge и end-edge, прилегающими к соответствующим краям своего прямоугольника размещения, и чьи before-edge и after-edge находятся снаружи относительно соответствующих краёв прямоугольника размещения на расстоянии, равном (a.) половине ведущего значения/half-leading, если прямоугольник размещения области специфицирован как normal-allocation-rectangle при описании генерирующего ОФ, или (b.) - space-before и space-after (соответственно), если прямоугольник размещения области специфицирован как large-allocation-rectangle. expanded-nominal-requested-line-rectangle это прямоугольник со start-edge и end-edge, прилегающими к соответствующим краям в nominal-requested-line-rectangle, и чьи before-edge и after-edge находятся снаружи относительно соответствующих краёв nominal-requested-line-rectangle на расстоянии, равном половине ведущего значения.
Расширение прямоугольника per-inline-height-rectangle в направлении block-progression-direction определяется тогда как минимум, необходимый для вмещения прямоугольников expanded-nominal-requested-line-rectangle и расширенных прямоугольников всех инлайн-областей, стэкированных внутри строчной области; это может варьироваться в зависимости от потомков строчной области.
ПРИМЕЧАНИЕ:
Использование прямоугольника nominal-requested-line-rectangle позволяет равное baseline-to-baseline распределение пространства. Использование прямоугольника maximum-line-rectangle позволяет применять константное пространство между строчными областями. Использование прямоугольника per-inline-height-rectangle и нулевых space-before и space-after позволяет применять стэкирование строчных боксов в стиле CSS. Также значений half-leading включается в расширенный прямоугольник/expanded-rectangle, невзирая на наличие обусловленности, и, таким образом, обусловленность line-height "discard" в данном случае не действует.
4.6 Inline-areas/Инлайн-области
Инлайн-область имеет своё собственное уточнение line-height, которое может отличаться от line-height содержащей её блок-области. Это может влиять на размещение её строчной области-предка, если line-stacking-strategy установлена в line-height. Инлайн-область имеет таблицу actual-baseline-table для своего шрифта nominal-font. Она имеет уточнение dominant-baseline-identifier, которое определяет выравнивание её стэкированных инлайн-областей-потомков.
Инлайн-область может или может не иметь дочерние области и, если это так, может или может не быть ссылочной областью/reference-area. Размеры прямоугольника содержимого для инлайн-области без потомков вычисляется так, как специфицировано генерирующим ОФ, так же, как это происходит в инлайн-области с блок-областями-потомками.
Инлайн-область с инлайн-областями-потомками имеет прямоугольник содержимого, расширяющийся от своей доминантной базовой линии (см. [4.2.6 Таблицы Базовых Линий Шрифтов]) на величину text-depth в направлении block-progression-direction, а в противоположном направлении - на величину text-altitude; в направлении inline-progression-direction он расширяется от start-edge прямоугольника размещения своего первого потомка до end-edge прямоугольника размещения своего последнего потомка. Прямоугольник размещения такой инлайн-области равен её прямоугольнику содержимого.
Прямоугольник размещения инлайн-области без потомков является normal-allocation-rectangle или large-allocation-rectangle, как специфицировано в описании генерирующего ОФ.
ПРИМЕЧАНИЕ:
Если line-stacking-strategy установлена в line-height, размещение выполняется относительно расширенного прямоугольника/expanded-rectangle.
Инлайн-области с потомками могут включать части инлайн-математических выражений или области, возникшие при использовании смешанных систем письма (слева-направо и справа-налево, например).
4.6.1 Стэкированные инлайн-области
Инлайн-области - потомки области обычно стэкируются в направлении inline-progression-direction внутри своей родительской области, это метод по умолчанию при позиционировании инлайн-областей.
Инлайн-области стэкируются относительно dominant baseline/доминантной базовой линии, как определено ранее ([4.2.6 Таблицы Базовых Линий Шрифтов]).
Для родительской области P, чти потомки являются инлайн-областями, P определена как properly stacked/правильно стэкированная, если соблюдаются все следующие условия:
-
Для каждой инлайн-области I - потомка P, start-edge, end-edge, before-edge и after-edge прямоугольника размещения I параллельны соответствующим краям прямоугольника содержимого ближайшей ссылочной области - предка I.
-
Для каждой пары нормальных областей I и I' в субдереве ниже P, если I и I' имеют ограничение инлайн-стэкирования S, расстояние между смежными краями в I и I' соответствует ограничению, вводимому разрешёнными значениями спецификаторов пространства в S.
-
Для любой инлайн-области I - потомка P, расстояние в направлении shift-direction между доминантной базовой линией в P и alignment-point/точкой-выравнивания в I равно смещению между доминантной базовой линией в P и базовой линией в P, соответствующей уточнению alignment-baseline в I, плюс сумма смещений базовой линии для I и всех её предков, являющихся потомками P. Первое слагаемое вычисляется для компенсации смешанных систем письма с различными типами базовых линий, а другие слагаемые включают преднамеренные смещения базовых линий для, например, под- и надиндексов.
4.6.2 Глиф-области
Наиболее типичной инлайн-областью является глиф-область, которая содержит представление для символа (или символов) конкретного шрифта.
Глиф-область имеет ассоциированный nominal-font/номинальный шрифт, определяемый типографскими уточнениями области, которые применяются к её символьным данным, и glyph-orientation/ориентацию глифа, определяемую её режимом письма writing-mode и reference-orientation, которая определяет ориентацию глифа при выводе.
Alignment-point и dominant-baseline-identifier глиф-области устанавливаются в соответствии с используемой системой письма (например, базовая линия глифа в западных языках) и используются для управления размещением инлайн-областей - потомков строчной области. Форматировщик может генерировать инлайн-области с отличными от родительских направлениями inline-progression-directions для установки корректного стэкирования инлайн-области при наличии смешанных систем письма.
Глиф-область не имеет потомков. Её направление block-progression-dimension и таблица actual-baseline-table одни и те же для всех глифов шрифта. В соответствующих реализациях может иметься возможность выбора обсчёта block-progression-dimension для глиф-области на базе реального размера глифа, а не на общем размере для всех глифов шрифта.
4.7 Ограничения упорядочивания
4.7.1 Общие ограничения упорядочивания
Поднабор S областей, возвращаемых объекту форматирования, называется properly ordered/правильно упорядоченным, если области в этом поднаборе имеют тот же порядок, что и их генерирующие объекты форматирования. К примеру, если A1 и A2 являются областями в S, возвращаемом дочерними ОФ F1 и F2, где F1 предшествует F2, тогда A1 обязано предшествовать A2 в предупорядоченном пересечении в дереве областей. Если F1 равно F2 и A1 возвращается до A2, тогда A1 обязано предшествовать A2 в pre-order-traversal дерева областей.
Для каждого ОФ F и каждого area-class/класса областей C, поднабор, состоящий из областей, возвращаемых в F с area-class C, обязан быть правильно упорядоченным, если иное не специфицировано.
4.7.2 Конструирование строк
В этом разделе рассматривается ограничения упорядочивания, применяемые при форматировании fo:block или подобных объектов уровня блока.
ОФ уровня блока F уровня блока, конструирующий строки, выполняет это путём конструирования блок-областей, которые он возвращает своему родительскому ОФ, и размещения нормальных областей и/или областей-якорей, возвращаемых в F его дочерними ОФ как потомков тех блок-областей или строчных областей, которые он конструирует как потомков блок-областей.
Для каждого ОФ F можно сформировать упорядоченный раздел P, состоящий из упорядоченных поднаборов S1, S2, ..., Sn нормальных областей и областей-якорей, возвращаемыми дочерними ОФ, с соблюдением всех следующих условий:
-
Каждый поднабор состоит из последовательности инлайн-областей или из одиночной блок-области.
-
Упорядочивание раздела следует после деревом ОФ. Конкретнее, если A находится в Si и B - в Sj с i < j, или если A и B находятся в одном поднаборе Si с A перед B в порядке поднабора, тогда или A возвращается предшествующим родственным ОФ для B, или A и B возвращаются одним ОФ с A, возвращаемым перед B.
-
Разделение происходит в месте разрывов строк. Конкретнее, если A это последняя область в Si и B это первая область в Si+1, то действующие правила языка и письма обязаны разрешать разрыв строки между A и B, в контексте всех областей в Si и в Si+1.
-
Форсированные разрывы строк соблюдаются. Конкретно, если A это глиф-область, генерируемая fo:character, чей символ Unicode - U+000A, тогда A обязано быть последней областью в содержащем её поднаборе Si.
-
Упорядочивание следует порядку дерева областей, за исключением замещений и удалений некоторых глифов. Конкретно, если B1, B2, ..., Bp являются нормальными областями - потомками области или областей. возвращаемыми F (упорядоченными pre-order traversal в дереве областей), тогда имеется соответствие один-к-одному между этими дочерними областями и поднаборами упорядочивания (т.е. n = p), и для каждого i,
-
если Si состоит из одиночной блок-области, то Bi это данная блок-область, и
-
если Si состоит из инлайн-областей, то Bi это инлайн-область, чьи дочерние области - те же самые, что и инлайн-области в Si, и так же упорядоченные, за исключением тех, чьи действующие правила языка и письма вызывают замещение глиф-областей, их вставку или удаление, тогда замещённые или вставленные глиф-области появляются в дереве областей в соответствующем месте, а удалённые глиф-области не появляются в дереве областей. Удаления производятся в тех случаях, когда глиф-область, являющаяся последней в поднаборе Si, имеет значение suppress-at-line-break для suppress, предполагая, что i < n и Bi+1 - это строчная область. Удаления производятся также, если глиф-область, первая в поднаборе Si, имеет значение suppress-at-line-break для suppress, предполагая, что i > 1 и Bi-1 - это строчная область. Вставка и замещение могут производиться при добавлении дефисов для переносов или изменений в грамматике при установке переносов, или при конструировании изображения глифа на основе силлабификации, или формировании лигатуры.
Замещения последовательности из глиф-областей одной глиф-областью должны производиться только тогда, когда поле, рамки и заполнение в направлении inline-progression-direction (start- и end-), значения baseline-shift и letter-spacing равны нулю, treat-as-word-space равно false, а значения всех других относящихся к делу уточнений совпадают (т.е., alignment-adjust, alignment-baseline, color trait, background traits, dominant-baseline-identifier, font traits, text-depth, text-altitude, glyph-orientation-horizontal, glyph-orientation-vertical, line-height, line-height-shift-adjustment, text-decoration, text-shadow).
ПРИМЕЧАНИЕ:
Строчные области не получают уточнения фона/background или text-decoration от своего ОФ, или любого другого уточнения, требующего генерации знака во время отображения.
4.7.3 Inline-building/Инлайн-конструирование
В этом разделе описаны ограничения упорядочивания, применяемые при форматировании fo:inline или подобных объектов инлайн-уровня.
ОФ F инлайн-уровня, конструирующий одну или более инлайн-областей, выполняет это путём размещения нормальных инлайн-областей и/или якорных инлайн-областей, возвращаемых в F его дочерними ОФ, как потомков инлайн-областей, генерируемых им.
Для каждого такого ОФ F обязана иметься возможность формирования упорядоченного разделения P, состоящего из упорядоченных поднаборов S1, S2, ..., Sn нормальных и/или якорных инлайн-областей, возвращаемых дочерними ОФ, таким, что всё ниже следующее соблюдается:
-
Каждый поднабор состоит из последовательности инлайн-областей или из одиночной блок-области.
-
Упорядочивание подразделения следует порядку дерева ОФ, как определено выше.
-
Разделение производится в местах разрывов строк, как определено выше.
-
Форсированные разрывы строк соблюдаются, как определено выше.
-
Раздел соблюдает порядок дерева областей, исключая замещения и удаления отдельных глифов, как определено выше.
4.8 Keeps и Breaks
Условия keep и break применяются для классов областей, которые обычно являются областями станицы-ссылки/page-reference, областями столбцов/column-areas строчными областями. Подходящий класс для данного условия называется context/контекст, а область в данном классе - context-area/контекстная область. Как определено в разделе [6.4.1 Введение], page-reference-areas это области, генерируемые fo:page-sequence с использованием спецификаций в fo:page-master, а column-areas/области столбцов это области normal-flow-reference-areas, генерируемые из region-body/тела области, или region-reference-areas, генерируемые из других типов region-master/мастера областей.
Условие keep или break это открытый оператор для ОФ и соотношений дерева областей, генерируемых им с соответствующими контекстными областями. Эти соотношения дерева в основном определены терминами leading/ведущих или trailing/ведомых областей. Если A это потомок P, тогда A определяется как leading в P, если A не имеет предшествующего родственника - нормальной области и не имеет каких-либо областей-предков, предшествующих, но не включающих P. Аналогично, A определяется как trailing в P, если A не имеет последующего родственника - нормальной области и не имеет каких-либо областей-предков, предшествующих, но не включающих P. Для любого данного ОФ next/следующий ОФ в потоке является первым последующим ОФ (в порядке pre-order пересечения), который не является потомком данного ОФ и который генерирует и возвращает нормальные области.
Условия break это либо break-before, либо break-after. Условие break-before satisfied/выполняется, если первая область, генерируемая и возвращаемая ОФ, является ведущей в context-area/контекстной области. Условие break-after зависит от следующего ОФ в потоке; оно выполняется, если нет последующих ОФ или если первая нормальная область, генерируемая и возвращаемая данным объектом форматирования, является ведущей в контекстной области.
Условия break вводятся в свойствах break-before и break-after. Очищенное значение page для этих уточнений вводит условие break с контекстом, состоящим из областей page-reference-areas; значение even-page или odd-page вводит условие break с контекстом, состоящим из областей even-numbered page-reference-areas или odd-numbered/нечётнло нумерованных page-reference-areas, соответственно; значение column вводит условие break с контекстом, состоящим из областей столбцов/column-areas. Значение auto в уточнении break-before или break-after не вводит условия break.
Условия keep это условия keep-with-previous, keep-with-next или keep-together. Условие keep-with-previous в объекте выполняется, если первая область, генерируемая и возвращаемая ОФ, является ведущей в context-area/контекстной области или если нет предшествующих областей в пересечении post-order дерева областей. Условие keep-with-next выполняется, если последняя область, генерируемая и возвращаемая ОФ, не является ведомой в контекстной области или если нет последующих областей в пересечении pre-order дерева областей. Условие keep-together выполняется, если все области, генерируемые и возвращаемые ОФ, являются потомками одной контекстной области.
Условия keep вводятся компонентами "within-page", "within-column" и "within-line" свойств "keep-with-previous", "keep-with-next" и "keep-together". Очищенное значение каждого компонента специфицирует strength/силу вводимого условия keep, где более высокие номера - более сильные, чем низкие, а значение always сильнее, чем все цифровые значения. Компонент со значением auto не вводит условие keep. Компонент "within-page" вводит keep-условие с контекстом, состоящим из областей page-reference-areas; "within-column" - с контекстом, состоящим из областей столбцов; и "within-line" - с контекстом, состоящим из строчных областей.
Дерево областей должно удовлетворять всем вводимым условиям break. Каждое условие keep также обязано быть выполнено, исключая случаи, когда это может вызвать невыполнение условий break или stronger keep. Если не все условия из набора keep равной силы могут быть выполнены, тогда обязаны быть выполнены некоторые условия из набора максимально удовлетворяющих условий данной силы (вместе со всеми условиями break и максимальным набором условий stronger keep, если имеются).
4.9 Модель представления
В этом разделе объясняется соотношение между деревом областей и визуальным представлением.
Области генерируют три типа меток/marks: (1) фон/background области, если имеется, (2) метки, присущие данной области (glyph/глиф, image/изображение или decoration/декорация) если имеются, и (3) рамка/border области, если имеется.
Дерево областей выводится путём отображения меток в устройстве вывода в соответствии с областями дерева областей. В данном разделе описаны геометрическое размещение таких меток и то, как разрешаются конфликты между метками.
4.9.1 Геометрия
Каждая область выводится в определённом месте. Семантика ОФ описывает место размещения внутренних меток, относящихся к размещению объекта, т.е. левый, правый, верхний и нижний края прямоугольника содержимого объекта. В этом разделе описывается, как определяется место размещения области, которая определяет размещение своих внутренних меток.
Для каждой страницы область page-viewport-area изометрически соответствует носителю вывода.
Область page-reference-area смещается от page-viewport-area, как описано ниже в разделе [4.9.2 Геометрия Порта Просмотра].
Все области в дереве, имеющие класс области xsl-fixed, позиционируются так, чтобы левые, правые, верхние и нижние края их прямоугольников содержимого (содержащих прямоугольников) были смещены внутрь от прямоугольника содержимого их предка - области page-viewport-area - на расстояния, определённые уточнениями left-position, right-position, top-position и bottom-position, соответственно.
Любая область в дереве, являющаяся потомком области viewport-area, выводится так, как описано в разделе [4.9.2 Геометрия Порта Просмотра].
Все прочие области в дереве позиционируются так, чтобы левые, правые, верхние и нижние края их прямоугольников содержимого были смещены внутрь от прямоугольника содержимого их ближайшего предка - ссылочной области/reference-area на расстояния, определённые уточнениями left-position, right-position, top-position и bottom-position, соответственно. Эти области смещаются вниз и влево на величины уточнений top-offset и left-offset, соответственно, если область имеет для relative-position значение relative.
4.9.2 Геометрия порта просмотра
Ссылочная область, являющаяся потомком viewport-area/порта просмотра, позиционируется так, что start-edge и end-edge её прямоугольника содержимого параллельны start-edge и end-edge прямоугольника содержимого её родительского порта просмотра. Start-edge её прямоугольника содержимого смещён от start-edge прямоугольника содержимого её родительского порта просмотра на величину inline-scroll-amount, а before-edge её прямоугольника содержимого смещён от before-edge прямоугольника содержимого её родительского порта просмотра на величину block-scroll-amount.
Если направление block-progression-dimension ссылочной области больше, чем это же направление порта просмотра и уточнение overflow для ссылочной области имеет значение scroll, то величины inline-scroll-amount и block-scroll-amount определяются механизмом прокрутки, если он имеется, предоставляемым пользовательским агентом. Иначе - обе величины равны нулю.
4.9.3 Видимость
Видимость меток зависит от их местоположения, значения visibility области и значения overflow любого предка порта просмотра.
Если область имеет значение видимости hidden, она не генерирует меток.
Если область имеет значение overflow - hidden, или если окружение - нединамическое и overflow установлено в scroll, тогда область определяет clipping rectangle/прямоугольник усечения, который определяется как прямоугольник, выводимый из значения уточнения clip для области; и для любой метки, генерируемой одной из её областей-предков, части метки, находящиеся вне прямоугольника усечения, не выводятся.
4.9.4 Рамка, заполнение и фон
Прямоугольники рамки и заполнения определяются относительно прямоугольника содержимого значениями обычных уточнений ширины заполнения и рамки (border-before-width, и т.д.).
В любой области, не являющейся дочерней относительно порта просмотра, рамка отображается между прямоугольником рамки/border-rectangle и прямоугольником заполнения/padding-rectangle в соответствии с обычными уточнениями цвета рамки и стиля. Для потомков порта просмотра рамка не отображается.
Для области, не являющейся частью пары порт просмотра/ссылка, фон отображается. Для области, являющейся портом просмотра или ссылочной областью в паре порт просмотра/ссылка, если очищенное значение background-attachment равно scroll и величина block-progression-dimension ссылочной области больше, чем та же величина в порте просмотра, то фон отображается в ссылочной области, но не в порте просмотра, в противном случае фон отображается в порте просмотра, но не в ссылочной области.
Фон, если имеется, отображается в прямоугольнике заполнения в соответствии с уточнениями background-image, background-color, background-repeat, background-position-vertical и background-position-horizontal.
4.9.5 Внутренние метки
Для каждого класса объектов форматирования метки, принадлежащие его генерируемым областям, специфицируются в описании ОФ. Например, объект fo:character генерирует глиф-область, и она отображается путём прорисовки глифа внутри прямоугольника содержимого этой области в соответствии с уточнениями шрифта области и уточнениями glyph-orientation и blink.
Кроме того, другие уточнения (например, различные уточнения score/подчёркивание и score-color) специфицируют и иные внутренние метки. В случае с уточнениями score (underline-score, overline-score и through-score), толщина линии и позиция специфицируются действующим nominal-font/номинальным шрифтом; там, где шрифт не специфицирует эти величины, они зависят от реализации.
4.9.6 Расположение по слоям и конфликт меток
Метки располагаются по слоям (как описано ниже), что определяет частичное упорядочивание меток - то, какие метки расположены ниже (других).
Две метки определены как конфликтующие, если они применяются к одной и той же точке носителя вывода. Если две метки конфликтуют, та, которая ниже, не влияет на точку носителя вывода в том месте, где они обе применяются.
Метки, генерируемые одной и той же областью, располагаются слоями: фон области находится ниже внутренних меток области, а внутренние метки области находятся ниже рамки. Расслоение среди внутренних меток области определяется семантикой генерирующего ОФ области и его свойствами. Например, прорисовка глифа в глиф-области производится ниже меток, генерируемых для text-decoration.
Упаковочный слой области определяется контекстом стэкирования и значением его (слоя) z-индекса. Слой стэкирования/упаковки области A определяется как меньший относительно слоя упаковки области B, если некоторый ancestor-or-self/предок-или-сама A' для A и B' для B имеют одинаковый контекст стэкирования, и z-индекс для A' - меньше, чем z-индекс для B'. Если ни один слой стэкирования не является меньшим относительно другого, тогда они определяются как расположенные в одном слое стэкирования.
Если A и B это области и слой стэкирования для A меньше, чем слой стэкирования для B, тогда все метки, генерируемые A, находятся ниже всех меток, генерируемых B.
Если A и B это области одного слоя стэкирования, то фон A и B проявляется ниже всех других меток, генерируемых A и B. Далее, если A это предок B (в том же слое стэкирования), то фон A находится ниже всех областей B, а все области в B находятся ниже внутренних областей (и рамки) A.
Если A и B имеют общий слой стэкирования и ни один из них не является предком для другого, то будет считаться ошибкой, если конфликтуют их фоны или если нефоновая метка в A конфликтует с нефоновой меткой в B. Конкретные реализации могут выполнять исправление, продолжая работу так, как будто метки из первой области с порядком пересечения pre-order находятся ниже меток другой области.
4.10 Образец дерева областей

Pyramidin.Narod.RU
|