Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f251b060 authored by Deepanshu Gupta's avatar Deepanshu Gupta Committed by Android (Google) Code Review
Browse files

Merge "Parallel processing of the fonts. [DO NOT MERGE]" into lmp-preview-dev

parents 28b13b23 d23417ab
Loading
Loading
Loading
Loading
+60 −37
Original line number Diff line number Diff line
@@ -30,13 +30,18 @@ import os
from lxml import etree
import shutil
import glob
from multiprocessing import Pool

# global variable
dest_dir = '/tmp'

def main(argv):
  if len(argv) < 2:
    sys.exit('Usage: build_font.py /path/to/input_fonts/ /path/to/out/dir/')
  for dir in argv:
    if not os.path.isdir(dir):
      sys.exit(dir + ' is not a valid directory')
  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()
@@ -45,6 +50,7 @@ def main(argv):
  for filename in files:
    os.remove(filename)
  os.chdir(cwd)
  input_fonts = list()
  for src_dir in src_dirs:
    for filename in os.listdir(src_dir):
      if os.path.isdir(os.path.join(src_dir, filename)):
@@ -52,14 +58,25 @@ def main(argv):
      if not os.path.splitext(filename)[1].lower() == '.ttf':
        shutil.copy(os.path.join(src_dir, filename), dest_dir)
        continue
      old_ttf_path = os.path.join(src_dir, filename)
      input_fonts.append(os.path.join(src_dir, filename))
  # Create as many threads as the number of CPUs
  pool = Pool(processes=None)
  pool.map(convert_font, input_fonts)


class InvalidFontException(Exception):
  pass

def convert_font(input_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'
  try:
    # run ttx to generate an xml file in the output folder which represents all
    # its info
        ttx_args = ['-d', dest_dir, old_ttf_path]
    ttx_args = ['-q', '-d', dest_dir, input_path]
    ttx.main(ttx_args)
    # now parse the xml file to change its PS name.
    tree = etree.parse(ttx_path)
@@ -72,12 +89,18 @@ def main(argv):
        update_name(name, new_ps_name)
    tree.write(ttx_path, xml_declaration=True, encoding=encoding )
    # generate the udpated font now.
        ttx_args = ['-d', dest_dir, ttx_path]
    ttx_args = ['-q', '-d', dest_dir, ttx_path]
    ttx.main(ttx_args)
      except Exception:
  except InvalidFontException:
    # In case of invalid fonts, we exit.
    print filename + ' is not a valid font'
    raise
  except Exception as e:
    print 'Error converting font: ' + filename
    print e
    # Some fonts are too big to be handled by the ttx library.
    # Just copy paste them.
        shutil.copy(old_ttf_path, dest_dir)
    shutil.copy(input_path, dest_dir)
  try:
    # delete the temp ttx file is it exists.
    os.remove(ttx_path)
@@ -94,14 +117,14 @@ def get_font_info(tag):
      if namerecord.attrib['nameID'] == '6':
        if ps_name is not None:
          if not sanitize(namerecord.text) == ps_name:
            sys.exit('found multiple possibilities of the font name')
            raise InvalidFontException('found multiple possibilities of the font name')
        else:
          ps_name = sanitize(namerecord.text)
      # nameID=5 means the font version
      if namerecord.attrib['nameID'] == '5':
        if ps_version is not None:
          if not ps_version == get_version(namerecord.text):
            sys.exit('found multiple possibilities of the font version')
            raise InvalidFontException('found multiple possibilities of the font version')
        else:
          ps_version = get_version(namerecord.text)
  return [ps_name, ps_version]
@@ -121,7 +144,7 @@ def get_version(string):
  # to extract n.nn, we return the second entry in the split strings.
  string = string.strip()
  if not string.startswith('Version '):
    sys.exit('mal-formed font version')
    raise InvalidFontException('mal-formed font version')
  return sanitize(string.split()[1])

if __name__ == '__main__':