Package com.openhtmltopdf.layout
Class InlineBoxing
- java.lang.Object
-
- com.openhtmltopdf.layout.InlineBoxing
-
public class InlineBoxing extends java.lang.ObjectThis 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 Class Summary
Nested Classes Modifier and Type Class Description (package private) static classInlineBoxing.SpaceVariablesprivate static classInlineBoxing.StartInlineTextResult(package private) static classInlineBoxing.StateVariables
-
Constructor Summary
Constructors Modifier Constructor Description privateInlineBoxing()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description private static voidaddBoxId(LayoutContext c, InlineBoxing.StateVariables current)private static InlineLayoutBoxaddFirstLetterBox(LayoutContext c, LineBox current, InlineLayoutBox currentIB, LineBreakContext lbContext, int maxAvailableWidth, int remainingWidth, byte textDirection)private static InlineLayoutBoxaddOpenInlineBoxes(LayoutContext c, LineBox line, java.util.List<InlineBox> openParents, int cbWidth, java.util.Map<InlineBox,InlineLayoutBox> iBMap)We have to convert this HTML (angle brackets replaced with square brackets):private static voidalignInlineContent(LayoutContext c, Box box, float ascent, float descent, VerticalAlignContext vaContext)private static voidalignLine(LayoutContext c, LineBox current, int maxAvailableWidth)private static InlineBoxMeasurementscalculateInlineMeasurements(LayoutContext c, InlineLayoutBox iB, VerticalAlignContext vaContext)static java.util.List<TextDecoration>calculateTextDecorations(Box box, int baseline, FSFontMetrics fm)static StrutMetricscreateDefaultStrutMetrics(LayoutContext c, Box container)private static voidendInlineBox(LayoutContext c, InlineBoxing.SpaceVariables space, InlineBoxing.StateVariables current, InlineBoxing.StateVariables previous, java.util.List<InlineBox> openInlineBoxes, java.util.List<Layer> pendingInlineLayers, InlineBox inlineBox, CalculatedStyle style)private static voidfinishPendingInlineLayers(LayoutContext c, java.util.List<Layer> layers)private static InlineBoxMeasurementsgetInitialMeasurements(LayoutContext c, Box container, FSFontMetrics strutM)private static booleanhasTrimmableLeadingSpace(LineBox line, CalculatedStyle style, LineBreakContext lbContext, boolean zeroWidthInlineBlock)private static booleanisAlwaysBreak(LayoutContext c, BlockBox parent, int breakAtLine, int lineOffset)static voidlayoutContent(LayoutContext c, BlockBox box, int initialY, int breakAtLine)private static voidlayoutInlineBlockContent(LayoutContext c, BlockBox containingBlock, BlockBox inlineBlock, int initialY)private static InlineTextlayoutText(LayoutContext c, CalculatedStyle style, int remainingWidth, LineBreakContext lbContext, boolean needFirstLetter, byte textDirection, boolean tryToBreakAnywhere, int lineWidth, boolean forceOutput)private static voidmoveInlineContents(InlineLayoutBox box, int ty)private static voidmoveLineContents(LineBox current, int ty)private static LineBoxnewLine(LayoutContext c, int y, Box box)private static LineBoxnewLine(LayoutContext c, LineBox previousLine, Box box)static intpositionHorizontally(CssContext c, Box current, int start)private static intpositionHorizontally(CssContext c, InlineLayoutBox current, int start)private static intpositionHorizontallyILBRTL(CssContext c, InlineLayoutBox current, int start, int width)static intpositionHorizontallyRTL(CssContext c, Box current, int start, int width)Attempts to layout inline boxes from right to left.private static voidpositionInlineBlockVertically(LayoutContext c, VerticalAlignContext vaContext, BlockBox inlineBlock)private static voidpositionInlineChildrenVertically(LayoutContext c, InlineLayoutBox current, VerticalAlignContext vaContext)private static voidpositionInlineContentVertically(LayoutContext c, VerticalAlignContext vaContext, Box child)private static voidpositionInlineVertically(LayoutContext c, VerticalAlignContext vaContext, InlineLayoutBox iB)private static voidpositionVertically(LayoutContext c, Box container, LineBox current, MarkerData markerData)private static intprocessOutOfFlowContent(LayoutContext c, LineBox current, BlockBox block, int available, java.util.List<FloatLayoutResult> pendingFloats)private static voidsaveLine(LineBox current, LayoutContext c, BlockBox block, int minHeight, int maxAvailableWidth, java.util.List<FloatLayoutResult> pendingFloats, boolean hasFirstLinePCs, java.util.List<Layer> pendingInlineLayers, MarkerData markerData, int contentStart, boolean alwaysBreak)private static voidstartFirstLetterInlineLayoutBox(LayoutContext c, InlineBoxing.SpaceVariables space, InlineBoxing.StateVariables current, InlineBox inlineBox, LineBreakContext lbContext)private static voidstartInlineBlock(LayoutContext c, BlockBox box, int initialY, int breakAtLine, byte blockLayoutDirection, InlineBoxing.SpaceVariables space, InlineBoxing.StateVariables current, InlineBoxing.StateVariables previous, int contentStart, java.util.List<InlineBox> openInlineBoxes, java.util.Map<InlineBox,InlineLayoutBox> iBMap, int minimumLineHeight, MarkerData markerData, java.util.List<FloatLayoutResult> pendingFloats, boolean hasFirstLinePEs, java.util.List<Layer> pendingInlineLayers, int lineOffset, BlockBox child)private static voidstartInlineBox(LayoutContext c, InlineBoxing.SpaceVariables space, InlineBoxing.StateVariables current, InlineBoxing.StateVariables previous, java.util.List<InlineBox> openInlineBoxes, java.util.Map<InlineBox,InlineLayoutBox> iBMap, InlineBox inlineBox, CalculatedStyle style)private static InlineBoxing.StartInlineTextResultstartInlineText(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 voidstartNewInlineLine(LayoutContext c, BlockBox box, int breakAtLine, byte blockLayoutDirection, InlineBoxing.SpaceVariables space, InlineBoxing.StateVariables current, InlineBoxing.StateVariables previous, int contentStart, java.util.List<InlineBox> openInlineBoxes, java.util.Map<InlineBox,InlineLayoutBox> iBMap, int minimumLineHeight, MarkerData markerData, java.util.List<FloatLayoutResult> pendingFloats, boolean hasFirstLinePEs, java.util.List<Layer> pendingInlineLayers, int lineOffset, InlineBox inlineBox, LineBreakContext lbContext)private static voidtrimLeadingSpace(LineBreakContext lbContext)
-
-
-
Method Detail
-
layoutContent
public static void layoutContent(LayoutContext c, BlockBox box, int initialY, int breakAtLine)
-
startInlineBlock
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, java.util.List<InlineBox> openInlineBoxes, java.util.Map<InlineBox,InlineLayoutBox> iBMap, int minimumLineHeight, MarkerData markerData, java.util.List<FloatLayoutResult> pendingFloats, boolean hasFirstLinePEs, java.util.List<Layer> pendingInlineLayers, int lineOffset, BlockBox child)
-
endInlineBox
private static void endInlineBox(LayoutContext c, InlineBoxing.SpaceVariables space, InlineBoxing.StateVariables current, InlineBoxing.StateVariables previous, java.util.List<InlineBox> openInlineBoxes, java.util.List<Layer> pendingInlineLayers, InlineBox inlineBox, CalculatedStyle style)
-
startNewInlineLine
private static void startNewInlineLine(LayoutContext c, BlockBox box, int breakAtLine, byte blockLayoutDirection, InlineBoxing.SpaceVariables space, InlineBoxing.StateVariables current, InlineBoxing.StateVariables previous, int contentStart, java.util.List<InlineBox> openInlineBoxes, java.util.Map<InlineBox,InlineLayoutBox> iBMap, int minimumLineHeight, MarkerData markerData, java.util.List<FloatLayoutResult> pendingFloats, boolean hasFirstLinePEs, java.util.List<Layer> pendingInlineLayers, int lineOffset, InlineBox inlineBox, LineBreakContext lbContext)
-
startInlineText
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.
-
startFirstLetterInlineLayoutBox
private static void startFirstLetterInlineLayoutBox(LayoutContext c, InlineBoxing.SpaceVariables space, InlineBoxing.StateVariables current, InlineBox inlineBox, LineBreakContext lbContext)
-
startInlineBox
private static void startInlineBox(LayoutContext c, InlineBoxing.SpaceVariables space, InlineBoxing.StateVariables current, InlineBoxing.StateVariables previous, java.util.List<InlineBox> openInlineBoxes, java.util.Map<InlineBox,InlineLayoutBox> iBMap, InlineBox inlineBox, CalculatedStyle style)
-
addBoxId
private static void addBoxId(LayoutContext c, InlineBoxing.StateVariables current)
-
isAlwaysBreak
private static boolean isAlwaysBreak(LayoutContext c, BlockBox parent, int breakAtLine, int lineOffset)
-
addFirstLetterBox
private static InlineLayoutBox addFirstLetterBox(LayoutContext c, LineBox current, InlineLayoutBox currentIB, LineBreakContext lbContext, int maxAvailableWidth, int remainingWidth, byte textDirection)
-
layoutInlineBlockContent
private static void layoutInlineBlockContent(LayoutContext c, BlockBox containingBlock, BlockBox inlineBlock, int initialY)
-
positionHorizontallyRTL
public static int positionHorizontallyRTL(CssContext c, Box current, int start, int width)
Attempts to layout inline boxes from right to left.- Parameters:
start- should be the right edge of the linecurrent- should be the line box.- Returns:
- width of line.
-
positionHorizontallyILBRTL
private static int positionHorizontallyILBRTL(CssContext c, InlineLayoutBox current, int start, int width)
-
positionHorizontally
public static int positionHorizontally(CssContext c, Box current, int start)
-
positionHorizontally
private static int positionHorizontally(CssContext c, InlineLayoutBox current, int start)
-
createDefaultStrutMetrics
public static StrutMetrics createDefaultStrutMetrics(LayoutContext c, Box container)
-
positionVertically
private static void positionVertically(LayoutContext c, Box container, LineBox current, MarkerData markerData)
-
positionInlineVertically
private static void positionInlineVertically(LayoutContext c, VerticalAlignContext vaContext, InlineLayoutBox iB)
-
positionInlineBlockVertically
private static void positionInlineBlockVertically(LayoutContext c, VerticalAlignContext vaContext, BlockBox inlineBlock)
-
moveLineContents
private static void moveLineContents(LineBox current, int ty)
-
moveInlineContents
private static void moveInlineContents(InlineLayoutBox box, int ty)
-
calculateInlineMeasurements
private static InlineBoxMeasurements calculateInlineMeasurements(LayoutContext c, InlineLayoutBox iB, VerticalAlignContext vaContext)
-
calculateTextDecorations
public static java.util.List<TextDecoration> calculateTextDecorations(Box box, int baseline, FSFontMetrics fm)
-
alignInlineContent
private static void alignInlineContent(LayoutContext c, Box box, float ascent, float descent, VerticalAlignContext vaContext)
-
getInitialMeasurements
private static InlineBoxMeasurements getInitialMeasurements(LayoutContext c, Box container, FSFontMetrics strutM)
-
positionInlineChildrenVertically
private static void positionInlineChildrenVertically(LayoutContext c, InlineLayoutBox current, VerticalAlignContext vaContext)
-
positionInlineContentVertically
private static void positionInlineContentVertically(LayoutContext c, VerticalAlignContext vaContext, Box child)
-
saveLine
private static void saveLine(LineBox current, LayoutContext c, BlockBox block, int minHeight, int maxAvailableWidth, java.util.List<FloatLayoutResult> pendingFloats, boolean hasFirstLinePCs, java.util.List<Layer> pendingInlineLayers, MarkerData markerData, int contentStart, boolean alwaysBreak)
-
alignLine
private static void alignLine(LayoutContext c, LineBox current, int maxAvailableWidth)
-
finishPendingInlineLayers
private static void finishPendingInlineLayers(LayoutContext c, java.util.List<Layer> layers)
-
layoutText
private static InlineText layoutText(LayoutContext c, CalculatedStyle style, int remainingWidth, LineBreakContext lbContext, boolean needFirstLetter, byte textDirection, boolean tryToBreakAnywhere, int lineWidth, boolean forceOutput)
-
processOutOfFlowContent
private static int processOutOfFlowContent(LayoutContext c, LineBox current, BlockBox block, int available, java.util.List<FloatLayoutResult> pendingFloats)
-
hasTrimmableLeadingSpace
private static boolean hasTrimmableLeadingSpace(LineBox line, CalculatedStyle style, LineBreakContext lbContext, boolean zeroWidthInlineBlock)
-
trimLeadingSpace
private static void trimLeadingSpace(LineBreakContext lbContext)
-
newLine
private static LineBox newLine(LayoutContext c, LineBox previousLine, Box box)
-
newLine
private static LineBox newLine(LayoutContext c, int y, Box box)
-
addOpenInlineBoxes
private static InlineLayoutBox addOpenInlineBoxes(LayoutContext c, LineBox line, java.util.List<InlineBox> openParents, int cbWidth, java.util.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:
- the deepest box (so that the rest of the line's content can be added to it) or null if openParents is empty.
-
-