Merge pull request #1359 from justvanrossum/addmultilingualnames-mac

[name] make addMultilingualNames() add mac names by default
This commit is contained in:
Cosimo Lupo 2019-01-07 09:54:34 +00:00 committed by GitHub
commit 683547dde2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 62 additions and 12 deletions

View File

@ -161,7 +161,8 @@ class table__n_a_m_e(DefaultTable.DefaultTable):
raise ValueError("nameID must be less than 32768") raise ValueError("nameID must be less than 32768")
return nameID return nameID
def addMultilingualName(self, names, ttFont=None, nameID=None): def addMultilingualName(self, names, ttFont=None, nameID=None,
windows=True, mac=True):
"""Add a multilingual name, returning its name ID """Add a multilingual name, returning its name ID
'names' is a dictionary with the name in multiple languages, 'names' is a dictionary with the name in multiple languages,
@ -176,6 +177,9 @@ class table__n_a_m_e(DefaultTable.DefaultTable):
'nameID' is the name ID to be used, or None to let the library 'nameID' is the name ID to be used, or None to let the library
pick an unused name ID. pick an unused name ID.
If 'windows' is True, a platformID=3 name record will be added.
If 'mac' is True, a platformID=1 name record will be added.
""" """
if not hasattr(self, 'names'): if not hasattr(self, 'names'):
self.names = [] self.names = []
@ -184,15 +188,16 @@ class table__n_a_m_e(DefaultTable.DefaultTable):
# TODO: Should minimize BCP 47 language codes. # TODO: Should minimize BCP 47 language codes.
# https://github.com/fonttools/fonttools/issues/930 # https://github.com/fonttools/fonttools/issues/930
for lang, name in sorted(names.items()): for lang, name in sorted(names.items()):
# Apple platforms have been recognizing Windows names if windows:
# since early OSX (~2001), so we only add names windowsName = _makeWindowsName(name, nameID, lang)
# for the Macintosh platform when we cannot not make if windowsName is not None:
# a Windows name. This can happen for exotic BCP47 self.names.append(windowsName)
# language tags that have no Windows language code. else:
windowsName = _makeWindowsName(name, nameID, lang) # We cannot not make a Windows name: make sure we add a
if windowsName is not None: # Mac name as a fallback. This can happen for exotic
self.names.append(windowsName) # BCP47 language tags that have no Windows language code.
else: mac = True
if mac:
macName = _makeMacName(name, nameID, lang, ttFont) macName = _makeMacName(name, nameID, lang, ttFont)
if macName is not None: if macName is not None:
self.names.append(macName) self.names.append(macName)

View File

@ -109,6 +109,21 @@
</OS_2> </OS_2>
<name> <name>
<namerecord nameID="1" platformID="1" platEncID="0" langID="0x0" unicode="True">
HelloTestFont
</namerecord>
<namerecord nameID="2" platformID="1" platEncID="0" langID="0x0" unicode="True">
TotallyNormal
</namerecord>
<namerecord nameID="6" platformID="1" platEncID="0" langID="0x0" unicode="True">
HelloTestFont-TotallyNormal
</namerecord>
<namerecord nameID="1" platformID="1" platEncID="0" langID="0x4" unicode="True">
HalloTestFont
</namerecord>
<namerecord nameID="2" platformID="1" platEncID="0" langID="0x4" unicode="True">
TotaalNormaal
</namerecord>
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409"> <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
HelloTestFont HelloTestFont
</namerecord> </namerecord>

View File

@ -201,6 +201,21 @@
</glyf> </glyf>
<name> <name>
<namerecord nameID="1" platformID="1" platEncID="0" langID="0x0" unicode="True">
HelloTestFont
</namerecord>
<namerecord nameID="2" platformID="1" platEncID="0" langID="0x0" unicode="True">
TotallyNormal
</namerecord>
<namerecord nameID="6" platformID="1" platEncID="0" langID="0x0" unicode="True">
HelloTestFont-TotallyNormal
</namerecord>
<namerecord nameID="1" platformID="1" platEncID="0" langID="0x4" unicode="True">
HalloTestFont
</namerecord>
<namerecord nameID="2" platformID="1" platEncID="0" langID="0x4" unicode="True">
TotaalNormaal
</namerecord>
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409"> <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
HelloTestFont HelloTestFont
</namerecord> </namerecord>

View File

@ -177,6 +177,15 @@
</glyf> </glyf>
<name> <name>
<namerecord nameID="1" platformID="1" platEncID="0" langID="0x0" unicode="True">
HelloTestFont
</namerecord>
<namerecord nameID="2" platformID="1" platEncID="0" langID="0x0" unicode="True">
TotallyNormal
</namerecord>
<namerecord nameID="6" platformID="1" platEncID="0" langID="0x0" unicode="True">
HelloTestFont-TotallyNormal
</namerecord>
<namerecord nameID="256" platformID="1" platEncID="0" langID="0x0" unicode="True"> <namerecord nameID="256" platformID="1" platEncID="0" langID="0x0" unicode="True">
Left Left
</namerecord> </namerecord>
@ -195,6 +204,12 @@
<namerecord nameID="261" platformID="1" platEncID="0" langID="0x0" unicode="True"> <namerecord nameID="261" platformID="1" platEncID="0" langID="0x0" unicode="True">
Right Up Right Up
</namerecord> </namerecord>
<namerecord nameID="1" platformID="1" platEncID="0" langID="0x4" unicode="True">
HalloTestFont
</namerecord>
<namerecord nameID="2" platformID="1" platEncID="0" langID="0x4" unicode="True">
TotaalNormaal
</namerecord>
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409"> <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
HelloTestFont HelloTestFont
</namerecord> </namerecord>

View File

@ -93,12 +93,12 @@ class NameTableTest(unittest.TestCase):
"en": "Width", "en": "Width",
"de-CH": "Breite", "de-CH": "Breite",
"gsw-LI": "Bräiti", "gsw-LI": "Bräiti",
}, ttFont=font) }, ttFont=font, mac=False)
self.assertEqual(widthID, 256) self.assertEqual(widthID, 256)
xHeightID = nameTable.addMultilingualName({ xHeightID = nameTable.addMultilingualName({
"en": "X-Height", "en": "X-Height",
"gsw-LI": "X-Hööchi" "gsw-LI": "X-Hööchi"
}, ttFont=font) }, ttFont=font, mac=False)
self.assertEqual(xHeightID, 257) self.assertEqual(xHeightID, 257)
captor.assertRegex("cannot add Windows name in language gsw-LI") captor.assertRegex("cannot add Windows name in language gsw-LI")
self.assertEqual(names(nameTable), [ self.assertEqual(names(nameTable), [