Add font rename script to rename one font only.
This change adds a script that renames only font at a time. This helps
in writing better Makefile rules and passes the job for parallelization
to the make rather than doing it in python which doesn't support ctrl-c
properly.
Change-Id: Icd380e3cc5d744260d6a9f497aa65a1a6c829c2e
diff --git a/tools/layoutlib/rename_font/build_font_single.py b/tools/layoutlib/rename_font/build_font_single.py
index c747d92..d648b04 100755
--- a/tools/layoutlib/rename_font/build_font_single.py
+++ b/tools/layoutlib/rename_font/build_font_single.py
@@ -15,15 +15,16 @@
# limitations under the License.
"""
-Rename the PS name of all fonts in the input directories and copy them to the
-output directory.
+Rename the PS name of the input font.
-Usage: build_font.py /path/to/input_fonts1/ /path/to/input_fonts2/ /path/to/output_fonts/
+OpenType fonts (*.otf) are not currently supported. They are copied to the destination without renaming.
+XML files are also copied in case they are passed there by mistake.
+
+Usage: build_font.py /path/to/input_font.ttf /path/to/output_font.ttf
"""
import glob
-from multiprocessing import Pool
import os
import re
import shutil
@@ -36,9 +37,6 @@
# fontTools is available at platform/external/fonttools
from fontTools import ttx
-# global variable
-dest_dir = '/tmp'
-
class FontInfo(object):
family = None
@@ -52,6 +50,10 @@
pass
+# A constant to copy the font without modifying. This is useful when running
+# locally and speed up the time to build the SDK.
+COPY_ONLY = False
+
# These constants represent the value of nameID parameter in the namerecord for
# different information.
# see http://scripts.sil.org/cms/scripts/page.php?item_id=IWS-Chapter08#3054f18b
@@ -60,50 +62,31 @@
NAMEID_FULLNAME = 4
NAMEID_VERSION = 5
+# A list of extensions to process.
+EXTENSIONS = ['.ttf', '.otf', '.xml']
def main(argv):
if len(argv) < 2:
- sys.exit('Usage: build_font.py /path/to/input_fonts/ /path/to/out/dir/')
- for directory in argv:
- if not os.path.isdir(directory):
- sys.exit(directory + ' is not a valid directory')
- global dest_dir
- dest_dir = argv[-1]
- src_dirs = argv[:-1]
- cwd = os.getcwd()
- os.chdir(dest_dir)
- files = glob.glob('*')
- for filename in files:
- os.remove(filename)
- os.chdir(cwd)
- input_fonts = list()
- for src_dir in src_dirs:
- for dirname, dirnames, filenames in os.walk(src_dir):
- for filename in filenames:
- input_path = os.path.join(dirname, filename)
- extension = os.path.splitext(filename)[1].lower()
- if extension == '.ttf':
- input_fonts.append(input_path)
- elif extension == '.xml':
- shutil.copy(input_path, dest_dir)
- if '.git' in dirnames:
- # don't go into any .git directories.
- dirnames.remove('.git')
- # Create as many threads as the number of CPUs
- pool = Pool(processes=None)
- pool.map(convert_font, input_fonts)
+ sys.exit('Usage: build_font.py /path/to/input/font.ttf /path/to/out/font.ttf')
+ dest_path = argv[-1]
+ input_path = argv[0]
+ extension = os.path.splitext(input_path)[1].lower()
+ if extension in EXTENSIONS:
+ if not COPY_ONLY and extension == '.ttf':
+ convert_font(input_path, dest_path)
+ return
+ shutil.copy(input_path, dest_path)
-def convert_font(input_path):
+def convert_font(input_path, dest_path):
filename = os.path.basename(input_path)
print 'Converting font: ' + filename
# the path to the output file. The file name is the fontfilename.ttx
- ttx_path = os.path.join(dest_dir, filename)
- ttx_path = ttx_path[:-1] + 'x'
+ ttx_path = dest_path[:-1] + 'x'
try:
# run ttx to generate an xml file in the output folder which represents all
# its info
- ttx_args = ['-q', '-d', dest_dir, input_path]
+ ttx_args = ['-q', '-o', ttx_path, input_path]
ttx.main(ttx_args)
# now parse the xml file to change its PS name.
tree = etree.parse(ttx_path)
@@ -112,7 +95,7 @@
update_tag(name, get_font_info(name))
tree.write(ttx_path, xml_declaration=True, encoding='utf-8')
# generate the udpated font now.
- ttx_args = ['-q', '-d', dest_dir, ttx_path]
+ ttx_args = ['-q', '-o', dest_path, ttx_path]
ttx.main(ttx_args)
except InvalidFontException:
# In case of invalid fonts, we exit.
@@ -123,7 +106,7 @@
print e
# Some fonts are too big to be handled by the ttx library.
# Just copy paste them.
- shutil.copy(input_path, dest_dir)
+ shutil.copy(input_path, dest_path)
try:
# delete the temp ttx file is it exists.
os.remove(ttx_path)