text: 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)
  