* src/tools/*.py: Migrate to Python 3.

Fixes #1185, closes !205. Formatting changes according to PEP8.
This commit is contained in:
Azamat Hackimov 2022-09-28 22:35:49 -04:00 committed by Alexei Podtelezhnikov
parent df2601395f
commit 3f3427c6f3
3 changed files with 708 additions and 711 deletions

View File

@ -1,11 +1,10 @@
#!/usr/bin/env python
#!/usr/bin/env python3
#
# Check trace components in FreeType 2 source.
# Author: suzuki toshiya, 2009, 2013, 2020
#
# This code is explicitly into the public domain.
import sys
import os
import re
@ -18,33 +17,35 @@ SRC_FILE_DIRS = [ "src" ]
TRACE_DEF_FILES = ["include/freetype/internal/fttrace.h"]
def usage():
print("Usage: %s [option]" % sys.argv[0])
print("Search used-but-defined and defined-but-not-used trace_XXX macros")
print("")
print(" --help:")
print(" Show this help")
print("")
print(" --src-dirs=dir1:dir2:...")
print(" Specify the directories of C source files to be checked")
print(" Default is %s" % ":".join(SRC_FILE_DIRS))
print("")
print(" --def-files=file1:file2:...")
print(" Specify the header files including FT_TRACE_DEF()")
print(" Default is %s" % ":".join(TRACE_DEF_FILES))
print("")
# --------------------------------------------------------------
# Parse command line options
#
for i in range(1, len(sys.argv)):
if sys.argv[i].startswith("--help"):
print "Usage: %s [option]" % sys.argv[0]
print "Search used-but-defined and defined-but-not-used trace_XXX macros"
print ""
print " --help:"
print " Show this help"
print ""
print " --src-dirs=dir1:dir2:..."
print " Specify the directories of C source files to be checked"
print " Default is %s" % ":".join( SRC_FILE_DIRS )
print ""
print " --def-files=file1:file2:..."
print " Specify the header files including FT_TRACE_DEF()"
print " Default is %s" % ":".join( TRACE_DEF_FILES )
print ""
usage()
exit(0)
if sys.argv[i].startswith("--src-dirs="):
SRC_FILE_DIRS = sys.argv[i].replace("--src-dirs=", "", 1).split(":")
elif sys.argv[i].startswith("--def-files="):
TRACE_DEF_FILES = sys.argv[i].replace("--def-files=", "", 1).split(":")
# --------------------------------------------------------------
# Scan C source and header files using trace macros.
#
@ -55,20 +56,21 @@ trace_use_pat = re.compile( '^[ \t]*#define[ \t]+FT_COMPONENT[ \t]+' )
for d in SRC_FILE_DIRS:
for (p, dlst, flst) in os.walk(d):
for f in flst:
if c_pathname_pat.match( f ) != None:
if c_pathname_pat.match(f) is not None:
src_pathname = os.path.join(p, f)
line_num = 0
for src_line in open(src_pathname, 'r'):
line_num = line_num + 1
src_line = src_line.strip()
if trace_use_pat.match( src_line ) != None:
if trace_use_pat.match(src_line) is not None:
component_name = trace_use_pat.sub('', src_line)
if component_name in USED_COMPONENT:
USED_COMPONENT[component_name].append( "%s:%d" % ( src_pathname, line_num ) )
USED_COMPONENT[component_name]\
.append("%s:%d" % (src_pathname, line_num))
else:
USED_COMPONENT[component_name] = [ "%s:%d" % ( src_pathname, line_num ) ]
USED_COMPONENT[component_name] =\
["%s:%d" % (src_pathname, line_num)]
# --------------------------------------------------------------
# Scan header file(s) defining trace macros.
@ -82,33 +84,36 @@ for f in TRACE_DEF_FILES:
for hdr_line in open(f, 'r'):
line_num = line_num + 1
hdr_line = hdr_line.strip()
if trace_def_pat_opn.match( hdr_line ) != None:
if trace_def_pat_opn.match(hdr_line) is not None:
component_name = trace_def_pat_opn.sub('', hdr_line)
component_name = trace_def_pat_cls.sub('', component_name)
if component_name in KNOWN_COMPONENT:
print "trace component %s is defined twice, see %s and fttrace.h:%d" % \
( component_name, KNOWN_COMPONENT[component_name], line_num )
print("trace component %s is defined twice,"
" see %s and fttrace.h:%d" %
(component_name, KNOWN_COMPONENT[component_name],
line_num))
else:
KNOWN_COMPONENT[component_name] = "%s:%d" % \
( os.path.basename( f ), line_num )
KNOWN_COMPONENT[component_name] =\
"%s:%d" % (os.path.basename(f), line_num)
# --------------------------------------------------------------
# Compare the used and defined trace macros.
#
print "# Trace component used in the implementations but not defined in fttrace.h."
cmpnt = USED_COMPONENT.keys()
print("# Trace component used in the implementations but not defined in "
"fttrace.h.")
cmpnt = list(USED_COMPONENT.keys())
cmpnt.sort()
for c in cmpnt:
if c not in KNOWN_COMPONENT:
print "Trace component %s (used in %s) is not defined." % ( c, ", ".join( USED_COMPONENT[c] ) )
print("Trace component %s (used in %s) is not defined." %
(c, ", ".join(USED_COMPONENT[c])))
print "# Trace component is defined but not used in the implementations."
cmpnt = KNOWN_COMPONENT.keys()
print("# Trace component is defined but not used in the implementations.")
cmpnt = list(KNOWN_COMPONENT.keys())
cmpnt.sort()
for c in cmpnt:
if c not in USED_COMPONENT:
if c != "any":
print "Trace component %s (defined in %s) is not used." % ( c, KNOWN_COMPONENT[c] )
print("Trace component %s (defined in %s) is not used." %
(c, KNOWN_COMPONENT[c]))

View File

@ -1,14 +1,16 @@
#!/usr/bin/env python3
# compute arctangent table for CORDIC computations in fttrigon.c
import sys, math
import math
# units = 64*65536.0 # don't change !!
units = 180 * 2 ** 16
scale = units / math.pi
shrink = 1.0
comma = ""
angles2 = []
print ""
print "table of arctan( 1/2^n ) for PI = " + repr(units/65536.0) + " units"
print("")
print("table of arctan( 1/2^n ) for PI = " + repr(units / 65536.0) + " units")
for n in range(1, 32):
@ -20,14 +22,11 @@ for n in range(1,32):
if angle2 <= 0:
break
sys.stdout.write( comma + repr( int(angle2) ) )
comma = ", "
angles2.append(repr(int(angle2)))
shrink /= math.sqrt(1 + x * x)
print
print "shrink factor = " + repr( shrink )
print "shrink factor 2 = " + repr( int( shrink * (2**32) ) )
print "expansion factor = " + repr( 1/shrink )
print ""
print(", ".join(angles2))
print("shrink factor = " + repr(shrink))
print("shrink factor 2 = " + repr(int(shrink * (2 ** 32))))
print("expansion factor = " + repr(1 / shrink))
print("")

View File

@ -1,11 +1,8 @@
#!/usr/bin/env python
#
#!/usr/bin/env python3
#
# FreeType 2 glyph name builder
#
# Copyright (C) 1996-2022 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
@ -16,8 +13,7 @@
# fully.
"""\
"""
usage: %s <output-file>
This python script generates the glyph names tables defined in the
@ -26,9 +22,9 @@ usage: %s <output-file>
Its single argument is the name of the header file to be created.
"""
import sys, string, struct, re, os.path
import os.path
import struct
import sys
# This table lists the glyphs according to the Macintosh specification.
# It is used by the TrueType Postscript names table.
@ -39,8 +35,7 @@ import sys, string, struct, re, os.path
#
# for the official list.
#
mac_standard_names = \
[
mac_standard_names = [
# 0
".notdef", ".null", "nonmarkingreturn", "space", "exclam",
"quotedbl", "numbersign", "dollar", "percent", "ampersand",
@ -147,14 +142,12 @@ mac_standard_names = \
"Ccaron", "ccaron", "dcroat"
]
# The list of standard `SID' glyph names. For the official list,
# see Annex A of document at
#
# https://www.adobe.com/content/dam/acom/en/devnet/font/pdfs/5176.CFF.pdf .
# https://www.adobe.com/content/dam/acom/en/devnet/font/pdfs/5176.CFF.pdf
#
sid_standard_names = \
[
sid_standard_names = [
# 0
".notdef", "space", "exclam", "quotedbl", "numbersign",
"dollar", "percent", "ampersand", "quoteright", "parenleft",
@ -333,12 +326,10 @@ sid_standard_names = \
"Semibold"
]
# This table maps character codes of the Adobe Standard Type 1
# encoding to glyph indices in the sid_standard_names table.
#
t1_standard_encoding = \
[
t1_standard_encoding = [
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@ -372,12 +363,10 @@ t1_standard_encoding = \
148, 149, 0, 0, 0, 0
]
# This table maps character codes of the Adobe Expert Type 1
# encoding to glyph indices in the sid_standard_names table.
#
t1_expert_encoding = \
[
t1_expert_encoding = [
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@ -411,7 +400,6 @@ t1_expert_encoding = \
373, 374, 375, 376, 377, 378
]
# This data has been taken literally from the files `glyphlist.txt'
# and `zapfdingbats.txt' version 2.0, Sept 2002. It is available from
#
@ -4936,7 +4924,7 @@ class StringTable:
line = ""
for name in self.names:
line += " '"
line += string.join( ( re.findall( ".", name ) ), "','" )
line += "','".join(list(name))
line += "', 0,\n"
write(line)
@ -5067,6 +5055,9 @@ class StringNode:
def __cmp__(self, other):
return ord(self.letter[0]) - ord(other.letter[0])
def __lt__(self, other):
return self.letter[0] < other.letter[0]
def add(self, word, value):
if len(word) == 0:
self.value = value
@ -5075,7 +5066,7 @@ class StringNode:
letter = word[0]
word = word[1:]
if self.children.has_key( letter ):
if letter in self.children:
child = self.children[letter]
else:
child = StringNode(letter, 0)
@ -5085,7 +5076,7 @@ class StringNode:
def optimize(self):
# optimize all children first
children = self.children.values()
children = list(self.children.values())
self.children = {}
for child in children:
@ -5133,7 +5124,7 @@ class StringNode:
if self.value != 0:
index += 2
children = self.children.values()
children = list(self.children.values())
children.sort()
index += 2 * len(children)
@ -5144,18 +5135,18 @@ class StringNode:
def store(self, storage):
# write the letters
l = len( self.letter )
if l == 0:
length = len(self.letter)
if length == 0:
storage += struct.pack("B", 0)
else:
for n in range( l ):
for n in range(length):
val = ord(self.letter[n])
if n < l - 1:
if n < length - 1:
val += 128
storage += struct.pack("B", val)
# write the count
children = self.children.values()
children = list(self.children.values())
children.sort()
count = len(children)
@ -5177,15 +5168,15 @@ class StringNode:
def adobe_glyph_values():
"""return the list of glyph names and their unicode values"""
lines = string.split( adobe_glyph_list, '\n' )
lines = adobe_glyph_list.split("\n")
glyphs = []
values = []
for line in lines:
if line:
fields = string.split( line, ';' )
fields = line.split(';')
# print fields[1] + ' - ' + fields[0]
subfields = string.split( fields[1], ' ' )
subfields = fields[1].split(' ')
if len(subfields) == 1:
glyphs.append(fields[0])
values.append(fields[1])
@ -5267,7 +5258,7 @@ def dump_array( the_array, write, array_name ):
for value in the_array:
line += comma
line += "%3d" % ord( value )
line += "%3d" % value
comma = ","
col += 1
@ -5290,10 +5281,10 @@ def main():
"""main program body"""
if len(sys.argv) != 2:
print __doc__ % sys.argv[0]
print(__doc__ % sys.argv[0])
sys.exit(1)
file = open( sys.argv[1], "wb" )
file = open(sys.argv[1], "w")
write = file.write
count_sid = len(sid_standard_names)
@ -5310,27 +5301,29 @@ def main():
mac_extras_count = len(mac_extras)
base_list = mac_extras + sid_standard_names
write( "/****************************************************************************\n" )
write("/*\n")
write(" *\n")
write(" * %-71s\n" % os.path.basename(sys.argv[1]))
write(" *\n")
write(" * PostScript glyph names.\n")
write(" *\n")
write( " * Copyright 2005-2019 by\n" )
write(" * Copyright 2005-2022 by\n")
write(" * David Turner, Robert Wilhelm, and Werner Lemberg.\n")
write(" *\n")
write( " * This file is part of the FreeType project, and may only be used,\n" )
write( " * modified, and distributed under the terms of the FreeType project\n" )
write( " * license, LICENSE.TXT. By continuing to use, modify, or distribute\n" )
write(" * This file is part of the FreeType project, and may only be "
"used,\n")
write(" * modified, and distributed under the terms of the FreeType "
"project\n")
write(" * license, LICENSE.TXT. By continuing to use, modify, or "
"distribute\n")
write(" * this file you indicate that you have read the license and\n")
write(" * understand and accept it fully.\n")
write(" *\n")
write(" */\n")
write("\n")
write("\n")
write( " /* This file has been generated automatically -- do not edit! */\n" )
write(" /* This file has been generated automatically -- do not edit! */"
"\n")
write("\n")
write("\n")
@ -5350,14 +5343,14 @@ def main():
# dump the AGL in its compressed form
#
agl_glyphs, agl_values = adobe_glyph_values()
dict = StringNode( "", 0 )
dictionary = StringNode("", 0)
for g in range(len(agl_glyphs)):
dict.add( agl_glyphs[g], eval( "0x" + agl_values[g] ) )
dictionary.add(agl_glyphs[g], eval("0x" + agl_values[g]))
dict = dict.optimize()
dict_len = dict.locate( 0 )
dict_array = dict.store( "" )
dictionary = dictionary.optimize()
dict_len = dictionary.locate(0)
dict_array = dictionary.store(b"")
write("""\
/*
@ -5498,6 +5491,7 @@ def main():
write("""
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int
main( void )
@ -5536,5 +5530,4 @@ def main():
#
main()
# END