return alignContext;
}
private SequenceList createHorizontalSequenceList(final InlineRenderBox box)
{
final SequenceList sequenceList = new DefaultSequenceList();
sequenceList.add(StartSequenceElement.INSTANCE, box);
RenderNode next = box.getFirstChild();
RenderBox context = box;
final FastStack<RenderBox> contextStack = new FastStack<RenderBox>(50);
boolean containsContent = false;
while (next != null)
{
// process next
final int nodeType = next.getLayoutNodeType();
if ((nodeType & LayoutNodeTypes.MASK_BOX_INLINE) == LayoutNodeTypes.MASK_BOX_INLINE)
{
final RenderBox nBox = (RenderBox) next;
final RenderNode firstChild = nBox.getFirstChild();
if (firstChild != null)
{
// Open a non-empty box context
contextStack.push(context);
next = firstChild;
sequenceList.add(StartSequenceElement.INSTANCE, nBox);
context = nBox;
}
else
{
// Process an empty box.
sequenceList.add(StartSequenceElement.INSTANCE, nBox);
sequenceList.add(EndSequenceElement.INSTANCE, nBox);
next = nBox.getNext();
}
}
else
{
// Process an ordinary node.
if (nodeType == LayoutNodeTypes.TYPE_NODE_TEXT)
{
sequenceList.add(TextSequenceElement.INSTANCE, next);
containsContent = true;
}
else if (nodeType == LayoutNodeTypes.TYPE_BOX_CONTENT)
{
sequenceList.add(ReplacedContentSequenceElement.INSTANCE, next);
containsContent = true;
}
else if (nodeType == LayoutNodeTypes.TYPE_NODE_SPACER)
{
if (containsContent)
{
sequenceList.add(SpacerSequenceElement.INSTANCE, next);
}
}
else if ((nodeType & LayoutNodeTypes.MASK_BOX_BLOCK) == LayoutNodeTypes.MASK_BOX_BLOCK)
{
containsContent = true;
sequenceList.add(InlineBoxSequenceElement.INSTANCE, next);
}
else
{
containsContent = true;
sequenceList.add(InlineNodeSequenceElement.INSTANCE, next);
}
next = next.getNext();
}
while (next == null && contextStack.isEmpty() == false)
{
// Finish the current box context, if needed
sequenceList.add(EndSequenceElement.INSTANCE, context);
next = context.getNext();
context = contextStack.pop();
}
}
sequenceList.add(EndSequenceElement.INSTANCE, box);
return sequenceList;
}