Sync trunk.
[reactos.git] / lib / 3rdparty / freetype / src / tools / docmaker / utils.py
1 # Utils (c) 2002, 2004, 2007, 2008 David Turner <david@freetype.org>
2 #
3
4 import string, sys, os, glob
5
6 # current output directory
7 #
8 output_dir = None
9
10
11 # This function is used to sort the index. It is a simple lexicographical
12 # sort, except that it places capital letters before lowercase ones.
13 #
14 def index_sort( s1, s2 ):
15 if not s1:
16 return -1
17
18 if not s2:
19 return 1
20
21 l1 = len( s1 )
22 l2 = len( s2 )
23 m1 = string.lower( s1 )
24 m2 = string.lower( s2 )
25
26 for i in range( l1 ):
27 if i >= l2 or m1[i] > m2[i]:
28 return 1
29
30 if m1[i] < m2[i]:
31 return -1
32
33 if s1[i] < s2[i]:
34 return -1
35
36 if s1[i] > s2[i]:
37 return 1
38
39 if l2 > l1:
40 return -1
41
42 return 0
43
44
45 # Sort input_list, placing the elements of order_list in front.
46 #
47 def sort_order_list( input_list, order_list ):
48 new_list = order_list[:]
49 for id in input_list:
50 if not id in order_list:
51 new_list.append( id )
52 return new_list
53
54
55 # Open the standard output to a given project documentation file. Use
56 # "output_dir" to determine the filename location if necessary and save the
57 # old stdout in a tuple that is returned by this function.
58 #
59 def open_output( filename ):
60 global output_dir
61
62 if output_dir and output_dir != "":
63 filename = output_dir + os.sep + filename
64
65 old_stdout = sys.stdout
66 new_file = open( filename, "w" )
67 sys.stdout = new_file
68
69 return ( new_file, old_stdout )
70
71
72 # Close the output that was returned by "close_output".
73 #
74 def close_output( output ):
75 output[0].close()
76 sys.stdout = output[1]
77
78
79 # Check output directory.
80 #
81 def check_output():
82 global output_dir
83 if output_dir:
84 if output_dir != "":
85 if not os.path.isdir( output_dir ):
86 sys.stderr.write( "argument" + " '" + output_dir + "' " + \
87 "is not a valid directory" )
88 sys.exit( 2 )
89 else:
90 output_dir = None
91
92
93 def file_exists( pathname ):
94 """checks that a given file exists"""
95 result = 1
96 try:
97 file = open( pathname, "r" )
98 file.close()
99 except:
100 result = None
101 sys.stderr.write( pathname + " couldn't be accessed\n" )
102
103 return result
104
105
106 def make_file_list( args = None ):
107 """builds a list of input files from command-line arguments"""
108 file_list = []
109 # sys.stderr.write( repr( sys.argv[1 :] ) + '\n' )
110
111 if not args:
112 args = sys.argv[1 :]
113
114 for pathname in args:
115 if string.find( pathname, '*' ) >= 0:
116 newpath = glob.glob( pathname )
117 newpath.sort() # sort files -- this is important because
118 # of the order of files
119 else:
120 newpath = [pathname]
121
122 file_list.extend( newpath )
123
124 if len( file_list ) == 0:
125 file_list = None
126 else:
127 # now filter the file list to remove non-existing ones
128 file_list = filter( file_exists, file_list )
129
130 return file_list
131
132 # eof