12.6.6 Paragraph Flow Object Class
A paragraph flow object represents a paragraph.  It has a single principal port.  The contents of this port may be either inlined or displayed.  Inline flow objects are formatted to produce line areas. Displayed flow objects implicitly specify a break, and their areas shall be added to the resulting sequence of areas.  A paragraph flow object may only be displayed.

NOTE 71

Typically, a break implies that a new line is to be started.
The following characteristics are applicable:

•  lines: is a symbol specifying how the content of the paragraph shall be broken into lines in the formatted output, as follows:

•  wrap specifying that lines shall be broken so that they fit in the available space.

•  asis specifying that lines shall be broken only after character flow objects for which the record-end?: characteristic is true.

•  asis-wrap specifying that lines shall be broken after character flow objects for which the record-end?: characteristic is true, and as necessary to make lines fit in the available space.

•  asis-truncate specifying that lines shall be broken only after character flow objects for which the record-end?: characteristic is true, and that lines that do not fit the in the available space shall be truncated.

•  none specifying that lines shall not be broken at all.

NOTE 72

This is useful in tables when the table-auto-width feature is present to ensure that the width of a column is made large enough so that the content of a cell fits on a single line.

In all cases, line breaks shall also be allowed where explicitly specified with the break-before: or break-after: characteristics. The initial value is wrap.

•  asis-truncate-char: is either #f or a char object that determines the glyph to be inserted when the lines: characteristic has the value asis-truncate and a line is truncated. The initial value is #f.

•  asis-wrap-char: is either #f or a char object that determines the glyph to be inserted at the end of a line when the lines: characteristic has the value asis-wrap and the line is broken other than after a character flow object for which the record-end?: characteristic is true. The initial value is #f.

•  asis-wrap-indent: is a length-spec giving an indent to be added to the start-indent when the lines: characteristic has the value asis-wrap for a line following a break other than after a character flow object for which the record-end?: characteristic is true. The initial value is #f.

•  first-line-align: is either #f, #t, or a char object.  If it is not #f, then the quadding: and last-line-quadding: characteristics are ignored for the first line of the paragraph, and the first line shall be aligned using an alignment point in the line.  If the value is a char object, then the alignment point shall be the position point of the first area produced by the first occurrence on the line of a character flow object with a char: characteristic equal to that char object; otherwise, the alignment point shall be the position of the first alignment-point flow object in the line.  If alignment-point-offset: is not #f, then the first line of the paragraph shall be aligned so that the percentage of the line length (that is, the display-size less the applicable start and end indents) before the alignment point is equal to the value of alignment-point-offset:.  If alignment-point-offset: is #f, then the paragraph is an externally aligned paragraph and shall have an ancestor of class table-cell or aligned-column. Furthermore, the area container in which the areas from this paragraph are placed shall be the same as the area container in which the areas from that ancestor are placed; in this case, the paragraph shall be aligned so that its alignment point is aligned with other such paragraphs in the table-column or aligned-column.  If an externally aligned paragraph occurs in a table-cell, then the table-auto-width feature shall be enabled.  The initial value is #f.

•  alignment-point-offset: is either #f or a number between 0 and 100 specifying the percentage of the line length (that is, the display-size less the start and end indents) before the alignment point.  The initial value is 50.

•  ignore-record-end?: is a boolean specifying whether a record-end shall be ignored. If this characteristic is true, then a character with the record-end? property true shall be ignored. The initial value is #f.

•  expand-tabs?: is either #f or a strictly positive integer specifying the tab interval.  When a tab interval is specified, each character flow object that has the input-tab?: characteristic true shall be treated as equivalent to the smallest strictly positive number of spaces that when added to the number of character flow objects following the last preceding record-end character flow object shall be a multiple of the tab interval. The initial value is 8.

•  line-spacing: is a length-spec giving the normal spacing between the placement paths of lines in the paragraph as described in section 12.6.6.1, Line Spacing. The initial value is 12pt.

•  line-spacing-priority: is either an integer or the symbol force specifying the priority of any conditional space before the line. This shall be interpreted in the same manner as the priority: argument for the display-space procedure. The initial value is 0.

•  min-pre-line-spacing: is a length-spec specifying the minimum size of the line in the placement direction before the placement path as described in section 12.6.6.1, Line Spacing. A value of #f shall also be allowed, specifying that the value is determined from the paragraph's font. The initial value is #f.

•  min-post-line-spacing: is a length-spec specifying the minimum size of the line in the placement direction after the placement path as described in section 12.6.6.1, Line Spacing. A value of #f shall also be allowed, specifying that the value is determined from the paragraph's font. The initial value is #f.

•  min-leading: is either #f or a length-spec specifying the minimum space between the line areas in the placement direction as described in section 12.6.6.1, Line Spacing. A value of #f means that the line spacing shall not be automatically adjusted to take into account the size of the content of the lines. The initial value is #f.

•  first-line-start-indent: is a length-spec giving an indent to be added to the start-indent for the first line.  The length may be negative. The initial value is 0pt.

•  last-line-end-indent: is a length-spec giving an indent to be added to the end-indent for the last line.  The length may be negative. The initial value is 0pt.

•  hyphenation-char: is a char that is used to determine the glyph that is inserted when hyphenation is performed. The characteristics of the character flow object preceding the hyphenation point shall determine the mapping of the character to a glyph, as well as the font resource and font-size of the glyph. The initial value is #\- (the hyphen character).

•  hyphenation-ladder-count: is a strictly positive integer specifying the maximum number of consecutive lines ending with the same glyph as the glyph determined by the value of the hyphenation-char: characteristic, or #f indicating that there is no limit.  The initial value is #f.

•  hyphenation-remain-char-count: is a positive integer specifying the minimum number of characters in a hyphenated word before the hyphenation character.  This is the minimum number of characters in the word left on the line ending with the hyphenation character.  The initial value is 2.

•  hyphenation-push-char-count: is a positive integer specifying the minimum number of characters in a hyphenated word after the hyphenation character.  This is the minimum number of characters in the word pushed to the next line after the line ending with the hyphenation character.  The initial value is 2.

•  hyphenation-keep: is either #f or one of the following symbols:

•  spread means that both parts of a hyphenated word shall lie within a single spread.

•  page means that both parts of a hyphenated word shall lie within a single page.

•  column means that both parts of a hyphenated word shall lie within a single column.

The initial value is #f.

•  hyphenation-exceptions: is a list of strings.  Each string is a word which may contain hyphen characters, #\-, indicating where hyphenation may occur.  If a word to be hyphenated occurs in the list, it may only be hyphenated in the specified places. The initial value is the empty list.

NOTE 73

The determination of a word is system-dependent.

•  line-breaking-method: is #f or a string specifying a public identifier for the line-breaking-method to be used for this paragraph. The initial value is #f.

•  line-composition-method: is #f or a string specifying a public identifier for the line-composition-method to be used for this paragraph. The initial value is #f.

NOTE 74

Typically, the line-composition-method: uses characteristics declared using an application-characteristic-declaration or an application-char-characteristic+property-declaration.

•  implicit-bidi-method: is #f or a string specifying a public identifier for the method to be used for implicitly determining the directionality of the content of the paragraph.  This includes both the writing-mode of characters, which, when this characteristic is #f, is specified with the writing-mode characteristic, and how portions of content with a common writing-mode are nested within each other, which, when this characteristic is #f, is specified with embedded-text flow objects.  It is part of the semantics of the method which characteristics of character flow objects, if any, it uses. A method may be specific to a particular character repertoire, in which case, it may not make use of any characteristics.  It may be part of the semantics of a method for certain glyph substitutions to be applied depending on the writing-mode that is determined for a character, and possibly also on characteristics of the character. The initial value is #f.

•  glyph-alignment-mode: is one of the symbols base, center, top, bottom, or font specifying the alignment mode to be used for glyphs. font means that the nominal alignment mode of the font in the flow object's writing-mode should be used. The initial value is font.

•  font-family-name: is either #f, indicating that any font family is acceptable, or a string giving the font family name property of the desired font resource. The initial value is iso-serif.

NOTE 75

ISO/IEC 10180 defines a mandatory font set for interchange comprising the font families iso-serif, iso-sanserif, and iso-monospace.

This characteristic is applicable when the glyph-alignment-mode: is font or when min-pre-line-spacing: or min-post-line-spacing: are #f.

•  font-weight: is either #f, indicating that any font weight is acceptable, or one of the symbols not-applicable, ultra-light, extra-light, light, semi-light, medium, semi-bold, bold, extra-bold, or ultra-bold, giving the weight property of the desired font resource.  The initial value is medium. This characteristic is applicable when the glyph-alignment-mode: is font or when min-pre-line-spacing: or min-post-line-spacing: is #f.

•  font-posture: is either #f, indicating that any posture is acceptable, or one of the symbols not-applicable, upright, oblique, back-slanted-oblique, italic, or back-slanted-italic, giving the posture property of the desired font resource.  The initial value is upright. This characteristic is applicable when the glyph-alignment-mode: is font or when min-pre-line-spacing: or min-post-line-spacing: is #f.

•  font-structure: is either #f, indicating that any structure is applicable, or one of the symbols not-applicable, solid, or outline.  The initial value is solid. This characteristic is applicable when the glyph-alignment-mode: is font or when min-pre-line-spacing: or min-post-line-spacing: is #f.

•  font-proportionate-width: is either #f, indicating that any proportionate width is acceptable, or one of the symbols not-applicable, ultra-condensed, extra-condensed, condensed, semi-condensed, medium, semi-expanded, expanded, extra-expanded, or ultra-expanded.  The initial value is medium. This characteristic is applicable when the glyph-alignment-mode: is font or when min-pre-line-spacing: or min-post-line-spacing: is #f.

•  font-name: is either #f, indicating that any font name is acceptable, or a string which is the public identifier for the font name property of the desired font resource. When the value is a string, the values of the font-family-name:, font-weight:, font-posture:, font-structure:, and font-proportionate-width: characteristics are not used in font selection. The initial value is #f. This characteristic is applicable when the glyph-alignment-mode: is font or when min-pre-line-spacing: or min-post-line-spacing: is #f.

•  font-size: is a length specifying the body size to which the font resource should be scaled. The initial value is 10pt. This characteristic is applicable when min-pre-line-spacing: or min-post-line-spacing: is #f.

•  numbered-lines?: is #t if the lines produced by this paragraph shall be considered for the purposes of line numbering, and #f otherwise. The initial value is #t.

•  line-number: is either #f or an unlabeled sosofo containing only inline flow objects. If it is a sosofo, then for each line in the paragraph, the sosofo is formatted to produce a single inline area that is positioned as an attachment area for the line.  See section 12.3.4, Attachment Areas.  The initial value is #f.

The sosofo may include indirect flow objects that refer to the line's number by using the line-number procedure.

The rules for the positioning of an attachment area mean that line numbers are usually  positioned so that the edges nearest the line are aligned.  Different alignments can be achieved by using the line-field flow object class.

•  line-number-side: is one of the symbols start, end, spread-inside, spread-outside, page-inside, or page-outside specifying the side of the line for the attachment specified with the line-number: characteristic.  A value of spread-inside or spread-outside shall be allowed only if the flow object has an ancestor of class page-sequence. A value of page-inside or page-outside shall be allowed only if the flow object has an ancestor of column-set-sequence.

•  line-number-sep: is a length-spec specifying the separation for the attachment specified with the line-number: characteristic.

•  quadding: is one of the symbols start, end, spread-inside, spread-outside, page-inside, page-outside, center, or justify specifying the alignment of lines other than the last line in the paragraph in the direction determined by the writing-mode. A value of spread-inside or spread-outside shall be allowed only if the flow object has an ancestor of class page-sequence. A value of page-inside or page-outside shall be allowed only if the flow object has an ancestor of column-set-sequence. The initial value is start.

•  last-line-quadding: is one of the symbols relative, start, end, spread-inside, spread-outside, page-inside, page-outside, center, or justify specifying the alignment of the last line of the paragraph in the direction determined by the writing-mode. This shall apply also to any line in the paragraph that immediately precedes a break. A value of relative means that the value of the quadding: characteristic shall be used, except when that value is justify, in which case, a value of start shall be used. A value of spread-inside or spread-outside shall be allowed only if the flow object has an ancestor of class page-sequence. A value of page-inside or page-outside shall be allowed only if the flow object has an ancestor of column-set-sequence. The initial value is relative.

•  last-line-justify-limit: is a length-spec specifying the maximum amount of free space in the last line that shall cause the last line to be justified rather than aligned as specified by the last-line-quadding: characteristic.  The initial value is 0.

•  justify-glyph-space-max-add: is a length-spec specifying the maximum space that may be added between glyphs in order to justify a line. The initial value is 0pt.

•  justify-glyph-space-max-remove: is a length-spec specifying the maximum space that may be removed between glyphs in order to justify a line. The initial value is 0pt.

•  hanging-punct?: is a boolean specifying whether the paragraph shall be formatted with the punctuation characters hanging into the margin or gutter of a column. The initial value is #f.

•  widow-count: is a positive integer specifying the minimum number of lines of the paragraph that shall be kept together at the beginning of an area.  If the widow-count: is n, then no break shall be allowed between the last n lines of the paragraph. The initial value is 2.

•  orphan-count: is a positive integer specifying the minimum number of lines of the paragraph that shall be kept together at the end of an area.  If the orphan-count: is n, then no break shall be allowed between the first n lines of the paragraph. The initial value is 2.

•  language: is #f or a symbol specifying the ISO 639 language code in upper-case. This affects line composition in a system-dependent way. The initial value is #f.

•  country: is #f or a symbol specifying the ISO 3166 country code in upper-case. This affects line composition in a system-dependent way. The initial value is #f.

•  position-preference: is either #f or one of the symbols top or bottom.  This applies if the flow object is directed into a port on a column-set-sequence flow object that is flowed into both the top-float and bottom-float zones of a column-subset and indicates whether the areas from this flow object may be flowed into only one of the zones. This characteristic is not inherited. The default value is #f.

•  writing-mode: is one of the symbols left-to-right, right-to-left, or top-to-bottom.  The direction determined by the writing-mode shall be perpendicular to the placement direction.  The initial value is left-to-right. This controls the orientation of the placement path of the lines.

•  start-indent: is a length-spec specifying the indent for the edge of the area at the start in the direction of the writing-mode. The initial value is 0pt. This applies only to lines from the paragraph itself.

•  end-indent: is a length-spec specifying the indent for the edge of the area at the end in the direction of the writing-mode. The initial value is 0pt. This applies only to lines from the paragraph itself.

•  span: is a strictly positive integer specifying the number of columns that the areas resulting from this flow object shall span. This characteristic shall apply if the flow object is directed into a port on a column-set-sequence flow object that is flowed into the top-float, bottom-float, or body-text zone of a spannable column-subset.  The initial value is 1.

•  span-weak?: is a boolean specifying whether the areas resulting from this flow object span weakly rather than strongly.  See section 12.6.5.1, Column-set-model.  This characteristic applies if the flow object is directed into a port on a column-set-sequence flow object that is flowed into the top-float, bottom-float, or body-text zone of a spannable column-subset and has a span: characteristic with a value greater than 1.  The initial value is #f.

•  space-before: is an object of type display-space specifying space to be inserted before, in the placement direction, the areas produced by the flow object. This characteristic is not inherited. The default is for no space before to be inserted.

•  space-after: is an object of type display-space specifying space to be inserted after, in the placement direction, the areas produced by the flow object. This characteristic is not inherited. The default is for no space after to be inserted.

•  keep-with-previous?: is a boolean specifying whether the flow object shall be kept in the same area as the previous flow object. This characteristic is not inherited. The default value is #f.

•  keep-with-next?: is a boolean specifying whether the flow object shall be kept in the same area as the next flow object.  This characteristic is not inherited. The default value is #f.

•  break-before: is #f or one of the symbols page, page-region, column, or column-set specifying that the flow object shall start an area of that type. This characteristic is not inherited. The default is #f.

•  break-after: is #f or one of the symbols page, page-region, column, or column-set specifying that the flow object shall end an area of that type. This characteristic is not inherited. The default is #f.

•  keep: is one of the following:

•  #t meaning that the areas produced by this flow object shall be kept together within the smallest possible area.

•  the symbol page indicating that the areas produced by the flow object shall lie within the same page; in this case, the flow object shall have an ancestor flow object of class page-sequence.

•  the symbol column-set indicating that the areas produced by the flow object shall lie within the same column set; in this case, the flow object shall have an ancestor of class column-set-sequence.

•  the symbol column indicating that the areas produced by the flow object shall lie within the same column set, and that the first column that each area spans in the column set shall be the same.

•  #f indicating that this characteristic is to be ignored.

This characteristic is not inherited. The default value is #f.

•  may-violate-keep-before?: is a boolean which, if true, specifies that constraints imposed by the keep: characteristics of ancestor flow objects on the relative positioning of this flow object and its previous flow object may not be respected. This characteristic is not inherited. The default value is #f.

•  may-violate-keep-after?: is a boolean which, if true, specifies that constraints imposed by keep: characteristics of ancestor flow objects on the relative positioning of this flow object and its next flow object may not be respected. This characteristic is not inherited. The default value is #f.
The line-progression direction for inline areas in the paragraph is the placement direction of the paragraph.
12.6.6.1 Line Spacing
The size of the line areas produced by the paragraph shall be min-pre-line-spacing: before the placement path and min-post-line-spacing: after the placement path.  If min-leading: is not #f, the size of the line shall be increased to cover all the areas in the line. If the previous area is a line, then conditional space shall be added, if necessary, before the line so that the total distance between the previous line's placement path and this placement path is the value of the line-spacing: characteristic. If the previous area is not a line, then conditional space shall be added, if necessary, before the line so that the total distance between the end of the previous area and this placement path is the value of the line-spacing: characteristic less the value of the min-post-line-spacing: characteristic. If min-leading: is not #f, then additional conditional space shall be added, if required, to make the space between the previous area and this one no less than the value of min-leading:. The conditional space has the priority specified by the line-spacing-priority: characteristic.