'Return data in ``table`` converted to HTML as a list of strings.'

def write(self, table):

    cols = list(six.itervalues(table.columns))
    self.data.header.cols = cols
    if isinstance(self.data.fill_values, tuple):
        self.data.fill_values = [self.data.fill_values]
    self.data._set_fill_values(cols)
    lines = []
    raw_html_cols = self.html.get('raw_html_cols', [])
    if isinstance(raw_html_cols, six.string_types):
        raw_html_cols = [raw_html_cols]
    cols_escaped = [(col.info.name not in raw_html_cols) for col in cols]
    raw_html_clean_kwargs = self.html.get('raw_html_clean_kwargs', {})
    w = writer.XMLWriter(ListWriter(lines))
    with w.tag('html'):
        with w.tag('head'):
            with w.tag('meta', attrib={'charset': 'utf-8'}):
                pass
            with w.tag('meta', attrib={'http-equiv': 'Content-type', 'content': 'text/html;charset=UTF-8'}):
                pass
            if ('css' in self.html):
                with w.tag('style'):
                    w.data(self.html['css'])
            if ('cssfiles' in self.html):
                for filename in self.html['cssfiles']:
                    with w.tag('link', rel='stylesheet', href=filename, type='text/css'):
                        pass
            if ('jsfiles' in self.html):
                for filename in self.html['jsfiles']:
                    with w.tag('script', src=filename):
                        w.data('')
        with w.tag('body'):
            if ('js' in self.html):
                with w.xml_cleaning_method('none'):
                    with w.tag('script'):
                        w.data(self.html['js'])
            if isinstance(self.html['table_id'], six.string_types):
                html_table_id = self.html['table_id']
            else:
                html_table_id = None
            if ('table_class' in self.html):
                html_table_class = self.html['table_class']
                attrib = {'class': html_table_class}
            else:
                attrib = {}
            with w.tag('table', id=html_table_id, attrib=attrib):
                with w.tag('thead'):
                    with w.tag('tr'):
                        for col in cols:
                            if ((len(col.shape) > 1) and self.html['multicol']):
                                w.start('th', colspan=col.shape[1])
                            else:
                                w.start('th')
                            w.data(col.info.name.strip())
                            w.end(indent=False)
                    col_str_iters = []
                    new_cols_escaped = []
                    for (col, col_escaped) in zip(cols, cols_escaped):
                        if ((len(col.shape) > 1) and self.html['multicol']):
                            span = col.shape[1]
                            for i in range(span):
                                new_col = Column([el[i] for el in col])
                                new_col_iter_str_vals = self.fill_values(col, new_col.info.iter_str_vals())
                                col_str_iters.append(new_col_iter_str_vals)
                                new_cols_escaped.append(col_escaped)
                        else:
                            col_iter_str_vals = self.fill_values(col, col.info.iter_str_vals())
                            col_str_iters.append(col_iter_str_vals)
                            new_cols_escaped.append(col_escaped)
                for row in zip(*col_str_iters):
                    with w.tag('tr'):
                        for (el, col_escaped) in zip(row, new_cols_escaped):
                            method = ('escape_xml' if col_escaped else 'bleach_clean')
                            with w.xml_cleaning_method(method, **raw_html_clean_kwargs):
                                w.start('td')
                                w.data(el.strip())
                                w.end(indent=False)
    return [''.join(lines)]
