From 7c719f9166c1afb40f8842487acf17f08dfe4940 Mon Sep 17 00:00:00 2001 From: Doug Felt Date: Mon, 11 Jul 2016 11:23:13 -0700 Subject: [PATCH] Update emoji html generation tool to show images rendered by font. Images are shown in LTR and RTL contexts. Chrome currently doesn't correctly render some emoji sequences, in part this is because it is using Unicode 8 property data. At any rate, these are known Chrome issues. --- generate_emoji_html.py | 56 +++++++++++++++++++++++++++++++++--------- 1 file changed, 45 insertions(+), 11 deletions(-) diff --git a/generate_emoji_html.py b/generate_emoji_html.py index c4f8ef0f4..fc56efd65 100755 --- a/generate_emoji_html.py +++ b/generate_emoji_html.py @@ -49,7 +49,7 @@ def _merge_keys(dicts): keys.extend(d.keys()) return frozenset(keys) -def _generate_row_cells(key, dir_infos, basepaths): +def _generate_row_cells(key, font, dir_infos, basepaths): CELL_PREFIX = '' indices = range(len(basepaths)) def _cell(key, info, basepath): @@ -57,8 +57,25 @@ def _generate_row_cells(key, dir_infos, basepaths): return '' % path.join( basepath, info.filemap[key]) return '-missing-' - return [CELL_PREFIX + _cell(key, dir_infos[i], basepaths[i]) - for i in indices] + def _text_cell(key, text_dir): + def _cp_seq(cp): + if cp in [ord('*'), 0x2640, 0x2642, 0x2695]: + return unichr(cp) + unichr(0xfe0f) + else: + return unichr(cp) + text = ''.join(_cp_seq(cp) for cp in key) + return '%s' % (text_dir, text) + + if font: + row_cells = [ + CELL_PREFIX + _text_cell(key, text_dir) + for text_dir in ('ltr', 'rtl')] + else: + row_cells = [] + row_cells.extend( + [CELL_PREFIX + _cell(key, dir_infos[i], basepaths[i]) + for i in indices]) + return row_cells def _get_desc(key_tuple, dir_infos, basepaths): @@ -102,14 +119,17 @@ def _get_name(key_tuple): return CELL_PREFIX + name -def _generate_content(basedir, dir_infos, limit): +def _generate_content(basedir, font, dir_infos, limit): """Generate an html table for the infos. basedir is the parent directory of the content, filenames will be made relative to this if underneath it, else absolute. If limit is true and there are multiple dirs, limit the set of - sequences to those in the first dir.""" + sequences to those in the first dir. If font is not none, generate columns + for the text rendered in the font before other columns.""" lines = [''] header_row = [''] + if font: + header_row.extend(['Emoji ltr', 'Emoji rtl']) header_row.extend([info.title for info in dir_infos]) header_row.extend(['Description', 'Name']) lines.append('
'.join(header_row)) @@ -130,7 +150,7 @@ def _generate_content(basedir, dir_infos, limit): all_keys = _merge_keys([info.filemap for info in dir_infos]) for key in sorted(all_keys): row = [] - row.extend(_generate_row_cells(key, dir_infos, basepaths)) + row.extend(_generate_row_cells(key, font, dir_infos, basepaths)) row.append(_get_desc(key, dir_infos, basepaths)) row.append(_get_name(key)) lines.append(''.join(row)) @@ -241,7 +261,7 @@ TEMPLATE = """ - {{title}} + {{title}}{{font-face-style}} @@ -259,10 +279,21 @@ STYLE = """ td.name { background-color: white } """ -def write_html_page(filename, page_title, dir_infos, limit): - content = _generate_content(path.dirname(filename), dir_infos, limit) +def write_html_page(filename, page_title, font, dir_infos, limit): + content = _generate_content(path.dirname(filename), font, dir_infos, limit) + N_STYLE = STYLE + if font: + FONT_FACE_STYLE = """ + """ % font + N_STYLE += ' span.efont { font-family: "Emoji"; font-size:32pt }\n' + else: + FONT_FACE_STYLE = '' text = _instantiate_template( - TEMPLATE, {'title': page_title, 'style': STYLE, 'content': content}) + TEMPLATE, { + 'title': page_title, 'font-face-style': FONT_FACE_STYLE, + 'style': N_STYLE, 'content': content}) with codecs.open(filename, 'w', 'utf-8') as f: f.write(text) @@ -294,6 +325,8 @@ def main(): parser.add_argument( '-dp', '--default_prefix', help='default prefix', metavar='prefix', default=_default_prefix) + parser.add_argument( + '-f', '--font', help='emoji font', metavar='font') args = parser.parse_args() file_parts = path.splitext(args.filename) @@ -305,7 +338,8 @@ def main(): args.image_dirs, args.exts, args.prefixes, args.titles, args.default_ext, args.default_prefix) - write_html_page(args.filename, args.page_title, dir_infos, args.limit) + write_html_page( + args.filename, args.page_title, args.font, dir_infos, args.limit) if __name__ == "__main__":