#ifndef EL__DOCUMENT_HTML_PARSER_TABLE_H #define EL__DOCUMENT_HTML_PARSER_TABLE_H #include "util/color.h" struct html_context; struct part; /* Fix namespace clash on MacOS. */ #define table table_elinks #define ALIGN_TR -1 #define VALIGN_TR -1 #define VALIGN_TOP 0 #define VALIGN_MIDDLE 1 #define VALIGN_BOTTOM 2 #define VALIGN_BASELINE VALIGN_TOP /* Not implemented. */ #define WIDTH_AUTO -1 #define WIDTH_RELATIVE -2 #define TABLE_FRAME_VOID 0 #define TABLE_FRAME_ABOVE 1 #define TABLE_FRAME_BELOW 2 #define TABLE_FRAME_HSIDES (TABLE_FRAME_ABOVE | TABLE_FRAME_BELOW) #define TABLE_FRAME_LHS 4 #define TABLE_FRAME_RHS 8 #define TABLE_FRAME_VSIDES (TABLE_FRAME_LHS | TABLE_FRAME_RHS) #define TABLE_FRAME_BOX (TABLE_FRAME_HSIDES | TABLE_FRAME_VSIDES) #define TABLE_RULE_NONE 0 #define TABLE_RULE_ROWS 1 #define TABLE_RULE_COLS 2 #define TABLE_RULE_ALL 3 #define TABLE_RULE_GROUPS 4 struct html_start_end { unsigned char *start, *end; }; struct table_cell { unsigned char *start; unsigned char *end; unsigned char *fragment_id; color_T bgcolor; int col, row; int align; int valign; int colspan; int rowspan; int min_width; int max_width; int width, height; int link_num; unsigned int is_used:1; unsigned int is_spanned:1; unsigned int is_header:1; unsigned int is_group:1; }; struct table_column { int group; int align; int valign; int width; }; struct table { struct part *part; struct table_cell *cells; unsigned char *fragment_id; color_T bgcolor; color_T bordercolor; int align; struct table_column *columns; int columns_count; /* Number of columns used. */ int real_columns_count; /* Number of columns really allocated. */ int *min_cols_widths; int *max_cols_widths; int *cols_widths; int *cols_x; int cols_x_count; int *rows_heights; int cols, rows; /* For number of cells used. */ int real_cols, real_rows; /* For number of cells really allocated. */ int border; int cellpadding; int vcellpadding; int cellspacing; int frame, rules, width; int real_width; int real_height; int min_width; int max_width; int link_num; unsigned int full_width:1; struct html_start_end caption; int caption_height; struct html_start_end *bad_html; int bad_html_size; }; #define CELL(table, col, row) (&(table)->cells[(row) * (table)->real_cols + (col)]) struct table * parse_table(unsigned char *html, unsigned char *eof, unsigned char **end, unsigned char *attr, int sh, struct html_context *html_context); void free_table(struct table *table); #endif