Integrated Freestyle to rendering pipeline
[blender.git] / release / scripts / bpymodules / BPySys.py
1
2 ## This was used to make V, but faster not to do all that
3 ##valid = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_'
4 ##v = range(255)
5 ##for c in valid: v.remove(ord(c))
6 v = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,46,47,58,59,60,61,62,63,64,91,92,93,94,96,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254]
7 invalid = ''.join([chr(i) for i in v])
8 ## del v, c, i, valid
9 del v, i
10
11 def cleanName(name):
12         for ch in invalid:      name = name.replace(ch, '_')
13         return name
14
15 def caseInsensitivePath(path, RET_FOUND=False):
16         '''
17         Get a case insensitive path on a case sensitive system
18         
19         RET_FOUND is for internal use only, to avoid too many calls to os.path.exists
20         # Example usage
21         getCaseInsensitivePath('/hOmE/mE/sOmEpAtH.tXt')
22         '''
23         import os # todo, what happens with no os?
24         
25         if os==None:
26                 if RET_FOUND:   ret = path, True
27                 else:                   ret = path
28                 return ret
29         
30         if path=='' or os.path.exists(path):
31                 if RET_FOUND:   ret = path, True
32                 else:                   ret = path
33                 return ret
34         
35         f = os.path.basename(path) # f may be a directory or a file
36         d = os.path.dirname(path)
37         
38         suffix = ''
39         if not f: # dir ends with a slash?
40                 if len(d) < len(path):
41                         suffix = path[:len(path)-len(d)]
42
43                 f = os.path.basename(d)
44                 d = os.path.dirname(d)
45         
46         if not os.path.exists(d):
47                 d, found = caseInsensitivePath(d, True)
48                 
49                 if not found:
50                         if RET_FOUND:   ret = path, False
51                         else:                   ret = path
52                         return ret
53         
54         # at this point, the directory exists but not the file
55         
56         try: # we are expecting 'd' to be a directory, but it could be a file
57                 files = os.listdir(d)
58         except:
59                 if RET_FOUND:   ret = path, False
60                 else:                   ret = path
61
62         f_low = f.lower()
63         
64         try:    f_nocase = [fl for fl in files if fl.lower() == f_low][0]
65         except: f_nocase = None
66         
67         if f_nocase:
68                 if RET_FOUND:   ret = os.path.join(d, f_nocase) + suffix, True
69                 else:                   ret = os.path.join(d, f_nocase) + suffix
70                 return ret
71         else:
72                 if RET_FOUND:   ret = path, False
73                 else:                   ret = path
74                 return ret # cant find the right one, just return the path as is.