tizen 2.3.1 release
[framework/graphics/freetype.git] / src / tools / docmaker / utils.py
1 #
2 #  utils.py
3 #
4 #    Auxiliary functions for the `docmaker' tool (library file).
5 #
6 #  Copyright 2002, 2004, 2007, 2008, 2014 by
7 #  David Turner.
8 #
9 #  This file is part of the FreeType project, and may only be used,
10 #  modified, and distributed under the terms of the FreeType project
11 #  license, LICENSE.TXT.  By continuing to use, modify, or distribute
12 #  this file you indicate that you have read the license and
13 #  understand and accept it fully.
14
15
16 import string, sys, os, glob, itertools
17
18
19 # current output directory
20 #
21 output_dir = None
22
23
24 # A function that generates a sorting key.  We want lexicographical order
25 # (primary key) except that capital letters are sorted before lowercase
26 # ones (secondary key).
27 #
28 # The primary key is implemented by lowercasing the input.  The secondary
29 # key is simply the original data appended, character by character.  For
30 # example, the sort key for `FT_x' is `fFtT__xx', while the sort key for
31 # `ft_X' is `fftt__xX'.  Since ASCII codes of uppercase letters are
32 # numerically smaller than the codes of lowercase letters, `fFtT__xx' gets
33 # sorted before `fftt__xX'.
34 #
35 def  index_key( s ):
36     return string.join( itertools.chain( *zip( s.lower(), s ) ) )
37
38
39 # Sort `input_list', placing the elements of `order_list' in front.
40 #
41 def  sort_order_list( input_list, order_list ):
42     new_list = order_list[:]
43     for id in input_list:
44         if not id in order_list:
45             new_list.append( id )
46     return new_list
47
48
49 # Divert standard output to a given project documentation file.  Use
50 # `output_dir' to determine the filename location if necessary and save the
51 # old stdout handle in a tuple that is returned by this function.
52 #
53 def  open_output( filename ):
54     global output_dir
55
56     if output_dir and output_dir != "":
57         filename = output_dir + os.sep + filename
58
59     old_stdout = sys.stdout
60     new_file   = open( filename, "w" )
61     sys.stdout = new_file
62
63     return ( new_file, old_stdout )
64
65
66 # Close the output that was returned by `open_output'.
67 #
68 def  close_output( output ):
69     output[0].close()
70     sys.stdout = output[1]
71
72
73 # Check output directory.
74 #
75 def  check_output():
76     global output_dir
77     if output_dir:
78         if output_dir != "":
79             if not os.path.isdir( output_dir ):
80                 sys.stderr.write( "argument"
81                                   + " '" + output_dir + "' "
82                                   + "is not a valid directory" )
83                 sys.exit( 2 )
84         else:
85             output_dir = None
86
87
88 def  file_exists( pathname ):
89     """Check that a given file exists."""
90     result = 1
91     try:
92         file = open( pathname, "r" )
93         file.close()
94     except:
95         result = None
96         sys.stderr.write( pathname + " couldn't be accessed\n" )
97
98     return result
99
100
101 def  make_file_list( args = None ):
102     """Build a list of input files from command-line arguments."""
103     file_list = []
104     # sys.stderr.write( repr( sys.argv[1 :] ) + '\n' )
105
106     if not args:
107         args = sys.argv[1:]
108
109     for pathname in args:
110         if string.find( pathname, '*' ) >= 0:
111             newpath = glob.glob( pathname )
112             newpath.sort()  # sort files -- this is important because
113                             # of the order of files
114         else:
115             newpath = [pathname]
116
117         file_list.extend( newpath )
118
119     if len( file_list ) == 0:
120         file_list = None
121     else:
122         # now filter the file list to remove non-existing ones
123         file_list = filter( file_exists, file_list )
124
125     return file_list
126
127 # eof