Arguments are:
index in vecInlineBreaks of line breaking BP of last line,
target line length,
type of text alignment.
Calculate line dimensions. The Line LayoutManager contains the parameters lineHeight, lead and follow as members, which it received from its Block LayoutManager parent at construction. The Blo ckLayoutManager contains these parameters as members as well, and has received them from a TextInfo object in the method set BlockTextInfo. The TextInfo object has a reference to the Font object. lead is the font ascender, follow is the font descender.
The leading is the difference between lineHeight and font height = ascender + descender. The leading is split in two halves, one for above, the other for below the line. The variable lineLead is calculated as the distance from the baseline to the top of the line, the variable maxtb is calculated as the distance from the baseline to the bottom of the line. The variable middlefollow set equal to maxtb. These parameters correspond to the members lead, total and follow of the breakposs.
Find out the exact meaning of these.
Loop over the breakposs in vecInlineBreaks:
adjust lineLead, maxtb and middlefollow if the corresponding dimension of the BP is larger;
add the ipds; a BP does not just hold the ipd of the area since the previous BP, but the cumulative ipd for all the areas contributed by its layout manager; therefore care is taken to add only the ipd of the last BP of each LM; more precisely, the ipd of the last BP of the previous LM is added when the next LM is encountered;
Add the ipd of the last BP.
Resolve the trailing space of the last BP.
Adjust middlefollow if it is smaller than maxtb - lineHeight.
Calculate the stretch or shrink factor ipdAdjust for the stretch- and shrinkable elements in this line:
if content optimum is larger than line length optimum,
if content minimum is smaller than line length optimum,
calculate ipdAdjust between 0 and -1, real line length = line length optimum,
else (content minimum is larger than line length optimum)
ipdAdjust = -1, real line length = content minimum,
else (content optimum is smaller than line length optimum),
if content maximum is larger than line length optimum,
calculate ipdAdjust between 0 and 1, real line length = line length optimum,
else (content maximum is smaller than line length optimum),
ipdAdjust = 1, real line length = content maximum.
Calculate the stretch or shrink factor dAdjust for white space and the indent:
justify: calculate dAdjust,
center or end: calculate the required indent.
Create a new LineBreakPosition based on this LM, the last BP in vecInlineBreaks and the calculated dimensions; use lineLead for the baseline position and lineLead + middlefollow for the lineHeight.
Create a BreakPoss from this LineBreakPosition object.
Mark the BP as last if this LM is finished.
Set the stacking size of the BP (bpd) equal to lineLead + middlefollow.