misc/libfreetype/src/tools/docmaker/utils.py
changeset 9372 915436ff64ab
parent 9371 f3840de881bd
child 9373 b769a8e38cbd
equal deleted inserted replaced
9371:f3840de881bd 9372:915436ff64ab
     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