のねのBlog

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

ttx その1

ttx その1

Scripts/ttx

def _dummy():
	from encodings import latin_1, utf_8, utf_16_be


import sys
from fontTools import ttx

ttx.main(sys.argv[1:])  <===== ①
site-packages/FontTools/fontTools/ttx.py

def main(args):
	jobs, options = parseOptions(args) <=====②
	try:
		process(jobs, options) <===== ④
	except KeyboardInterrupt:
		print "(Cancelled.)"
	except SystemExit:
		if sys.platform == "win32":
			waitForKeyPress()
		else:
			raise
	except:
		if sys.platform == "win32":
			import traceback
			traceback.print_exc()
			waitForKeyPress()
		else:
			raise
site-packages/FontTools/fontTools/ttx.py

②
def parseOptions(args):
	try:
		rawOptions, files = getopt.getopt(args, "ld:o:vht:x:sim:baey:")
	except getopt.GetoptError:
		usage()
	
	if not files:
		usage()
	
	options = Options(rawOptions, len(files))  <== ③Opetionsになる
	jobs = []                                  <== リストになる
	
	for input in files:
		tp = guessFileType(input)      <== tp=str:"TTF"
		if tp in ("OTF", "TTF", "TTC"): <== true
			extension = ".ttx"      <== ここをとおる
			if options.listTables:  <== false
				action = ttList
			else:
				action = ttDump <==ここを通る。ttDumpに決定
		elif tp == "TTX":
			extension = ".ttf"
			action = ttCompile
		elif tp == "OTX":
			extension = ".otf"
			action = ttCompile
		else:
			print 'Unknown file type: "%s"' % input
			continue
		
		if options.outputFile:        <== false 次はここを通る
			output = options.outputFile
		else:
			output = makeOutputFileName(input, options.outputDir, extension) <== ここ
		jobs.append((action, input, output)) <== jobsに3つセットする
	return jobs, options

Optionsはこれ

site-packages/FontTools/fontTools/ttx.py

③
class Options:

	listTables = 0
	outputDir = None
	outputFile = None
	verbose = 0
	splitTables = 0
	disassembleInstructions = 1
	mergeFile = None
	recalcBBoxes = 1
	allowVID = 0
	ignoreDecompileErrors = True

	def __init__(self, rawOptions, numFiles):
		self.onlyTables = []
		self.skipTables = []
		self.fontNumber = -1
		for option, value in rawOptions:
			# general options
			if option == "-h":
				print __doc__ % version
				sys.exit(0)
			elif option == "-d":
				if not os.path.isdir(value):
					print "The -d option value must be an existing directory"
					sys.exit(2)
				self.outputDir = value
			elif option == "-o":
				self.outputFile = value
			elif option == "-v":
				self.verbose = 1
			# dump options
			elif option == "-l":
				self.listTables = 1
			elif option == "-t":
				self.onlyTables.append(value)
			elif option == "-x":
				self.skipTables.append(value)
			elif option == "-s":
				self.splitTables = 1
			elif option == "-i":
				self.disassembleInstructions = 0
			elif option == "-y":
				self.fontNumber = int(value)
			# compile options
			elif option == "-m":
				self.mergeFile = value
			elif option == "-b":
				self.recalcBBoxes = 0
			elif option == "-a":
				self.allowVID = 1
			elif option == "-e":
				self.ignoreDecompileErrors = False
		if self.onlyTables and self.skipTables:
			print "-t and -x options are mutually exclusive"
			sys.exit(2)
		if self.mergeFile and numFiles > 1:
			print "Must specify exactly one TTX source file when using -m"
			sys.exit(2)
site-packages/FontTools/fontTools/ttx.py
④
def process(jobs, options): 
	for action, input, output in jobs:
		action(input, output, options) <==⑤ 0個めのactionはttdump
site-packages/FontTools/fontTools/ttx.py
⑤
def ttDump(input, output, options):
	print 'Dumping "%s" to "%s"...' % (input, output)
	ttf = TTFont(input, 0, verbose=options.verbose, allowVID=options.allowVID, <== TTFontオブジェクトを作成
			ignoreDecompileErrors=options.ignoreDecompileErrors,
			fontNumber=options.fontNumber)
	ttf.saveXML(output,                            <==⑥
			tables=options.onlyTables,
			skipTables=options.skipTables, 
			splitTables=options.splitTables,
			disassembleInstructions=options.disassembleInstructions)
	ttf.close()