int len2 = FontUtil.len(c, node, text.substring(start, next_space), font);
int len2 = FontUtil.len(c, text.substring(start, next_space), font);
    public static InlineBox generateMultilineBreak(Context c, Node node, int start, String text,                                                   InlineBox prev, InlineBox prev_align, int avail) {        int extra = 0;        // calc end index to most words that will fit        int end = start;        int dbcount = 0;        while (true) {            // debugging code            dbcount++;            //u.off();            //u.on(); if ( dbcount > 50 ) { u.on(); }            if (dbcount > 100) {                //u.on();                u.p("db 2 hit");                u.p("text = " + text);                u.p("end = " + end);                throw new InfiniteLoopError("Caught a potential infinite loop in the LineBreaker");            }            int next_space = text.indexOf(" ", end);            if (next_space == -1) {                next_space = text.length();            }            CalculatedStyle style = c.css.getStyle(getElement(node));            Font font = FontUtil.getFont(c, style, node);            //Font font = FontUtil.getFont( c, node );            int len2 = FontUtil.len(c, node, text.substring(start, next_space), font);            // if this won't fit, then break and use the previous span            if (len2 > avail) {                InlineBox box = newBox(c, node, start, end, prev, text, prev_align, font);                return box;            }            // if this will fit but we are at the end then break and use current span            if (next_space == text.length()) {                InlineBox box = newBox(c, node, start, next_space, prev, text, prev_align, font);                //u.p("normal break returning curr span: " + box);                return box;            }            // skip over the space            end = next_space + 1;        }    }