1# Utils (c) 2002, 2004, 2007, 2008 David Turner <david@freetype.org> 2# 3 4import string, sys, os, glob 5 6# current output directory 7# 8output_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# 14def 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# 47def 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# 59def 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# 74def close_output( output ): 75 output[0].close() 76 sys.stdout = output[1] 77 78 79# Check output directory. 80# 81def 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 93def 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 106def 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 133