diff --git a/Lib/ufoLib/__init__.py b/Lib/ufoLib/__init__.py index 7ebcb7a4e..768ab1f78 100755 --- a/Lib/ufoLib/__init__.py +++ b/Lib/ufoLib/__init__.py @@ -363,7 +363,7 @@ class UFOReader(object): if not self._checkForFile(path): return {} data = self._readPlist(path) - valid, message = libValidator(data) + valid, message = fontLibValidator(data) if not valid: raise UFOLibError(message) return data @@ -828,7 +828,7 @@ class UFOWriter(object): Write lib.plist. This method requires a lib dict as an argument. """ - valid, message = libValidator(libDict) + valid, message = fontLibValidator(libDict) if not valid: raise UFOLibError(message) self._makeDirectory() diff --git a/Lib/ufoLib/glifLib.py b/Lib/ufoLib/glifLib.py index 51f340139..14659e88f 100755 --- a/Lib/ufoLib/glifLib.py +++ b/Lib/ufoLib/glifLib.py @@ -19,7 +19,7 @@ from robofab.pens.pointPen import AbstractPointPen from plistlib import readPlist, writePlistToString from filenames import userNameToFileName from validators import isDictEnough, genericTypeValidator, colorValidator,\ - guidelinesValidator, anchorsValidator, identifierValidator, imageValidator, libValidator + guidelinesValidator, anchorsValidator, identifierValidator, imageValidator, glyphLibValidator try: set @@ -988,7 +988,7 @@ def _readLib(glyphObject, children): from plistFromTree import readPlistFromTree assert len(children) == 1 lib = readPlistFromTree(children[0]) - valid, message = libValidator(lib) + valid, message = glyphLibValidator(lib) if not valid: raise GlifLibError(message) _relaxedSetattr(glyphObject, "lib", lib) diff --git a/Lib/ufoLib/validators.py b/Lib/ufoLib/validators.py index 19b16fe7b..05d5e786d 100644 --- a/Lib/ufoLib/validators.py +++ b/Lib/ufoLib/validators.py @@ -891,29 +891,29 @@ def groupsValidator(value): # lib.plist/lib # ------------- -def libValidator(value): +def fontLibValidator(value): """ Check the validity of the lib. Version 3+ (though it's backwards compatible with UFO 1 and UFO 2). >>> lib = {"foo" : "bar"} - >>> libValidator(lib) + >>> fontLibValidator(lib) (True, None) >>> lib = {"public.awesome" : "hello"} - >>> libValidator(lib) + >>> fontLibValidator(lib) (True, None) >>> lib = {"public.glyphOrder" : ["A", "C", "B"]} - >>> libValidator(lib) + >>> fontLibValidator(lib) (True, None) >>> lib = {"public.glyphOrder" : "hello"} - >>> libValidator(lib) + >>> fontLibValidator(lib) (False, 'public.glyphOrder is not properly formatted.') >>> lib = {"public.glyphOrder" : ["A", 1, "B"]} - >>> libValidator(lib) + >>> fontLibValidator(lib) (False, 'public.glyphOrder is not properly formatted.') """ bogusFormatMessage = "The lib data is not in the correct format." @@ -932,6 +932,44 @@ def libValidator(value): return False, bogusGlyphOrderMessage return True, None +# -------- +# GLIF lib +# -------- + +def glyphLibValidator(value): + """ + Check the validity of the lib. + Version 3+ (though it's backwards compatible with UFO 1 and UFO 2). + + >>> lib = {"foo" : "bar"} + >>> glyphLibValidator(lib) + (True, None) + + >>> lib = {"public.awesome" : "hello"} + >>> glyphLibValidator(lib) + (True, None) + + >>> lib = {"public.markColor" : "1,0,0,0.5"} + >>> glyphLibValidator(lib) + (True, None) + + >>> lib = {"public.markColor" : 1} + >>> glyphLibValidator(lib) + (False, 'public.markColor is not properly formatted.') + """ + bogusFormatMessage = "The lib data is not in the correct format." + if not isDictEnough(value): + return False, bogusFormatMessage + for key, value in value.items(): + if not isinstance(key, basestring): + return False, bogusFormatMessage + # public.markColor + if key == "public.markColor": + if not colorValidator(value): + return False, "public.markColor is not properly formatted." + return True, None + + if __name__ == "__main__": import doctest doctest.testmod()