// Path: htmlview2/src/main/java/org/kobjects/dom/Element.java
// public interface Element extends Node {
//   String getLocalName();
//   void setAttribute(String name, String value);
//   String getAttribute(String name);
// 
//   Element getFirstElementChild();
//   Element getLastElementChild();
//   Element getNextElementSibling();
//   Element getPreviousElementSibling();
// 
//   CSSStyleDeclaration getStyle();
//   CSSStyleDeclaration getComputedStyle();
// }
// 
// Path: htmlview2/src/main/java/org/kobjects/css/CssProperty.java
// public enum CssProperty {
// 
//   // Properties applying to text (inherited by default)
// 
//   BORDER_COLLAPSE,
//   BORDER_SPACING,
//   CAPTION_SIDE,
//   COLOR,
//   DISPLAY,              // Not inherited
//   EMPTY_CELLS,
//   FONT_SIZE,
//   FONT_STYLE,
//   FONT_VARIANT,
//   FONT_WEIGHT,
//   LINE_HEIGHT,
//   LIST_STYLE_POSITION,
//   LIST_STYLE_TYPE,
//   TEXT_ALIGN,
//   TEXT_DECORATION,
//   TEXT_INDENT,
//   TEXT_TRANSFORM,
//   VISIBILITY,
//   WHITE_SPACE,
// 
//   // Other regular number properties
// 
//   BACKGROUND_COLOR,
//   BACKGROUND_POSITION_X,
//   BACKGROUND_POSITION_Y,
//   BACKGROUND_REPEAT,
// 
//   BORDER_TOP_COLOR,
//   BORDER_RIGHT_COLOR,
//   BORDER_BOTTOM_COLOR,
//   BORDER_LEFT_COLOR,
// 
//   BORDER_TOP_SPACING,
//   BORDER_RIGHT_SPACING,
//   BORDER_BOTTOM_SPACING,
//   BORDER_LEFT_SPACING,
// 
//   BORDER_TOP_STYLE,
//   BORDER_RIGHT_STYLE,
//   BORDER_BOTTOM_STYLE,
//   BORDER_LEFT_STYLE,
// 
//   BORDER_TOP_WIDTH,
//   BORDER_RIGHT_WIDTH,
//   BORDER_BOTTOM_WIDTH,
//   BORDER_LEFT_WIDTH,
// 
//   BOTTOM,
//   CLEAR,
//   CLIP,
//   FLOAT,
//   HEIGHT,
//   LEFT,
// 
//   MARGIN_TOP,
//   MARGIN_RIGHT,
//   MARGIN_BOTTOM,
//   MARGIN_LEFT,
// 
//   OVERFLOW,
//   PADDING_TOP,
//   PADDING_RIGHT,
//   PADDING_BOTTOM,
//   PADDING_LEFT,
//   POSITION,
//   RIGHT,
//   TABLE_LAYOUT,
//   TOP,
//   VERTICAL_ALIGN,
//   WIDTH,
//   Z_INDEX,
// 
//   // Special properties: String-valued and multivalue shorthands.
// 
//   BACKGROUND,
//   BACKGROUND_IMAGE,
//   BACKGROUND_POSITION,
//   BORDER,
//   BORDER_COLOR,
//   BORDER_STYLE,
//   BORDER_WIDTH,
//   FONT,
//   FONT_FAMILY,
//   LIST_STYLE,
//   MARGIN,
//   PADDING, MAX_WIDTH;
// 
//   public static final int TEXT_PROPERTY_COUNT = BACKGROUND_POSITION_X.ordinal();
//   public static final int REGULAR_PROPERTY_COUNT = BACKGROUND.ordinal();
// }
// 
// Path: htmlview2/src/main/java/org/kobjects/css/CssStylableElement.java
// public interface CssStylableElement {
// 
//   String getAttribute(String name);
// 
//   String getLocalName();
// 
//   Iterator<? extends CssStylableElement> getChildElementIterator();
//   
//   void setComputedStyle(CssStyleDeclaration style);
//   CssStyleDeclaration getStyle();
// }
// 
// Path: htmlview2/src/main/java/org/kobjects/css/CssUnit.java
// public enum CssUnit {
//   VALUE_NOT_SET, NUMBER, PERCENT, CM, EM, EX, IN, MM, PC, PT, PX, ENUM, ARGB, STRING
// }


import android.view.View;
import org.kobjects.dom.Element;
import org.kobjects.css.CssProperty;
import org.kobjects.css.CssStylableElement;
import org.kobjects.css.CssUnit;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
          }
        }
        if (rowSpan > 0) {
          for (int i = 0; i < colSpan; i++) {
            columnList.get(columnIndex + i).remainingRowSpan = rowSpan;
          }
        }
        columnIndex += colSpan;
      }
      columnCount = Math.max(columnCount, columnIndex);
    }
    while (columnList.size() <= columnCount) {
      columnList.add(new ColumnData());
    }

    int borderSpacing = Math.round(htmlLayout.getStyle().get(CssProperty.BORDER_SPACING, CssUnit.PX, htmlLayout.cssContentWidth));
    // Phase two: Resolve

    int availableWidth = width - columnCount * borderSpacing;
    int totalWidth = 0;

    for (int i = 0; i < columnList.size(); i++) {
      ColumnData columnData = columnList.get(i);
      columnData.remainingRowSpan = 0;
      if (columnData.maxWidthForColspan != null) {
        for (Map.Entry<Integer,Integer> e : columnData.maxWidthForColspan.entrySet()) {
          int span = e.getKey();
          int spanWidth = e.getValue();
          int curWidth = 0;
          for (int j = i; j < i + span; j++) {
// Path: htmlview2/src/main/java/org/kobjects/dom/Element.java
// public interface Element extends Node {
//   String getLocalName();
//   void setAttribute(String name, String value);
//   String getAttribute(String name);
// 
//   Element getFirstElementChild();
//   Element getLastElementChild();
//   Element getNextElementSibling();
//   Element getPreviousElementSibling();
// 
//   CSSStyleDeclaration getStyle();
//   CSSStyleDeclaration getComputedStyle();
// }
// 
// Path: htmlview2/src/main/java/org/kobjects/css/CssProperty.java
// public enum CssProperty {
// 
//   // Properties applying to text (inherited by default)
// 
//   BORDER_COLLAPSE,
//   BORDER_SPACING,
//   CAPTION_SIDE,
//   COLOR,
//   DISPLAY,              // Not inherited
//   EMPTY_CELLS,
//   FONT_SIZE,
//   FONT_STYLE,
//   FONT_VARIANT,
//   FONT_WEIGHT,
//   LINE_HEIGHT,
//   LIST_STYLE_POSITION,
//   LIST_STYLE_TYPE,
//   TEXT_ALIGN,
//   TEXT_DECORATION,
//   TEXT_INDENT,
//   TEXT_TRANSFORM,
//   VISIBILITY,
//   WHITE_SPACE,
// 
//   // Other regular number properties
// 
//   BACKGROUND_COLOR,
//   BACKGROUND_POSITION_X,
//   BACKGROUND_POSITION_Y,
//   BACKGROUND_REPEAT,
// 
//   BORDER_TOP_COLOR,
//   BORDER_RIGHT_COLOR,
//   BORDER_BOTTOM_COLOR,
//   BORDER_LEFT_COLOR,
// 
//   BORDER_TOP_SPACING,
//   BORDER_RIGHT_SPACING,
//   BORDER_BOTTOM_SPACING,
//   BORDER_LEFT_SPACING,
// 
//   BORDER_TOP_STYLE,
//   BORDER_RIGHT_STYLE,
//   BORDER_BOTTOM_STYLE,
//   BORDER_LEFT_STYLE,
// 
//   BORDER_TOP_WIDTH,
//   BORDER_RIGHT_WIDTH,
//   BORDER_BOTTOM_WIDTH,
//   BORDER_LEFT_WIDTH,
// 
//   BOTTOM,
//   CLEAR,
//   CLIP,
//   FLOAT,
//   HEIGHT,
//   LEFT,
// 
//   MARGIN_TOP,
//   MARGIN_RIGHT,
//   MARGIN_BOTTOM,
//   MARGIN_LEFT,
// 
//   OVERFLOW,
//   PADDING_TOP,
//   PADDING_RIGHT,
//   PADDING_BOTTOM,
//   PADDING_LEFT,
//   POSITION,
//   RIGHT,
//   TABLE_LAYOUT,
//   TOP,
//   VERTICAL_ALIGN,
//   WIDTH,
//   Z_INDEX,
// 
//   // Special properties: String-valued and multivalue shorthands.
// 
//   BACKGROUND,
//   BACKGROUND_IMAGE,
//   BACKGROUND_POSITION,
//   BORDER,
//   BORDER_COLOR,
//   BORDER_STYLE,
//   BORDER_WIDTH,
//   FONT,
//   FONT_FAMILY,
//   LIST_STYLE,
//   MARGIN,
//   PADDING, MAX_WIDTH;
// 
//   public static final int TEXT_PROPERTY_COUNT = BACKGROUND_POSITION_X.ordinal();
//   public static final int REGULAR_PROPERTY_COUNT = BACKGROUND.ordinal();
// }
// 
// Path: htmlview2/src/main/java/org/kobjects/css/CssStylableElement.java
// public interface CssStylableElement {
// 
//   String getAttribute(String name);
// 
//   String getLocalName();
// 
//   Iterator<? extends CssStylableElement> getChildElementIterator();
//   
//   void setComputedStyle(CssStyleDeclaration style);
//   CssStyleDeclaration getStyle();
// }
// 
// Path: htmlview2/src/main/java/org/kobjects/css/CssUnit.java
// public enum CssUnit {
//   VALUE_NOT_SET, NUMBER, PERCENT, CM, EM, EX, IN, MM, PC, PT, PX, ENUM, ARGB, STRING
// }


// Path: htmlview2/src/main/java/org/kobjects/htmlview2/TableLayoutManager.java
import android.view.View;
import org.kobjects.dom.Element;
import org.kobjects.css.CssProperty;
import org.kobjects.css.CssStylableElement;
import org.kobjects.css.CssUnit;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

          }
        }
        if (rowSpan > 0) {
          for (int i = 0; i < colSpan; i++) {
            columnList.get(columnIndex + i).remainingRowSpan = rowSpan;
          }
        }
        columnIndex += colSpan;
      }
      columnCount = Math.max(columnCount, columnIndex);
    }
    while (columnList.size() <= columnCount) {
      columnList.add(new ColumnData());
    }

    int borderSpacing = Math.round(htmlLayout.getStyle().get(CssProperty.BORDER_SPACING, CssUnit.PX, htmlLayout.cssContentWidth));
    // Phase two: Resolve

    int availableWidth = width - columnCount * borderSpacing;
    int totalWidth = 0;

    for (int i = 0; i < columnList.size(); i++) {
      ColumnData columnData = columnList.get(i);
      columnData.remainingRowSpan = 0;
      if (columnData.maxWidthForColspan != null) {
        for (Map.Entry<Integer,Integer> e : columnData.maxWidthForColspan.entrySet()) {
          int span = e.getKey();
          int spanWidth = e.getValue();
          int curWidth = 0;
          for (int j = i; j < i + span; j++) {
            curWidth += columnList.get(j).maxMeasuredWidth;