mirror of
https://github.com/googlefonts/noto-emoji.git
synced 2025-06-08 15:57:59 +00:00
Merge pull request #75 from dougfelt/master
Add 'standalone' option to copy image data used by html page.
This commit is contained in:
commit
86051fda51
1 changed files with 97 additions and 25 deletions
|
@ -24,8 +24,10 @@ import argparse
|
||||||
import codecs
|
import codecs
|
||||||
import collections
|
import collections
|
||||||
import glob
|
import glob
|
||||||
|
import os
|
||||||
from os import path
|
from os import path
|
||||||
import re
|
import re
|
||||||
|
import shutil
|
||||||
import sys
|
import sys
|
||||||
from nototools import unicode_data
|
from nototools import unicode_data
|
||||||
|
|
||||||
|
@ -80,7 +82,7 @@ def _generate_row_cells(key, font, dir_infos, basepaths):
|
||||||
|
|
||||||
|
|
||||||
def _get_desc(key_tuple, dir_infos, basepaths):
|
def _get_desc(key_tuple, dir_infos, basepaths):
|
||||||
CELL_PREFIX = '<td class="desc">'
|
CELL_PREFIX = '<td>'
|
||||||
def _get_filepath(cp):
|
def _get_filepath(cp):
|
||||||
cp_key = tuple([cp])
|
cp_key = tuple([cp])
|
||||||
for i in range(len(dir_infos)):
|
for i in range(len(dir_infos)):
|
||||||
|
@ -108,9 +110,9 @@ def _get_desc(key_tuple, dir_infos, basepaths):
|
||||||
|
|
||||||
|
|
||||||
def _get_name(key_tuple, annotated_tuples):
|
def _get_name(key_tuple, annotated_tuples):
|
||||||
CELL_PREFIX = '<td class="%s">' % (
|
CELL_PREFIX = '<td%s>' % (
|
||||||
'name' if annotated_tuples is None or key_tuple not in annotated_tuples
|
'' if annotated_tuples is None or key_tuple not in annotated_tuples
|
||||||
else 'aname')
|
else ' class="aname"')
|
||||||
|
|
||||||
if len(key_tuple) != 1:
|
if len(key_tuple) != 1:
|
||||||
name = '(' + ' '.join('U+%04X' % cp for cp in key_tuple) + ')'
|
name = '(' + ' '.join('U+%04X' % cp for cp in key_tuple) + ')'
|
||||||
|
@ -123,7 +125,35 @@ def _get_name(key_tuple, annotated_tuples):
|
||||||
return CELL_PREFIX + name
|
return CELL_PREFIX + name
|
||||||
|
|
||||||
|
|
||||||
def _generate_content(basedir, font, dir_infos, limit, annotate):
|
def _collect_aux_info(dir_infos, all_keys):
|
||||||
|
"""Returns a map from dir_info_index to a set of keys of additional images
|
||||||
|
that we will take from the directory at that index."""
|
||||||
|
|
||||||
|
target_key_to_info_index = {}
|
||||||
|
for key in all_keys:
|
||||||
|
if len(key) == 1:
|
||||||
|
continue
|
||||||
|
for cp in key:
|
||||||
|
target_key = tuple([cp])
|
||||||
|
if target_key in all_keys or target_key in target_key_to_info_index:
|
||||||
|
continue
|
||||||
|
for i, info in enumerate(dir_infos):
|
||||||
|
if target_key in info.filemap:
|
||||||
|
target_key_to_info_index[target_key] = i
|
||||||
|
break
|
||||||
|
if target_key not in target_key_to_info_index:
|
||||||
|
# we shouldn't try to use it in the description. maybe report this?
|
||||||
|
pass
|
||||||
|
|
||||||
|
# now we need to invert the map
|
||||||
|
aux_info = collections.defaultdict(set)
|
||||||
|
for key, index in target_key_to_info_index.iteritems():
|
||||||
|
aux_info[index].add(key)
|
||||||
|
|
||||||
|
return aux_info
|
||||||
|
|
||||||
|
|
||||||
|
def _generate_content(basedir, font, dir_infos, limit, annotate, standalone):
|
||||||
"""Generate an html table for the infos. basedir is the parent directory
|
"""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,
|
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
|
else absolute. If limit is true and there are multiple dirs, limit the set of
|
||||||
|
@ -131,6 +161,54 @@ def _generate_content(basedir, font, dir_infos, limit, annotate):
|
||||||
for the text rendered in the font before other columns. if annotate is
|
for the text rendered in the font before other columns. if annotate is
|
||||||
not none, highlight sequences that appear in this set."""
|
not none, highlight sequences that appear in this set."""
|
||||||
|
|
||||||
|
if len(dir_infos) == 1 or limit:
|
||||||
|
all_keys = frozenset(dir_infos[0].filemap.keys())
|
||||||
|
else:
|
||||||
|
all_keys = _merge_keys([info.filemap for info in dir_infos])
|
||||||
|
|
||||||
|
basedir = path.abspath(path.expanduser(basedir))
|
||||||
|
if not path.isdir(basedir):
|
||||||
|
os.makedirs(basedir)
|
||||||
|
|
||||||
|
basepaths = []
|
||||||
|
|
||||||
|
if standalone:
|
||||||
|
# auxiliary images are used in the decomposition of multi-part emoji but
|
||||||
|
# aren't part of main set. e.g. if we have female basketball player
|
||||||
|
# color-3 we want female, basketball player, and color-3 images available
|
||||||
|
# even if they aren't part of the target set.
|
||||||
|
aux_info = _collect_aux_info(dir_infos, all_keys)
|
||||||
|
|
||||||
|
# create image subdirectories in target dir, copy image files to them,
|
||||||
|
# and adjust paths
|
||||||
|
for i, info in enumerate(dir_infos):
|
||||||
|
subdir = '%02d' % i
|
||||||
|
dstdir = path.join(basedir, subdir)
|
||||||
|
if not path.isdir(dstdir):
|
||||||
|
os.mkdir(dstdir)
|
||||||
|
|
||||||
|
aux_keys = aux_info[i]
|
||||||
|
copy_keys = all_keys if not aux_keys else (all_keys | aux_keys)
|
||||||
|
srcdir = info.directory
|
||||||
|
filemap = info.filemap
|
||||||
|
for key in copy_keys:
|
||||||
|
if key in filemap:
|
||||||
|
filename = filemap[key]
|
||||||
|
srcfile = path.join(srcdir, filename)
|
||||||
|
dstfile = path.join(dstdir, filename)
|
||||||
|
shutil.copy2(srcfile, dstfile)
|
||||||
|
basepaths.append(subdir)
|
||||||
|
else:
|
||||||
|
for srcdir, _, _ in dir_infos:
|
||||||
|
abs_srcdir = path.abspath(path.expanduser(srcdir))
|
||||||
|
if abs_srcdir == basedir:
|
||||||
|
dirspec = ''
|
||||||
|
elif abs_srcdir.startswith(basedir):
|
||||||
|
dirspec = abs_filedir[len(abs_basedir) + 1:]
|
||||||
|
else:
|
||||||
|
dirspec = abs_filedir
|
||||||
|
basepaths.append(dirspec)
|
||||||
|
|
||||||
lines = ['<table>']
|
lines = ['<table>']
|
||||||
header_row = ['']
|
header_row = ['']
|
||||||
if font:
|
if font:
|
||||||
|
@ -139,20 +217,6 @@ def _generate_content(basedir, font, dir_infos, limit, annotate):
|
||||||
header_row.extend(['Description', 'Name'])
|
header_row.extend(['Description', 'Name'])
|
||||||
lines.append('<th>'.join(header_row))
|
lines.append('<th>'.join(header_row))
|
||||||
|
|
||||||
basepaths = []
|
|
||||||
abs_basedir = path.abspath(path.expanduser(basedir))
|
|
||||||
for filedir, _, _ in dir_infos:
|
|
||||||
abs_filedir = path.abspath(path.expanduser(filedir))
|
|
||||||
if abs_filedir.startswith(abs_basedir):
|
|
||||||
dirspec = abs_filedir[len(abs_basedir) + 1:]
|
|
||||||
else:
|
|
||||||
dirspec = abs_filedir
|
|
||||||
basepaths.append(dirspec)
|
|
||||||
|
|
||||||
if len(dir_infos) == 1 or limit:
|
|
||||||
all_keys = frozenset(dir_infos[0].filemap.keys())
|
|
||||||
else:
|
|
||||||
all_keys = _merge_keys([info.filemap for info in dir_infos])
|
|
||||||
for key in sorted(all_keys):
|
for key in sorted(all_keys):
|
||||||
row = []
|
row = []
|
||||||
row.extend(_generate_row_cells(key, font, dir_infos, basepaths))
|
row.extend(_generate_row_cells(key, font, dir_infos, basepaths))
|
||||||
|
@ -293,15 +357,20 @@ STYLE = """
|
||||||
tbody { background-color: rgb(110, 110, 110) }
|
tbody { background-color: rgb(110, 110, 110) }
|
||||||
th { background-color: rgb(210, 210, 210) }
|
th { background-color: rgb(210, 210, 210) }
|
||||||
td img { width: 64px; height: 64px }
|
td img { width: 64px; height: 64px }
|
||||||
td.desc { font-size: 20pt; font-weight: bold; background-color: rgb(210, 210, 210) }
|
td:nth-last-of-type(2) {
|
||||||
td.desc img { vertical-align: middle; width: 32px; height: 32px }
|
font-size: 20pt; font-weight: bold; background-color: rgb(210, 210, 210)
|
||||||
td.name { background-color: white }
|
}
|
||||||
|
td:nth-last-of-type(2) img {
|
||||||
|
vertical-align: middle; width: 32px; height: 32px
|
||||||
|
}
|
||||||
|
td:last-of-type { background-color: white }
|
||||||
td.aname { background-color: rgb(250, 65, 75) }
|
td.aname { background-color: rgb(250, 65, 75) }
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def write_html_page(filename, page_title, font, dir_infos, limit, annotate):
|
def write_html_page(
|
||||||
|
filename, page_title, font, dir_infos, limit, annotate, standalone):
|
||||||
content = _generate_content(
|
content = _generate_content(
|
||||||
path.dirname(filename), font, dir_infos, limit, annotate)
|
path.dirname(filename), font, dir_infos, limit, annotate, standalone)
|
||||||
N_STYLE = STYLE
|
N_STYLE = STYLE
|
||||||
if font:
|
if font:
|
||||||
FONT_FACE_STYLE = """
|
FONT_FACE_STYLE = """
|
||||||
|
@ -352,6 +421,9 @@ def main():
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'-a', '--annotate', help='file listing sequences to annotate',
|
'-a', '--annotate', help='file listing sequences to annotate',
|
||||||
metavar='file')
|
metavar='file')
|
||||||
|
parser.add_argument(
|
||||||
|
'-s', '--standalone', help='copy resources used by html under target dir',
|
||||||
|
action='store_true')
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
file_parts = path.splitext(args.outfile)
|
file_parts = path.splitext(args.outfile)
|
||||||
|
@ -370,7 +442,7 @@ def main():
|
||||||
|
|
||||||
write_html_page(
|
write_html_page(
|
||||||
args.outfile, args.page_title, args.font, dir_infos, args.limit,
|
args.outfile, args.page_title, args.font, dir_infos, args.limit,
|
||||||
annotations)
|
annotations, args.standalone)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
Loading…
Add table
Reference in a new issue