3. Block layout managers and their child layout managers

Block LMs are different in their treatment of their child LMs. For this purpose BlockLayoutManager defines a nested class ProxyLMiter, which is a subclass of LMiter.

This proxy is the basic LMiter over the children of the block. If the proxy produces a child LM that does not generate inline areas, the child LM is added to the list of child LMs as normal. But if the childLM generates an inline area, a new LineLayoutManager object is created (BlockLayoutManager.ProxyLMiter.createLineManager). This LM asks the proxy to produce more child LMs. As long as these child LMs generate inline areas, they are collected by the LineLayoutManager object. Finally, the LineLayoutManager object creates its LMiter object as the ListIterator over the list of collected child LMs.