Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix checkoutlinesufo hashes when writing to default layer #692

Merged
merged 2 commits into from
Dec 13, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 2 additions & 21 deletions python/afdko/checkoutlinesufo.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,10 @@

from __future__ import print_function, absolute_import

__version__ = '2.2.2'
__version__ = '2.3.0'

import argparse
from functools import cmp_to_key
import hashlib
import os
import re
import shutil
Expand Down Expand Up @@ -51,7 +50,6 @@ def __init__(self, font_path):
self.defcon_font = None
self.use_hash_map = False
self.ufo_font_hash_data = None
self.ufo_format = 2
self.save_to_default_layer = False

def open(self, use_hash_map):
Expand Down Expand Up @@ -157,6 +155,7 @@ def save(self):
layer.save(glyph_set)

if self.font_type == UFO_FONT_TYPE:
ufotools.regenerate_glyph_hashes(self.ufo_font_hash_data)
# Write the hash data, if it has changed.
self.ufo_font_hash_data.close()
elif self.font_type == TYPE1_FONT_TYPE:
Expand Down Expand Up @@ -200,23 +199,6 @@ def check_skip_glyph(self, glyph_name, do_all):
self.ufo_font_hash_data.getOrSkipGlyphXML(glyph_name, do_all)
return skip

@staticmethod
def build_glyph_hash(width, glyph_digest):
data_list = [str(width)]
for x, y in glyph_digest:
data_list.append("%s%s" % (x, y))
data_list.sort()
data = "".join(data_list)
if len(data) < 128:
glyph_hash = data
else:
glyph_hash = hashlib.sha512(data).hexdigest()
return glyph_hash

def update_hash_entry(self, glyph_name, changed):
if self.ufo_font_hash_data is not None: # isn't a UFO font.
self.ufo_font_hash_data.updateHashEntry(glyph_name, changed)

def clear_hash_map(self):
if self.ufo_font_hash_data is not None:
self.ufo_font_hash_data.clearHashMap()
Expand Down Expand Up @@ -1082,7 +1064,6 @@ def run(args=None):
if changed and options.allow_changes:
font_changed = True
original_contours = list(defcon_glyph)
font_file.update_hash_entry(glyph_name, changed)
if options.write_to_default_layer:
fixed_glyph = defcon_glyph
fixed_glyph.clearContours()
Expand Down
22 changes: 20 additions & 2 deletions python/afdko/ufotools.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
from afdko import convertfonttocid, fdkutils

__doc__ = """
ufotools.py v1.32.2 Dec 5 2018
ufotools.py v1.32.3 Dec 12 2018

This module supports using the Adobe FDK tools which operate on 'bez'
files with UFO fonts. It provides low level utilities to manipulate UFO
Expand Down Expand Up @@ -601,6 +601,9 @@ def getGlyphProcessedPath(self, glyphName):
return glyphPath

def updateHashEntry(self, glyphName, changed):
"""
THIS METHOD DOES NOT UPDATE THE GLYPH HASHES!!
"""
# srcHarsh has already been set: we are fixing the history list.
if not self.useHashMap:
return
Expand Down Expand Up @@ -1168,7 +1171,6 @@ def close(self):
if self.hashMapChanged:
self.writeHashMap()
self.hashMapChanged = 0
return

def clearHashMap(self):
self.hashMap = {kAdobHashMapVersionName: kAdobHashMapVersion}
Expand Down Expand Up @@ -2255,6 +2257,22 @@ def convertBezToGLIF(ufoFontData, glyphName, bezString, hintsOnly=False):
return glifXML


def regenerate_glyph_hashes(ufo_font_data):
"""
The handling of the glyph hashes is super convoluted.
This method fixes https://github.com/adobe-type-tools/afdko/issues/349
"""
for gname, gfilename in ufo_font_data.getGlyphMap().items():
gwidth, _, outline_xml = ufo_font_data.getGlyphXML(
ufo_font_data.glyphDefaultDir, gfilename)
hash_entry = ufo_font_data.hashMap.get(gname, None)
if not hash_entry:
continue
ghash, _ = ufo_font_data.buildGlyphHashValue(
gwidth, outline_xml, gname, True)
hash_entry[0] = tostr(ghash)


def checkHashMaps(fontPath, doSync):
"""
This function checks that all the glyphs in the processed glyph
Expand Down
Original file line number Diff line number Diff line change
@@ -1,49 +1,49 @@
{
'A': ['w663l50l2350l23540l13653l193219l427219l48352l38340l3830l6530l65340l57649l363675l303675l8953l540l208265l310565l411265', ['checkOutlines']],
'B': ['ebd8defeb9a3c8c4d2a36d0ef11ddf4d748a269da0a12467389442b74109ccecdea74be34404f353ed2cb621823db003db584c2b145559b734856ac863c00662', ['checkOutlines']],
'B': ['206d63b1e295c48d65475b56780c7a16042fd2f6032636604ab21de7a6ff60b36326a3e6aa2640ab3a98f64ac8430a820350ce9fe049a73f8debbb19e4a569d2', ['checkOutlines']],
'C': ['5a6b1e8f2cdd77107378ef6258c7ef19c1813c3da70c8aa59b9ff803d96a599d55d72093738bb028a326d817f04c314369540181c069bddd79689cf0480880ad', ['checkOutlines']],
'Cacute': ['0e87147cae7a74343e856bd9282ceb4da83f787cd7f3661f5468c9f43faa5e9571d09a1351bd9ceb821ac80af14a09fed17e3a5fe9114eaf778666def08625b0', ['checkOutlines']],
'Ccaron': ['dbb3ff29c0a411640e22742740b1eb3c4ed9cee5a327bf1ea53f2fe0ace1b25bc787356abfefba4d73dfb214b309b8aeef02b072641b91eaf42db2938854d2bf', ['checkOutlines']],
'Ccedilla': ['b3b57948db74a3f763848aa43ad89c785b85fb08cfc698cc00971c49424f38a09c3c3768b3c4ebbf22f5e820199c576aedd08741c2670de5cebfc2414ceb1280', ['checkOutlines']],
'Cdotaccent': ['680c9b34589d202b236ff35f99631508e4de918e3bba8e69cb709da47dd1f95b6c3c648f7fce54c7008e0ab2b798f8c4bb3c77610393161c255c3f4ce8051637', ['checkOutlines']],
'H': ['505790245ae9b15b0f97947670ef6a7e1286abb7663eed480090aee6c2b6153e0ba14d5651db677098c5881ce7bfe1bdbf6a8737f85b3ff1591368be4f41ea3f', ['checkOutlines']],
'Hbar': ['42509cbe358b9fafff14248313fb10d78452228589f7e8e79619698980fa16a6537733572820e627ae198d9b2630cf9959c8048cbf37c812311503898cb182d9', ['checkOutlines']],
'Cacute': ['f0063ec6ceb13d061f0513643279092dff8c8f46134b28d2bc1c16fceeacff1fdaea063031d190d648db2b135b8053b67019c64be3c782bf84db0ad3c1c6f31f', ['checkOutlines']],
'Ccaron': ['0c1fd0523d3fe63ba88433189a14094b8ae3e917d8e2d1fb0d4fafd22f3574b52c39a875d2cfa8b98788449acfcbaa5e21892ecbb77f564443d984b1e82e05f1', ['checkOutlines']],
'Ccedilla': ['095bd5069749bad980611268cf303c141f78a2057059c6ea36dfcf684964b1c54310f6c10eb767b947f0e0b1bb4c6e8891b88def5e2c74b502cc54c16543a698', ['checkOutlines']],
'Cdotaccent': ['04fff4b9ee2d81743a630d601e76d7b16662a8f4ae7bac99fa19f934c0531ad35aa0b851ee449e3f38f467626dcf1b7fa0a24d22ba6c6690cbd3bc6e2f0289bd', ['checkOutlines']],
'H': ['ac9b1ab64401e8a6d0192a1ca9abb97ba05693c07c0d0892b691fe8340bbe8582dd833c1a4f45594b1d80e7570bea6d20011d7b5337a152a7a4430210d611495', ['checkOutlines']],
'Hbar': ['0b12b3c82e366d35f069fdfb4741e3aa8f88315f35ada0dbf30a5c7c2b357ec3b098c88800d3e0a16249b11a9114f442285effe2e9342b70778faab236493782', ['checkOutlines']],
'I': ['01a8b0cf6b3812265091a1b9d8f28136c749bc7f1991589c3328c2cc86a5ccc58d2a4d2110c768dbad50e0291144f338d700bb2c3bba600a934af2a11c31414b', ['checkOutlines']],
'Icircumflex': ['37be5253cd417b5ba17c637ddbfeee49cd47ae48ac024ee1b5b461d5063a924995095cf13c0d9a60440c9bb1c603d94c5c86c8771137170ff126ddecd274f5e1', ['checkOutlines']],
'L': ['d9ad8d12811beaa24feabc61e8247780a908a03c6cb2a45ef6d8949883c5588723c76dd37f051269ac131cf202a74b9c39de64921bf9bbac1b65b952b8d52c94', ['checkOutlines']],
'Lcommaaccent': ['75ee83c72defef80c8e9c1f6d1eb662130f295b73e126a9e50b8bb4191b7c1fd97794c3a2975672c1b8799e56dc8258a552d2c7b3fc972e8cd421d1bcb377fc4', ['checkOutlines']],
'Ldot': ['a312337d11380ad6a146657119e3cb7273fcada1b28c6e7d4176297cce4fe72101b0bf1b38066c178d286e38fdc27b8574c191e9ac748fb6180d0af966683231', ['checkOutlines']],
'Lslash': ['eae9e4620ea4d5e07e6e1135ed79f4f383a93adffa9f77140370d940cb2c68d0bf654c993c835377267635be179ff075fa9f46e6e8d261edb011ab015a268404', ['checkOutlines']],
'Ncommaaccent': ['0b224491a80f95f4626663c829a7dc7c808cc743beb5a205be04d592c26f5b47777522e4e725e2f5e0607ec32998ce3f2c68d68f9aab289a3b2ab685014c59d1', ['checkOutlines']],
'Ngrave': ['2dd3ef495b0a49c140238113e542e6c0850b1fa8c79d127b3d33af5db17b386b8ae2e00dd149969e0e8afbb56aa64452be5d2f2361341cc94f8d305f3c4aaef2', ['checkOutlines']],
'Icircumflex': ['f99c17fc35f75ed3c1ecc26a61e6c564686c1d32e38289f449a58a6f3b5e3e084179f54824388d0e35cb31aed3377f00147a46fe444b7e8a762fc85d2aa8ce23', ['checkOutlines']],
'L': ['93fd9bc9541b093e5a9c665eaec168f054b05077287c2cf2478e9297529f25536750ee6fe242d816c08e43d11034d660763ebcb31c701c0d369e06b76dca3ed0', ['checkOutlines']],
'Lcommaaccent': ['a45e982f95b258870ff380f8b893688d9db7af753744354fe94ebf819526822ddb7a25de493debdb0297b1f36bdc648737c6700882288469f5d2bde17b706051', ['checkOutlines']],
'Ldot': ['483c8bf1358ba6b15182537748430ea6d74bedd319f8de8f20e63516209c813d006b73366fc9676568d8340968b04ab4f06fdf82d46f9eee14184224e3c4117e', ['checkOutlines']],
'Lslash': ['d9aa5df982463984207143803b8d7a72209df0d4fee14fbbdeeb58058a0c327a7bd2a2ab31b295153d78eac5b03d84962a0a31a1826db3097d266d268bb5ff08', ['checkOutlines']],
'Ncommaaccent': ['05f70fedddf09757365b4ac7d2ba0480af1610112ae6814218db99097b4a03b0ebabf93eeb5d84e072dc1ef7b7d92c2ded32f2bf1671edbe44b2ee3aaa5f29f6', ['checkOutlines']],
'Ngrave': ['27bc9a9c715d95efe4dd4cf7efb13ac6e371f96a77f89a5af4967c2b4f62ff59ccef7dd03a67d97e5c48635f194d3a41a27d13b0061ab448fbb0c4bcbf51fdcc', ['checkOutlines']],
'O': ['d8f5a47af3280fb2738a3387ea2b1eaaf0f79703fc87ae35299e205d5ffa5ddf278575e5c81938a330ea36332fb31426d8d4deda822fc6f644a218df7cc32765', ['checkOutlines']],
'Oslash': ['c7b3bd5421a8273349ac07d7f55d3765e4e1bba44d7291a9e457839ec15104631287fed43956b90b79960a7375aec640206e387d9e09a185e3653148d737b6a2', ['checkOutlines']],
'Oslashmacron': ['a5fe6afaa7b9dc93ed7e7b3ba0a78cd25c13594c35f702e35418338eac7f80b411894e5b49a24a455671cc96ae05001af50f8720d5e8865fa7c8714b0fef462b', ['checkOutlines']],
'Otilde': ['bc400f396676e2dc870591a6e09d9f0cac8c4685ef89beca4d4dc1459f06c36ba4130d1e274fb82b5582820e65fd2374c2e3964528f327f10bbfe08df1c589f7', ['checkOutlines']],
'S': ['d31627620d35de34b06fcbde63e746d7f4ec48a951645256c71689c8f173e21bfaaaea016ab1c85366de5daaa885270199e6de3a18d2895d2cab7cae1a0c52e2', ['checkOutlines']],
'Sacute': ['a4aada46babe18e78055e5db5ed0c7ae9c3d6d6ad3424a87c9e9b27cff71378f52883d634e66852a249def0af27c91fe7d706c489c7ffc6d82f0951f4d25a42d', ['checkOutlines']],
'Scaron': ['e8c2e8795667e859cba860e0a88e887b4b9169d389be0fd5c7cc7dc5d02a5e4003e1aaf75f68b20c413c42840dbd8ad8901958261ea5d509693db22477f3db75', ['checkOutlines']],
'Scedilla': ['7286c7d2568743825faacda113538113bb9358a08bb03347a4b18f2c934890af2d65489bba2e1dc2666337f3074f4f5e3ac59eca12b9a81af95f2ff364eef48b', ['checkOutlines']],
'Oslash': ['b87e0eab82a0a6ec4caa9b9b9a51ce301c3e99e9d1d96088d6bd309f6f69b06c517fb55306f77fe06d09354306e3ea98ea562fd7b0cf3f4576c2b0f937597217', ['checkOutlines']],
'Oslashmacron': ['de9c482fb815db73d55d42cca9020d4534de3bdf69d0f7d71912ac13ea8689a9793752f27b6904a95cd6b55a6f8183f8fcc200a1f645628a0276d76399f73fe2', ['checkOutlines']],
'Otilde': ['b8b18fb19d46a3150ef52507dfc1c527dbfbdb6f07ed27b4062c2161eb7a2eace10047e3104d8a4bc5e96e4c25d3487d575ba2ef257f8c4ea874765712e81963', ['checkOutlines']],
'S': ['4340293d16ea0d95ccb5dc5733993176ef8960b54294819fe6303a6a15307aa19c126a6fef9befaed9e8f741e9094f389ae2767aa45a7ae9b5b7fa6a2137782e', ['checkOutlines']],
'Sacute': ['86ec08525cb91ea61138dc82d9defae50fbd25a0fa6d0574f91c48c5a77f9af7f4dfcd26368f15e78a280c5760f74d65273ee2949a654bf1c6cd32a49dab1882', ['checkOutlines']],
'Scaron': ['fdef6241a6814033c3f3f8e67a2c43edc34cead8ca90479790adbc17aaa967a0f036ab7cba5eeb584585f9047adc30d8f4a95e6bb512af9f43a3dffd6f900876', ['checkOutlines']],
'Scedilla': ['4ba24e8d2a4ce00b782ceca9e77e175c1ecc7f7955f629a3b6563969280b17e95be657e8195aaf7532c218b0706005274dcf8bedc491c3881482edf60947b6c7', ['checkOutlines']],
'acutecmb': ['w1000c-58576l-33557959449630c89667116692121707c121720121745103757c847576775750747c317170670-29623', ['checkOutlines']],
'acutecmb.cap': ['w1000c-66746l-48722-774335766c76789113810126826c126844126864109877c898777287755867c27839-4809-35778', ['checkOutlines']],
'c': ['cf9e46d84b17be742c229e262b4237ba5b71aa00fac915a3e2109b5ccfd44ca3a3a1fad8f71957364c189142ae656f6fc9c2555c3b75b23a6c64389d0f1260aa', ['checkOutlines']],
'cacute': ['8e5c5e3d35e273856c9f2d654d3c3071dd8fbb0e2c1d5b934e2a6a3a942d6eaadc92ebc421509698d735980b35f976fed1f05fa35e6747c45bb9dfd4c48c8c06', ['checkOutlines']],
'cacute': ['81cc973a7c9e213143cc219cac13a20ffc9140072e7c8ad9630f73c56390bf56e18ab370b2a2136a327f3e50fa5b31bc6faf630679667d269f4839be37e475a0', ['checkOutlines']],
'caroncmb': ['w1000l-114737l-138718l-37571l37571l138718l114737l0633', ['checkOutlines']],
'caroncmb.cap': ['w1000l-114867l-137847l-37730l37730l137847l114867l-42751l42751', ['checkOutlines']],
'ccaron': ['04ed8264bec5731948e7885926f303ca1167d42d80d3febe2988e3eae74d1bb8fd10cb24500f89cbdd7d6056b3c5bbb201e462bfe913cbda3d2514dfe660b36b', ['checkOutlines']],
'ccedilla': ['b223ab27668243870e220ac1b6ea20e4a17ff0c7cf3589e1ffe12c3276ce34ac2bf8abbd79a7b8d8ea46eca9ebb15042becbeb3de77cad00ada0bb299e89129a', ['checkOutlines']],
'cdotaccent': ['9a9124157aeefee890176e0dadea654347bb418d4e323c2156485c83cacc10eefb7949c3fa37ea4e2c1890298784643fe5a826b3ebd821721660c439850b018d', ['checkOutlines']],
'caroncmb.cap': ['w1000l-114867l-137847l-37730l37730l137847l114867l0782', ['checkOutlines']],
'ccaron': ['00f0360888d88d1253ce365c5085b891122c10f34d759b9d46357ec2014342438124a52e4647217d4da6d0e30483bee14bc40fc84b55b5095a5fb7d723ad3ecb', ['checkOutlines']],
'ccedilla': ['bff847e78561faa04a104f7eb3e707536751a1c706c222e03ac642f89de4d1f1cd694f34446414593d516f36198fdb97bc87aba87ee440e8b3c30c439c914689', ['checkOutlines']],
'cdotaccent': ['4691ba9f582e773d591780ba9d4becd28952f33f1ff44b61348d0b6a04afe3f599129431026a37b3c2937152bebcc26037fa582379041a149c05055114c13f8b', ['checkOutlines']],
'cedillacmb': ['cd50ba7c89312fbc789190975e4db86cf40641bf2de2d92ec6881bcafe013bb6898039460541aca258c82f97aed50b39594effa84f3c511c700e2405fa9fa723', ['checkOutlines']],
'cedillacmb.cap': ['8dce8a4b8371979f9329931d522a85be2ceab36a9d13cf4da2c51615f555e1fba625556427f10a1477f1db9bdbd421b07031bac48757ae92dce58df197c050a7', ['checkOutlines']],
'commabelowcmb': ['2e20b3cfdd80e087d29a962efa81468de9dcf447ac3dd62a51f81dee7b863d3aad49726aa4d94083bbe908f58c5ecf83d7014ca0afd8103668217fd4adda83cc', ['checkOutlines']],
'cedillacmb.cap': ['cd50ba7c89312fbc789190975e4db86cf40641bf2de2d92ec6881bcafe013bb6898039460541aca258c82f97aed50b39594effa84f3c511c700e2405fa9fa723', ['checkOutlines']],
'commabelowcmb': ['w1000c61-11761-10459-92c52-7138-5823-52c9-52-16-52-37-70c-37-96-37-121-17-144c9-155-13-189-42-206c-82-222l-72-250-2-22761-187', ['checkOutlines']],
'dotaccentcmb': ['w1000c05903759066616c666536669037716c0716-37716-66690c-66653-66616-37590', ['checkOutlines']],
'dotaccentcmb.cap': ['w1000c07383773866764c668016683837864c0864-37864-66838c-66801-66764-37738', ['checkOutlines']],
'gravecmb.cap': ['w1000l66746367775808c-27839-55867-72877c-89877-109877-126864c-126844-126826-113809c-76789-367676744c48722', ['checkOutlines']],
'hashMapVersion': (1, 0),
'macroncmb.cap': ['w1000l-150760l150760l150821l-150821', ['checkOutlines']],
's': ['5a81574cd3fc65cf7935f048d2928f8651e5afbff723479035a2ac48cad3303b6fda9d99f9ca0d78d857d128fc4263ece2628a8456e5c012994a169af0fc7428', ['checkOutlines']],
'sacute': ['aa24df0d1ffcccbdd568400d92885d1a59be00dabc98aa157cade7272ff2c838f6b05fac22177ba7a9c6eb75ea51eda5267644cd009380ed93e677748428d219', ['checkOutlines']],
'scaron': ['808708d5fa43341f3343451393bf0acecc73615408c950d6610b16be7846ccff451baa94150d40dc3f5130b3f2402138d813286838ee766723464c0bc2f8a47c', ['checkOutlines']],
'scedilla': ['d438de651fe85d96fbb66c4cfed1086199af218f9831743480f3d70a9236cd60887306f95a1513f1bc081d2830d89236d289aee52bc8219bd662d4b77123f513', ['checkOutlines']],
's': ['37d328a4d6d9c7aff10b31fd702ebb1bc2fb7a5e7f6adf4fb937ebdebf00b10fbf174418add48352cb8966deab70a20b4f3541e5c9bc88c84ad4266ede0dfdc2', ['checkOutlines']],
'sacute': ['fe10c10b28ff2975195a6199d8de3d11a23b97fde4c618fb752cbf86b56d55f5daa49074eeb6e387730cb5d34fce988ad9d5ef2c6cb1f0608aea4d54cd55157f', ['checkOutlines']],
'scaron': ['08f1f67b53785a4e4935ff19c4e368577be10f81c2d0a8fc03683fd11e49b0fae43c287cc66d06fb90afb33b3cc7df595226c58c5a1018e2851234ceb740bc36', ['checkOutlines']],
'scedilla': ['9ff62256b36c33cce06aedca69caaaba93c374e39d15c76d88a8c5618929bf8bf27e1aa403f4cc275e7a1407816da00f2a696b818f345b5ff674ee8cfe012152', ['checkOutlines']],
'tildecmb.cap': ['def50771048ddbe0d571261b83c52e2f10d42205b81be10d6d63cbfca22cc372632ace824ab7b636a8959ebfb2bb7dcae6292cce4a7b7008350cdc70c88ea1ff', ['checkOutlines']],
}
Loading