# Source code for fontTools.ttLib.tables.T_S_I__5

    """ TSI{0,1,2,3,5} are private tables used by Microsoft Visual TrueType (VTT)
    tool to store its hinting source data.

    TSI5 contains the VTT character groups.

    See also https://learn.microsoft.com/en-us/typography/tools/vtt/tsi-tables
    """

    from fontTools.misc.textTools import safeEval
    from . import DefaultTable
    import sys
    import array

    class table_T_S_I__5(DefaultTable.DefaultTable):

        def decompile(self, data, ttFont):
            numGlyphs = ttFont["maxp"].numGlyphs
            assert len(data) == 2 * numGlyphs
            a = array.array("H")
            a.frombytes(data)
            if sys.byteorder != "big":
                a.byteswap()
            self.glyphGrouping = {}
            for i in range(numGlyphs):
                self.glyphGrouping[ttFont.getGlyphName(i)] = a[i]

        def compile(self, ttFont):
            glyphNames = ttFont.getGlyphOrder()
            a = array.array("H")
            for i in range(len(glyphNames)):
                a.append(self.glyphGrouping.get(glyphNames[i], 0))
            if sys.byteorder != "big":
                a.byteswap()
            return a.tobytes()

        def toXML(self, writer, ttFont):
            names = sorted(self.glyphGrouping.keys())
            for glyphName in names:
                writer.simpletag(
                    "glyphgroup", name=glyphName, value=self.glyphGrouping[glyphName]
                )
                writer.newline()

        def fromXML(self, name, attrs, content, ttFont):
            if not hasattr(self, "glyphGrouping"):
                self.glyphGrouping = {}
            if name != "glyphgroup":
                return
            self.glyphGrouping[attrs["name"]] = safeEval(attrs["value"])