@Section
   @Title { "@Break" }
   @Tag { break }
@Begin
@PP
The @@Break symbol influences the appearance of paragraphs (Section
{@NumberOf concatenation}), offering a fixed set of styles:
@IL

@LI {
2i @Wide { |1rt @Code adjust @@Break @I object }
adjust.break @Index { @Code adjust @@Break }
|2m Break the paragraphs of {@I object} into lines, and apply @@PAdjust
(Section {@NumberOf hadjust}) to every line except the last in
each paragraph;
}

@LI {
2i @Wide { |1rt @Code outdent @@Break @I object }
outdent.break @Index { @Code outdent @@Break }
|2m Like {@Code adjust}, except that @Code "2.0f @Wide {} &0i" is
inserted at the beginning of every line except the first, creating
an outdented paragraph (the outdent width may be changed -- see below);
}

@LI {
2i @Wide { |1rt @Code ragged @@Break @I object }
ragged.break @Index { @Code ragged @@Break }
|2m Break the paragraphs of {@I object} into lines, but do not adjust
the lines (`ragged right');
}

@LI {
2i @Wide { |1rt @Code cragged @@Break @I object }
cragged.break @Index { @Code cragged @@Break }
|2m Like {@Code ragged}, except that each line will be centred with
respect to the others;
}

@LI {
2i @Wide { |1rt @Code rragged @@Break @I object }
rragged.break @Index { @Code rragged @@Break }
|2m Like {@Code ragged}, except that each line will be right-justified with
respect to the others (`ragged left');
}

@LI {
2i @Wide { |1rt @Code oragged @@Break @I object }
oragged.break @Index { @Code oragged @@Break }
|2m The obvious combination of {@Code ragged} and {@Code outdent};
}

@LI {
2i @Wide { |1rt @Code lines @@Break @I object }
lines.break @Index { @Code lines @@Break }
|2m Break the paragraphs of {@I object} into lines at the same points
that they are broken into lines in the input, and also at concatenation
symbols of the form {@Code "&"}{@I k}{@Code "b"} for any {@I k} greater
than 1.  Do not adjust the lines.  Any spaces at the start of a line
other than the first line will appear in the output;
}

@LI {
2i @Wide { |1rt @Code clines @@Break @I object }
clines.break @Index { @Code clines @@Break }
|2m Break the paragraphs of {@I object} into lines as for @Code "lines"
@@Break, then centre each line with respect to the others;
}

@LI {
2i @Wide { |1rt @Code rlines @@Break @I object }
rlines.break @Index { @Code rlines @@Break }
|2m Break the paragraphs of {@I object} into lines as for @Code "lines"
@@Break, then right-justify each line with respect to the others.
}

@LI {
2i @Wide { |1rt @Code olines @@Break @I object }
olines.break @Index { @Code olines @@Break }
|2m Break the paragraphs of {@I object} into lines as for @Code "lines"
@@Break, then as for outdenting.
}

@EL
If the paragraph was an entire component of a galley, so will each of
its lines be; otherwise the lines are enclosed in a {@Code "@OneRow"}
symbol after breaking.
@PP
The length of the gap used to separate the lines produced by paragraph
breaking is always {@Code 1v}, except when {@Code lines}, {@Code clines},
or {@Code rlines} encounter a completely blank line, for which see below.
However, the @Code v unit itself and the
v.unit.effect @SubIndex { effect on paragraph breaking }
gap mode may be changed:
@IL

@LI {
2i @Wide { |1rt @I gap @Code "@Break" @I object }
|2m Within {@I object}, take the value of the @Code "v" unit to be the
length of {@I gap};
}

@LI {
2i @Wide { |1rt + & @I gap @Code "@Break" @I object }
|2m Within {@I object}, take the value of the @Code "v" unit to be
larger by the length of @I gap than it would otherwise have been;
}

@LI {
2i @Wide { |1rt -- & @I gap @Code "@Break" @I object }
|2m Within {@I object}, take the value of the @Code "v" unit to be
smaller by the length of @I gap than it would otherwise have been.
}

@EL
In each case, the mode of @I gap is adopted within {@I object}.
@PP
When {@Code lines}, {@Code clines}, or {@Code rlines} encounter one or more
completely blank lines, a single vertical concatenation operator is inserted
to implement these, ensuring that the entire set of lines will disappear if
they happen to fall on a page or column break.  The gap width of the
concatenation operator is {@Code 1v} for the first newline as usual, plus
{@Code 1v} multiplied by the @I { blank line scale factor }, an arbitrary
decimal number with no units, for the remaining newlines.  This scale factor
is settable by
@ID {
@Code "{ blanklinescale" @I num @Code "} @Break" @I object
}
The default value is {@Code 1.0}, which gives blank lines their full
height.  However it often looks better if they are reduced somewhat.
A value as small as {@Code 0.6} looks good; it gives width {@Code 1.6v}
to the concatenation symbol inserted at a single blank line.  The
usual gap mode is of course appended.
@PP
The @@Break symbol also controls hyphenation:
@IL

@LI {
2i @Wide { |1rt @Code "hyphen @Break" @I object }
hyphen.break @Index { @Code hyphen @@Break }
|2m Permit hyphenation within the paragraphs of {@I object};
}

@LI {
2i @Wide { |1rt @Code "nohyphen @Break" @I object }
nohyphen.break @Index { @Code nohyphen @@Break }
|2m Prohibit hyphenation within the paragraphs of {@I object}; all
hyphenation gaps without exception revert to edge-to-edge mode.
}

@EL
The @@Break also has options which control widow and orphan lines:
@IL

@LI {
2i @Wide { |1rt @Code "unbreakablefirst @Break" @I object }
hyphen.break @Index { @Code hyphen @@Break }
|2m Prevent column and page breaks (i.e. prevent a galley from splitting)
between the first and second lines of the paragraphs of {@I object};
}

@LI {
2i @Wide { |1rt @Code "unbreakablelast @Break" @I object }
nohyphen.break @Index { @Code nohyphen @@Break }
|2m Prevent column and page breaks between the last and second
last lines of the paragraphs of {@I object}.
}

@EL
These options work by adding the @Code "u" (unbreakable) suffix to the
appropriate gaps during paragraph breaking, so their precise effect is
as described for this suffix.  These options may be countermanded by
@Code "breakablefirst @Break" and @Code "breakablelast @Break".
@PP
The width of the outdenting used in the @Code "outdent" style may be
changed like this:
@IL

@LI {
2i @Wide { |1rt @Code "{ setoutdent" @I width @Code "} @Break" @I object }
|2m Within {@I object}, whenever outdenting is required, use @I width
for the amount of outdenting.  Note that this does not itself cause a
switch to outdenting style.  The width may be preceded by @Code "+" or
@Code -- to indicate a change to the existing outdent value.
}

@EL
Margin kerning, in which small (usually punctuation) characters protrude
into the margin, may be obtained by @Code "marginkerning @Break" and turned
off by @Code { "nomarginkerning @Break" }.
@PP
Several options may be given to the @@Break symbol simultaneously, in
any order.  For example,
@ID @Code "{ adjust 1.2fx hyphen }  @Break  ..."
is a typical initial value.  There may be empty objects and @@Null objects
in the left parameter of @@Break; these are ignored.
@End @Section
