# Source code for fontTools.ttLib.tables._l_t_a_g

    from fontTools.misc.textTools import bytesjoin, tobytes, safeEval
    from . import DefaultTable
    import struct

    # https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6ltag.html

    class table__l_t_a_g(DefaultTable.DefaultTable):
    	def __init__(self, tag=None):
    		DefaultTable.DefaultTable.__init__(self, tag)
    		self.version, self.flags = 1, 0
    		self.tags = []

    	def addTag(self, tag):
    		"""Add 'tag' to the list of langauge tags if not already there.

    		Returns the integer index of 'tag' in the list of all tags.
    		"""
    		try:
    			return self.tags.index(tag)
    		except ValueError:
    			self.tags.append(tag)
    			return len(self.tags) - 1

    	def decompile(self, data, ttFont):
    		self.version, self.flags, numTags = struct.unpack(">LLL", data[:12])
    		assert self.version == 1
    		self.tags = []
    		for i in range(numTags):
    			pos = 12 + i * 4
    			offset, length = struct.unpack(">HH", data[pos:pos+4])
    			tag = data[offset:offset+length].decode("ascii")
    			self.tags.append(tag)

    	def compile(self, ttFont):
    		dataList = [struct.pack(">LLL", self.version, self.flags, len(self.tags))]
    		stringPool = ""
    		for tag in self.tags:
    			offset = stringPool.find(tag)
    			if offset < 0:
    				offset = len(stringPool)
    				stringPool = stringPool + tag
    			offset = offset + 12 + len(self.tags) * 4
    			dataList.append(struct.pack(">HH", offset, len(tag)))
    		dataList.append(tobytes(stringPool))
    		return bytesjoin(dataList)

    	def toXML(self, writer, ttFont):
    		writer.simpletag("version", value=self.version)
    		writer.newline()
    		writer.simpletag("flags", value=self.flags)
    		writer.newline()
    		for tag in self.tags:
    			writer.simpletag("LanguageTag", tag=tag)
    			writer.newline()

    	def fromXML(self, name, attrs, content, ttFont):
    		if not hasattr(self, "tags"):
    			self.tags = []
    		if name == "LanguageTag":
    			self.tags.append(attrs["tag"])
    		elif "value" in attrs:
    			value =  safeEval(attrs["value"])
    			setattr(self, name, value)