のねのBlog

パソコンの問題や、ソフトウェアの開発で起きた問題など書いていきます。よろしくお願いします^^。

ttx その2

ttx その2

site-packages/FontTools/fontTools/ttlib/__init__.py

def saveXML(self, fileOrPath, progress=None, 
	tables=None, skipTables=None, splitTables=0, disassembleInstructions=1):
	"""Export the font as TTX (an XML-based text file), or as a series of text
	files when splitTables is true. In the latter case, the 'fileOrPath'
	argument should be a path to a directory.
	The 'tables' argument must either be false (dump all tables) or a
	list of tables to dump. The 'skipTables' argument may be a list of tables
	to skip, but only when the 'tables' argument is false.
	"""
	from fontTools import version
	import xmlWriter
		
	self.disassembleInstructions = disassembleInstructions
	if not tables:
		tables = self.keys() <===Selfからtablesへセットされる。
                        tables	list: ['GlyphOrder', 'head', 'hhea', 'maxp',
                    'OS/2', 'hmtx', 'VDMX', 'cmap', 'loca', 'glyf',
                    'name', 'post', 'GDEF', 'GPOS', 'GSUB']	

		if "GlyphOrder" not in tables:            <== true
			tables = ["GlyphOrder"] + tables <== "GlyphOrder"も追加される
		if skipTables:                            <== false
			for tag in skipTables:
				if tag in tables:
					tables.remove(tag)
	numTables = len(tables)                            <== numTables	int: 15	
	if progress:                                       <== false  progress	NoneType: None	
		progress.set(0, numTables)
		idlefunc = getattr(progress, "idle", None)

			getattr(object, name[, default])(原文)
			指定された object の属性を返します。
			 name は文字列でなくてはなりません。
			文字列がオブジェクトの属性名の一つであった場合、
			戻り値はその属性の値になります。
			例えば、 getattr(x, 'foobar') は x.foobar と等価です。
			指定された属性が存在しない場合、
			 default が与えられている場合にはそれが返されます。
			そうでない場合には AttributeError が送出されます。
			http://docs.python.jp/2/library/functions.html#getattr

	else:
		idlefunc = None                            <==アイドル中に処理する関数らしい
		
	writer = xmlWriter.XMLWriter(fileOrPath, idlefunc=idlefunc)
	writer.begintag("ttFont", sfntVersion=`self.sfntVersion`[1:-1], 
			ttLibVersion=version)
	writer.newline()
		
	if not splitTables:                               <== True
		writer.newline()                          <==
	else:
		# 'fileOrPath' must now be a path
		path, ext = os.path.splitext(fileOrPath)
		fileNameTemplate = path + ".%s" + ext
		
	for i in range(numTables):                        <== numTables	int: 15	
		if progress:                              <== false
			progress.set(i)
		tag = tables[i]                           <==
		if splitTables:                           <== false
			tablePath = fileNameTemplate % tagToIdentifier(tag)
			tableWriter = xmlWriter.XMLWriter(tablePath, idlefunc=idlefunc)
			tableWriter.begintag("ttFont", ttLibVersion=version)
			tableWriter.newline()
			tableWriter.newline()
			writer.simpletag(tagToXML(tag), src=os.path.basename(tablePath))
			writer.newline()
		else:
			tableWriter = writer              <==①
		self._tableToXML(tableWriter, tag, progress)
		if splitTables:                           <== false
			tableWriter.endtag("ttFont")
			tableWriter.newline()
			tableWriter.close()
	if progress:                                      <== false
		progress.set((i + 1))
	writer.endtag("ttFont")
	writer.newline()
	writer.close()
	if self.verbose:
		debugmsg("Done dumping TTX")
site-packages/FontTools/fontTools/ttlib/__init__.py
①
def _tableToXML(self, writer, tag, progress):
	if self.has_key(tag):
		table = self[tag] <== 以下のようにしてself.tablesから取ってくる
	=========================
	site-packages/FontTools/fontTools/ttlib/__init__.py
			def __getitem__(self, tag):
			try:
				return self.tables[tag]
	=========================

		report = "Dumping '%s' table..." % tag <==
	else:
		report = "No '%s' table found." % tag
	if progress:                                   <== false
		progress.setLabel(report)
	elif self.verbose:                             <== false
		debugmsg(report)
	else:
		print report                           <==ここ
	if not self.has_key(tag):                      <== false
		return
	xmlTag = tagToXML(tag)                         <==
	if hasattr(table, "ERROR"):
		writer.begintag(xmlTag, ERROR="decompilation error")
	else:
		writer.begintag(xmlTag)                <==
	writer.newline()                               <==
	if tag in ("glyf", "CFF "):
		table.toXML(writer, self, progress)
	else:
		table.toXML(writer, self)
	writer.endtag(xmlTag)
	writer.newline()
	writer.newline()