if (ContentUtil.mayHaveFirstLetter(_style)) {
if (ContentUtil.mayHaveFirstLetter(c.getCurrentStyle())) {
    protected List makeChildContent(Context c) {        LinkedList contentList = new LinkedList();        FirstLineStyle firstLineStyle = null;        FirstLetterStyle firstLetterStyle = null;        if (_elem != null) {            if (ContentUtil.mayHaveFirstLine(_style)) {                //put in a marker if there is first-line styling                CascadedStyle firstLine = c.getCss().getPseudoElementStyle(_elem, "first-line");                if (firstLine != null) {                    firstLineStyle = new FirstLineStyle(firstLine);                }            }            if (ContentUtil.mayHaveFirstLetter(_style)) {                //put in a marker if there is first-letter styling                CascadedStyle firstLetter = c.getCss().getPseudoElementStyle(_elem, "first-letter");                if (firstLetter != null) {                    firstLetterStyle = new FirstLetterStyle(firstLetter);                }            }            /* Ignore before content of tables for now            //TODO: before and after may be block!            //<br/> handling should be done by :before content            CascadedStyle before = c.getCss().getPseudoElementStyle(parentElement, "before");            if (before != null && before.hasProperty(CSSName.CONTENT)) {                String content = ((CSSPrimitiveValue) before.propertyByName(CSSName.CONTENT).getValue()).getStringValue();                if (!content.equals("")) {                    contentList.add(new StylePush("before", parentElement));                    c.pushStyle(before);                    textContent = new StringBuffer();                    textContent.append(content.replaceAll("\\\\A", "\n"));                    contentList.add(new TextContent("before", parentElement, textContent.toString()));                    textContent = null;                    c.popStyle();                    contentList.add(new StylePop("before", parentElement));                }                //do not reset style here, because if this element is empty, we will not have changed context            }            */        }        Iterator childIterator = getChildIterator();        TableRowContent anonymousRow = null;        //each child node can result in only one addition to content        while (childIterator.hasNext()) {            Node curr = (Node) childIterator.next();            if (curr.getNodeType() != Node.ELEMENT_NODE && curr.getNodeType() != Node.TEXT_NODE) {                continue;            }//must be a comment or pi or something            if (curr.getNodeType() == Node.TEXT_NODE) {                String text = curr.getNodeValue();                text = WhitespaceStripper.collapseWhitespace(IdentValue.NORMAL, text, true);                if (!text.equals("")) {                    if (anonymousRow == null) {                        anonymousRow = new TableRowContent();                        contentList.add(anonymousRow);                    }                    anonymousRow.addChild(curr);                }                continue;            }            Element elem = (Element) curr;            CascadedStyle style = c.getCss().getCascadedStyle(elem, true);//this is the place where restyle is done for layout (boxing)            c.pushStyle(style);//just remember to pop it before continue            IdentValue display = c.getCurrentStyle().getIdent(CSSName.DISPLAY);            //If this element can't be directly uder a table, stick it in an anonymous row            if (display != IdentValue.TABLE_ROW                    && display != IdentValue.TABLE_CAPTION                    && display != IdentValue.TABLE_COLUMN                    && display != IdentValue.TABLE_COLUMN_GROUP                    && display != IdentValue.TABLE_FOOTER_GROUP                    && display != IdentValue.TABLE_HEADER_GROUP                    && display != IdentValue.TABLE_ROW_GROUP) {                if (anonymousRow == null) {                    anonymousRow = new TableRowContent();                    contentList.add(anonymousRow);                }                anonymousRow.addChild(elem);                c.popStyle();                continue;            }            //if we reach here, our anonymous row is done            anonymousRow = null;            if (display == IdentValue.TABLE_ROW) {                contentList.add(new TableRowContent(elem, style));                c.popStyle();                continue;            }            if (display == IdentValue.TABLE_CAPTION) {                contentList.add(new TableCaptionContent(elem, style));                c.popStyle();                continue;            }            if (display == IdentValue.TABLE_COLUMN) {                contentList.add(new TableColumnContent(elem, style));                c.popStyle();                continue;            }            if (display == IdentValue.TABLE_COLUMN_GROUP) {                contentList.add(new TableColumnGroupContent(elem, style));                c.popStyle();                continue;            }            if (display == IdentValue.TABLE_FOOTER_GROUP) {                contentList.add(new TableFooterGroupContent(elem, style));                c.popStyle();                continue;            }            if (display == IdentValue.TABLE_HEADER_GROUP) {                contentList.add(new TableHeaderGroupContent(elem, style));                c.popStyle();                continue;            }            if (display == IdentValue.TABLE_ROW_GROUP) {                contentList.add(new TableRowGroupContent(elem, style));                c.popStyle();                continue;            }        }        /* ignore after content, at least for now        if (parentElement != null) {            //TODO: after may be block!            CascadedStyle after = c.getCss().getPseudoElementStyle(parentElement, "after");            if (after != null && after.hasProperty(CSSName.CONTENT)) {                String content = ((CSSPrimitiveValue) after.propertyByName(CSSName.CONTENT).getValue()).getStringValue();                if (!content.equals("")) {//a worthwhile reduncancy-check                    textContent = saveTextContent(textContent, contentList, parentElement, parent);                    contentList.add(new StylePush("after", parentElement));                    textContent = new StringBuffer();                    textContent.append(content.replaceAll("\\\\A", "\n"));                    contentList.add(new TextContent(parentElement, textContent.toString()));                    textContent = null;                    contentList.add(new StylePop("after", parentElement));                }            }        }        */        if (firstLetterStyle != null) {            contentList.addFirst(firstLetterStyle);        }        if (firstLineStyle != null) {            contentList.addFirst(firstLineStyle);        }        return contentList;    }