Top Description Inners Constructors Methods
com.openhtmltopdf.layout

public Class InlineBoxing

extends Object
Class Inheritance
Imports
java.util.ArrayList, .HashMap, .List, .Map, java.util.logging.Level, com.openhtmltopdf.util.LogMessageId, .XRLog, org.w3c.dom.Element, com.openhtmltopdf.bidi.BidiSplitter, .ParagraphSplitter.Paragraph, com.openhtmltopdf.css.constants.CSSName, .IdentValue, com.openhtmltopdf.css.style.CalculatedStyle, .CssContext, com.openhtmltopdf.css.style.derived.BorderPropertySet, .RectPropertySet, com.openhtmltopdf.layout.Breaker.BreakTextResult, com.openhtmltopdf.render.AnonymousBlockBox, .BlockBox, .Box, .FSFontMetrics, .FloatDistances, .InlineBox, .InlineLayoutBox, .InlineText, .LineBox, .MarkerData, .StrutMetrics, .TextDecoration

This class is responsible for flowing inline content into lines. Block content which participates in an inline formatting context is also handled here as well as floating and absolutely positioned content.

Nested and Inner Type Summary

Modifier and TypeClass and Description
pack-priv static class
private static enum
pack-priv static class

Constructor Summary

AccessConstructor and Description
private

Method Summary

Modifier and TypeMethod and Description
private static void
private static InlineLayoutBox
addFirstLetterBox(LayoutContext c, LineBox current, InlineLayoutBox currentIB, LineBreakContext lbContext, int maxAvailableWidth, int remainingWidth, byte textDirection)

private static InlineLayoutBox

Returns:

the deepest box (so that the rest of the line's content can be added to it) or null if openParents is empty.
addOpenInlineBoxes
(LayoutContext c, LineBox line, List<InlineBox> openParents, int cbWidth, Map<InlineBox, InlineLayoutBox> iBMap)

We have to convert this HTML (angle brackets replaced with square brackets):

[one][two]Two lines[/two][/one]
private static void
alignInlineContent(LayoutContext c, Box box, float ascent, float descent, VerticalAlignContext vaContext)

private static void
alignLine(final LayoutContext c, final LineBox current, final int maxAvailableWidth)

private static InlineBoxMeasurements
public static List<TextDecoration>
public static StrutMetrics
private static void
endInlineBox(LayoutContext c, InlineBoxing.SpaceVariables space, InlineBoxing.StateVariables current, InlineBoxing.StateVariables previous, List<InlineBox> openInlineBoxes, List<Layer> pendingInlineLayers, InlineBox inlineBox, CalculatedStyle style)

private static void
private static InlineBoxMeasurements
private static boolean
hasTrimmableLeadingSpace(LineBox line, CalculatedStyle style, LineBreakContext lbContext, boolean zeroWidthInlineBlock)

private static boolean
isAlwaysBreak(LayoutContext c, BlockBox parent, int breakAtLine, int lineOffset)

public static void
layoutContent(LayoutContext c, BlockBox box, int initialY, int breakAtLine)

private static void
layoutInlineBlockContent(LayoutContext c, BlockBox containingBlock, BlockBox inlineBlock, int initialY)

private static InlineText
layoutText(LayoutContext c, CalculatedStyle style, int remainingWidth, LineBreakContext lbContext, boolean needFirstLetter, byte textDirection, boolean tryToBreakAnywhere, int lineWidth, boolean forceOutput)

private static void
private static void
moveLineContents(LineBox current, int ty)

private static LineBox
newLine(LayoutContext c, LineBox previousLine, Box box)

private static LineBox
newLine(LayoutContext c, int y, Box box)

public static int
positionHorizontally(CssContext c, Box current, int start)

private static int
private static int
positionHorizontallyILBRTL(CssContext c, InlineLayoutBox current, int start, int width)

public static int

Returns:

width of line.
positionHorizontallyRTL
(CssContext c, Box
should be the line box.
current
,
int
should be the right edge of the line
start
,
int width)

Attempts to layout inline boxes from right to left.

private static void
private static void
private static void
private static void
private static void
positionVertically(LayoutContext c, Box container, LineBox current, MarkerData markerData)

private static int
processOutOfFlowContent(LayoutContext c, LineBox current, BlockBox block, int available, List<FloatLayoutResult> pendingFloats)

private static void
saveLine(LineBox current, LayoutContext c, BlockBox block, int minHeight, int maxAvailableWidth, List<FloatLayoutResult> pendingFloats, boolean hasFirstLinePCs, List<Layer> pendingInlineLayers, MarkerData markerData, int contentStart, boolean alwaysBreak)

private static void
private static void
startInlineBlock(LayoutContext c, BlockBox box, int initialY, int breakAtLine, byte blockLayoutDirection, InlineBoxing.SpaceVariables space, InlineBoxing.StateVariables current, InlineBoxing.StateVariables previous, int contentStart, List<InlineBox> openInlineBoxes, Map<InlineBox, InlineLayoutBox> iBMap, int minimumLineHeight, MarkerData markerData, List<FloatLayoutResult> pendingFloats, boolean hasFirstLinePEs, List<Layer> pendingInlineLayers, int lineOffset, BlockBox child)

private static void
private static InlineBoxing.StartInlineTextResult
startInlineText(LayoutContext c, LineBreakContext lbContext, InlineBox inlineBox, InlineBoxing.SpaceVariables space, InlineBoxing.StateVariables current, int fit, boolean trimmedLeadingSpace, boolean tryToBreakAnywhere, boolean forceOutput)

Trys to consume the text in lbContext.

private static void
startNewInlineLine(LayoutContext c, BlockBox box, int breakAtLine, byte blockLayoutDirection, InlineBoxing.SpaceVariables space, InlineBoxing.StateVariables current, InlineBoxing.StateVariables previous, int contentStart, List<InlineBox> openInlineBoxes, Map<InlineBox, InlineLayoutBox> iBMap, int minimumLineHeight, MarkerData markerData, List<FloatLayoutResult> pendingFloats, boolean hasFirstLinePEs, List<Layer> pendingInlineLayers, int lineOffset, InlineBox inlineBox, LineBreakContext lbContext)

private static void
Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Constructor Detail

InlineBoxingback to summary
private InlineBoxing()

Method Detail

addBoxIdback to summary
private static void addBoxId(LayoutContext c, InlineBoxing.StateVariables current)
addFirstLetterBoxback to summary
private static InlineLayoutBox addFirstLetterBox(LayoutContext c, LineBox current, InlineLayoutBox currentIB, LineBreakContext lbContext, int maxAvailableWidth, int remainingWidth, byte textDirection)
addOpenInlineBoxesback to summary
private static InlineLayoutBox addOpenInlineBoxes(LayoutContext c, LineBox line, List<InlineBox> openParents, int cbWidth, Map<InlineBox, InlineLayoutBox> iBMap)

We have to convert this HTML (angle brackets replaced with square brackets):

[one][two]Two lines[/two][/one]
to (with parent child relationship specified by indentation):
  [line-box] (LineBox)
    [one]    (InlineLayoutBox)
      [two]  (InlineLayoutBox)
        Two  (InlineText)
      [/two]
    [/one]
  [/line-box]
  [line-box]  (LineBox)
    [one]     (InlineLayoutBox)
      [two]   (InlineLayoutBox)
        lines (InlineText)
      [/two]
    [/one]
  [/line-box]
In this case the openParents param would be a flat list of [one][two] as InlineBox objects at the start of the second line.
Returns:InlineLayoutBox

the deepest box (so that the rest of the line's content can be added to it) or null if openParents is empty.

alignInlineContentback to summary
private static void alignInlineContent(LayoutContext c, Box box, float ascent, float descent, VerticalAlignContext vaContext)
alignLineback to summary
private static void alignLine(final LayoutContext c, final LineBox current, final int maxAvailableWidth)
calculateInlineMeasurementsback to summary
private static InlineBoxMeasurements calculateInlineMeasurements(LayoutContext c, InlineLayoutBox iB, VerticalAlignContext vaContext)
calculateTextDecorationsback to summary
public static List<TextDecoration> calculateTextDecorations(Box box, int baseline, FSFontMetrics fm)
createDefaultStrutMetricsback to summary
public static StrutMetrics createDefaultStrutMetrics(LayoutContext c, Box container)
endInlineBoxback to summary
private static void endInlineBox(LayoutContext c, InlineBoxing.SpaceVariables space, InlineBoxing.StateVariables current, InlineBoxing.StateVariables previous, List<InlineBox> openInlineBoxes, List<Layer> pendingInlineLayers, InlineBox inlineBox, CalculatedStyle style)
finishPendingInlineLayersback to summary
private static void finishPendingInlineLayers(LayoutContext c, List<Layer> layers)
getInitialMeasurementsback to summary
private static InlineBoxMeasurements getInitialMeasurements(LayoutContext c, Box container, FSFontMetrics strutM)
hasTrimmableLeadingSpaceback to summary
private static boolean hasTrimmableLeadingSpace(LineBox line, CalculatedStyle style, LineBreakContext lbContext, boolean zeroWidthInlineBlock)
isAlwaysBreakback to summary
private static boolean isAlwaysBreak(LayoutContext c, BlockBox parent, int breakAtLine, int lineOffset)
layoutContentback to summary
public static void layoutContent(LayoutContext c, BlockBox box, int initialY, int breakAtLine)
layoutInlineBlockContentback to summary
private static void layoutInlineBlockContent(LayoutContext c, BlockBox containingBlock, BlockBox inlineBlock, int initialY)
layoutTextback to summary
private static InlineText layoutText(LayoutContext c, CalculatedStyle style, int remainingWidth, LineBreakContext lbContext, boolean needFirstLetter, byte textDirection, boolean tryToBreakAnywhere, int lineWidth, boolean forceOutput)
moveInlineContentsback to summary
private static void moveInlineContents(InlineLayoutBox box, int ty)
moveLineContentsback to summary
private static void moveLineContents(LineBox current, int ty)
newLineback to summary
private static LineBox newLine(LayoutContext c, LineBox previousLine, Box box)
newLineback to summary
private static LineBox newLine(LayoutContext c, int y, Box box)
positionHorizontallyback to summary
public static int positionHorizontally(CssContext c, Box current, int start)
positionHorizontallyback to summary
private static int positionHorizontally(CssContext c, InlineLayoutBox current, int start)
positionHorizontallyILBRTLback to summary
private static int positionHorizontallyILBRTL(CssContext c, InlineLayoutBox current, int start, int width)
positionHorizontallyRTLback to summary
public static int positionHorizontallyRTL(CssContext c, Box current, int start, int width)

Attempts to layout inline boxes from right to left.

Parameters
current:Box

should be the line box.

start:int

should be the right edge of the line

Returns:int

width of line.

positionInlineBlockVerticallyback to summary
private static void positionInlineBlockVertically(LayoutContext c, VerticalAlignContext vaContext, BlockBox inlineBlock)
positionInlineChildrenVerticallyback to summary
private static void positionInlineChildrenVertically(LayoutContext c, InlineLayoutBox current, VerticalAlignContext vaContext)
positionInlineContentVerticallyback to summary
private static void positionInlineContentVertically(LayoutContext c, VerticalAlignContext vaContext, Box child)
positionInlineVerticallyback to summary
private static void positionInlineVertically(LayoutContext c, VerticalAlignContext vaContext, InlineLayoutBox iB)
positionVerticallyback to summary
private static void positionVertically(LayoutContext c, Box container, LineBox current, MarkerData markerData)
processOutOfFlowContentback to summary
private static int processOutOfFlowContent(LayoutContext c, LineBox current, BlockBox block, int available, List<FloatLayoutResult> pendingFloats)
saveLineback to summary
private static void saveLine(LineBox current, LayoutContext c, BlockBox block, int minHeight, int maxAvailableWidth, List<FloatLayoutResult> pendingFloats, boolean hasFirstLinePCs, List<Layer> pendingInlineLayers, MarkerData markerData, int contentStart, boolean alwaysBreak)
startFirstLetterInlineLayoutBoxback to summary
private static void startFirstLetterInlineLayoutBox(LayoutContext c, InlineBoxing.SpaceVariables space, InlineBoxing.StateVariables current, InlineBox inlineBox, LineBreakContext lbContext)
startInlineBlockback to summary
private static void startInlineBlock(LayoutContext c, BlockBox box, int initialY, int breakAtLine, byte blockLayoutDirection, InlineBoxing.SpaceVariables space, InlineBoxing.StateVariables current, InlineBoxing.StateVariables previous, int contentStart, List<InlineBox> openInlineBoxes, Map<InlineBox, InlineLayoutBox> iBMap, int minimumLineHeight, MarkerData markerData, List<FloatLayoutResult> pendingFloats, boolean hasFirstLinePEs, List<Layer> pendingInlineLayers, int lineOffset, BlockBox child)
startInlineBoxback to summary
private static void startInlineBox(LayoutContext c, InlineBoxing.SpaceVariables space, InlineBoxing.StateVariables current, InlineBoxing.StateVariables previous, List<InlineBox> openInlineBoxes, Map<InlineBox, InlineLayoutBox> iBMap, InlineBox inlineBox, CalculatedStyle style)
startInlineTextback to summary
private static InlineBoxing.StartInlineTextResult startInlineText(LayoutContext c, LineBreakContext lbContext, InlineBox inlineBox, InlineBoxing.SpaceVariables space, InlineBoxing.StateVariables current, int fit, boolean trimmedLeadingSpace, boolean tryToBreakAnywhere, boolean forceOutput)

Trys to consume the text in lbContext. If successful it creates an InlineText and adds it to the current inline layout box. Otherwise, if there are floats and the current line is otherwise empty, moves below float and trys again. Otherwise, trys again on a new line.

startNewInlineLineback to summary
private static void startNewInlineLine(LayoutContext c, BlockBox box, int breakAtLine, byte blockLayoutDirection, InlineBoxing.SpaceVariables space, InlineBoxing.StateVariables current, InlineBoxing.StateVariables previous, int contentStart, List<InlineBox> openInlineBoxes, Map<InlineBox, InlineLayoutBox> iBMap, int minimumLineHeight, MarkerData markerData, List<FloatLayoutResult> pendingFloats, boolean hasFirstLinePEs, List<Layer> pendingInlineLayers, int lineOffset, InlineBox inlineBox, LineBreakContext lbContext)
trimLeadingSpaceback to summary
private static void trimLeadingSpace(LineBreakContext lbContext)
com.openhtmltopdf.layout back to summary

pack-priv Class InlineBoxing.SpaceVariables

extends Object
Class Inheritance

Field Summary

Modifier and TypeField and Description
pack-priv final int
pack-priv int
pack-priv int
pack-priv int

Constructor Summary

AccessConstructor and Description
pack-priv
SpaceVariables(int maxWidth)

Method Summary

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

maxAvailableWidthback to summary
pack-priv final int maxAvailableWidth
pendingLeftMBPback to summary
pack-priv int pendingLeftMBP
pendingRightMBPback to summary
pack-priv int pendingRightMBP
remainingWidthback to summary
pack-priv int remainingWidth

Constructor Detail

SpaceVariablesback to summary
pack-priv SpaceVariables(int maxWidth)
com.openhtmltopdf.layout back to summary

private final Enum InlineBoxing.StartInlineTextResult

extends Enum<InlineBoxing.StartInlineTextResult>
Class Inheritance

Field Summary

Modifier and TypeField and Description
public static final InlineBoxing.StartInlineTextResult
public static final InlineBoxing.StartInlineTextResult
public static final InlineBoxing.StartInlineTextResult

Constructor Summary

AccessConstructor and Description
private

Method Summary

Modifier and TypeMethod and Description
public static InlineBoxing.StartInlineTextResult
public static InlineBoxing.StartInlineTextResult[]
Inherited from java.lang.Enum:
clonecompareTodescribeConstableequalsfinalizegetDeclaringClasshashCodenameordinaltoStringvalueOf

Field Detail

LINE_FINISHEDback to summary
public static final InlineBoxing.StartInlineTextResult LINE_FINISHED
RECONSUME_BELOW_FLOATSback to summary
public static final InlineBoxing.StartInlineTextResult RECONSUME_BELOW_FLOATS
RECONSUME_UNBREAKABLE_ON_NEW_LINEback to summary
public static final InlineBoxing.StartInlineTextResult RECONSUME_UNBREAKABLE_ON_NEW_LINE

Constructor Detail

StartInlineTextResultback to summary
private StartInlineTextResult()

Method Detail

valueOfback to summary
public static InlineBoxing.StartInlineTextResult valueOf(String name)
valuesback to summary
public static InlineBoxing.StartInlineTextResult[] values()
com.openhtmltopdf.layout back to summary

pack-priv Class InlineBoxing.StateVariables

extends Object
Class Inheritance

Field Summary

Modifier and TypeField and Description
pack-priv InlineLayoutBox
pack-priv LineBox

Constructor Summary

AccessConstructor and Description
pack-priv

Method Summary

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

layoutBoxback to summary
pack-priv InlineLayoutBox layoutBox
lineback to summary
pack-priv LineBox line

Constructor Detail

StateVariablesback to summary
pack-priv StateVariables()