예제 #1
0
def printRange(rangeName, toFile=None):
    out = [
        "{0:<50s}{1:<30}{2:<30}{3}{4:<5}{5}".format("Generated Name", "AGD", "Glyphs", "uni    ", " ", "uni name"),
        ""

    ]
    for u in range(*_rangeNameToRange(rangeName)):
        g = GlyphName(uniNumber=u)
        name = g.getName()
        if name is None:
            continue
        AGDName = unicode2name_AGD.get(g.uniNumber)
        if AGDName is None:
            AGDName = "-"
        elif AGDName == name:
            AGDName = u"�"
        GLYPHSName = unicode2name_GLYPHS.get(g.uniNumber)
        if GLYPHSName is None:
            GLYPHSName = "-"
        elif GLYPHSName == name:
            GLYPHSName = ""
        txt = name.ljust(50)
        txt += AGDName.ljust(30)
        txt += GLYPHSName.ljust(30)
        txt += "%04X   " % g.uniNumber
        txt += g.uniLetter.ljust(5)
        txt += g.uniName
        out.append(txt)
    out = "\n".join(out)
    if toFile:
        toFile.write(out)
    else:
        print(out)
    testDoubles(rangeName, toFile)
    testGLIFFileName(rangeName, toFile)
예제 #2
0
def printRange(rangeName, toFile=None):
    out = []
    for u in range(*_rangeNameToRange(rangeName)):
        g = GlyphName(uniNumber=u)
        name = g.getName()
        if name is None:
            continue
        AGDName = unicode2name_AGD.get(g.uniNumber)
        if AGDName is None:
            AGDName = "-"
        elif AGDName == name:
            AGDName = u"👍"
        txt = name.ljust(50)
        txt += AGDName.ljust(30)
        txt += "%04X   " % g.uniNumber
        txt += g.uniLetter.ljust(5)
        txt += g.uniName
        out.append(txt)
    out = "\n".join(out)
    out = out.encode("utf-8")
    if toFile:
        toFile.write(out)
    else:
        print(out)
    testDoubles(rangeName, toFile)
    testGLIFFileName(rangeName, toFile)
def generateFlat(path,
                 onlySupported=True,
                 scriptSeparator=None,
                 scriptAsPrefix=None,
                 status=0,
                 includeUnicodeCategory=False):
    data = [
        "# Glyph Name Formatted Unicode List - GNFUL",
        "# GlyphNameFormatter version %s" % _versionNumber,
        "# Unicode version: %s" % unicodeVersion,
        "# Source code: %s" % _githubLink,
        "# Generated on %s" % time.strftime("%Y %m %d %H:%M:%S"),
    ]
    if includeUnicodeCategory:
        data.append("# <glyphName> <hex unicode> <unicodeCategory>")
    else:
        data.append("# <glyphName> <hex unicode>")
    if scriptSeparator is not None:
        data.append("# Separator \"%s\"" % scriptSeparator)
    if scriptAsPrefix is not None:
        data.append("# Prefixed \"%s\"" % scriptAsPrefix)
    data.append("#")
    for rangeName in getAllRangeNames():
        if onlySupported:
            moduleName = rangeNameToModuleName(rangeName)
            try:
                module = importlib.import_module(
                    'glyphNameFormatter.rangeProcessors.%s' % moduleName)
            except:
                continue
        data.append("# %s" % rangeName)
        start, end = getRangeByName(rangeName)
        for u in range(start, end + 1):
            g = GlyphName(uniNumber=u,
                          scriptSeparator=scriptSeparator,
                          scriptAsPrefix=scriptAsPrefix)
            g.compress()  # should auto compress
            if status is not None:
                if g.status < status:
                    # if the glyph has a status that is less than what we're looking for
                    # then do not include it in the list.
                    continue
            name = g.getName(extension=True)
            if name is None:
                continue
            if includeUnicodeCategory:
                data.append("%s %04X %s" %
                            (name, u, unicodeCategories.get(u, "-")))
            else:
                data.append("%s %04X" % (name, u))

    f = open(path, "w")
    f.write("\n".join(data))
    f.close()
def generateFlat(path, onlySupported=True, scriptSeparator=None, scriptAsPrefix=None, status=0, includeUnicodeCategory=False):
    data = [
        "# Glyph Name Formatted Unicode List - GNFUL",
        "# GlyphNameFormatter version %s" % _versionNumber,
        "# Unicode version: %s" % unicodeVersion,
        "# Source code: %s" % _githubLink,
        "# Generated on %s" % time.strftime("%Y %m %d %H:%M:%S"),
    ]
    if includeUnicodeCategory:
        data.append("# <glyphName> <hex unicode> <unicodeCategory>")
    else:
        data.append("# <glyphName> <hex unicode>")
    if scriptSeparator is not None:
        data.append("# Separator \"%s\"" % scriptSeparator)
    if scriptAsPrefix is not None:
        data.append("# Prefixed \"%s\"" % scriptAsPrefix)
    data.append("#")
    for rangeName in getAllRangeNames():
        if onlySupported:
            moduleName = rangeNameToModuleName(rangeName)
            try:
                module = importlib.import_module('glyphNameFormatter.rangeProcessors.%s' % moduleName)
            except:
                continue
        data.append("# %s" % rangeName)
        start, end = getRangeByName(rangeName)
        for u in range(start, end+1):
            g = GlyphName(uniNumber=u, scriptSeparator=scriptSeparator, scriptAsPrefix=scriptAsPrefix)
            g.compress()  # should auto compress
            if status is not None:
                if g.status < status:
                    # if the glyph has a status that is less than what we're looking for
                    # then do not include it in the list.
                    continue
            name = g.getName(extension=True)
            if name is None:
                continue
            if includeUnicodeCategory:
                data.append("%s %04X %s" % (name, u, unicodeCategories.get(u, "-")))
            else:
                data.append("%s %04X" % (name, u))


    f = open(path, "w")
    f.write("\n".join(data))
    f.close()
예제 #5
0
def testGLIFFileName(rangeName, toFile=None):
    """
    test on glif file name
    """
    # support both UFO2 as UFO3
    try:
        # UFO3 ufoLib
        from ufoLib.filenames import userNameToFileName

        def nameToFileName(name):
            return userNameToFileName(unicode(name))
    except:
        # UFO2 robofab
        from robofab.tools.glyphNameSchemes import glyphNameToShortFileName

        def nameToFileName(name):
            return glyphNameToShortFileName(name, None)
    existing = set()
    doubles = set()
    r = _rangeNameToRange(rangeName)
    for u in range(*r):
        g = GlyphName(uniNumber=u)
        name = g.getName()
        if name is None:
            # ignore
            continue
        glifFileName = nameToFileName(name)
        if glifFileName in existing:
            doubles.add(glifFileName)
        else:
            existing.add(glifFileName)
    if doubles:
        rangeText = "%04X - %04X" % (r[0], r[1])
        txt = "\n\ndouble glif file names for range %s:\n\t%s" % (rangeText, "\n\t".join(sorted(doubles)))

        if toFile:
            toFile.write(txt)
        else:
            print(txt)
예제 #6
0
def testGLIFFileName(rangeName, toFile=None):
    """
    test on glif file name
    """
    # support both UFO2 as UFO3
    try:
        # UFO3 ufoLib
        from fontTools.ufoLib.filenames import userNameToFileName

        def nameToFileName(name):
            return userNameToFileName(name)
    except:
        # UFO2 robofab
        from robofab.tools.glyphNameSchemes import glyphNameToShortFileName

        def nameToFileName(name):
            return glyphNameToShortFileName(name, None)
    existing = set()
    doubles = set()
    r = _rangeNameToRange(rangeName)
    for u in range(*r):
        g = GlyphName(uniNumber=u)
        name = g.getName()
        if name is None:
            # ignore
            continue
        glifFileName = nameToFileName(name)
        if glifFileName in existing:
            doubles.add(glifFileName)
        else:
            existing.add(glifFileName)
    if doubles:
        rangeText = "%04X - %04X" % (r[0], r[1])
        txt = "\n\ndouble glif file names for range %s:\n\t%s" % (rangeText, "\n\t".join(sorted(doubles)))

        if toFile:
            toFile.write(txt)
        else:
            print(txt)
예제 #7
0
def generateFlat(path, onlySupported=True):
    data = [
        "# format",
        "# <glyphName> <hex unicode>"
    ]
    for rangeName in getAllRangeNames():
        if onlySupported:
            moduleName = rangeNameToModuleName(rangeName)
            try:
                module = importlib.import_module('glyphNameFormatter.rangeProcessors.%s' % moduleName)
            except:
                continue
        data.append("# %s" % rangeName)
        for u in range(*getRangeByName(rangeName)):
            g = GlyphName(uniNumber=u)
            name = g.getName(extension=True)
            if name is None:
                continue
            data.append("%s %04X" % (name, u))

    f = open(path, "w")
    f.write("\n".join(data))
    f.close()
예제 #8
0
def printRange(rangeName, toFile=None):
    out = [
        "{0:<50s}{1:<30}{2:<30}{3}{4:<5}{5}".format("Generated Name", "AGD", "Glyphs", "uni    ", " ", "uni name"),
        ""

    ]
    for u in range(*_rangeNameToRange(rangeName)):
        g = GlyphName(uniNumber=u)
        name = g.getName()
        if name is None:
            continue
        AGDName = unicode2name_AGD.get(g.uniNumber)
        if AGDName is None:
            AGDName = "-"
        elif AGDName == name:
            AGDName = u"�"
        GLYPHSName = unicode2name_GLYPHS.get(g.uniNumber)
        if GLYPHSName is None:
            GLYPHSName = "-"
        elif GLYPHSName == name:
            GLYPHSName = ""
        txt = name.ljust(50)
        txt += AGDName.ljust(30)
        txt += GLYPHSName.ljust(30)
        txt += "%04X   " % g.uniNumber
        txt += g.uniLetter.ljust(5)
        txt += g.uniName
        out.append(txt)
    out = "\n".join(out)
    if PY2:
        out = out.encode("utf-8")
    if toFile:
        toFile.write(out)
    else:
        print(out)
    testDoubles(rangeName, toFile)
    testGLIFFileName(rangeName, toFile)
예제 #9
0
def testDoubles(rangeName, toFile=None):
    """
    test if there are doubles
    """
    names = set()
    doubles = set()
    r = _rangeNameToRange(rangeName)
    for u in range(*r):
        g = GlyphName(uniNumber=u)
        name = g.getName()
        if name is None:
            # ignore
            continue
        if name in names:
            doubles.add(name)
        else:
            names.add(name)
    if doubles:
        rangeText = "%04X - %04X" % (r[0], r[1])
        txt = "\n\ndouble names for range %s:\n\t%s" % (rangeText, "\n\t".join(sorted(doubles)))
        if toFile:
            toFile.write(txt)
        else:
            print(txt)
예제 #10
0
def testDoubles(rangeName, toFile=None):
    """
    test if there are doubles
    """
    names = set()
    doubles = set()
    r = _rangeNameToRange(rangeName)
    for u in range(*r):
        g = GlyphName(uniNumber=u)
        name = g.getName()
        if name is None:
            # ignore
            continue
        if name in names:
            doubles.add(name)
        else:
            names.add(name)
    if doubles:
        rangeText = "%04X - %04X" % (r[0], r[1])
        txt = "\n\ndouble names for range %s:\n\t%s" % (rangeText, "\n\t".join(sorted(doubles)))
        if toFile:
            toFile.write(txt)
        else:
            print(txt)
예제 #11
0
        if name is None:
            # ignore
            continue
        glifFileName = nameToFileName(name)
        if glifFileName in existing:
            doubles.add(glifFileName)
        else:
            existing.add(glifFileName)
    if doubles:
        rangeText = "%04X - %04X" % (r[0], r[1])
        txt = "\n\ndouble glif file names for range %s:\n\t%s" % (rangeText, "\n\t".join(sorted(doubles)))

        if toFile:
            toFile.write(txt)
        else:
            print(txt)


if __name__ == "__main__":
    from glyphNameFormatter.unicodeRangeNames import getAllRangeNames

    # time test
    import time
    t = time.time()
    for rangeName in getAllRangeNames():
        r = _rangeNameToRange(rangeName)
        for u in range(*r):
            g = GlyphName(uniNumber=u)
            name = g.getName()
    print(time.time() - t)
예제 #12
0
        if name is None:
            # ignore
            continue
        glifFileName = nameToFileName(name)
        if glifFileName in existing:
            doubles.add(glifFileName)
        else:
            existing.add(glifFileName)
    if doubles:
        rangeText = "%04X - %04X" % (r[0], r[1])
        txt = "\n\ndouble glif file names for range %s:\n\t%s" % (rangeText, "\n\t".join(sorted(doubles)))

        if toFile:
            toFile.write(txt)
        else:
            print(txt)


if __name__ == "__main__":
    from glyphNameFormatter.unicodeRangeNames import getAllRangeNames

    # time test
    import time
    t = time.time()
    for rangeName in getAllRangeNames():
        r = _rangeNameToRange(rangeName)
        for u in range(*r):
            g = GlyphName(uniNumber=u)
            name = g.getName()
    print(time.time() - t)
            self.replace('FINAL FORM', "fina")
            self.replace('ISOLATED FORM', "isol")
            self.replace('WITH SUPERSCRIPT', "")
            self.replace('WITH', "")
            self.replace("LIGATURE", "")
            self.replace("ARABIC", "")
            self.replace("SYMBOL", "")
            self.replace("LETTER", "")
            self.lower()
            self.camelCase()
            return True

    return False


if __name__ == "__main__":
    from glyphNameFormatter import GlyphName

    print("\ndoNotProcessAsLigatureRanges", doNotProcessAsLigatureRanges)
    odd = 0xfe76
    for a, b in doNotProcessAsLigatureRanges:
        for u in range(a, b + 1):
            try:
                g = GlyphName(uniNumber=u)
                n = g.getName()
                print(hex(u), n, g.uniName)

            except:
                import traceback
                traceback.print_exc()
예제 #14
0
        lines = namFile.read()
        for line in lines.split("\n"):
            if len(line):
                if line.startswith(" "):
                    unistr = None
                    character = None
                    description = None
                    name = line.replace(" ", "")
                elif line.startswith("0x"):
                    lineSplit = line.split(" ")
                    unistr = lineSplit[0]
                    uni = int(unistr, 16)
                    character = lineSplit[1]
                    description = " ".join(lineSplit[2:])
                    gn = GlyphName(uni)
                    name = gn.getName()
                # Format the entry
                if not name in allNames:
                    if not name or not name.endswith(".sc"):
                        allGlyphInfo.append([
                            name, unistr, character, description, namCategory,
                            optional
                        ])
                        allNames.append(name)

# My custom sorting order for GF-latin-core
sortOrder = "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z zero one two three four five six seven eight nine period comma colon semicolon periodcentered ellipsis exclam exclamdown question questiondown quotesingle quotedbl quoteleft quoteright quotesinglbase quotedblleft quotedblright quotedblbase guilsinglleft guilsinglright guillemetleft guillemetright parenleft parenright bracketleft bracketright braceleft braceright slash bar brokenbar backslash fraction divisionslash bullet hyphen hyphensoft endash emdash underscore plus minus multiply divide plusminus equal less greater logicalnot mu.math asterisk asciicircum asciitilde percent degree onesuperior twosuperior threesuperior four.superior onequarter onehalf threequarters ordmasculine ordfeminine copyright registered at numbersign dollar cent sterling yen Euro currency ampersand section paragraph dieresis grave macron acute cedilla circumflex ring tilde dieresis.cap grave.cap macron.cap acute.cap cedilla.cap circumflex.cap ring.cap tilde.cap Agrave Aacute Acircumflex Atilde Adieresis Aring AE Ccedilla Egrave Eacute Ecircumflex Edieresis Igrave Iacute Icircumflex Idieresis Eth Ntilde Ograve Oacute Ocircumflex Otilde Odieresis Oslash OE Ugrave Uacute Ucircumflex Udieresis Yacute Ydieresis Thorn germandbls agrave aacute acircumflex atilde adieresis aring ae ccedilla egrave eacute ecircumflex edieresis igrave iacute icircumflex idieresis dotlessi eth ntilde ograve oacute ocircumflex otilde odieresis oslash oe ugrave uacute ucircumflex udieresis yacute thorn ydieresis space nbspace NULL CR"
sortOrder = sortOrder.split(" ")

# Apply index values temporarly, for sorting
lastIdx = len(sortOrder) + 1
            self.replace('FINAL FORM', "fina")
            self.replace('ISOLATED FORM', "isol")
            self.replace('WITH SUPERSCRIPT', "")
            self.replace('WITH', "")
            self.replace("LIGATURE", "")
            self.replace("ARABIC", "")
            self.replace("SYMBOL", "")
            self.replace("LETTER", "")
            self.lower()
            self.camelCase()
            return True

    return False


if __name__ == "__main__":
    from glyphNameFormatter import GlyphName

    print("\ndoNotProcessAsLigatureRanges", doNotProcessAsLigatureRanges)
    odd = 0xfe76
    for a, b in doNotProcessAsLigatureRanges:
        for u in range(a,b+1):
            try:
                g = GlyphName(uniNumber=u)
                n = g.getName()
                print(hex(u), n, g.uniName)
                
            except:
                import traceback
                traceback.print_exc()
예제 #16
0
def process(self):
    self.edit("GREEK PROSGEGRAMMENI", "iotaadscript")
    self.processAs("Greek and Coptic")
    self.compress()

if __name__ == "__main__":
    from glyphNameFormatter.exporters import printRange
    printRange("Greek Extended")

    # https://github.com/LettError/glyphNameFormatter/issues/38
    from glyphNameFormatter import GlyphName
    g = GlyphName(0x1FBE)
    assert g.getName() == "iotaadscript"