示例#1
0
def add_name(font, string, nameID):
    nameTable = font.get("name")
    if nameTable is None:
        nameTable = font["name"] = table__n_a_m_e()
        nameTable.names = []
    namerec = NameRecord()
    namerec.nameID = nameID
    namerec.string = string.encode('mac_roman')
    namerec.platformID, namerec.platEncID, namerec.langID = (1, 0, 0)
    nameTable.names.append(namerec)
示例#2
0
def AddName(font, name):
    nameTable = font.get("name")
    if nameTable is None:
        nameTable = font["name"] = table__n_a_m_e()
        nameTable.names = []
    namerec = NameRecord()
    namerec.nameID = 1 + max([n.nameID for n in nameTable.names] + [256])
    namerec.string = name.encode('mac_roman')
    namerec.platformID, namerec.platEncID, namerec.langID = (1, 0, 0)
    nameTable.names.append(namerec)
    return namerec
示例#3
0
    def getOrCreateNameRecord(self, nameId, val):
        logger.error('NAMEID {}: "{}"'.format(nameId, val))
        return

        result_namerec = None
        for k, p in [[1, 0], [3, 1]]:
            result_namerec = self.font['name'].getName(nameId, k, p)
            if result_namerec:
                result_namerec.string = (val or '').encode(
                    result_namerec.getEncoding())

        if result_namerec:
            return result_namerec

        ot_namerecord = NameRecord()
        ot_namerecord.nameID = nameId
        ot_namerecord.platformID = 3
        ot_namerecord.langID = 0x409
        # When building a Unicode font for Windows, the platform ID
        # should be 3 and the encoding ID should be 1
        ot_namerecord.platEncID = 1
        ot_namerecord.string = (val or '').encode(ot_namerecord.getEncoding())

        self.font['name'].names.append(ot_namerecord)
        return ot_namerecord
def nameTableTweak(font):
    from fontTools.ttLib.tables._n_a_m_e import NameRecord, table__n_a_m_e
    nameIDs = [(16, 1, 0, 0), (17, 1, 0, 0)]
    nameTable = font["name"]

    for n in nameIDs:
        nameRecord = nameTable.getName(n[0], n[1], n[2], n[3])
        if nameRecord is not None:
            nameTable.names.remove(nameRecord)

    nameIDs = [(4, 1, 0, 0), (4, 3, 1, 1033)]
    nameTable = font["name"]

    nameRecord = nameTable.getName(4, 1, 0, 0)
    if nameRecord is not None:
        if "Italic" in nameRecord.string:
            for n in nameIDs:
                nameRecord = nameTable.getName(n[0], n[1], n[2], n[3])
                if nameRecord is not None:
                    s = nameRecord.string
                    nameTable.names.remove(nameRecord)
                    record = NameRecord()
                    record.nameID = n[0]
                    record.platformID = n[1]
                    record.platEncID = n[2]
                    record.langID = n[3]
                    if n[1] == 3:
                        record.string = s[:-8]
                    else:
                        record.string = s[:-4]
                    nameTable.names.append(record)
示例#5
0
def versionClean(font):
    from fontTools.ttLib.tables._n_a_m_e import NameRecord, table__n_a_m_e

    nameIDs = [(5, 1, 0, 0), (5, 3, 1, 1033)]
    nameTable = font["name"]

    for n in nameIDs:
        nameRecord = nameTable.getName(n[0], n[1], n[2], n[3])
        s = nameRecord.string
        nameTable.names.remove(nameRecord)

        parts = s.split(';')

        s = ''
        for p in parts:
            if p != 'PS (version unavailable)':
                s = s + p + ';'
        s = s[:-1]

        record = NameRecord()
        record.nameID = n[0]
        record.platformID = n[1]
        record.platEncID = n[2]
        record.langID = n[3]
        record.string = s
        nameTable.names.append(record)
示例#6
0
 def getName(self, *args, **kwargs):
     record = NameRecord()
     record.nameID = 16
     record.platformID = 1
     record.platEncID = 0
     record.string = 'Gaa'
     return record
示例#7
0
 def _add_name_record(self, text, name_id, platform_id, plat_enc_id,
                      lang_id):
     # TODO: The installed version of fontTools doesn't have
     # table__n_a_m_e.setName().
     record = NameRecord()
     # PyYAML creates strings, force to Unicode
     record.string = unicode(text)
     record.nameID = name_id
     record.platformID = platform_id
     record.platEncID = plat_enc_id
     record.langID = lang_id
     self.name_table.names.append(record)
示例#8
0
 def _add_name_record(self, text, name_id, platform_id, plat_enc_id,
                      lang_id):
     # TODO: The installed version of fontTools doesn't have
     # table__n_a_m_e.setName().
     record = NameRecord()
     # PyYAML creates strings, which are unicode as of Python3
     if sys.version_info.major == 2:
         text = unicode(text)
     record.string = text
     record.nameID = name_id
     record.platformID = platform_id
     record.platEncID = plat_enc_id
     record.langID = lang_id
     self.name_table.names.append(record)
def setValidNameRecord(font, nameId, val):
    result_namerec = None
    for k, p in [[1, 0], [3, 1]]:
        result_namerec = font['name'].getName(nameId, k, p)
        if result_namerec:
            result_namerec.string = (val or '').encode(result_namerec.getEncoding())
    if result_namerec:
        return

    ot_namerecord = NameRecord()
    ot_namerecord.nameID = nameId
    ot_namerecord.platformID = 3
    ot_namerecord.langID = 0x409
    # When building a Unicode font for Windows, the platform ID
    # should be 3 and the encoding ID should be 1
    ot_namerecord.platEncID = 1
    ot_namerecord.string = (val or '').encode(ot_namerecord.getEncoding())

    font['name'].names.append(ot_namerecord)
    return
示例#10
0
def findOrCreateNameRecord(nametable,
                           nameId,
                           platformId=3,
                           langId=0x409,
                           platEncId=1):
    result_namerec = nametable.getName(nameId, platformId, platEncId)
    if result_namerec:
        return result_namerec

    ot_namerecord = NameRecord()
    ot_namerecord.nameID = nameId
    ot_namerecord.platformID = platformId
    ot_namerecord.langID = langId

    # When building a Unicode font for Windows, the platform ID
    # should be 3 and the encoding ID should be 1
    ot_namerecord.platEncID = platEncId

    nametable.names.append(ot_namerecord)
    return ot_namerecord
示例#11
0
def versionClean(font):
    from fontTools.ttLib.tables._n_a_m_e import NameRecord, table__n_a_m_e

    nameIDs = [(5, 1, 0, 0), (5, 3, 1, 1033)]
    nameTable = font["name"]

    for n in nameIDs:
        nameRecord = nameTable.getName(n[0], 1, 0, 0)
        s = nameRecord.string
        nameTable.names.remove(nameTable.getName(n[0], n[1], n[2], n[3]))

        parts = s.split(';')
        if nameTable.getName(4, 1, 0, 0) is not None:
            f = parts[0] + '; ' + nameTable.getName(4, 1, 0, 0).string
        if n[1] == 3:
            f = _convert_line_endings(f, 2)
            f = f.encode("utf_16_be")
        record = NameRecord()
        record.nameID = n[0]
        record.platformID = n[1]
        record.platEncID = n[2]
        record.langID = n[3]
        record.string = f
        nameTable.names.append(record)
    def setupTable_name(self):
        """
        Make the name table.

        **This should not be called externally.** Subclasses
        may override or supplement this method to handle the
        table creation in a different way if desired.
        """

        font = self.ufo

        familyName = getAttrWithFallback(font.info, "styleMapFamilyName")
        styleName = getAttrWithFallback(font.info, "styleMapStyleName").title()

        # If name ID 2 is "Regular", it can be omitted from name ID 4
        fullName = familyName
        if styleName != "Regular":
            fullName += " %s" % styleName

        nameVals = {
            "0": getAttrWithFallback(font.info, "copyright"),
            "1": familyName,
            "2": styleName,
            "3": getAttrWithFallback(font.info, "openTypeNameUniqueID"),
            "4": fullName,
            "5": getAttrWithFallback(font.info, "openTypeNameVersion"),
            "6": getAttrWithFallback(font.info, "postscriptFontName"),
            "7": getAttrWithFallback(font.info, "trademark"),
            "8": getAttrWithFallback(font.info, "openTypeNameManufacturer"),
            "9": getAttrWithFallback(font.info, "openTypeNameDesigner"),
            "10": getAttrWithFallback(font.info, "openTypeNameDescription"),
            "11": getAttrWithFallback(font.info,
                                      "openTypeNameManufacturerURL"),
            "12": getAttrWithFallback(font.info, "openTypeNameDesignerURL"),
            "13": getAttrWithFallback(font.info, "openTypeNameLicense"),
            "14": getAttrWithFallback(font.info, "openTypeNameLicenseURL")
        }

        # don't add typographic names if they are the same as the legacy ones
        typographicFamilyName = getAttrWithFallback(
            font.info, "openTypeNamePreferredFamilyName")
        typographicSubfamilyName = getAttrWithFallback(
            font.info, "openTypeNamePreferredSubfamilyName")
        if nameVals["1"] != typographicFamilyName:
            nameVals["16"] = typographicFamilyName
        if nameVals["2"] != typographicSubfamilyName:
            nameVals["17"] = typographicSubfamilyName

        self.otf["name"] = name = newTable("name")
        name.names = []
        for nameId in sorted(nameVals.keys()):
            nameVal = nameVals[nameId]
            if not nameVal:
                continue
            nameIdVal = int(nameId)
            if nameIdVal == 6:
                # postscript font name
                nameVal = normalizeStringForPostscript(nameVal)
            rec = NameRecord()
            rec.platformID = 3
            rec.platEncID = 10 if _isNonBMP(nameVal) else 1
            rec.langID = 0x409
            rec.nameID = nameIdVal
            rec.string = nameVal.encode(rec.getEncoding())
            name.names.append(rec)
示例#13
0
def set_name_record(font, record_id, value, addIfMissing=''):
    """Sets a record in the 'name' table to a given string.

    Assumes that the record already exists. If it doesn't, it only adds it
    if addIfMissing is set.  Pass 'win' to add a record in 3/1/0x409 (win UCS2 en-US)
    and/or 'mac' to add a record in 1/0/0 (mac-roman English), separate by comma
    if you want both.

    If 'value' is None, the name record is dropped."""
    records_to_drop = set()
    names = font['name'].names
    added = []
    for record_number, record in enumerate(names):
        name_ids = (record.platformID, record.platEncID, record.langID)
        if name_ids not in [(3, 1, 0x409), (1, 0, 0)]:
            continue
        if record.nameID == record_id:
            if value is None:
                records_to_drop.add(record_number)
            else:
                if name_ids == (1, 0, 0):
                    record.string = value.encode('mac-roman')
                    added.append('mac')
                else:  # (3, 1, 0x409)
                    record.string = value.encode('UTF-16BE')
                    added.append('win')

    if addIfMissing and value:
        for key in addIfMissing.split(','):
            if key in added:
                continue

            if key == 'win':
                nr = NameRecord()
                nr.nameID = record_id
                nr.platformID = 3
                nr.platEncID = 1
                nr.langID = 0x409
                nr.string = value.encode('UTF-16BE')
            elif key == 'mac':
                nr = NameRecord()
                nr.nameID = record_id
                nr.platformID = 1
                nr.platEncID = 0
                nr.langID = 0
                nr.string = value.encode('mac-roman')
            else:
                nr = None

            if nr:
                names.append(nr)

    if records_to_drop:
        font['name'].names = [
            record for record_number, record in enumerate(names)
            if record_number not in records_to_drop
        ]
示例#14
0
def main():
    args = parser.parse_args()
    font = ttLib.TTFont(args.ttf_font)

    print('[INFO] Fixing name table...')
    #print(font)
    #print(font['name'])
    #nameTable = font['name'].names
    #print(nameTable)

    print('[INFO] Adding new records...')
    sixteen = NameRecord()
    sixteen.nameID = 16
    sixteen.platformID = 0
    sixteen.platEncID = 1
    sixteen.langID = 0x409
    sixteen.string = 'Lemonada'
    seventeen = NameRecord()
    seventeen.nameID = 17
    seventeen.platformID = 0
    seventeen.platEncID = 1
    seventeen.langID = 0x409
    seventeen.string = 'Regular'
    font['name'].names.append(sixteen)
    font['name'].names.append(seventeen)
    font.save(args.ttf_font)

    print('[INFO] Done fixing name table...')